@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,481 @@
1
+ /**
2
+ * `synap catalog validate|diff|publish [--kind k] [slug...] [--official] [--dry-run]`
3
+ * ==========================================================================
4
+ *
5
+ * The team's ONE door to the official catalog (every installable kind). This
6
+ * file is a THIN caller: loading, validation, the diff against the live
7
+ * catalog, the `synap-official` preflight and the POSTs are ONE lib in the
8
+ * monorepo checkout — `scripts/catalog-lib.mjs` of the catalog package
9
+ * (`@synap-core/catalog`, or `@synap-core/workspace-templates` before the
10
+ * rename). The surface this command relies on:
11
+ *
12
+ * loadCatalog({ root?, kinds?, slugs? }) → { entries, problems }
13
+ * validateCatalog(entries, { siblingRepos? }) → Problem[]
14
+ * diffCatalog(entries, { cpUrl, token? }) → DiffRow[]
15
+ * publishCatalog({ entries, cpUrl, token, official, dryRun, confirm }) → results[]
16
+ * checkPublisher({ cpUrl, token }) → { official, vendor?, reason? } (optional)
17
+ *
18
+ * ONE READ PATH: every kind — capabilities included — is read from the catalog
19
+ * package by `loadCatalog` (its default kind dirs). The CLI never reads the
20
+ * control-plane repo; the CP's capability JSON is only a guarded mirror now.
21
+ *
22
+ * ONE ERROR TABLE: every code the lib throws (and every refusal of this
23
+ * command) maps to ONE next step in `CATALOG_ERROR_HINTS`.
24
+ *
25
+ * `synap market publish --official` is an ALIAS of
26
+ * `synap catalog publish --official --kind workspace` — `marketPublishOfficial`
27
+ * calls `runCatalog` below; there is no second implementation.
28
+ *
29
+ * WHY THE CHECKOUT, NEVER THIS CLI'S BUNDLE: the CLI's npm copy of the
30
+ * templates package is older than the repo. Publishing from it would stamp
31
+ * stale content as official — so the lib is dynamic-imported from the checkout
32
+ * (found by `--catalog-dir`, else by walking up from cwd, identified by the
33
+ * package.json NAME).
34
+ *
35
+ * SHAPE CHECK: the lib lives in another repo and evolves on its own. A checkout
36
+ * whose lib is missing or exports a different shape is a clear refusal that
37
+ * names what is missing — never a `TypeError: x is not a function` crash.
38
+ *
39
+ * SAFETY (publish): validate → diff preview → confirm → publish. `--dry-run`
40
+ * stops after the preview and NEVER calls `publishCatalog`. Non-interactive
41
+ * without `--yes` refuses rather than guess.
42
+ */
43
+ import { existsSync, readFileSync } from "node:fs";
44
+ import { dirname, join, resolve as resolvePath } from "node:path";
45
+ import { pathToFileURL } from "node:url";
46
+ import { getCpUrl, getStoredToken, isTokenLocallyExpired } from "../lib/auth.js";
47
+ import { log } from "../utils/logger.js";
48
+ /** Package names the catalog checkout may carry (new name first). */
49
+ export const CATALOG_PACKAGE_NAMES = ["@synap-core/catalog", "@synap-core/workspace-templates"];
50
+ export const CATALOG_LIB_PATH = "scripts/catalog-lib.mjs";
51
+ export const CATALOG_KINDS = ["workspace", "capability", "skill", "pack", "automation"];
52
+ export const CATALOG_VERBS = ["validate", "diff", "publish"];
53
+ // ── One error table ─────────────────────────────────────────────────────────
54
+ /**
55
+ * Every code the catalog lib throws (`CatalogErrorCode` in the checkout's
56
+ * `scripts/catalog-lib.d.mts` — a tripwire keeps this list a superset) plus this
57
+ * command's own refusals, each mapped to ONE next step. The lib's message says
58
+ * WHAT happened (it carries the detail: stale slugs, the vendor found…); the
59
+ * hint says what to DO. Nowhere else in this command writes a remedy string.
60
+ */
61
+ export const CATALOG_ERROR_HINTS = {
62
+ // The lib's codes.
63
+ "stale-build": "Rebuild the catalog package, then re-run: pnpm --filter @synap-core/workspace-templates build",
64
+ "invalid-template": "Fix the listed problems in the catalog files, then re-run: synap catalog validate",
65
+ "unknown-slug": "Check the slug — run: synap catalog validate --json to list every entry",
66
+ "not-logged-in": "Sign in to the control plane — run: synap login",
67
+ "not-official-publisher": "Sign in (synap login) with the account that owns the synap-official vendor",
68
+ "cp-unreachable": "The control plane did not answer — check your network / SYNAP_CP_URL and retry; nothing was published",
69
+ "live-read-failed": "A live catalog row could not be read — retry; nothing was published blind",
70
+ "not-confirmed": "The write was not confirmed — re-run and answer yes, or pass --yes",
71
+ "unsupported-runtime": "Switch Node: `nvm use 22` (22.18+), or 23.6+. Check which one runs with `which node && node -v`.",
72
+ // This command's own refusals.
73
+ usage: "Run: synap catalog --help",
74
+ "checkout-not-found": "Run from inside the Synap monorepo, or pass --catalog-dir (market publish: --templates-dir) <path to the catalog package>",
75
+ "lib-load-failed": "Pull synap-app (the checkout's catalog lib is missing, older or newer than this CLI)",
76
+ "lib-shape": "Pull synap-app (the checkout's catalog lib returned an unexpected shape)",
77
+ "confirmation-required": "Re-run with --dry-run to preview, or --yes to publish non-interactively",
78
+ };
79
+ /** The one next step for a code (an unknown code from a newer lib gets the pull hint). */
80
+ export function catalogErrorHint(code) {
81
+ return CATALOG_ERROR_HINTS[code] ?? CATALOG_ERROR_HINTS["lib-load-failed"];
82
+ }
83
+ const REQUIRED_EXPORTS = ["loadCatalog", "validateCatalog", "diffCatalog", "publishCatalog"];
84
+ /**
85
+ * The shape check. Returns the error message, or null when `mod` carries every
86
+ * function of the fixed interface.
87
+ */
88
+ export function catalogLibShapeError(mod, libFile) {
89
+ const m = (mod ?? {});
90
+ const missing = REQUIRED_EXPORTS.filter((name) => typeof m[name] !== "function");
91
+ if (missing.length === 0)
92
+ return null;
93
+ return (`${libFile} does not export the catalog interface — missing or not a function: ${missing.join(", ")}. ` +
94
+ `Expected ${REQUIRED_EXPORTS.join(", ")}.`);
95
+ }
96
+ // ── Usage ───────────────────────────────────────────────────────────────────
97
+ /** A positional that is a path, not a slug (slugs are `[a-z][a-z0-9-]*`). */
98
+ export function looksLikeFile(arg) {
99
+ return /[./\\]/.test(arg);
100
+ }
101
+ /**
102
+ * Every combination that would otherwise be silently ignored is a usage error
103
+ * (exit 2). Returns the message, or null when valid.
104
+ *
105
+ * Default (named so it can be overridden): `publish` REQUIRES `--official` —
106
+ * the catalog is the official corpus; there is no other vendor that publishes
107
+ * it, so a non-official publish of it has no meaning yet.
108
+ */
109
+ export function catalogUsageError(verb, slugs, opts) {
110
+ if (!CATALOG_VERBS.includes(verb)) {
111
+ return `Unknown catalog command "${verb}" — use one of: ${CATALOG_VERBS.join(", ")}.`;
112
+ }
113
+ if (opts.kind !== undefined && !CATALOG_KINDS.includes(opts.kind)) {
114
+ return `Unknown --kind "${opts.kind}" — use one of: ${CATALOG_KINDS.join(", ")}.`;
115
+ }
116
+ const file = slugs.find(looksLikeFile);
117
+ if (file) {
118
+ return `The catalog takes SLUGS, not a file ("${file}" looks like a path). To publish a file, use: synap market publish <file>.`;
119
+ }
120
+ if (verb !== "publish") {
121
+ const stray = [opts.official && "--official", opts.dryRun && "--dry-run", opts.yes && "--yes"].filter(Boolean);
122
+ if (stray.length > 0)
123
+ return `${stray.join(", ")} only apply to "synap catalog publish".`;
124
+ return null;
125
+ }
126
+ if (!opts.official) {
127
+ return "catalog publish writes the OFFICIAL catalog — pass --official (founder: a `synap login` session that owns the synap-official vendor).";
128
+ }
129
+ return null;
130
+ }
131
+ // ── Locating the checkout ───────────────────────────────────────────────────
132
+ function catalogPackageName(dir) {
133
+ const pj = join(dir, "package.json");
134
+ if (!existsSync(pj))
135
+ return null;
136
+ try {
137
+ const name = JSON.parse(readFileSync(pj, "utf8")).name;
138
+ return name && CATALOG_PACKAGE_NAMES.includes(name) ? name : null;
139
+ }
140
+ catch {
141
+ return null;
142
+ }
143
+ }
144
+ /**
145
+ * The catalog package dir of the monorepo checkout. `explicit` must BE that
146
+ * package; otherwise walk up from `cwd`, at each level trying the dir itself,
147
+ * `packages/catalog`, `packages/workspace-templates` (inside synap-app) and the
148
+ * same under `synap-app/` (monorepo root). Identity is the package.json `name`,
149
+ * never the path alone. `@synap-core/catalog` wins over the re-export shim.
150
+ */
151
+ export function findCatalogDir(cwd, explicit) {
152
+ if (explicit) {
153
+ const dir = resolvePath(cwd, explicit);
154
+ return catalogPackageName(dir) ? dir : null;
155
+ }
156
+ let dir = resolvePath(cwd);
157
+ for (;;) {
158
+ const candidates = [
159
+ dir,
160
+ join(dir, "packages/catalog"),
161
+ join(dir, "packages/workspace-templates"),
162
+ join(dir, "synap-app/packages/catalog"),
163
+ join(dir, "synap-app/packages/workspace-templates"),
164
+ ];
165
+ const named = candidates.filter((c) => catalogPackageName(c));
166
+ const preferred = named.find((c) => catalogPackageName(c) === CATALOG_PACKAGE_NAMES[0]) ?? named[0];
167
+ if (preferred)
168
+ return preferred;
169
+ const parent = dirname(dir);
170
+ if (parent === dir)
171
+ return null;
172
+ dir = parent;
173
+ }
174
+ }
175
+ class CatalogLoadError extends Error {
176
+ code = "lib-load-failed";
177
+ }
178
+ /** Import the checkout's lib and shape-check it. Throws `CatalogLoadError`. */
179
+ export async function loadCatalogLib(catalogDir, importLib = (f) => import(pathToFileURL(f).href)) {
180
+ const libFile = join(catalogDir, CATALOG_LIB_PATH);
181
+ if (!existsSync(libFile)) {
182
+ throw new CatalogLoadError(`${libFile} not found — this checkout predates the one catalog lib.`);
183
+ }
184
+ let mod;
185
+ try {
186
+ mod = await importLib(libFile);
187
+ }
188
+ catch (e) {
189
+ throw new CatalogLoadError(`Could not load ${libFile}: ${e.message}`);
190
+ }
191
+ const shape = catalogLibShapeError(mod, libFile);
192
+ if (shape)
193
+ throw new CatalogLoadError(shape);
194
+ return mod;
195
+ }
196
+ async function readlineConfirm(question) {
197
+ const readline = await import("node:readline/promises");
198
+ const rl = readline.createInterface({ input: process.stdin, output: process.stderr });
199
+ try {
200
+ const answer = await rl.question(question);
201
+ return /^y(es)?$/i.test(answer.trim());
202
+ }
203
+ finally {
204
+ rl.close();
205
+ }
206
+ }
207
+ // ── Rendering ───────────────────────────────────────────────────────────────
208
+ function isError(p) {
209
+ return p.severity !== "warning";
210
+ }
211
+ function formatProblem(p) {
212
+ const where = [p.kind, p.slug].filter(Boolean).join("/") || p.path || "catalog";
213
+ return ` ${isError(p) ? "✗" : "!"} ${where}: ${p.message}`;
214
+ }
215
+ const STATUS_LABEL = {
216
+ new: "NEW ",
217
+ changed: "CHANGED ",
218
+ unchanged: "unchanged",
219
+ };
220
+ function shortValue(v) {
221
+ const text = JSON.stringify(v) ?? "null";
222
+ return text.length > 70 ? `${text.slice(0, 69)}…` : text;
223
+ }
224
+ /** Fallback for an older lib without `formatRetirement` — same facts, one line + reason. */
225
+ function fallbackRetirementLines(r) {
226
+ const target = r.replacedBy ? ` → ${r.replacedBy}` : " (no replacement)";
227
+ return [
228
+ ` ${STATUS_LABEL[r.status] ?? r.status} retire ${r.kind}/${r.slug}${target}`,
229
+ ...(r.reason ? [` reason: ${r.reason}`] : []),
230
+ ...(Array.isArray(r.warnings) ? r.warnings.map((w) => ` ! ${w}`) : []),
231
+ ];
232
+ }
233
+ /**
234
+ * Tombstones the selection publishes: `--kind` and named slugs filter them the
235
+ * same way they filter live entries (the lib's `loadCatalog` does not filter
236
+ * `retired` by kind).
237
+ */
238
+ export function selectTombstones(retired, sel) {
239
+ return (retired ?? []).filter((t) => (!sel.kind || t.kind === sel.kind) && (sel.slugs.length === 0 || sel.slugs.includes(t.slug)));
240
+ }
241
+ export function formatDiff(allRows, formatRetirement) {
242
+ const rows = allRows.filter((r) => r.action !== "retire");
243
+ const retirements = allRows.filter((r) => r.action === "retire");
244
+ // A warning several rows share (an older CP that cannot preview a workspace
245
+ // version says so on every workspace row) prints ONCE under the summary,
246
+ // with its row count, instead of under every row.
247
+ const rowsWarned = new Map();
248
+ for (const r of rows) {
249
+ for (const w of new Set(Array.isArray(r.warnings) ? r.warnings : []))
250
+ rowsWarned.set(w, (rowsWarned.get(w) ?? 0) + 1);
251
+ }
252
+ const shared = [...rowsWarned].filter(([, n]) => n > 1);
253
+ const lines = rows.map((r) => {
254
+ const hashes = r.status === "changed" ? ` ${r.hashBefore ?? "?"} → ${r.hashAfter ?? "?"}` : "";
255
+ const head = ` ${STATUS_LABEL[r.status] ?? r.status} ${r.kind}/${r.slug}${hashes}`;
256
+ const detail = [];
257
+ if (r.status === "changed" && r.hashBefore && r.hashAfter && r.hashBefore !== r.hashAfter) {
258
+ detail.push(" ~ definition: new content version");
259
+ }
260
+ const spBefore = r.sourcePackage?.before?.version ?? "none";
261
+ const spAfter = r.sourcePackage?.after?.version ?? "none";
262
+ if (r.status === "changed" && spBefore !== spAfter) {
263
+ detail.push(` ~ sourcePackage: ${spBefore} → ${spAfter}`);
264
+ }
265
+ if (r.status === "changed" && Array.isArray(r.columns)) {
266
+ for (const c of r.columns)
267
+ detail.push(` ~ ${c.column}: ${shortValue(c.before)} → ${shortValue(c.after)}`);
268
+ }
269
+ const warn = Array.isArray(r.warnings)
270
+ ? r.warnings.filter((w) => (rowsWarned.get(w) ?? 0) < 2).map((w) => ` ! ${w}`)
271
+ : [];
272
+ return [head, ...detail, ...warn].join("\n");
273
+ });
274
+ const count = (s) => rows.filter((r) => r.status === s).length;
275
+ for (const r of retirements) {
276
+ lines.push(...(formatRetirement
277
+ ? formatRetirement({
278
+ kind: r.kind,
279
+ slug: r.slug,
280
+ replacedBy: r.replacedBy ?? null,
281
+ reason: r.reason ?? "",
282
+ status: r.status,
283
+ warnings: r.warnings,
284
+ })
285
+ : fallbackRetirementLines(r)));
286
+ }
287
+ lines.push(`\n ${count("new")} new · ${count("changed")} changed · ${count("unchanged")} unchanged`);
288
+ for (const [w, n] of shared)
289
+ lines.push(` ! ${w} (${n} rows)`);
290
+ if (retirements.length > 0) {
291
+ const toSend = retirements.filter((r) => r.status !== "unchanged").length;
292
+ lines.push(` ${retirements.length} retired: ${toSend} to send · ${retirements.length - toSend} unchanged`);
293
+ }
294
+ return lines.join("\n");
295
+ }
296
+ function resultFailed(r) {
297
+ return r.outcome === "failed" || r.outcome === "declined" || r.status === "failed" || typeof r.error === "string";
298
+ }
299
+ // ── The command ─────────────────────────────────────────────────────────────
300
+ /**
301
+ * Returns the process exit code (0 ok · 1 refused/failed · 2 usage). The
302
+ * index.ts action sets `process.exitCode` from it.
303
+ */
304
+ export async function runCatalog(verb, slugs, opts, deps = {}) {
305
+ const out = deps.out ?? ((l) => console.log(l));
306
+ const fail = (code, message, exit = 1) => {
307
+ const hint = catalogErrorHint(code);
308
+ if (opts.json)
309
+ out(JSON.stringify({ ok: false, error: code, message, hint }, null, 2));
310
+ else {
311
+ log.error(message);
312
+ out(` → ${hint}`);
313
+ }
314
+ return exit;
315
+ };
316
+ const usage = catalogUsageError(verb, slugs, opts);
317
+ if (usage)
318
+ return fail("usage", usage, 2);
319
+ const cwd = deps.cwd ?? process.cwd();
320
+ const catalogDir = findCatalogDir(cwd, opts.catalogDir);
321
+ if (!catalogDir) {
322
+ return fail("checkout-not-found", opts.catalogDir
323
+ ? `${opts.catalogDir} is not the catalog package (no package.json named ${CATALOG_PACKAGE_NAMES.join(" or ")}).`
324
+ : `Could not find the catalog checkout from ${cwd}.`);
325
+ }
326
+ // Credentials: required to publish; used (if valid) to diff; unused to validate.
327
+ const creds = verb === "validate" ? null : deps.credentials === undefined ? getStoredToken() : deps.credentials;
328
+ const sessionOk = !!creds?.token && !isTokenLocallyExpired(creds);
329
+ if (verb === "publish" && !sessionOk) {
330
+ return fail("not-logged-in", creds?.token ? "Your control-plane session has expired." : "Not signed in to the Synap control plane.");
331
+ }
332
+ const interactive = deps.isInteractive ?? (!!process.stdin.isTTY && !opts.json);
333
+ if (verb === "publish" && !opts.dryRun && !opts.yes && !interactive) {
334
+ return fail("confirmation-required", "Refusing to publish the official catalog without a confirmation.");
335
+ }
336
+ let lib;
337
+ try {
338
+ lib = await loadCatalogLib(catalogDir, deps.importLib);
339
+ }
340
+ catch (e) {
341
+ return fail(e.code ?? "lib-load-failed", e.message);
342
+ }
343
+ const libCall = async (name, fn) => {
344
+ try {
345
+ return await fn();
346
+ }
347
+ catch (e) {
348
+ const err = e;
349
+ throw Object.assign(new Error(err.message), { code: err.code ?? `${name}-failed` });
350
+ }
351
+ };
352
+ try {
353
+ // 1. Load + validate (every verb).
354
+ // ONE read path: the catalog package's own kind dirs (capabilities included).
355
+ const loaded = await libCall("load", () => lib.loadCatalog({ root: catalogDir, kinds: opts.kind ? [opts.kind] : undefined }));
356
+ if (!loaded || !Array.isArray(loaded.entries) || !Array.isArray(loaded.problems)) {
357
+ return fail("lib-shape", `loadCatalog in ${join(catalogDir, CATALOG_LIB_PATH)} did not return { entries[], problems[] }.`);
358
+ }
359
+ // Validate the selection AGAINST the whole loaded corpus: a workspace's
360
+ // compose/require deps are other entries, which a slug filter would drop.
361
+ const corpus = Array.isArray(loaded.corpus) ? loaded.corpus : loaded.entries;
362
+ const entries = slugs.length ? corpus.filter((e) => slugs.includes(e.slug)) : loaded.entries;
363
+ const retired = selectTombstones(loaded.retired, { kind: opts.kind, slugs });
364
+ // A named slug that is only a tombstone is a valid selection (retire just it).
365
+ const missing = slugs.filter((s) => !entries.some((e) => e.slug === s) && !retired.some((t) => t.slug === s));
366
+ const validated = await libCall("validate", () => lib.validateCatalog(entries, { corpus }));
367
+ if (!Array.isArray(validated)) {
368
+ return fail("lib-shape", `validateCatalog in ${join(catalogDir, CATALOG_LIB_PATH)} did not return Problem[].`);
369
+ }
370
+ const problems = [
371
+ ...loaded.problems,
372
+ ...validated,
373
+ ...missing.map((slug) => ({
374
+ slug,
375
+ kind: opts.kind,
376
+ code: "unknown-slug",
377
+ message: `no ${opts.kind ?? "catalog"} entry with this slug`,
378
+ })),
379
+ ];
380
+ const errors = problems.filter(isError);
381
+ const scope = `${opts.kind ?? "all kinds"}${slugs.length ? ` · ${slugs.join(", ")}` : ""}`;
382
+ if (!opts.json) {
383
+ log.heading(`Catalog ${verb} — ${scope} — from ${catalogDir}`);
384
+ for (const p of problems)
385
+ out(formatProblem(p));
386
+ }
387
+ if (errors.length > 0) {
388
+ if (opts.json)
389
+ out(JSON.stringify({ ok: false, error: "invalid-template", hint: catalogErrorHint("invalid-template"), entries: entries.length, problems }, null, 2));
390
+ else
391
+ log.error(`${errors.length} problem(s) in ${entries.length} entr${entries.length === 1 ? "y" : "ies"}${verb === "validate" ? "" : ` — nothing to ${verb} until they are fixed`}.`);
392
+ return 1;
393
+ }
394
+ if (verb === "validate") {
395
+ if (opts.json)
396
+ out(JSON.stringify({ ok: true, entries: entries.length, problems }, null, 2));
397
+ else
398
+ log.success(`${entries.length} entr${entries.length === 1 ? "y" : "ies"} valid.`);
399
+ return 0;
400
+ }
401
+ const cpUrl = deps.cpUrl ?? getCpUrl();
402
+ const token = sessionOk ? creds.token : undefined;
403
+ // 2. Official preflight, BEFORE the preview (read-only, the lib's one rule):
404
+ // publish → refuse here, so a non-official account never sees a preview
405
+ // it could not act on; diff → warn and still show the diff.
406
+ let publisherWarning;
407
+ if (lib.checkPublisher) {
408
+ const check = await libCall("preflight", () => lib.checkPublisher({ cpUrl, token, fetchImpl: deps.fetchImpl }));
409
+ if (!check.official) {
410
+ if (verb === "publish")
411
+ return fail(check.reason, check.message);
412
+ publisherWarning = { code: check.reason, message: check.message };
413
+ if (!opts.json) {
414
+ log.warn(`Publishing would be refused: ${check.message}`);
415
+ out(` → ${catalogErrorHint(check.reason)}`);
416
+ }
417
+ }
418
+ }
419
+ // 3. Diff against the live catalog (diff + publish).
420
+ const rows = await libCall("diff", () => lib.diffCatalog(entries, { cpUrl, token, fetchImpl: deps.fetchImpl, retired }));
421
+ if (!Array.isArray(rows)) {
422
+ return fail("lib-shape", `diffCatalog in ${join(catalogDir, CATALOG_LIB_PATH)} did not return a row array.`);
423
+ }
424
+ if (!opts.json)
425
+ out(formatDiff(rows, lib.formatRetirement));
426
+ if (verb === "diff" || opts.dryRun) {
427
+ if (opts.json) {
428
+ const publishable = publisherWarning
429
+ ? { publishable: false, publishRefusal: { ...publisherWarning, hint: catalogErrorHint(publisherWarning.code) } }
430
+ : {};
431
+ out(JSON.stringify({ ok: true, dryRun: verb === "publish" ? true : undefined, cpUrl, diff: rows, ...publishable }, null, 2));
432
+ }
433
+ else if (opts.dryRun)
434
+ log.info("Dry run — nothing was published.");
435
+ return 0;
436
+ }
437
+ // 4. Confirm, then the ONE write door.
438
+ if (!opts.yes) {
439
+ const ok = await (deps.confirm ?? readlineConfirm)(`\n Publish ${entries.length} catalog entr${entries.length === 1 ? "y" : "ies"}${retired.length ? ` and ${retired.length} retirement${retired.length === 1 ? "" : "s"}` : ""} (${scope}) to ${cpUrl} as synap-official? [y/N] `);
440
+ if (!ok) {
441
+ log.info("Cancelled — nothing was published.");
442
+ return 1;
443
+ }
444
+ }
445
+ const results = await libCall("publish", () => lib.publishCatalog({
446
+ entries,
447
+ corpus,
448
+ cpUrl,
449
+ token: creds.token,
450
+ official: true,
451
+ dryRun: false,
452
+ // The human already said yes above; the lib may call this as its own gate.
453
+ confirm: async () => true,
454
+ fetchImpl: deps.fetchImpl,
455
+ callerUserId: creds.userId,
456
+ log: opts.json ? () => { } : out,
457
+ retired,
458
+ }));
459
+ if (!Array.isArray(results)) {
460
+ return fail("lib-shape", `publishCatalog in ${join(catalogDir, CATALOG_LIB_PATH)} did not return a result array — check the live catalog before re-running.`);
461
+ }
462
+ const failed = results.filter(resultFailed);
463
+ if (opts.json) {
464
+ out(JSON.stringify({ ok: failed.length === 0, cpUrl, diff: rows, results }, null, 2));
465
+ }
466
+ else {
467
+ for (const r of failed)
468
+ out(` ✗ ${[r.kind, r.slug].filter(Boolean).join("/")}: ${r.error ?? "failed"}`);
469
+ if (failed.length > 0)
470
+ log.error(`${failed.length}/${results.length} catalog entr${results.length === 1 ? "y" : "ies"} failed to publish.`);
471
+ else
472
+ log.success(`Published ${results.length} official catalog entr${results.length === 1 ? "y" : "ies"}.`);
473
+ }
474
+ return failed.length > 0 ? 1 : 0;
475
+ }
476
+ catch (e) {
477
+ const err = e;
478
+ return fail(err.code ?? `${verb}-failed`, err.message);
479
+ }
480
+ }
481
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/commands/catalog.ts"],"names":[],"mappings":"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"}