@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,138 @@
1
+ /**
2
+ * The ONE door for bringing an agent into a pod.
3
+ *
4
+ * `synap agents add`, `synap connect`, `synap init` and the deprecated
5
+ * `synap agents create` all land here, so there is one answer to every
6
+ * question they used to answer differently:
7
+ *
8
+ * - Scope: POD-WIDE by default. `--workspace` / `--project` narrow it, and
9
+ * they compose. (`agents create` used to force a workspace — that broke the
10
+ * 2026-08-04 decision that a workspace is a lens, not a container.)
11
+ * - Approval: every new agent key goes through the pod's approval page.
12
+ * (`agents create` used to mint with `requireApproval: false`.)
13
+ * - Proof: every path ends with a check against the pod's `/mcp` using the
14
+ * AGENT key — the key the client will actually hold — and a known client
15
+ * reads "connected" only after the pod confirms the key now in its config
16
+ * (`confirmSurfaceKey`, the reader `synap doctor` uses).
17
+ *
18
+ * Three ways in, picked by `planAgentAdd`:
19
+ * known — a client we can wire (claude-code, cursor, codex, …): mint, write
20
+ * its config, verify. Same installer as before (`installForTarget`).
21
+ * custom — anything else: mint, verify, then ONE card with the URL + key
22
+ * (snippets on demand: `synap agents info <name> --snippets`).
23
+ * detect — nothing named: find the agents on this machine, pick, plus a
24
+ * "something else" row that falls through to custom.
25
+ * And one way to bring a key you already hold (`--api-key`), which only
26
+ * registers it locally — handled by the caller, never here.
27
+ */
28
+ import { type TargetName } from "./targets.js";
29
+ export type AgentTemplate = "twin" | "assistant" | "custom";
30
+ export type AgentRole = "admin" | "editor" | "viewer";
31
+ export declare const AGENT_TEMPLATES: readonly AgentTemplate[];
32
+ export declare const AGENT_ROLES: readonly AgentRole[];
33
+ /** Where the agent looks. Both unset = pod-wide. */
34
+ export interface AgentScope {
35
+ workspaceId?: string;
36
+ projectId?: string;
37
+ }
38
+ export type AgentAddPlan = {
39
+ mode: "existing-key";
40
+ } | {
41
+ mode: "known";
42
+ target: TargetName;
43
+ } | {
44
+ mode: "custom";
45
+ name?: string;
46
+ } | {
47
+ mode: "detect";
48
+ };
49
+ /**
50
+ * Decide which way in from what the user typed. `kind` is the positional
51
+ * (`synap agents add <kind>`).
52
+ *
53
+ * --api-key → existing-key (wins: the user already holds a key)
54
+ * <kind> = a client → known
55
+ * <kind> = "custom" → custom, name from --name (or prompted)
56
+ * <kind> = other word → custom, named after it
57
+ * --name / --template → custom
58
+ * nothing → detect
59
+ */
60
+ export declare function planAgentAdd(kind: string | undefined, opts: {
61
+ apiKey?: string;
62
+ name?: string;
63
+ template?: string;
64
+ }): AgentAddPlan;
65
+ /**
66
+ * The agent type a custom agent is minted under. The pod keeps ONE agent per
67
+ * (human, agentType), so two differently-named agents need two types: the
68
+ * slug of the name, unless `--type` was given. A twin is always `twin`.
69
+ */
70
+ export declare function customAgentType(name: string, template: AgentTemplate, explicitType?: string): {
71
+ agentType: string;
72
+ localName: string;
73
+ };
74
+ export interface AgentPod {
75
+ podUrl: string;
76
+ /** The HUMAN key that mints agent keys. Never written into a client config. */
77
+ apiKey: string;
78
+ podName?: string;
79
+ }
80
+ /**
81
+ * Which pod the agent joins. In order: explicit --pod-url + --api-key, the
82
+ * global `--pod <name>` override, `profileName` (connect's `--name`), the only
83
+ * profile, a pick. With no profile at all, offers to add one inline.
84
+ */
85
+ export declare function resolveAgentPod(opts: {
86
+ podUrl?: string;
87
+ apiKey?: string;
88
+ profileName?: string;
89
+ }): Promise<AgentPod | null>;
90
+ /** Mint → write the client's config → verify. Returns whether it connected. */
91
+ export declare function connectKnownAgent(target: TargetName, pod: AgentPod, scope: AgentScope, opts?: {
92
+ withMcp?: boolean;
93
+ }): Promise<boolean>;
94
+ export interface CustomAgentRequest {
95
+ name?: string;
96
+ template?: string;
97
+ /** Explicit agent type (rare). Default: a slug of the name. */
98
+ type?: string;
99
+ role?: string;
100
+ label?: string;
101
+ }
102
+ /** Mint → verify → remember locally → print the URL + key card last. */
103
+ export declare function createCustomAgent(pod: AgentPod, req: CustomAgentRequest, scope: AgentScope): Promise<boolean>;
104
+ /**
105
+ * What a custom agent needs to be used: the URL, the key, where it looks, and
106
+ * whether it works — nothing else. `synap agents info <name> --show-key`
107
+ * prints the same card from the local cache, so the key is never lost to
108
+ * scrollback.
109
+ */
110
+ export declare function printAgentCard(c: {
111
+ name: string;
112
+ localName: string;
113
+ url: string;
114
+ hubApiKey: string;
115
+ scope: AgentScope;
116
+ verified?: {
117
+ toolCount: number;
118
+ } | {
119
+ error: string;
120
+ };
121
+ }): void;
122
+ /**
123
+ * Bare `synap agents add`: the agents found on this machine, preselected, plus
124
+ * a "something else" row. Known picks connect together (one approval page);
125
+ * "something else" then runs the custom path.
126
+ */
127
+ export declare function addDetectedAgents(pod: AgentPod, scope: AgentScope): Promise<boolean>;
128
+ /**
129
+ * Several known clients at once: every key approved on ONE page first, then
130
+ * each installed, one line per client. `synap init` connects through here too.
131
+ */
132
+ export declare function connectAgentsBatch<T extends TargetName>(pod: AgentPod, targets: readonly T[], scope: AgentScope, opts?: {
133
+ labelOf?: (target: T) => string;
134
+ }): Promise<{
135
+ connected: T[];
136
+ notApproved: T[];
137
+ failed: T[];
138
+ }>;
@@ -0,0 +1,426 @@
1
+ /**
2
+ * The ONE door for bringing an agent into a pod.
3
+ *
4
+ * `synap agents add`, `synap connect`, `synap init` and the deprecated
5
+ * `synap agents create` all land here, so there is one answer to every
6
+ * question they used to answer differently:
7
+ *
8
+ * - Scope: POD-WIDE by default. `--workspace` / `--project` narrow it, and
9
+ * they compose. (`agents create` used to force a workspace — that broke the
10
+ * 2026-08-04 decision that a workspace is a lens, not a container.)
11
+ * - Approval: every new agent key goes through the pod's approval page.
12
+ * (`agents create` used to mint with `requireApproval: false`.)
13
+ * - Proof: every path ends with a check against the pod's `/mcp` using the
14
+ * AGENT key — the key the client will actually hold — and a known client
15
+ * reads "connected" only after the pod confirms the key now in its config
16
+ * (`confirmSurfaceKey`, the reader `synap doctor` uses).
17
+ *
18
+ * Three ways in, picked by `planAgentAdd`:
19
+ * known — a client we can wire (claude-code, cursor, codex, …): mint, write
20
+ * its config, verify. Same installer as before (`installForTarget`).
21
+ * custom — anything else: mint, verify, then ONE card with the URL + key
22
+ * (snippets on demand: `synap agents info <name> --snippets`).
23
+ * detect — nothing named: find the agents on this machine, pick, plus a
24
+ * "something else" row that falls through to custom.
25
+ * And one way to bring a key you already hold (`--api-key`), which only
26
+ * registers it locally — handled by the caller, never here.
27
+ */
28
+ import chalk from "chalk";
29
+ import ora from "ora";
30
+ import prompts from "prompts";
31
+ import { log } from "../utils/logger.js";
32
+ import { checkPodHealth, getPodOverride, listPodProfiles, podNotFoundMessage, RESERVED_AGENT_TYPES, } from "./pod.js";
33
+ import { buildMcpUrl, enrollAgentIfNeeded, installForTarget, isTargetName, provisionAgentKey, TARGETS, verifyMcpConnection, } from "./targets.js";
34
+ import { addAgent } from "./agents-config.js";
35
+ export const AGENT_TEMPLATES = ["twin", "assistant", "custom"];
36
+ export const AGENT_ROLES = ["admin", "editor", "viewer"];
37
+ /**
38
+ * Decide which way in from what the user typed. `kind` is the positional
39
+ * (`synap agents add <kind>`).
40
+ *
41
+ * --api-key → existing-key (wins: the user already holds a key)
42
+ * <kind> = a client → known
43
+ * <kind> = "custom" → custom, name from --name (or prompted)
44
+ * <kind> = other word → custom, named after it
45
+ * --name / --template → custom
46
+ * nothing → detect
47
+ */
48
+ export function planAgentAdd(kind, opts) {
49
+ if (opts.apiKey)
50
+ return { mode: "existing-key" };
51
+ const k = kind?.trim();
52
+ if (k && isTargetName(k))
53
+ return { mode: "known", target: k };
54
+ if (k && k !== "custom")
55
+ return { mode: "custom", name: opts.name ?? k };
56
+ if (k === "custom" || opts.name || (opts.template && opts.template !== "custom")) {
57
+ return { mode: "custom", name: opts.name };
58
+ }
59
+ return { mode: "detect" };
60
+ }
61
+ /**
62
+ * The agent type a custom agent is minted under. The pod keeps ONE agent per
63
+ * (human, agentType), so two differently-named agents need two types: the
64
+ * slug of the name, unless `--type` was given. A twin is always `twin`.
65
+ */
66
+ export function customAgentType(name, template, explicitType) {
67
+ const localName = name.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "") || template;
68
+ const agentType = explicitType ?? (template === "twin" ? "twin" : localName);
69
+ return { agentType, localName };
70
+ }
71
+ /**
72
+ * Which pod the agent joins. In order: explicit --pod-url + --api-key, the
73
+ * global `--pod <name>` override, `profileName` (connect's `--name`), the only
74
+ * profile, a pick. With no profile at all, offers to add one inline.
75
+ */
76
+ export async function resolveAgentPod(opts) {
77
+ if (opts.podUrl && opts.apiKey)
78
+ return { podUrl: opts.podUrl, apiKey: opts.apiKey };
79
+ const override = getPodOverride();
80
+ if (override && !opts.profileName) {
81
+ const name = listPodProfiles().find((p) => p.config.podUrl === override.podUrl)?.name;
82
+ log.info(`Pod: ${chalk.bold(name ?? override.podUrl)} ${chalk.dim(override.podUrl)}`);
83
+ return { podUrl: override.podUrl, apiKey: override.hubApiKey, podName: name };
84
+ }
85
+ const picked = await pickPodProfile(opts.profileName);
86
+ return picked ? { podUrl: picked.config.podUrl, apiKey: picked.config.hubApiKey, podName: picked.name } : null;
87
+ }
88
+ async function pickPodProfile(preferredName) {
89
+ const { podsAdd } = await import("../commands/pods.js");
90
+ let profiles = listPodProfiles();
91
+ // No pods yet — offer to add one inline instead of dead-ending.
92
+ if (profiles.length === 0) {
93
+ log.blank();
94
+ log.info("No pods configured yet.");
95
+ if (!process.stdin.isTTY) {
96
+ log.dim("Add one first: synap pods add <name> <url>");
97
+ return null;
98
+ }
99
+ const { shouldAdd } = await prompts({
100
+ type: "confirm",
101
+ name: "shouldAdd",
102
+ message: "Add a pod now?",
103
+ initial: true,
104
+ });
105
+ if (!shouldAdd)
106
+ return null;
107
+ log.blank();
108
+ await podsAdd();
109
+ profiles = listPodProfiles();
110
+ if (profiles.length === 0)
111
+ return null; // user bailed out of add flow
112
+ }
113
+ if (preferredName) {
114
+ const match = profiles.find((p) => p.name === preferredName);
115
+ if (!match) {
116
+ log.error(podNotFoundMessage(preferredName));
117
+ return null;
118
+ }
119
+ log.info(`Pod: ${chalk.bold(match.name)} ${chalk.dim(match.config.podUrl)}`);
120
+ return match;
121
+ }
122
+ const active = profiles.find((p) => p.active);
123
+ if (profiles.length === 1 || !process.stdin.isTTY) {
124
+ const p = active ?? profiles[0];
125
+ log.info(`Pod: ${chalk.bold(p.name)} ${chalk.dim(p.config.podUrl)}`);
126
+ return p;
127
+ }
128
+ const { profileName } = await prompts({
129
+ type: "select",
130
+ name: "profileName",
131
+ message: "Which pod?",
132
+ choices: [
133
+ ...profiles.map((p) => ({
134
+ title: `${chalk.bold(p.name)}${p.active ? chalk.green(" ← active") : ""} ${chalk.dim(p.config.podUrl)}`,
135
+ value: p.name,
136
+ })),
137
+ { title: chalk.dim("Add a new pod…"), value: "__add__" },
138
+ ],
139
+ initial: active ? profiles.indexOf(active) : 0,
140
+ });
141
+ if (!profileName)
142
+ return null;
143
+ if (profileName === "__add__") {
144
+ log.blank();
145
+ await podsAdd();
146
+ const newest = listPodProfiles().filter((p) => !profiles.some((o) => o.name === p.name));
147
+ if (newest.length === 0)
148
+ return null;
149
+ log.info(`Pod: ${chalk.bold(newest[0].name)} ${chalk.dim(newest[0].config.podUrl)}`);
150
+ return newest[0];
151
+ }
152
+ return profiles.find((p) => p.name === profileName) ?? null;
153
+ }
154
+ async function podIsHealthy(podUrl) {
155
+ const spinner = ora("Checking pod health...").start();
156
+ const health = await checkPodHealth(podUrl);
157
+ if (!health.healthy) {
158
+ spinner.fail(`Pod not reachable at ${podUrl}`);
159
+ return false;
160
+ }
161
+ spinner.succeed(`Pod healthy at ${podUrl}`);
162
+ return true;
163
+ }
164
+ function describeScope(scope) {
165
+ const parts = [];
166
+ if (scope.workspaceId)
167
+ parts.push(`workspace ${scope.workspaceId}`);
168
+ if (scope.projectId)
169
+ parts.push(`project ${scope.projectId}`);
170
+ return parts.length ? parts.join(" · ") : "pod-wide";
171
+ }
172
+ // ─── Known client ─────────────────────────────────────────────────────────────
173
+ /** Mint → write the client's config → verify. Returns whether it connected. */
174
+ export async function connectKnownAgent(target, pod, scope, opts = {}) {
175
+ if (!(await podIsHealthy(pod.podUrl)))
176
+ return false;
177
+ if (opts.withMcp && target !== "raycast") {
178
+ log.warn("--with-mcp is Raycast-only; ignored for this target.");
179
+ }
180
+ log.heading(`Connecting ${TARGETS[target].label} → ${pod.podUrl} ${chalk.dim(`(${describeScope(scope)})`)}`);
181
+ const ok = await installForTarget(target, {
182
+ podUrl: pod.podUrl,
183
+ apiKey: pod.apiKey,
184
+ workspaceId: scope.workspaceId,
185
+ projectId: scope.projectId,
186
+ withMcp: opts.withMcp,
187
+ });
188
+ log.blank();
189
+ if (!ok) {
190
+ log.warn(`${TARGETS[target].label} install did not complete — see above.`);
191
+ return false;
192
+ }
193
+ // Connected only once the pod confirms the key the install wrote — the same
194
+ // check, and the same line, as `synap init` (`reportSetupCheck`).
195
+ const { reportSetupCheck } = await import("./init-connect.js");
196
+ const { confirmSurfaceKey } = await import("./key-doctor.js");
197
+ const label = TARGETS[target].label;
198
+ const confirmed = reportSetupCheck(label, await confirmSurfaceKey(pod.podUrl, target), `${label} connected to ${pod.podUrl}`);
199
+ if (confirmed)
200
+ log.dim("Run 'synap connections' to see everything connected.");
201
+ return confirmed;
202
+ }
203
+ /** Mint → verify → remember locally → print the URL + key card last. */
204
+ export async function createCustomAgent(pod, req, scope) {
205
+ const template = (req.template ?? "custom");
206
+ if (!AGENT_TEMPLATES.includes(template)) {
207
+ log.error(`Unknown template '${template}'. Use: ${AGENT_TEMPLATES.join(" | ")}`);
208
+ return false;
209
+ }
210
+ // Validate up front: the pod treats an unknown role as a non-fatal warning,
211
+ // so a typo would otherwise print as applied.
212
+ if (req.role && !AGENT_ROLES.includes(req.role)) {
213
+ log.error(`Invalid --role "${req.role}". Valid roles: ${AGENT_ROLES.join(", ")}.`);
214
+ return false;
215
+ }
216
+ const role = template === "twin" ? "editor" : (req.role ?? "editor");
217
+ if (!(await podIsHealthy(pod.podUrl)))
218
+ return false;
219
+ let agentName = req.name?.trim();
220
+ if (!agentName && template === "twin") {
221
+ agentName = await twinName(pod);
222
+ }
223
+ if (!agentName) {
224
+ if (!process.stdin.isTTY) {
225
+ log.error("--name is required for a custom agent in non-interactive mode");
226
+ return false;
227
+ }
228
+ const { inputName } = await prompts({
229
+ type: "text",
230
+ name: "inputName",
231
+ message: "Name this agent (e.g. researcher, support-bot):",
232
+ validate: (v) => v.trim().length > 0 || "Name is required",
233
+ });
234
+ if (!inputName)
235
+ return false;
236
+ agentName = inputName.trim();
237
+ }
238
+ const { agentType, localName } = customAgentType(agentName, template, req.type);
239
+ // A name that slugs to a client's type (claude-code, cursor, …) would reuse
240
+ // THAT client's agent and rotate its key. An explicit --type is deliberate.
241
+ if (!req.type && RESERVED_AGENT_TYPES.has(agentType)) {
242
+ log.error(`The name "${agentName}" maps to the client type "${agentType}".`);
243
+ log.dim(`To connect that client, run \`synap agents add ${agentType}\`. ` +
244
+ `Otherwise pick another --name, or pass an explicit --type.`);
245
+ return false;
246
+ }
247
+ log.heading(`Adding ${chalk.bold(agentName)} → ${pod.podUrl} ${chalk.dim(`(${describeScope(scope)})`)}`);
248
+ let hubApiKey;
249
+ let agentUserId;
250
+ try {
251
+ // Approval is required (the default) — the same trust step every client
252
+ // connect goes through. Idempotent: re-running for the same name reuses
253
+ // the agent rather than minting a parallel one.
254
+ ({ hubApiKey, agentUserId } = await provisionAgentKey(pod.podUrl, pod.apiKey, agentType, {
255
+ idempotent: true,
256
+ }));
257
+ }
258
+ catch (err) {
259
+ log.error(err instanceof Error ? err.message : String(err));
260
+ return false;
261
+ }
262
+ // No workspace = enrolled across every workspace (pod-wide). Quiet: the card
263
+ // below states the scope; a progress line here only pushes the key up.
264
+ await enrollAgentIfNeeded(pod.podUrl, pod.apiKey, agentUserId, scope.workspaceId, { role, quiet: true });
265
+ const verifySpinner = ora(`Verifying ${agentName} can reach Synap…`).start();
266
+ const v = await verifyMcpConnection(pod.podUrl, hubApiKey, { timeoutMs: 20_000 }).catch((err) => ({ ok: false, error: err.message }));
267
+ verifySpinner.stop();
268
+ const profile = {
269
+ podName: pod.podName ?? "default",
270
+ apiKey: hubApiKey,
271
+ label: req.label ?? agentName,
272
+ createdAt: new Date().toISOString(),
273
+ template,
274
+ agentUserId,
275
+ };
276
+ if (scope.workspaceId)
277
+ profile.workspaceId = scope.workspaceId;
278
+ if (scope.projectId)
279
+ profile.projectId = scope.projectId;
280
+ addAgent(localName, profile);
281
+ // No CONTEXT.md wizard here: for a custom agent it wrote
282
+ // ~/.synap/contexts/<type>.md, which no client reads, and its template prompt
283
+ // scrolled the key off screen. The card is the LAST thing printed.
284
+ printAgentCard({
285
+ name: agentName,
286
+ localName,
287
+ url: buildMcpUrl(pod.podUrl, scope.workspaceId, scope.projectId),
288
+ hubApiKey,
289
+ scope,
290
+ verified: v.ok ? { toolCount: v.toolCount ?? 0 } : { error: v.error ?? "unknown error" },
291
+ });
292
+ return v.ok;
293
+ }
294
+ /**
295
+ * What a custom agent needs to be used: the URL, the key, where it looks, and
296
+ * whether it works — nothing else. `synap agents info <name> --show-key`
297
+ * prints the same card from the local cache, so the key is never lost to
298
+ * scrollback.
299
+ */
300
+ export function printAgentCard(c) {
301
+ log.blank();
302
+ if (!c.verified) {
303
+ console.log(` ${chalk.bold(c.name)} ${chalk.dim(`(${describeScope(c.scope)})`)}`);
304
+ }
305
+ else if ("toolCount" in c.verified) {
306
+ console.log(` ${chalk.green("✔")} ${chalk.bold(c.name)} is ready ${chalk.dim(`(${describeScope(c.scope)} · ${c.verified.toolCount} tools reachable)`)}`);
307
+ }
308
+ else {
309
+ console.log(` ${chalk.yellow("⚠")} ${chalk.bold(c.name)} was created, but its key could not reach Synap: ${c.verified.error}`);
310
+ }
311
+ log.blank();
312
+ console.log(` ${chalk.dim("MCP URL")} ${c.url}`);
313
+ console.log(` ${chalk.dim("API key")} ${chalk.green(c.hubApiKey)}`);
314
+ console.log(` ${chalk.dim("Header")} Authorization: Bearer <API key>`);
315
+ log.blank();
316
+ console.log(" Paste the URL and key into your agent's MCP / connector settings.");
317
+ log.dim(` Show again: synap agents info ${c.localName} --show-key`);
318
+ log.dim(` Config snippets (Claude Code, Cursor, stdio): synap agents info ${c.localName} --snippets`);
319
+ }
320
+ async function twinName(pod) {
321
+ try {
322
+ const res = await fetch(`${pod.podUrl.replace(/\/$/, "")}/api/hub/users/me`, {
323
+ headers: { Authorization: `Bearer ${pod.apiKey}` },
324
+ signal: AbortSignal.timeout(8000),
325
+ });
326
+ if (res.ok) {
327
+ const me = (await res.json());
328
+ if (me.name || me.email)
329
+ return `${me.name ?? me.email}'s Twin`;
330
+ }
331
+ }
332
+ catch {
333
+ // The twin still gets a name; this read only personalises it.
334
+ }
335
+ return "My Twin";
336
+ }
337
+ // ─── Detect ───────────────────────────────────────────────────────────────────
338
+ const CUSTOM_CHOICE = "__custom__";
339
+ /**
340
+ * Bare `synap agents add`: the agents found on this machine, preselected, plus
341
+ * a "something else" row. Known picks connect together (one approval page);
342
+ * "something else" then runs the custom path.
343
+ */
344
+ export async function addDetectedAgents(pod, scope) {
345
+ if (!process.stdin.isTTY) {
346
+ log.error("Name the agent in non-interactive mode: synap agents add <client> or --name <name>");
347
+ return false;
348
+ }
349
+ if (!(await podIsHealthy(pod.podUrl)))
350
+ return false;
351
+ const { detectAgents } = await import("./agent-detect.js");
352
+ const rows = detectAgents();
353
+ const found = rows.filter((r) => r.found);
354
+ log.info(found.length > 0
355
+ ? `Found on this machine: ${found.map((r) => r.label).join(", ")}.`
356
+ : "No agent found on this machine.");
357
+ const { picked } = await prompts({
358
+ type: "multiselect",
359
+ name: "picked",
360
+ message: "Connect:",
361
+ choices: [
362
+ ...rows.map((r) => ({
363
+ title: r.label,
364
+ description: r.found ? r.evidence : "not found on this machine",
365
+ value: r.target,
366
+ selected: r.found,
367
+ })),
368
+ {
369
+ title: "Something else",
370
+ description: "any other agent — you get a URL + key to paste",
371
+ value: CUSTOM_CHOICE,
372
+ },
373
+ ],
374
+ hint: "space to toggle, enter to confirm",
375
+ instructions: false,
376
+ });
377
+ const values = (picked ?? []);
378
+ if (values.length === 0) {
379
+ log.dim("Nothing picked.");
380
+ return false;
381
+ }
382
+ const targets = values.filter((v) => v !== CUSTOM_CHOICE && isTargetName(v));
383
+ let ok = true;
384
+ if (targets.length > 0) {
385
+ const outcome = await connectAgentsBatch(pod, targets, scope);
386
+ ok = outcome.notApproved.length === 0 && outcome.failed.length === 0;
387
+ }
388
+ if (values.includes(CUSTOM_CHOICE)) {
389
+ ok = (await createCustomAgent(pod, {}, scope)) && ok;
390
+ }
391
+ return ok;
392
+ }
393
+ /**
394
+ * Several known clients at once: every key approved on ONE page first, then
395
+ * each installed, one line per client. `synap init` connects through here too.
396
+ */
397
+ export async function connectAgentsBatch(pod, targets, scope, opts = {}) {
398
+ const { connectAgents } = await import("./init-connect.js");
399
+ const { approveAgentKeysAtOnce } = await import("./batch-approval.js");
400
+ const { withHeldOutput } = await import("./init-output.js");
401
+ const labelOf = opts.labelOf ?? ((t) => TARGETS[t]?.label ?? t);
402
+ return connectAgents(targets, {
403
+ approve: (ts) => approveAgentKeysAtOnce(pod.podUrl, pod.apiKey, ts),
404
+ install: async (target) => {
405
+ const run = await withHeldOutput(() => installForTarget(target, {
406
+ podUrl: pod.podUrl,
407
+ apiKey: pod.apiKey,
408
+ workspaceId: scope.workspaceId,
409
+ projectId: scope.projectId,
410
+ unattended: true,
411
+ }));
412
+ return {
413
+ ok: run.value === true,
414
+ output: run.held,
415
+ error: run.error === undefined
416
+ ? undefined
417
+ : run.error instanceof Error
418
+ ? run.error.message
419
+ : String(run.error),
420
+ };
421
+ },
422
+ confirm: async (target) => (await import("./key-doctor.js")).confirmSurfaceKey(pod.podUrl, target),
423
+ labelOf,
424
+ });
425
+ }
426
+ //# sourceMappingURL=agent-door.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-door.js","sourceRoot":"","sources":["../../src/lib/agent-door.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,8 @@ export interface AgentProfile {
8
8
  template?: "twin" | "assistant" | "custom";
9
9
  /** The agent user ID on the pod (from agentUsers.create) */
10
10
  agentUserId?: string;
11
+ /** Optional project focus the agent was added with (pod-wide when absent). */
12
+ projectId?: string;
11
13
  }
12
14
  export declare function listAgents(): Array<{
13
15
  name: string;
@@ -1,18 +1,13 @@
1
- import fs from "node:fs";
1
+ import { readJsonStrict, writeFileAtomic } from "./atomic-file.js";
2
2
  import path from "node:path";
3
3
  import os from "node:os";
4
4
  const CONFIG_FILE = path.join(os.homedir(), ".synap", "config.json");
5
+ /** Throws on an unreadable file — `{}` here would make the next write wipe every pod profile. */
5
6
  function readConfig() {
6
- try {
7
- if (fs.existsSync(CONFIG_FILE)) {
8
- return JSON.parse(fs.readFileSync(CONFIG_FILE, "utf-8"));
9
- }
10
- }
11
- catch { /* ignore */ }
12
- return {};
7
+ return readJsonStrict(CONFIG_FILE) ?? {};
13
8
  }
14
9
  function writeConfig(cfg) {
15
- fs.writeFileSync(CONFIG_FILE, JSON.stringify(cfg, null, 2), { mode: 0o600 });
10
+ writeFileAtomic(CONFIG_FILE, JSON.stringify(cfg, null, 2), { mode: 0o600 });
16
11
  }
17
12
  export function listAgents() {
18
13
  const cfg = readConfig();
@@ -1 +1 @@
1
- {"version":3,"file":"agents-config.js","sourceRoot":"","sources":["../../src/lib/agents-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;AAsBrE,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAqB,CAAC;QAC/E,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IACxB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,WAAW,CAAC,GAAqB;IACxC,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,OAAO,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,OAAqB;IAC1D,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;IAC9B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;IAC3B,WAAW,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,aAAa,CAAC,CAAC;IACtE,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACxB,WAAW,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC;AAED;;;sFAGsF;AACtF,MAAM,UAAU,oBAAoB;IAClC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IACrC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC;IAElC,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,MAAM,UAAU,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,UAAU,EAAE,SAAS,EAAE,CAAC;QAC1B,OAAO;YACL,OAAO,EAAE,GAAG,CAAC,SAAS,IAAI,SAAS;YACnC,MAAM,EAAE,UAAU,CAAC,SAAS;YAC5B,WAAW,EAAE,UAAU,CAAC,WAAW;YACnC,KAAK,EAAE,IAAI;YACX,SAAS,EAAE,EAAE;SACd,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"agents-config.js","sourceRoot":"","sources":["../../src/lib/agents-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;AAwBrE,iGAAiG;AACjG,SAAS,UAAU;IACjB,OAAO,cAAc,CAAmB,WAAW,CAAC,IAAI,EAAE,CAAC;AAC7D,CAAC;AAED,SAAS,WAAW,CAAC,GAAqB;IACxC,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,OAAO,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,OAAqB;IAC1D,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;IAC9B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;IAC3B,WAAW,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,aAAa,CAAC,CAAC;IACtE,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACxB,WAAW,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC;AAED;;;sFAGsF;AACtF,MAAM,UAAU,oBAAoB;IAClC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IACrC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC;IAElC,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,MAAM,UAAU,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,UAAU,EAAE,SAAS,EAAE,CAAC;QAC1B,OAAO;YACL,OAAO,EAAE,GAAG,CAAC,SAAS,IAAI,SAAS;YACnC,MAAM,EAAE,UAAU,CAAC,SAAS;YAC5B,WAAW,EAAE,UAAU,CAAC,WAAW;YACnC,KAAK,EAAE,IAAI;YACX,SAAS,EAAE,EAAE;SACd,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}