@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,191 @@
1
+ /**
2
+ * `synap template` — the "one request" template surface (TEMPLATE-ONE-PATH-PLAN §3-4).
3
+ * =====================================================================================
4
+ *
5
+ * The plan names ONE governed write door for adding/updating a workspace template:
6
+ * `synap template publish <file>` → CP `POST /api/packages` (validated server-side).
7
+ * No npm publish, no lockfile-bump, no redeploy. This file is that named surface.
8
+ *
9
+ * synap template publish <file> — validate + upsert to the CP (private by default; --public to share)
10
+ * synap template publish --from-workspace <id> — serialize a LIVE workspace, then publish
11
+ * synap template list — the caller-visible catalog (own private + public), slug/name/vis/version
12
+ * synap template get <slug> — one template's metadata + definition shape
13
+ *
14
+ * REUSE, no reinvention: publish delegates to the existing `marketPublish` (same
15
+ * validator, same CP transport). list/get read through `lib/cp-packages` — the ONE
16
+ * authed CP `/api/packages` client (Bearer from `lib/auth`'s stored login token).
17
+ * No `fetch` is hand-rolled here.
18
+ *
19
+ * NOTE (for the orchestrator): this overlaps `synap market publish/validate/
20
+ * unpublish`, which already ship the same authoring loop. `synap template` is the
21
+ * plan-canonical name; picking one and retiring/aliasing the other is a §4 Wave 2
22
+ * cleanup decision, not made here.
23
+ */
24
+ import chalk from "chalk";
25
+ import { log } from "../utils/logger.js";
26
+ import { getStoredToken, isTokenLocallyExpired } from "../lib/auth.js";
27
+ import { fetchMyRows, fetchPublicBrowseRows, fetchPackageDefinition, } from "../lib/cp-packages.js";
28
+ // ─── publish ─────────────────────────────────────────────────────────────────
29
+ /**
30
+ * `synap template publish <file>` — the plan's "one request". A thin alias over
31
+ * the existing `marketPublish` so there is exactly ONE publish implementation
32
+ * (same validator, same CP write door, same `--public`/`--from-workspace`/`--json`).
33
+ */
34
+ export async function templatePublish(file, opts) {
35
+ const { marketPublish } = await import("./market-authoring.js");
36
+ await marketPublish(file, opts);
37
+ }
38
+ /** private/public/unknown → a short colored label. */
39
+ function visLabel(isPublic) {
40
+ if (isPublic === false)
41
+ return chalk.yellow("private");
42
+ if (isPublic === true)
43
+ return chalk.green("public");
44
+ return chalk.dim("public");
45
+ }
46
+ /**
47
+ * Fetch the caller-visible catalog: the caller's own rows (incl. private) when
48
+ * logged in, merged with the public browse rows. `/mine` wins a slug tie so the
49
+ * real `isPublic` flag and owned marker survive.
50
+ */
51
+ async function fetchCatalog() {
52
+ const creds = getStoredToken();
53
+ const loggedIn = !!creds && !isTokenLocallyExpired(creds);
54
+ const filters = { category: "workspace" };
55
+ // Public browse is best-effort — a private catalog that resolves is still useful.
56
+ const publicRows = await fetchPublicBrowseRows(filters).catch(() => []);
57
+ const bySlug = new Map();
58
+ for (const r of publicRows) {
59
+ bySlug.set(r.slug, {
60
+ slug: r.slug,
61
+ displayName: r.displayName,
62
+ description: r.description,
63
+ version: r.version,
64
+ isPublic: true,
65
+ owned: false,
66
+ });
67
+ }
68
+ if (loggedIn) {
69
+ const mineRows = await fetchMyRows(creds.token, filters);
70
+ for (const r of mineRows) {
71
+ bySlug.set(r.slug, {
72
+ slug: r.slug,
73
+ displayName: r.displayName,
74
+ description: r.description,
75
+ version: r.version,
76
+ isPublic: r.isPublic,
77
+ owned: true,
78
+ });
79
+ }
80
+ }
81
+ const rows = [...bySlug.values()].sort((a, b) => a.slug.localeCompare(b.slug));
82
+ return { rows, loggedIn };
83
+ }
84
+ export async function templateList(opts) {
85
+ let catalog;
86
+ try {
87
+ catalog = await fetchCatalog();
88
+ }
89
+ catch (e) {
90
+ if (opts.json) {
91
+ console.log(JSON.stringify({ ok: false, error: e.message }, null, 2));
92
+ }
93
+ else {
94
+ log.error(`Could not list templates: ${e.message}`);
95
+ log.hint("Log in for your private templates: synap login");
96
+ }
97
+ process.exit(1);
98
+ }
99
+ if (opts.json) {
100
+ console.log(JSON.stringify({ ok: true, loggedIn: catalog.loggedIn, templates: catalog.rows }, null, 2));
101
+ return;
102
+ }
103
+ if (catalog.rows.length === 0) {
104
+ log.info("No templates visible.");
105
+ if (!catalog.loggedIn)
106
+ log.hint("Your private templates are hidden until you log in: synap login");
107
+ return;
108
+ }
109
+ log.heading(`Templates (${catalog.rows.length})`);
110
+ if (!catalog.loggedIn)
111
+ log.dim("Logged out — showing public templates only. `synap login` to see your private ones.");
112
+ log.blank();
113
+ for (const r of catalog.rows) {
114
+ const ver = r.version ? chalk.dim(` ${r.version}`) : "";
115
+ const owned = r.owned ? chalk.dim(" (yours)") : "";
116
+ console.log(` ${chalk.bold(r.slug)}${ver} ${visLabel(r.isPublic)}${owned}`);
117
+ console.log(` ${chalk.cyan(r.displayName)}${r.description ? chalk.dim(` ${r.description}`) : ""}`);
118
+ }
119
+ log.blank();
120
+ log.dim("Publish a template: synap template publish <file>");
121
+ log.dim("Inspect one: synap template get <slug>");
122
+ }
123
+ // ─── get ─────────────────────────────────────────────────────────────────────
124
+ export async function templateGet(slug, opts) {
125
+ const creds = getStoredToken();
126
+ const token = creds && !isTokenLocallyExpired(creds) ? creds.token : undefined;
127
+ // Metadata: prefer the caller's own row (carries isPublic + version), else the
128
+ // public browse row for this slug.
129
+ let meta;
130
+ try {
131
+ if (token) {
132
+ const mine = await fetchMyRows(token, { category: "workspace", search: slug });
133
+ const own = mine.find((r) => r.slug === slug);
134
+ if (own) {
135
+ meta = { slug: own.slug, displayName: own.displayName, description: own.description, version: own.version, isPublic: own.isPublic, owned: true };
136
+ }
137
+ }
138
+ if (!meta) {
139
+ const pub = await fetchPublicBrowseRows({ category: "workspace", search: slug });
140
+ const row = pub.find((r) => r.slug === slug);
141
+ if (row) {
142
+ meta = { slug: row.slug, displayName: row.displayName, description: row.description, version: row.version, isPublic: true, owned: false };
143
+ }
144
+ }
145
+ }
146
+ catch (e) {
147
+ if (opts.json) {
148
+ console.log(JSON.stringify({ ok: false, slug, error: e.message }, null, 2));
149
+ }
150
+ else {
151
+ log.error(`Could not fetch "${slug}": ${e.message}`);
152
+ }
153
+ process.exit(1);
154
+ }
155
+ // Full definition (the install payload) — authed so a private template resolves.
156
+ const definition = await fetchPackageDefinition(slug, token).catch(() => null);
157
+ if (!meta && !definition) {
158
+ if (opts.json) {
159
+ console.log(JSON.stringify({ ok: false, slug, error: "not found" }, null, 2));
160
+ }
161
+ else {
162
+ log.error(`Template "${slug}" not found or not visible.`);
163
+ if (!token)
164
+ log.hint("If it is private, log in first: synap login");
165
+ }
166
+ process.exit(1);
167
+ }
168
+ if (opts.json) {
169
+ console.log(JSON.stringify({ ok: true, slug, ...meta, definition }, null, 2));
170
+ return;
171
+ }
172
+ const displayName = meta?.displayName ?? slug;
173
+ log.heading(`${displayName} ${chalk.dim(`(${slug})`)}`);
174
+ log.blank();
175
+ if (meta?.description) {
176
+ console.log(` ${meta.description}`);
177
+ log.blank();
178
+ }
179
+ if (meta?.version)
180
+ console.log(` ${chalk.dim("version:")} ${meta.version}`);
181
+ console.log(` ${chalk.dim("visibility:")} ${visLabel(meta?.isPublic)}${meta?.owned ? chalk.dim(" (yours)") : ""}`);
182
+ const def = definition;
183
+ if (def) {
184
+ const count = (v) => (Array.isArray(v) ? v.length : 0);
185
+ console.log(` ${chalk.dim("profiles:")} ${count(def.profiles)}`);
186
+ console.log(` ${chalk.dim("views:")} ${count(def.views)}`);
187
+ }
188
+ log.blank();
189
+ log.dim(`Install it: synap market install ${slug}`);
190
+ }
191
+ //# sourceMappingURL=template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/commands/template.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * synap tools — Add and manage external service tools (credentials + connections)
3
+ *
4
+ * Subcommands: list, connect, disconnect, sync, schema
5
+ */
6
+ export interface ConnectOpts {
7
+ workspace?: string;
8
+ podUrl?: string;
9
+ apiKey?: string;
10
+ }
11
+ export declare function toolsConnect(service: string | undefined, opts: ConnectOpts): Promise<void>;
12
+ export interface ListOpts {
13
+ json?: boolean;
14
+ workspace?: string;
15
+ }
16
+ export declare function toolsList(opts: ListOpts): Promise<void>;
17
+ export interface SyncOpts {
18
+ workspace?: string;
19
+ }
20
+ export declare function toolsSync(provider: string, opts: SyncOpts): Promise<void>;
21
+ export interface DisconnectOpts {
22
+ workspace?: string;
23
+ force?: boolean;
24
+ }
25
+ export declare function toolsDisconnect(provider: string, opts: DisconnectOpts): Promise<void>;
26
+ export interface SchemaOpts {
27
+ writeContext?: string | boolean;
28
+ json?: boolean;
29
+ }
30
+ export declare function toolsSchema(opts: SchemaOpts): Promise<void>;
@@ -0,0 +1,315 @@
1
+ /**
2
+ * synap tools — Add and manage external service tools (credentials + connections)
3
+ *
4
+ * Subcommands: list, connect, disconnect, sync, schema
5
+ */
6
+ import chalk from "chalk";
7
+ import ora from "ora";
8
+ import { exec } from "child_process";
9
+ import { mkdirSync, writeFileSync, existsSync } from "fs";
10
+ import { resolveHubConfig, hubGet, hubPost, renderHubError } from "../lib/hub-client.js";
11
+ import { capabilityList, capabilityConnect, capabilityDisconnect } from "./capability.js";
12
+ import { log } from "../utils/logger.js";
13
+ /**
14
+ * The one deprecation line every `tools` subcommand prints. `synap capability`
15
+ * (alias `cap`) is the single capability root; `tools` survives only as an alias
16
+ * so existing scripts keep working.
17
+ */
18
+ const TOOLS_DEPRECATED = "`synap tools` is deprecated — use `synap cap`";
19
+ // ── Helpers ───────────────────────────────────────────────────────────────────
20
+ /** Render the verbs a connection installed, e.g. after OAuth completes. */
21
+ function printUnlocked(unlocked) {
22
+ const skills = (unlocked ?? []).flatMap((u) => u.skills);
23
+ if (skills.length === 0)
24
+ return;
25
+ console.log();
26
+ log.heading("Capabilities installed");
27
+ for (const s of skills) {
28
+ const label = s.name.replace(/_/g, " ");
29
+ console.log(` ${chalk.green("✓")} ${chalk.bold(label)}${s.description ? chalk.dim(` — ${s.description}`) : ""}`);
30
+ }
31
+ console.log();
32
+ // Code skills are seeded as DRAFT (a deliberate gate — code runs unreviewed
33
+ // only after an explicit enable). Be honest about the one-time step.
34
+ log.dim("Enable these in Synap → Settings → Capabilities to let your agent use them.");
35
+ log.dim("Once enabled, each action still asks for your approval before it runs.");
36
+ }
37
+ const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
38
+ /**
39
+ * Poll the connect door until the provider flips to `connected` (the user
40
+ * finished OAuth in the browser). The door is self-completing: on `connected`
41
+ * it materializes the tool + family template server-side and returns `unlocked`.
42
+ * Bounded so the CLI never hangs forever.
43
+ */
44
+ async function pollUntilConnected(cfg, provider, workspaceId, timeoutMs = 180_000, intervalMs = 3_000) {
45
+ const deadline = Date.now() + timeoutMs;
46
+ while (Date.now() < deadline) {
47
+ await sleep(intervalMs);
48
+ try {
49
+ const body = { provider };
50
+ if (workspaceId)
51
+ body.workspaceId = workspaceId;
52
+ const res = (await hubPost("/connectors/connect", body, cfg));
53
+ if (String(res.status) === "connected")
54
+ return res;
55
+ }
56
+ catch {
57
+ // transient — keep polling until the deadline
58
+ }
59
+ }
60
+ return null;
61
+ }
62
+ function openBrowser(url) {
63
+ const platform = process.platform;
64
+ let cmd;
65
+ if (platform === "darwin") {
66
+ cmd = `open "${url}"`;
67
+ }
68
+ else if (platform === "win32") {
69
+ cmd = `start "" "${url}"`;
70
+ }
71
+ else {
72
+ cmd = `xdg-open "${url}"`;
73
+ }
74
+ try {
75
+ exec(cmd);
76
+ }
77
+ catch {
78
+ // silently ignore — caller already prints the URL
79
+ }
80
+ }
81
+ async function fetchProviders(cfg, workspaceId) {
82
+ const params = {};
83
+ if (workspaceId)
84
+ params.workspaceId = workspaceId;
85
+ const res = await hubGet("/connectors/providers", params, cfg);
86
+ const r = res;
87
+ return (r.providers ?? []);
88
+ }
89
+ export async function toolsConnect(service, opts) {
90
+ log.dim(TOOLS_DEPRECATED);
91
+ // Capabilities are the one root now — forward the named-service connect to
92
+ // `cap connect` (the capability-first equivalent).
93
+ if (service) {
94
+ await capabilityConnect(service, { workspace: opts.workspace });
95
+ return;
96
+ }
97
+ let cfg;
98
+ try {
99
+ cfg = await resolveHubConfig({ podUrl: opts.podUrl, apiKey: opts.apiKey });
100
+ }
101
+ catch (err) {
102
+ log.error(err.message);
103
+ process.exit(1);
104
+ }
105
+ const workspaceId = opts.workspace ?? cfg.workspaceId;
106
+ const spinner = ora({ text: "Resolving connection…", color: "cyan" }).start();
107
+ // The unified door: resolves the provider, checks for an existing connection,
108
+ // and returns connected / setup_required / provider_required in one call.
109
+ // Connects as the operator (the CLI's key owner) — no per-user binding here.
110
+ let res;
111
+ try {
112
+ const body = {};
113
+ if (service)
114
+ body.provider = service;
115
+ if (workspaceId)
116
+ body.workspaceId = workspaceId;
117
+ res = (await hubPost("/connectors/connect", body, cfg));
118
+ spinner.stop();
119
+ }
120
+ catch (err) {
121
+ spinner.fail(chalk.red("Failed to resolve connection"));
122
+ log.error(err.message);
123
+ process.exit(1);
124
+ }
125
+ const status = String(res.status);
126
+ if (status === "connected") {
127
+ log.heading(`${res.displayName ?? res.provider} is already connected`);
128
+ printUnlocked(res.unlocked);
129
+ log.dim(`Run \`synap tools list\` to see all tools and their credentials.`);
130
+ return;
131
+ }
132
+ if (status === "provider_required") {
133
+ // The door only returns `provider_required` when Nango ANSWERED and declares
134
+ // at least one integration — "nothing declared" is `provider_unavailable`
135
+ // now, so this list is never empty. (The old fallback here opened a Connect
136
+ // session "for all services" against a Nango that declared none: it could
137
+ // only ever dead-end.)
138
+ const providers = (res.providers ?? []);
139
+ log.heading("Which service do you want to connect?");
140
+ console.log();
141
+ for (const p of providers) {
142
+ console.log(` ${chalk.cyan(p.provider)}${p.displayName ? chalk.dim(` (${p.displayName})`) : ""}`);
143
+ }
144
+ console.log();
145
+ log.dim(`Run \`synap cap connect <name>\` with one of the above.`);
146
+ return;
147
+ }
148
+ if (status === "provider_unavailable") {
149
+ // The pod can't offer this provider (not declared / unreachable / malformed).
150
+ // The server message already names the real cause + remedy — print it as-is.
151
+ // No browser, and no "re-run connect": re-running cannot fix a server-side gap.
152
+ log.warn(`${res.displayName ?? res.provider ?? service ?? "That service"} is unavailable on this pod.`);
153
+ if (res.message)
154
+ log.dim(String(res.message));
155
+ return;
156
+ }
157
+ // setup_required (or any status this CLI doesn't know) → only ever open a
158
+ // browser when the server actually handed us a URL. An older/newer pod that
159
+ // returns a status we don't handle must NOT send the user to "undefined".
160
+ const redirectUrl = typeof res.redirectUrl === "string" && res.redirectUrl.length > 0 ? res.redirectUrl : null;
161
+ if (!redirectUrl) {
162
+ log.warn(`Couldn't start a connection for ${res.displayName ?? res.provider ?? service ?? "that service"}.`);
163
+ if (res.message)
164
+ log.dim(String(res.message));
165
+ else
166
+ log.dim(`The pod returned status "${status}" with no connect URL. Check the pod's connector configuration.`);
167
+ return;
168
+ }
169
+ const matchedProvider = res.provider ? String(res.provider) : service;
170
+ log.heading(`Connect to ${res.displayName ?? res.provider ?? service ?? "external service"}`);
171
+ console.log();
172
+ console.log(` Opening OAuth flow in your browser…`);
173
+ console.log(` ${chalk.dim("If it didn't open, paste this URL in your browser:")}`);
174
+ console.log();
175
+ console.log(` ${chalk.underline(chalk.cyan(redirectUrl))}`);
176
+ console.log();
177
+ openBrowser(redirectUrl);
178
+ // Wait for the user to finish OAuth, then confirm + show what unlocked. The
179
+ // connect door materializes the capability server-side on `connected`, so by
180
+ // the time this resolves the agent can already use the new verbs.
181
+ if (matchedProvider) {
182
+ const waitSpinner = ora({ text: "Waiting for you to finish in the browser…", color: "cyan" }).start();
183
+ const connected = await pollUntilConnected(cfg, matchedProvider, workspaceId);
184
+ if (connected) {
185
+ waitSpinner.succeed(chalk.green(`Connected ${chalk.bold(String(connected.displayName ?? matchedProvider))}!`));
186
+ printUnlocked(connected.unlocked);
187
+ return;
188
+ }
189
+ waitSpinner.stop();
190
+ log.dim(`Didn't detect a connection yet — finish the browser flow, then run \`synap tools list\` to check status.`);
191
+ return;
192
+ }
193
+ log.dim(`Once connected, records will import automatically. Run \`synap tools list\` to check status.`);
194
+ }
195
+ export async function toolsList(opts) {
196
+ // `cap list` is the one capability-first view.
197
+ log.dim(TOOLS_DEPRECATED);
198
+ await capabilityList({ json: opts.json, workspace: opts.workspace });
199
+ }
200
+ export async function toolsSync(provider, opts) {
201
+ log.dim(TOOLS_DEPRECATED);
202
+ let cfg;
203
+ try {
204
+ cfg = await resolveHubConfig();
205
+ }
206
+ catch (err) {
207
+ log.error(err.message);
208
+ process.exit(1);
209
+ }
210
+ const workspaceId = opts.workspace ?? cfg.workspaceId;
211
+ try {
212
+ const providers = await fetchProviders(cfg, workspaceId);
213
+ const match = providers.find((p) => p.provider === provider || p.id === provider || p.displayName.toLowerCase() === provider.toLowerCase());
214
+ if (!match || !match.connected) {
215
+ log.error(`Provider ${chalk.bold(provider)} is not connected. Run: ${chalk.cyan(`synap cap connect ${provider}`)}`);
216
+ process.exit(1);
217
+ }
218
+ }
219
+ catch (err) {
220
+ renderHubError(err);
221
+ process.exit(1);
222
+ }
223
+ // The old background-import "sync" (POST /connectors/actions, a Nango named
224
+ // action) was retired — self-hosted Nango doesn't run Actions, and the model
225
+ // moved to ON-DEMAND access: a connected service is reached live via its
226
+ // capability skills (e.g. gmail_search), not pre-imported on a schedule. There
227
+ // is nothing to trigger, so this command does nothing and must not claim
228
+ // otherwise.
229
+ log.warn(`\`synap tools sync\` does nothing and will be removed.`);
230
+ log.dim(`${provider} is connected. Connected services are queried on demand by your ` +
231
+ "agent's capabilities (e.g. search, list, send), not imported on a schedule — " +
232
+ "so there is no sync to trigger.");
233
+ log.dim(`See connection status: synap cap list`);
234
+ }
235
+ export async function toolsDisconnect(provider, opts) {
236
+ log.dim(TOOLS_DEPRECATED);
237
+ // `cap disconnect` resolves a capability name OR a raw provider id, so the
238
+ // provider ids this command has always taken keep resolving.
239
+ await capabilityDisconnect(provider, { workspace: opts.workspace, force: opts.force });
240
+ }
241
+ export async function toolsSchema(opts) {
242
+ let cfg;
243
+ try {
244
+ cfg = await resolveHubConfig();
245
+ }
246
+ catch (err) {
247
+ log.error(err.message);
248
+ process.exit(1);
249
+ }
250
+ const spinner = opts.json ? null : ora({ text: "Fetching tool schema…", color: "cyan" }).start();
251
+ // The dedicated /connectors/schema route was retired; the provider catalog +
252
+ // connection status now comes from /connectors/providers (the same source the
253
+ // list command uses). Shape it into the { providers } envelope the markdown
254
+ // builder expects.
255
+ let schema;
256
+ try {
257
+ const providers = await fetchProviders(cfg);
258
+ schema = { providers };
259
+ spinner?.stop();
260
+ }
261
+ catch (err) {
262
+ spinner?.fail(chalk.red("Failed to fetch tool schema"));
263
+ log.error(err.message);
264
+ process.exit(1);
265
+ }
266
+ if (opts.json) {
267
+ console.log(JSON.stringify(schema, null, 2));
268
+ return;
269
+ }
270
+ const s = schema;
271
+ const md = buildToolSchemaMarkdown(s, cfg.podUrl);
272
+ if (opts.writeContext !== undefined && opts.writeContext !== false) {
273
+ const outputPath = typeof opts.writeContext === "string" && opts.writeContext.length > 0
274
+ ? opts.writeContext
275
+ : ".claude/TOOLS_CONTEXT.md";
276
+ const dir = outputPath.includes("/") ? outputPath.split("/").slice(0, -1).join("/") : ".";
277
+ if (dir && dir !== "." && !existsSync(dir)) {
278
+ mkdirSync(dir, { recursive: true });
279
+ }
280
+ writeFileSync(outputPath, md, "utf-8");
281
+ log.success(`Context written to ${chalk.underline(outputPath)} — Claude Code will auto-load this in all sessions from this directory`);
282
+ }
283
+ else {
284
+ console.log(md);
285
+ }
286
+ }
287
+ function buildToolSchemaMarkdown(schema, podUrl) {
288
+ const lines = [
289
+ `# Synap Tool Reference`,
290
+ ``,
291
+ `> Fetched from pod: ${podUrl} — use this context to connect, manage, and query external service integrations.`,
292
+ ``,
293
+ `## Supported Providers`,
294
+ ];
295
+ const providers = (schema.providers ?? schema.supported ?? []);
296
+ if (providers.length > 0) {
297
+ for (const p of providers) {
298
+ lines.push(``, `### ${p.displayName ?? p.provider ?? p.id}`);
299
+ if (p.description)
300
+ lines.push(``, String(p.description));
301
+ if (p.actions) {
302
+ lines.push(``, `**Available actions:**`);
303
+ for (const action of p.actions) {
304
+ lines.push(`- \`${action}\``);
305
+ }
306
+ }
307
+ }
308
+ }
309
+ else {
310
+ lines.push(``, `Providers are configured in Nango. Common integrations include:`, `- Google Workspace (gmail, google-calendar, google-drive)`, `- GitHub (github)`, `- Notion (notion)`, `- Linear (linear)`, `- Slack (slack)`, `- HubSpot (hubspot)`);
311
+ }
312
+ lines.push(``, `## CLI Commands`, ``, `\`\`\`bash`, `# Connect a service (opens OAuth flow in browser)`, `synap cap connect [name]`, `synap cap connect "Nango — Google Workspace"`, ``, `# List all capabilities and connection status`, `synap tools list`, `synap tools list --json`, `synap cap list`, ``, `# Show one capability's detail (status, connection, verbs, next action)`, `synap cap show <name>`, ``, `# Turn on a capability (ensures its connection, then picks verbs)`, `synap cap enable [name]`, ``, `# Run a verb`, `synap cap run <verb>`, ``, `# Disconnect a provider`, `synap tools disconnect <provider>`, `synap tools disconnect google --force`, ``, `# Fetch this schema`, `synap tools schema`, `synap tools schema --write-context # writes to .claude/TOOLS_CONTEXT.md`, `\`\`\``, ``, `## Hub REST Endpoints`, ``, `| Method | Path | Description |`, `|--------|------|-------------|`, `| POST | /api/hub/connectors/connect | Resolve-or-start a connection (unified door) |`, `| GET | /api/hub/connectors/providers | List providers and connection status |`, `| POST | /api/hub/connectors/session | Start OAuth session, get redirectUrl |`, `| POST | /api/hub/connectors/disconnect | Disconnect a provider |`, `| POST | /api/hub/connectors/tool-execute | Run a provider call (proxied, governed) |`, ``, `## AI Usage Flow`, ``, `1. Check connected services: \`synap cap list\``, `2. Connect a new service: \`synap cap connect <name>\` — opens OAuth in browser`, `3. Connecting installs the service's capability skills (e.g. gmail_send, gmail_search)`, `4. The agent reaches the service ON DEMAND through those skills (no scheduled import)`, `5. Ask naturally: \`synap ask "any emails from Acme this week?"\``);
313
+ return lines.join("\n");
314
+ }
315
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/commands/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * synap upload
3
+ *
4
+ * Store a real file (arbitrary bytes) on the pod. Closes the "an AI/CLI cannot
5
+ * store a real file" gap: the CLI reads the file from disk and POSTs it as
6
+ * multipart/form-data to the standalone file door, which mints a `file`
7
+ * entity for the bytes.
8
+ *
9
+ * Usage:
10
+ * synap upload ./report.pdf
11
+ * synap upload ./logo.png --title "Brand logo" --workspace <id>
12
+ * synap upload ./spec.pdf --attach <entityId> # also link doc → entity
13
+ *
14
+ * API:
15
+ * POST /api/hub/files (multipart) — field `file` (≤10MB) + REQUIRED
16
+ * workspaceId (membership-gated) +
17
+ * optional title → { fileEntityId, documentId }
18
+ * POST /api/hub/relations — with --attach: `references` relation
19
+ * from the target entity to the new doc.
20
+ */
21
+ export interface UploadOpts {
22
+ workspace?: string;
23
+ attach?: string;
24
+ title?: string;
25
+ open?: boolean;
26
+ json?: boolean;
27
+ podUrl?: string;
28
+ apiKey?: string;
29
+ }
30
+ export declare function uploadFile(path: string, opts: UploadOpts): Promise<void>;