@synap-core/cli 1.8.0 → 1.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (372) hide show
  1. package/dist/commands/agent-chat.d.ts +47 -0
  2. package/dist/commands/agent-chat.js +250 -0
  3. package/dist/commands/agent-chat.js.map +1 -0
  4. package/dist/commands/agent-run.js +3 -4
  5. package/dist/commands/agent-run.js.map +1 -1
  6. package/dist/commands/agents.js +85 -46
  7. package/dist/commands/agents.js.map +1 -1
  8. package/dist/commands/automation.js +2 -1
  9. package/dist/commands/automation.js.map +1 -1
  10. package/dist/commands/bridge-setup.d.ts +66 -0
  11. package/dist/commands/bridge-setup.js +1112 -0
  12. package/dist/commands/bridge-setup.js.map +1 -0
  13. package/dist/commands/cap-connections.d.ts +28 -0
  14. package/dist/commands/cap-connections.js +224 -0
  15. package/dist/commands/cap-connections.js.map +1 -0
  16. package/dist/commands/capability.d.ts +89 -0
  17. package/dist/commands/capability.js +1594 -0
  18. package/dist/commands/capability.js.map +1 -0
  19. package/dist/commands/centrality.d.ts +20 -0
  20. package/dist/commands/centrality.js +95 -0
  21. package/dist/commands/centrality.js.map +1 -0
  22. package/dist/commands/connect.d.ts +2 -0
  23. package/dist/commands/connect.js +16 -35
  24. package/dist/commands/connect.js.map +1 -1
  25. package/dist/commands/context.js +6 -7
  26. package/dist/commands/context.js.map +1 -1
  27. package/dist/commands/data-extra.d.ts +1 -0
  28. package/dist/commands/data-extra.js +41 -14
  29. package/dist/commands/data-extra.js.map +1 -1
  30. package/dist/commands/data.d.ts +4 -4
  31. package/dist/commands/data.js +254 -187
  32. package/dist/commands/data.js.map +1 -1
  33. package/dist/commands/diagnose.d.ts +20 -0
  34. package/dist/commands/diagnose.js +186 -0
  35. package/dist/commands/diagnose.js.map +1 -0
  36. package/dist/commands/digest.d.ts +17 -0
  37. package/dist/commands/digest.js +122 -0
  38. package/dist/commands/digest.js.map +1 -0
  39. package/dist/commands/discover.d.ts +2 -0
  40. package/dist/commands/discover.js +25 -8
  41. package/dist/commands/discover.js.map +1 -1
  42. package/dist/commands/doc.d.ts +14 -0
  43. package/dist/commands/doc.js +61 -4
  44. package/dist/commands/doc.js.map +1 -1
  45. package/dist/commands/doctor.d.ts +21 -0
  46. package/dist/commands/doctor.js +189 -0
  47. package/dist/commands/doctor.js.map +1 -0
  48. package/dist/commands/events.js +5 -2
  49. package/dist/commands/events.js.map +1 -1
  50. package/dist/commands/explain.d.ts +1 -1
  51. package/dist/commands/explain.js +18 -15
  52. package/dist/commands/explain.js.map +1 -1
  53. package/dist/commands/facet.d.ts +29 -0
  54. package/dist/commands/facet.js +113 -0
  55. package/dist/commands/facet.js.map +1 -0
  56. package/dist/commands/graph.js +7 -4
  57. package/dist/commands/graph.js.map +1 -1
  58. package/dist/commands/import.d.ts +38 -0
  59. package/dist/commands/import.js +471 -0
  60. package/dist/commands/import.js.map +1 -0
  61. package/dist/commands/init.js +35 -16
  62. package/dist/commands/init.js.map +1 -1
  63. package/dist/commands/keys.js +3 -4
  64. package/dist/commands/keys.js.map +1 -1
  65. package/dist/commands/knowledge.d.ts +8 -0
  66. package/dist/commands/knowledge.js +308 -33
  67. package/dist/commands/knowledge.js.map +1 -1
  68. package/dist/commands/launch.d.ts +50 -0
  69. package/dist/commands/launch.js +790 -0
  70. package/dist/commands/launch.js.map +1 -0
  71. package/dist/commands/lens.d.ts +45 -0
  72. package/dist/commands/lens.js +386 -0
  73. package/dist/commands/lens.js.map +1 -0
  74. package/dist/commands/market-authoring.d.ts +45 -0
  75. package/dist/commands/market-authoring.js +225 -0
  76. package/dist/commands/market-authoring.js.map +1 -0
  77. package/dist/commands/market.d.ts +224 -0
  78. package/dist/commands/market.js +1643 -0
  79. package/dist/commands/market.js.map +1 -0
  80. package/dist/commands/mcp.d.ts +64 -0
  81. package/dist/commands/mcp.js +265 -0
  82. package/dist/commands/mcp.js.map +1 -0
  83. package/dist/commands/observe.js +14 -11
  84. package/dist/commands/observe.js.map +1 -1
  85. package/dist/commands/open.d.ts +21 -4
  86. package/dist/commands/open.js +45 -4
  87. package/dist/commands/open.js.map +1 -1
  88. package/dist/commands/pod.d.ts +100 -0
  89. package/dist/commands/pod.js +359 -0
  90. package/dist/commands/pod.js.map +1 -0
  91. package/dist/commands/pods.d.ts +15 -0
  92. package/dist/commands/pods.js +233 -17
  93. package/dist/commands/pods.js.map +1 -1
  94. package/dist/commands/proposals-actions.js +43 -3
  95. package/dist/commands/proposals-actions.js.map +1 -1
  96. package/dist/commands/purge.d.ts +23 -0
  97. package/dist/commands/purge.js +148 -0
  98. package/dist/commands/purge.js.map +1 -0
  99. package/dist/commands/raycast.d.ts +15 -0
  100. package/dist/commands/raycast.js +153 -0
  101. package/dist/commands/raycast.js.map +1 -0
  102. package/dist/commands/sessions.js +47 -22
  103. package/dist/commands/sessions.js.map +1 -1
  104. package/dist/commands/skill-manage.d.ts +21 -0
  105. package/dist/commands/skill-manage.js +195 -0
  106. package/dist/commands/skill-manage.js.map +1 -0
  107. package/dist/commands/skills-commands.js +2 -1
  108. package/dist/commands/skills-commands.js.map +1 -1
  109. package/dist/commands/skills.js +7 -4
  110. package/dist/commands/skills.js.map +1 -1
  111. package/dist/commands/status.d.ts +3 -1
  112. package/dist/commands/status.js +166 -14
  113. package/dist/commands/status.js.map +1 -1
  114. package/dist/commands/statusline.d.ts +24 -0
  115. package/dist/commands/statusline.js +450 -0
  116. package/dist/commands/statusline.js.map +1 -0
  117. package/dist/commands/subscribe.js +2 -2
  118. package/dist/commands/subscribe.js.map +1 -1
  119. package/dist/commands/template.d.ts +42 -0
  120. package/dist/commands/template.js +191 -0
  121. package/dist/commands/template.js.map +1 -0
  122. package/dist/commands/tools.d.ts +30 -0
  123. package/dist/commands/tools.js +315 -0
  124. package/dist/commands/tools.js.map +1 -0
  125. package/dist/commands/upload.d.ts +30 -0
  126. package/dist/commands/upload.js +155 -0
  127. package/dist/commands/upload.js.map +1 -0
  128. package/dist/commands/versions.d.ts +27 -0
  129. package/dist/commands/versions.js +277 -0
  130. package/dist/commands/versions.js.map +1 -0
  131. package/dist/commands/view.js +3 -2
  132. package/dist/commands/view.js.map +1 -1
  133. package/dist/commands/whoami.d.ts +21 -0
  134. package/dist/commands/whoami.js +129 -0
  135. package/dist/commands/whoami.js.map +1 -0
  136. package/dist/index.js +894 -60
  137. package/dist/index.js.map +1 -1
  138. package/dist/lib/approval-poll.d.ts +42 -0
  139. package/dist/lib/approval-poll.js +52 -0
  140. package/dist/lib/approval-poll.js.map +1 -0
  141. package/dist/lib/auth.d.ts +29 -6
  142. package/dist/lib/auth.js +105 -94
  143. package/dist/lib/auth.js.map +1 -1
  144. package/dist/lib/bundle-version.d.ts +11 -0
  145. package/dist/lib/bundle-version.js +33 -0
  146. package/dist/lib/bundle-version.js.map +1 -0
  147. package/dist/lib/capture-lane.d.ts +30 -12
  148. package/dist/lib/capture-lane.js +73 -14
  149. package/dist/lib/capture-lane.js.map +1 -1
  150. package/dist/lib/capture-structure.d.ts +123 -0
  151. package/dist/lib/capture-structure.js +57 -0
  152. package/dist/lib/capture-structure.js.map +1 -0
  153. package/dist/lib/cp-packages.d.ts +177 -0
  154. package/dist/lib/cp-packages.js +389 -0
  155. package/dist/lib/cp-packages.js.map +1 -0
  156. package/dist/lib/describe-lens.d.ts +46 -0
  157. package/dist/lib/describe-lens.js +33 -0
  158. package/dist/lib/describe-lens.js.map +1 -0
  159. package/dist/lib/hub-client.d.ts +91 -1
  160. package/dist/lib/hub-client.js +565 -22
  161. package/dist/lib/hub-client.js.map +1 -1
  162. package/dist/lib/id.d.ts +23 -0
  163. package/dist/lib/id.js +35 -0
  164. package/dist/lib/id.js.map +1 -0
  165. package/dist/lib/installed.d.ts +51 -0
  166. package/dist/lib/installed.js +70 -0
  167. package/dist/lib/installed.js.map +1 -0
  168. package/dist/lib/next-steps.d.ts +61 -0
  169. package/dist/lib/next-steps.js +146 -0
  170. package/dist/lib/next-steps.js.map +1 -0
  171. package/dist/lib/pod.d.ts +144 -22
  172. package/dist/lib/pod.js +302 -64
  173. package/dist/lib/pod.js.map +1 -1
  174. package/dist/lib/project-ref.d.ts +95 -0
  175. package/dist/lib/project-ref.js +144 -0
  176. package/dist/lib/project-ref.js.map +1 -0
  177. package/dist/lib/project.d.ts +35 -0
  178. package/dist/lib/project.js +39 -0
  179. package/dist/lib/project.js.map +1 -0
  180. package/dist/lib/session-lens.d.ts +33 -0
  181. package/dist/lib/session-lens.js +76 -0
  182. package/dist/lib/session-lens.js.map +1 -0
  183. package/dist/lib/skill-import.d.ts +40 -0
  184. package/dist/lib/skill-import.js +203 -0
  185. package/dist/lib/skill-import.js.map +1 -0
  186. package/dist/lib/skills-installer.d.ts +17 -6
  187. package/dist/lib/skills-installer.js +133 -19
  188. package/dist/lib/skills-installer.js.map +1 -1
  189. package/dist/lib/suite.d.ts +28 -0
  190. package/dist/lib/suite.js +29 -0
  191. package/dist/lib/suite.js.map +1 -0
  192. package/dist/lib/superwhisper-import.d.ts +40 -0
  193. package/dist/lib/superwhisper-import.js +389 -0
  194. package/dist/lib/superwhisper-import.js.map +1 -0
  195. package/dist/lib/targets.d.ts +49 -1
  196. package/dist/lib/targets.js +420 -288
  197. package/dist/lib/targets.js.map +1 -1
  198. package/dist/lib/template-file.d.ts +74 -0
  199. package/dist/lib/template-file.js +140 -0
  200. package/dist/lib/template-file.js.map +1 -0
  201. package/dist/lib/unwrapList.d.ts +1 -0
  202. package/dist/lib/unwrapList.js +20 -0
  203. package/dist/lib/unwrapList.js.map +1 -0
  204. package/dist/utils/logger.d.ts +2 -0
  205. package/dist/utils/logger.js +10 -2
  206. package/dist/utils/logger.js.map +1 -1
  207. package/node_modules/@synap/hub-rest-client/dist/index.cjs +414 -34
  208. package/node_modules/@synap/hub-rest-client/dist/index.d.cts +762 -22
  209. package/node_modules/@synap/hub-rest-client/dist/index.d.ts +762 -22
  210. package/node_modules/@synap/hub-rest-client/dist/index.js +414 -34
  211. package/node_modules/@synap/hub-rest-client/package.json +1 -1
  212. package/node_modules/@synap/hub-rest-client/src/client.ts +525 -37
  213. package/node_modules/@synap/hub-rest-client/src/index.ts +42 -0
  214. package/node_modules/@synap/hub-rest-client/src/setup.ts +57 -1
  215. package/node_modules/@synap/hub-rest-client/src/types.ts +697 -37
  216. package/package.json +11 -5
  217. package/skills/agent-os/SKILL.md +218 -0
  218. package/skills/manifest.json +5 -0
  219. package/skills/onboard/SKILL.md +193 -0
  220. package/skills/synap/SKILL.md +1284 -58
  221. package/skills/synap/_order.txt +37 -0
  222. package/skills/synap/_skill.yaml +24 -0
  223. package/skills/synap/authentication.md +10 -0
  224. package/skills/synap/automations.md +264 -0
  225. package/skills/synap/capabilities.md +107 -0
  226. package/skills/synap/capture.md +50 -142
  227. package/skills/synap/cli-operations.md +107 -0
  228. package/skills/synap/common-mistakes.md +13 -0
  229. package/skills/synap/content-os.md +83 -0
  230. package/skills/synap/creative-loop.md +43 -0
  231. package/skills/synap/crm.md +117 -0
  232. package/skills/synap/diagnostics.md +35 -0
  233. package/skills/synap/digesting-a-channel.md +63 -0
  234. package/skills/synap/document-embeds.md +123 -0
  235. package/skills/synap/escalation-ladder.md +71 -0
  236. package/skills/synap/focus-sessions.md +47 -0
  237. package/skills/synap/governance-rules.md +64 -0
  238. package/skills/synap/governance.md +6 -6
  239. package/skills/synap/graph-gardening.md +21 -0
  240. package/skills/synap/inline-patterns.md +38 -0
  241. package/skills/synap/lenses.md +38 -0
  242. package/skills/synap/linking-principle.md +39 -0
  243. package/skills/synap/linking.md +1 -0
  244. package/skills/synap/mental-model.md +45 -0
  245. package/skills/synap/more.md +7 -0
  246. package/skills/synap/multi-entity-capture.md +12 -0
  247. package/skills/synap/next-action.md +37 -0
  248. package/skills/synap/north-star.md +17 -0
  249. package/skills/synap/operating-mode-rules.md +45 -0
  250. package/skills/synap/operating-mode.md +9 -0
  251. package/skills/synap/quick-reference.md +67 -0
  252. package/skills/synap/reading.md +43 -0
  253. package/skills/synap/recap.md +21 -0
  254. package/skills/synap/reflexes.md +46 -0
  255. package/skills/synap/response-style.md +21 -0
  256. package/skills/synap/scope.md +13 -0
  257. package/skills/synap/showing.md +17 -0
  258. package/skills/synap/user-model.md +25 -0
  259. package/skills/synap/viewframe-cells.md +290 -0
  260. package/skills/synap/work-flow.md +113 -0
  261. package/skills/synap/worked-examples.md +74 -0
  262. package/skills/synap/workspace-design.md +45 -0
  263. package/skills/synap/workspace-edges.md +49 -0
  264. package/skills/synap/writes.md +213 -0
  265. package/skills/synap-app/SKILL.md +319 -0
  266. package/skills/synap-app/_order.txt +5 -0
  267. package/skills/synap-app/_skill.yaml +20 -0
  268. package/skills/synap-app/creating-the-base-app.md +64 -0
  269. package/skills/synap-app/governance.md +42 -0
  270. package/skills/synap-app/install-commands.md +55 -0
  271. package/skills/synap-app/overview.md +50 -0
  272. package/skills/synap-app/using-the-sdk.md +73 -0
  273. package/skills/synap-market/SKILL.md +335 -0
  274. package/skills/synap-market/_order.txt +5 -0
  275. package/skills/synap-market/_skill.yaml +24 -0
  276. package/skills/synap-market/author-and-publish.md +75 -0
  277. package/skills/synap-market/discover-and-fetch.md +59 -0
  278. package/skills/synap-market/governance-and-catalog.md +56 -0
  279. package/skills/synap-market/install.md +55 -0
  280. package/skills/synap-market/overview.md +51 -0
  281. package/skills/synap-schema/SKILL.md +97 -6
  282. package/skills/synap-schema/_order.txt +13 -0
  283. package/skills/synap-schema/_skill.yaml +22 -0
  284. package/skills/synap-schema/before-you-touch.md +14 -0
  285. package/skills/synap-schema/common-mistakes.md +9 -0
  286. package/skills/synap-schema/creating-profiles.md +17 -0
  287. package/skills/synap-schema/discover-profiles.md +24 -0
  288. package/skills/synap-schema/entity-scope.md +8 -0
  289. package/skills/synap-schema/extend-vs-create.md +31 -0
  290. package/skills/synap-schema/more.md +6 -0
  291. package/skills/synap-schema/overlay-properties.md +22 -0
  292. package/skills/synap-schema/profiles.md +3 -0
  293. package/skills/synap-schema/property-defs.md +29 -0
  294. package/skills/synap-schema/read-before-write.md +50 -0
  295. package/skills/synap-schema/relations.md +18 -0
  296. package/skills/synap-schema/worked-example.md +30 -0
  297. package/skills/synap-ui/SKILL.md +26 -2
  298. package/skills/synap-ui/_order.txt +13 -0
  299. package/skills/synap-ui/_skill.yaml +23 -0
  300. package/skills/synap-ui/ai-companion.md +27 -0
  301. package/skills/synap-ui/arranging-bento.md +8 -0
  302. package/skills/synap-ui/before-you-build.md +20 -0
  303. package/skills/synap-ui/bento-layouts.md +35 -0
  304. package/skills/synap-ui/common-mistakes.md +10 -0
  305. package/skills/synap-ui/creating-views.md +26 -0
  306. package/skills/synap-ui/four-builds.md +24 -0
  307. package/skills/synap-ui/more.md +7 -0
  308. package/skills/synap-ui/proposing-vs-extending.md +11 -0
  309. package/skills/synap-ui/view-list.md +24 -0
  310. package/skills/synap-ui/views.md +3 -0
  311. package/skills/synap-ui/worked-example.md +18 -0
  312. package/skills/synap-ui/workspaces.md +47 -0
  313. package/templates/automations/bookmark-enrichment.automation.json +44 -0
  314. package/templates/automations/mail-feed.automation.json +86 -0
  315. package/templates/automations/url-bookmark-capture.automation.json +70 -0
  316. package/templates/skills/README.md +21 -0
  317. package/templates/skills/authoring-automations/SKILL.md +95 -0
  318. package/templates/skills/authoring-automations/reference/node-matrix.md +49 -0
  319. package/templates/skills/authoring-capabilities/SKILL.md +93 -0
  320. package/templates/skills/authoring-capabilities/reference/template-anatomy.md +70 -0
  321. package/templates/skills/authoring-playbooks/SKILL.md +102 -0
  322. package/templates/skills/authoring-playbooks/reference/stages-contract.md +35 -0
  323. package/templates/skills/authoring-playbooks/reference/worked-example.md +64 -0
  324. package/templates/skills/bookmark-enrichment/SKILL.md +40 -0
  325. package/templates/skills/coordinating-agents/SKILL.md +32 -0
  326. package/templates/skills/coordinating-branches/SKILL.md +27 -0
  327. package/templates/skills/mapping-the-server/SKILL.md +54 -0
  328. package/templates/skills/reading-client-progress/SKILL.md +65 -0
  329. package/templates/skills/routing-to-channels/SKILL.md +54 -0
  330. package/templates/skills/stellar-scf-grants-advisor/ASSOCIATE-CHEATSHEET.md +133 -0
  331. package/templates/skills/stellar-scf-grants-advisor/ASSOCIATE-ONBOARDING-GUIDE.md +761 -0
  332. package/templates/skills/stellar-scf-grants-advisor/CLIENT-FAQ.md +181 -0
  333. package/templates/skills/stellar-scf-grants-advisor/PARTNER-HANDOVER.md +130 -0
  334. package/templates/skills/stellar-scf-grants-advisor/SKILL.md +102 -0
  335. package/templates/skills/stellar-scf-grants-advisor/examples/README.md +43 -0
  336. package/templates/skills/stellar-scf-grants-advisor/examples/chat-summary-templates.md +158 -0
  337. package/templates/skills/stellar-scf-grants-advisor/examples/corpus-comparable-rows.md +136 -0
  338. package/templates/skills/stellar-scf-grants-advisor/examples/q10-team-rewrites.md +109 -0
  339. package/templates/skills/stellar-scf-grants-advisor/examples/q2-description-rewrites.md +88 -0
  340. package/templates/skills/stellar-scf-grants-advisor/examples/q6-integration-rewrites.md +107 -0
  341. package/templates/skills/stellar-scf-grants-advisor/examples/tranche-structures.md +176 -0
  342. package/templates/skills/stellar-scf-grants-advisor/reference/01-methodology.md +96 -0
  343. package/templates/skills/stellar-scf-grants-advisor/reference/02-scoring-framework.md +199 -0
  344. package/templates/skills/stellar-scf-grants-advisor/reference/03-rejection-patterns.md +241 -0
  345. package/templates/skills/stellar-scf-grants-advisor/reference/04-winner-patterns.md +120 -0
  346. package/templates/skills/stellar-scf-grants-advisor/reference/05-comeback-patterns.md +92 -0
  347. package/templates/skills/stellar-scf-grants-advisor/reference/06-budget-benchmarks.md +125 -0
  348. package/templates/skills/stellar-scf-grants-advisor/reference/07-integration-list.md +147 -0
  349. package/templates/skills/stellar-scf-grants-advisor/reference/08-abstract-fields.md +258 -0
  350. package/templates/skills/stellar-scf-grants-advisor/reference/09-build-fields.md +259 -0
  351. package/templates/skills/stellar-scf-grants-advisor/reference/10-corpus-winners.md +135 -0
  352. package/templates/skills/stellar-scf-grants-advisor/reference/11-corpus-rejects.md +267 -0
  353. package/templates/skills/stellar-scf-grants-advisor/reference/12-client-communication.md +131 -0
  354. package/templates/skills/stellar-scf-grants-advisor/reference/13-excel-output-spec.md +199 -0
  355. package/templates/skills/stellar-scf-grants-advisor/reference/14-worked-examples.md +160 -0
  356. package/templates/skills/stellar-scf-grants-advisor/templates/abstract-review-builder.py +253 -0
  357. package/templates/skills/stellar-scf-grants-advisor/templates/build-review-builder.py +213 -0
  358. package/dist/commands/connectors.d.ts +0 -31
  359. package/dist/commands/connectors.js +0 -276
  360. package/dist/commands/connectors.js.map +0 -1
  361. package/dist/commands/finish.d.ts +0 -25
  362. package/dist/commands/finish.js +0 -274
  363. package/dist/commands/finish.js.map +0 -1
  364. package/dist/commands/openclaw.d.ts +0 -40
  365. package/dist/commands/openclaw.js +0 -1148
  366. package/dist/commands/openclaw.js.map +0 -1
  367. package/dist/commands/security-audit.d.ts +0 -12
  368. package/dist/commands/security-audit.js +0 -100
  369. package/dist/commands/security-audit.js.map +0 -1
  370. package/dist/lib/hardening.d.ts +0 -18
  371. package/dist/lib/hardening.js +0 -214
  372. package/dist/lib/hardening.js.map +0 -1
@@ -0,0 +1,225 @@
1
+ /**
2
+ * `synap market` — the template AUTHORING loop.
3
+ * =============================================
4
+ *
5
+ * The other half of `market` (browse/install/update/installed lives in
6
+ * `market.ts`): the create→publish path an author walks.
7
+ *
8
+ * synap market scaffold <slug> — write a minimal valid <slug>.template.yaml
9
+ * synap market validate <file> — run the ONE shared validator, fast feedback
10
+ * synap market publish <file> — validate, then upsert to the CP (private by default)
11
+ * synap market publish --from-workspace <id> — serialize a LIVE workspace, then publish
12
+ * synap market unpublish <slug> — flip a published package back to private
13
+ *
14
+ * REUSE: validation is the shared `validateTemplate` (via `lib/template-file`);
15
+ * CP transport is `lib/cp-packages` (`publishPackage`/`unpublishPackage`); the
16
+ * pod `to-template` serializer is reached through the standard hub client. No
17
+ * fetch is hand-rolled here.
18
+ */
19
+ import { existsSync, writeFileSync } from "node:fs";
20
+ import { resolve as resolvePath } from "node:path";
21
+ import chalk from "chalk";
22
+ import { log } from "../utils/logger.js";
23
+ import { parseTemplateFile, validateTemplateYaml, templateToPackageDefinition, packageDefinitionToYaml, scaffoldTemplateYaml, } from "../lib/template-file.js";
24
+ import { publishPackage, unpublishPackage, CpWriteError, } from "../lib/cp-packages.js";
25
+ import { resolveHubConfig, hubPost, renderHubError } from "../lib/hub-client.js";
26
+ /** Print a validator failure list human-readably: `rule` · `path` — `message`. */
27
+ function printValidationErrors(errors) {
28
+ for (const e of errors) {
29
+ console.error(` ${chalk.red("✗")} ${chalk.yellow(e.rule)} ${chalk.dim(e.path)}\n ${e.message}`);
30
+ }
31
+ }
32
+ // ─── validate ────────────────────────────────────────────────────────────────
33
+ export async function marketValidate(file, opts) {
34
+ let tpl;
35
+ try {
36
+ tpl = parseTemplateFile(file);
37
+ }
38
+ catch (e) {
39
+ if (opts.json) {
40
+ console.log(JSON.stringify({ ok: false, errors: [{ rule: "parse", path: file, message: e.message }] }, null, 2));
41
+ }
42
+ else {
43
+ log.error(e.message);
44
+ }
45
+ process.exit(1);
46
+ }
47
+ const result = validateTemplateYaml(tpl);
48
+ if (opts.json) {
49
+ console.log(JSON.stringify(result, null, 2));
50
+ if (!result.ok)
51
+ process.exit(1);
52
+ return;
53
+ }
54
+ if (result.ok) {
55
+ log.success(`${file} is valid.`);
56
+ return;
57
+ }
58
+ log.error(`${file} has ${result.errors.length} validation error${result.errors.length === 1 ? "" : "s"}:`);
59
+ printValidationErrors(result.errors);
60
+ process.exit(1);
61
+ }
62
+ // ─── scaffold ──────────────────────────────────────────────────────────────
63
+ export async function marketScaffold(slug, opts) {
64
+ const fileName = `${slug}.template.yaml`;
65
+ const target = resolvePath(process.cwd(), fileName);
66
+ // Create-then-configure: refuse to clobber, never overwrite an author's work.
67
+ if (existsSync(target)) {
68
+ if (opts.json) {
69
+ console.log(JSON.stringify({ ok: false, error: "exists", path: target }, null, 2));
70
+ }
71
+ else {
72
+ log.error(`${fileName} already exists — refusing to overwrite.`);
73
+ log.hint("Edit it in place, or choose a different slug.");
74
+ }
75
+ process.exit(1);
76
+ }
77
+ writeFileSync(target, scaffoldTemplateYaml(slug), "utf-8");
78
+ if (opts.json) {
79
+ console.log(JSON.stringify({ ok: true, path: target, slug }, null, 2));
80
+ return;
81
+ }
82
+ log.success(`Wrote ${fileName}`);
83
+ log.dim("Edit it in place, then:");
84
+ log.dim(` synap market validate ${fileName}`);
85
+ log.dim(` synap market publish ${fileName}`);
86
+ }
87
+ // ─── publish ─────────────────────────────────────────────────────────────────
88
+ /**
89
+ * POST `/api/hub/workspaces/:id/to-template` — the pod-native serializer that
90
+ * turns a LIVE workspace into a full `PackageDefinition`. The one door for the
91
+ * `--from-workspace` publish path; mirrors every other `/api/hub/*` call.
92
+ */
93
+ export async function fetchWorkspaceAsTemplate(workspaceId, opts) {
94
+ const cfg = await resolveHubConfig(opts);
95
+ const res = (await hubPost(`/workspaces/${encodeURIComponent(workspaceId)}/to-template`, {}, cfg, 60_000));
96
+ if (!res?.definition) {
97
+ throw new Error(`Workspace ${workspaceId} produced no template definition.`);
98
+ }
99
+ return res.definition;
100
+ }
101
+ /** Surface a publish outcome (created/updated/no-op) uniformly. */
102
+ function reportPublish(r) {
103
+ const vis = r.isPublic ? chalk.green("public") : chalk.dim("private");
104
+ switch (r.outcome) {
105
+ case "created":
106
+ log.success(`Published ${chalk.bold(r.slug)} ${chalk.dim(r.version)} (${vis})`);
107
+ break;
108
+ case "updated":
109
+ log.success(`Updated ${chalk.bold(r.slug)} → ${chalk.dim(r.version)} (${vis})`);
110
+ break;
111
+ case "no-op":
112
+ log.info(`${chalk.bold(r.slug)} is already up to date at ${chalk.dim(r.version)} (${vis}) — nothing to publish.`);
113
+ break;
114
+ }
115
+ }
116
+ /** Turn a CP write failure into a clear, honest message — never swallow the server `detail`; special-case the reserved-slug 403. */
117
+ function reportCpWriteError(err, slug) {
118
+ if (err.status === 403 && /reserved/i.test(err.serverMessage) && slug) {
119
+ log.error(`"${slug}" is a reserved Synap bedrock template — publish under a different slug.`);
120
+ log.hint("Reserved: foundation, crm, operations, content-os, enterprise-os, research-base.");
121
+ return;
122
+ }
123
+ log.error(`Publish failed${err.status ? ` (HTTP ${err.status})` : ""}: ${err.serverMessage}`);
124
+ }
125
+ export async function marketPublish(file, opts) {
126
+ // Default PRIVATE; `--public` flips it. `--private` is accepted as the explicit
127
+ // default so a script can state intent.
128
+ const isPublic = opts.public === true;
129
+ // 1. Obtain the definition + a WorkspaceYaml view to validate.
130
+ let def;
131
+ let yamlForValidate;
132
+ let sourceLabel;
133
+ if (opts.fromWorkspace) {
134
+ try {
135
+ def = await fetchWorkspaceAsTemplate(opts.fromWorkspace, opts);
136
+ }
137
+ catch (e) {
138
+ renderHubError(e);
139
+ process.exit(1);
140
+ }
141
+ yamlForValidate = packageDefinitionToYaml(def);
142
+ sourceLabel = `workspace ${opts.fromWorkspace}`;
143
+ }
144
+ else {
145
+ if (!file) {
146
+ log.error("Provide a template file, or --from-workspace <id>.");
147
+ process.exit(1);
148
+ }
149
+ try {
150
+ const tpl = parseTemplateFile(file);
151
+ yamlForValidate = tpl;
152
+ def = templateToPackageDefinition(tpl);
153
+ }
154
+ catch (e) {
155
+ log.error(e.message);
156
+ process.exit(1);
157
+ }
158
+ sourceLabel = file;
159
+ }
160
+ // 2. Validate BEFORE any publish network call (the fast author-feedback gate).
161
+ const result = validateTemplateYaml(yamlForValidate);
162
+ if (!result.ok) {
163
+ if (opts.json) {
164
+ console.log(JSON.stringify({ ok: false, stage: "validate", errors: result.errors }, null, 2));
165
+ }
166
+ else {
167
+ log.error(`${sourceLabel} failed validation — not published:`);
168
+ printValidationErrors(result.errors);
169
+ }
170
+ process.exit(1);
171
+ }
172
+ // 3. Publish.
173
+ const slug = def._meta?.slug;
174
+ try {
175
+ const r = await publishPackage(def, { isPublic });
176
+ if (opts.json) {
177
+ console.log(JSON.stringify({ ok: true, ...r }, null, 2));
178
+ return;
179
+ }
180
+ reportPublish(r);
181
+ }
182
+ catch (e) {
183
+ if (e instanceof CpWriteError) {
184
+ if (opts.json) {
185
+ console.log(JSON.stringify({ ok: false, stage: "publish", status: e.status, error: e.serverMessage, slug }, null, 2));
186
+ }
187
+ else {
188
+ reportCpWriteError(e, slug);
189
+ }
190
+ process.exit(1);
191
+ }
192
+ log.error(`Publish failed: ${e.message}`);
193
+ process.exit(1);
194
+ }
195
+ }
196
+ // ─── unpublish ───────────────────────────────────────────────────────────────
197
+ export async function marketUnpublish(slug, opts) {
198
+ try {
199
+ const r = await unpublishPackage(slug);
200
+ if (opts.json) {
201
+ console.log(JSON.stringify({ ok: true, ...r }, null, 2));
202
+ return;
203
+ }
204
+ log.success(`${chalk.bold(slug)} is now ${r.isPublic ? "public" : "private"}.`);
205
+ }
206
+ catch (e) {
207
+ if (e instanceof CpWriteError) {
208
+ if (opts.json) {
209
+ console.log(JSON.stringify({ ok: false, status: e.status, error: e.serverMessage, slug }, null, 2));
210
+ }
211
+ else {
212
+ log.error(`Unpublish failed${e.status ? ` (HTTP ${e.status})` : ""}: ${e.serverMessage}`);
213
+ // The CP PATCH door does not yet accept `isPublic` (only `podId`) — say so
214
+ // rather than leaving a bare validation error.
215
+ if (e.status === 400) {
216
+ log.hint("The control-plane PATCH door needs `isPublic` added to its allow-list (TODO cp).");
217
+ }
218
+ }
219
+ process.exit(1);
220
+ }
221
+ log.error(`Unpublish failed: ${e.message}`);
222
+ process.exit(1);
223
+ }
224
+ }
225
+ //# sourceMappingURL=market-authoring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"market-authoring.js","sourceRoot":"","sources":["../../src/commands/market-authoring.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,224 @@
1
+ /**
2
+ * `synap market` — discover + install ANY package type.
3
+ * =====================================================
4
+ *
5
+ * `synap launch` is workspace-first: it turns an empty pod into a company from
6
+ * BUNDLED workspace templates (offline). `market` is the superset browser — it
7
+ * reaches EVERY package type the control-plane registry carries
8
+ * (capability / skill / workflow / view / cell / workspace), public or private,
9
+ * over the shared catalog door (`assembleCatalog` + the CP `/api/packages`
10
+ * transport). Suites (`enterprise-os`, `the-arch`) headline via the `suite` tag,
11
+ * not a hardcoded slug.
12
+ *
13
+ * synap market [--search q] [--type t] [--list] [--json] — browse
14
+ * synap market install <slug> — install
15
+ * synap market update [slug] [--yes] [--json] — check/apply drift
16
+ *
17
+ * INSTALL SCOPE: WORKSPACE-type packages install via `/packages/apply` (the
18
+ * same door `launch` uses), which provisions a workspace from the definition.
19
+ * Non-workspace kinds (capability / automation / cell / template) install via
20
+ * the pod's kind-agnostic `market.install` verb on `/capabilities/execute`,
21
+ * which resolves the definition from `cp_catalog_cache`. Types the verb doesn't
22
+ * handle fall back to a route-to-browser message.
23
+ */
24
+ import { type CatalogEntry, type TemplateUpdateCheck } from "@synap-core/workspace-templates";
25
+ import { type PackageFilters, type TierInfo } from "../lib/cp-packages.js";
26
+ import { type InstalledTemplateInfo } from "../lib/installed.js";
27
+ export interface MarketCatalog {
28
+ entries: CatalogEntry[];
29
+ tierBySlug: Map<string, TierInfo>;
30
+ lockedSlugs: Set<string>;
31
+ installed: Set<string>;
32
+ /** Bundled slugs (public + private) — the offline-installable workspace set. */
33
+ bundledSlugs: Set<string>;
34
+ loggedIn: boolean;
35
+ reachedCp: boolean;
36
+ /**
37
+ * Slug → CP row's OWN `version`, read straight off `CpBrowseRow`/`CpMineRow`
38
+ * (NOT off the merged `entries[]`). Needed because `mergeCatalog`'s
39
+ * squatting-defense makes the BUNDLE win the merged entry for every OFFICIAL
40
+ * public template that also exists on the CP (list-route rows never carry
41
+ * `definition`, so `computeTemplateUpdates` sees no remote version for them
42
+ * via `entries[]` and would silently hide a real CP-side update). `market
43
+ * update` compares against THIS map directly instead.
44
+ */
45
+ remoteVersionBySlug: Map<string, string>;
46
+ }
47
+ /**
48
+ * Assemble the market catalog: bundled workspace templates ∪ public CP browse
49
+ * (all types) ∪ the caller's own packages (when logged in), through the shared
50
+ * `assembleCatalog` door. Unlike `launch`, PUBLIC CP rows are fetched even when
51
+ * logged out — the bundle only carries workspaces, so all-types discovery needs
52
+ * the CP browse route (which needs no auth).
53
+ */
54
+ export declare function buildMarketCatalog(filters?: PackageFilters): Promise<MarketCatalog>;
55
+ /** The `kind` values the pod's `market.install` verb provisions (see
56
+ * cp-catalog-sync.ts `CatalogKind`). */
57
+ export type MarketInstallKind = "capability" | "automation" | "template" | "cell";
58
+ /**
59
+ * Map a CP package `category` (what {@link typeOf} returns) → the pod
60
+ * `market.install` verb's `kind` vocabulary, or `null` when the verb can't
61
+ * install that type. The CP's live PACKAGE_TYPES and the pod's cache `kind`
62
+ * diverge (see cp-catalog-sync.ts): the CP's `workflow` is the pod's
63
+ * `automation`; the CP's `workspace` is the pod's `template` — but a workspace
64
+ * installs through the dedicated `/packages/apply` create path, so it never
65
+ * routes through here. `automation`/`template` are also accepted verbatim so a
66
+ * row already speaking the pod's cache vocabulary still resolves.
67
+ */
68
+ export declare function marketInstallKind(type: string): MarketInstallKind | null;
69
+ interface DependencySeedOutcome {
70
+ slug: string;
71
+ status: "no-layers" | "seeded" | "failed";
72
+ layers?: string[];
73
+ error?: string;
74
+ }
75
+ export interface ResolvedDependencyLike {
76
+ slug: string;
77
+ seedOutcome?: DependencySeedOutcome;
78
+ }
79
+ /**
80
+ * Top-level rollup the backend now sends alongside `dependencies[]` — same
81
+ * info, pre-aggregated. Kept local for the same reason as the types above:
82
+ * a structural match is all `/packages/apply`'s JSON needs, and this CLI
83
+ * doesn't carry api-types. Optional — older pod builds won't send it.
84
+ */
85
+ export interface SeedSummary {
86
+ attempted: number;
87
+ seeded: number;
88
+ failed: Array<{
89
+ slug: string;
90
+ error: string;
91
+ }>;
92
+ }
93
+ /** The two new honest-outcome fields `/packages/apply` may return. Both optional — a legacy pod build may omit them. */
94
+ export interface WorkspaceApplyResult {
95
+ status?: string;
96
+ workspaceId?: string;
97
+ onto?: string;
98
+ outcome?: "created" | "reconciled" | "unchanged";
99
+ }
100
+ export interface ApplyVerdict {
101
+ /** Honest coarse status — JSON consumers should branch on this, never guess from `workspace.outcome` alone. */
102
+ status: "installed" | "installed-with-failures" | "updated" | "updated-with-failures" | "unchanged" | "composed" | "composed-with-failures" | "stamp-contradiction" | "legacy-unknown" | "no-workspace";
103
+ /** Non-fatal warnings — a stamp contradiction or a compose-overlay note. Seed failures are reported separately via `printSeedOutcomes`. */
104
+ warnings: string[];
105
+ }
106
+ /**
107
+ * Classify one `/packages/apply` response into the honest verdict both
108
+ * `marketInstall` and `applyOnePackage` print (and both put in `--json`).
109
+ * `wasUnstamped` = the slug was already installed with no recorded version
110
+ * BEFORE this call (only `marketInstall` can detect this today — see its
111
+ * `fetchInstalledTemplates` call; `applyOnePackage` only ever re-applies
112
+ * already-versioned slugs, so it always passes `false`).
113
+ */
114
+ export declare function classifyApplyResult(entry: CatalogEntry, ws: WorkspaceApplyResult | undefined, dependencies: ResolvedDependencyLike[] | undefined, seedSummary: SeedSummary | undefined, ctx: {
115
+ remoteVersionSent?: string;
116
+ wasUnstamped: boolean;
117
+ }): ApplyVerdict;
118
+ /** Render a `classifyApplyResult` verdict — the ONE honest-text door for both `marketInstall` and `applyOnePackage`. */
119
+ export declare function printApplyVerdict(entry: CatalogEntry, verdict: ApplyVerdict): void;
120
+ export declare function market(opts: {
121
+ list?: boolean;
122
+ json?: boolean;
123
+ search?: string;
124
+ type?: string;
125
+ }): Promise<void>;
126
+ export declare function marketInstall(slug: string, opts: {
127
+ podUrl?: string;
128
+ apiKey?: string;
129
+ json?: boolean;
130
+ project?: string;
131
+ timeout?: string;
132
+ /** Reconcile this template ONTO an existing workspace (additive) instead of creating a new one — passed through to `/packages/apply` as `targetWorkspaceId`. */
133
+ onto?: string;
134
+ /** Preview the create path write-free (`/packages/preflight`) — reports would-create / reuse / conflicts and writes nothing. */
135
+ dryRun?: boolean;
136
+ }): Promise<void>;
137
+ export interface UpdateCheck extends TemplateUpdateCheck {
138
+ /**
139
+ * True when the installed workspace carries no version stamp at all — the
140
+ * pod can't say whether it's stale. Distinct from `updateAvailable: false`
141
+ * (checked, and it IS current). Every CLI/Hub-door install is `true` today —
142
+ * see `InstalledTemplateInfo.version`'s doc in `lib/installed.ts`.
143
+ */
144
+ noVersionInfo: boolean;
145
+ }
146
+ /**
147
+ * Per-installed-slug drift check. Starts from the shared `computeTemplateUpdates`
148
+ * (handles bundled-only / private-only slugs via `bundleVersion`), then
149
+ * overrides `latestVersion`/`updateAvailable` with the CP row's OWN version for
150
+ * any slug in `remoteVersionBySlug` — the merge-winner bypass this command
151
+ * needs (see `MarketCatalog.remoteVersionBySlug`'s doc). A slug the pod never
152
+ * version-stamped is reported `noVersionInfo: true`, never silently "outdated".
153
+ */
154
+ export declare function computeUpdates(installedTemplates: InstalledTemplateInfo[], cat: MarketCatalog): UpdateCheck[];
155
+ export declare function marketUpdate(slugsArg: string[] | undefined, opts: {
156
+ yes?: boolean;
157
+ dryRun?: boolean;
158
+ json?: boolean;
159
+ podUrl?: string;
160
+ apiKey?: string;
161
+ timeout?: string;
162
+ }): Promise<void>;
163
+ export interface TreeNode {
164
+ slug: string;
165
+ name: string;
166
+ relation: "compose" | "require";
167
+ depKind?: string;
168
+ installed: boolean;
169
+ workspaceId?: string;
170
+ workspaceName?: string;
171
+ installedVersion?: string;
172
+ latestVersion?: string | null;
173
+ updateAvailable: boolean;
174
+ noVersionInfo: boolean;
175
+ /** Names of OTHER top-level packages whose tree also carries this slug. */
176
+ shared: string[];
177
+ children: TreeNode[];
178
+ }
179
+ export interface TreePackage {
180
+ slug: string;
181
+ name: string;
182
+ installedVersion: string;
183
+ latestVersion: string | null;
184
+ updateAvailable: boolean;
185
+ noVersionInfo: boolean;
186
+ workspaceCount: number;
187
+ isSuite: boolean;
188
+ children: TreeNode[];
189
+ }
190
+ /**
191
+ * The nested composition-tree view: one tree per installed TOP-LEVEL package
192
+ * (a suite, or any installed package whose `edgesOf` resolves at least one
193
+ * dependency — bundled OR remote). Everything else stays a flat leaf
194
+ * (`leafRows`, rendered like a plain `market installed` row). This is the
195
+ * SAME "top-level" rule the old walker used (kept verbatim for `--tree`'s
196
+ * JSON/text backward compatibility — see `marketInstalled`'s before/after
197
+ * diff check), just evaluated against the fixed `edgesOf` instead of the
198
+ * bundled-only map.
199
+ *
200
+ * Nested `TreeNode`s are built by walking `graph.edges` (both `require` and
201
+ * `compose` relations — the engine excludes compose SOURCES from `nodes`,
202
+ * rule 2, but never from `edges`, so the nested view still shows them exactly
203
+ * where the old walker did) and `shared` reads straight off each node's
204
+ * `roots` (the engine's true reachability set), replacing the old walker's
205
+ * bespoke reverse index.
206
+ */
207
+ export declare function buildCompositionTrees(rows: UpdateCheck[], cat: MarketCatalog, installedTemplates: InstalledTemplateInfo[], workspaceCountBySlug: Map<string, number>): Promise<{
208
+ packages: TreePackage[];
209
+ leafRows: UpdateCheck[];
210
+ }>;
211
+ export declare function printCompositionTree(pkg: TreePackage): void;
212
+ /**
213
+ * Pure-read inventory of what's installed on this pod — reuses
214
+ * `buildMarketCatalog` + `fetchInstalledTemplates` + `computeUpdates`
215
+ * (`market update`'s own drift check), never writes anything. Pairs with
216
+ * `market update` to apply what this surfaces.
217
+ */
218
+ export declare function marketInstalled(opts: {
219
+ json?: boolean;
220
+ outdated?: boolean;
221
+ tree?: boolean;
222
+ layers?: boolean;
223
+ }): Promise<void>;
224
+ export {};