@synap-core/cli 1.11.0 → 1.13.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 (533) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +40 -198
  3. package/dist/build-info.json +6 -0
  4. package/dist/commands/agent-run.js +3 -2
  5. package/dist/commands/agent-run.js.map +1 -1
  6. package/dist/commands/agents.d.ts +32 -17
  7. package/dist/commands/agents.js +203 -237
  8. package/dist/commands/agents.js.map +1 -1
  9. package/dist/commands/app.d.ts +143 -0
  10. package/dist/commands/app.js +524 -0
  11. package/dist/commands/app.js.map +1 -0
  12. package/dist/commands/automate.d.ts +21 -0
  13. package/dist/commands/automate.js +42 -0
  14. package/dist/commands/automate.js.map +1 -0
  15. package/dist/commands/automation-schema.test.d.ts +16 -0
  16. package/dist/commands/automation-schema.test.js +77 -0
  17. package/dist/commands/automation-schema.test.js.map +1 -0
  18. package/dist/commands/automation.d.ts +12 -0
  19. package/dist/commands/automation.js +116 -66
  20. package/dist/commands/automation.js.map +1 -1
  21. package/dist/commands/box.d.ts +42 -0
  22. package/dist/commands/box.js +89 -0
  23. package/dist/commands/box.js.map +1 -0
  24. package/dist/commands/bridge-setup.d.ts +14 -1
  25. package/dist/commands/bridge-setup.js +395 -129
  26. package/dist/commands/bridge-setup.js.map +1 -1
  27. package/dist/commands/cap-connections.d.ts +4 -4
  28. package/dist/commands/cap-connections.js +14 -14
  29. package/dist/commands/cap-connections.js.map +1 -1
  30. package/dist/commands/capability.d.ts +3 -1
  31. package/dist/commands/capability.js +249 -176
  32. package/dist/commands/capability.js.map +1 -1
  33. package/dist/commands/catalog.d.ts +275 -0
  34. package/dist/commands/catalog.js +481 -0
  35. package/dist/commands/catalog.js.map +1 -0
  36. package/dist/commands/cell.d.ts +155 -8
  37. package/dist/commands/cell.js +416 -40
  38. package/dist/commands/cell.js.map +1 -1
  39. package/dist/commands/centrality.js +1 -13
  40. package/dist/commands/centrality.js.map +1 -1
  41. package/dist/commands/close-questions.d.ts +27 -0
  42. package/dist/commands/close-questions.js +49 -0
  43. package/dist/commands/close-questions.js.map +1 -0
  44. package/dist/commands/close-questions.test.d.ts +1 -0
  45. package/dist/commands/close-questions.test.js +52 -0
  46. package/dist/commands/close-questions.test.js.map +1 -0
  47. package/dist/commands/connect.d.ts +36 -13
  48. package/dist/commands/connect.js +68 -167
  49. package/dist/commands/connect.js.map +1 -1
  50. package/dist/commands/connections.d.ts +3 -2
  51. package/dist/commands/connections.js +95 -25
  52. package/dist/commands/connections.js.map +1 -1
  53. package/dist/commands/context.js +79 -44
  54. package/dist/commands/context.js.map +1 -1
  55. package/dist/commands/data-extra.d.ts +34 -0
  56. package/dist/commands/data-extra.js +203 -25
  57. package/dist/commands/data-extra.js.map +1 -1
  58. package/dist/commands/data.d.ts +120 -2
  59. package/dist/commands/data.js +295 -21
  60. package/dist/commands/data.js.map +1 -1
  61. package/dist/commands/diagnose.d.ts +66 -4
  62. package/dist/commands/diagnose.js +285 -28
  63. package/dist/commands/diagnose.js.map +1 -1
  64. package/dist/commands/doc.d.ts +11 -4
  65. package/dist/commands/doc.js +39 -14
  66. package/dist/commands/doc.js.map +1 -1
  67. package/dist/commands/doctor.d.ts +133 -3
  68. package/dist/commands/doctor.js +761 -41
  69. package/dist/commands/doctor.js.map +1 -1
  70. package/dist/commands/explain.js +5 -5
  71. package/dist/commands/explain.js.map +1 -1
  72. package/dist/commands/hooks.d.ts +19 -0
  73. package/dist/commands/hooks.js +70 -0
  74. package/dist/commands/hooks.js.map +1 -0
  75. package/dist/commands/import.d.ts +393 -13
  76. package/dist/commands/import.js +1150 -54
  77. package/dist/commands/import.js.map +1 -1
  78. package/dist/commands/init.d.ts +34 -9
  79. package/dist/commands/init.js +481 -981
  80. package/dist/commands/init.js.map +1 -1
  81. package/dist/commands/keys.d.ts +1 -0
  82. package/dist/commands/keys.js +15 -2
  83. package/dist/commands/keys.js.map +1 -1
  84. package/dist/commands/knowledge.d.ts +22 -6
  85. package/dist/commands/knowledge.js +121 -57
  86. package/dist/commands/knowledge.js.map +1 -1
  87. package/dist/commands/lens.d.ts +37 -1
  88. package/dist/commands/lens.js +194 -72
  89. package/dist/commands/lens.js.map +1 -1
  90. package/dist/commands/market-authoring.d.ts +29 -2
  91. package/dist/commands/market-authoring.js +348 -7
  92. package/dist/commands/market-authoring.js.map +1 -1
  93. package/dist/commands/market-official.d.ts +58 -0
  94. package/dist/commands/market-official.js +84 -0
  95. package/dist/commands/market-official.js.map +1 -0
  96. package/dist/commands/market.d.ts +400 -16
  97. package/dist/commands/market.js +1802 -146
  98. package/dist/commands/market.js.map +1 -1
  99. package/dist/commands/mcp.d.ts +60 -25
  100. package/dist/commands/mcp.js +251 -64
  101. package/dist/commands/mcp.js.map +1 -1
  102. package/dist/commands/observe.category.test.d.ts +1 -0
  103. package/dist/commands/observe.category.test.js +59 -0
  104. package/dist/commands/observe.category.test.js.map +1 -0
  105. package/dist/commands/observe.d.ts +3 -0
  106. package/dist/commands/observe.js +7 -5
  107. package/dist/commands/observe.js.map +1 -1
  108. package/dist/commands/observe.title.test.d.ts +1 -0
  109. package/dist/commands/observe.title.test.js +37 -0
  110. package/dist/commands/observe.title.test.js.map +1 -0
  111. package/dist/commands/open.d.ts +39 -9
  112. package/dist/commands/open.js +80 -25
  113. package/dist/commands/open.js.map +1 -1
  114. package/dist/commands/playbook.d.ts +42 -0
  115. package/dist/commands/playbook.js +171 -0
  116. package/dist/commands/playbook.js.map +1 -0
  117. package/dist/commands/pod.js +1 -1
  118. package/dist/commands/pod.js.map +1 -1
  119. package/dist/commands/pods.d.ts +11 -1
  120. package/dist/commands/pods.js +129 -131
  121. package/dist/commands/pods.js.map +1 -1
  122. package/dist/commands/proposals-actions.d.ts +62 -0
  123. package/dist/commands/proposals-actions.js +143 -8
  124. package/dist/commands/proposals-actions.js.map +1 -1
  125. package/dist/commands/proposals-await.d.ts +68 -0
  126. package/dist/commands/proposals-await.js +248 -0
  127. package/dist/commands/proposals-await.js.map +1 -0
  128. package/dist/commands/proton-setup.d.ts +73 -0
  129. package/dist/commands/proton-setup.js +579 -0
  130. package/dist/commands/proton-setup.js.map +1 -0
  131. package/dist/commands/providers.d.ts +23 -0
  132. package/dist/commands/providers.js +126 -1
  133. package/dist/commands/providers.js.map +1 -1
  134. package/dist/commands/raycast.js +6 -2
  135. package/dist/commands/raycast.js.map +1 -1
  136. package/dist/commands/rule.d.ts +150 -0
  137. package/dist/commands/rule.js +447 -0
  138. package/dist/commands/rule.js.map +1 -0
  139. package/dist/commands/session-feed-wait.d.ts +48 -0
  140. package/dist/commands/session-feed-wait.js +261 -0
  141. package/dist/commands/session-feed-wait.js.map +1 -0
  142. package/dist/commands/session-post.d.ts +40 -0
  143. package/dist/commands/session-post.js +96 -0
  144. package/dist/commands/session-post.js.map +1 -0
  145. package/dist/commands/session-wait.d.ts +116 -0
  146. package/dist/commands/session-wait.js +224 -0
  147. package/dist/commands/session-wait.js.map +1 -0
  148. package/dist/commands/sessions.d.ts +54 -0
  149. package/dist/commands/sessions.js +501 -58
  150. package/dist/commands/sessions.js.map +1 -1
  151. package/dist/commands/skill-manage.d.ts +21 -0
  152. package/dist/commands/skill-manage.js +136 -19
  153. package/dist/commands/skill-manage.js.map +1 -1
  154. package/dist/commands/skills-commands.d.ts +2 -0
  155. package/dist/commands/skills-commands.js +9 -1
  156. package/dist/commands/skills-commands.js.map +1 -1
  157. package/dist/commands/skills-commands.test.d.ts +1 -0
  158. package/dist/commands/skills-commands.test.js +57 -0
  159. package/dist/commands/skills-commands.test.js.map +1 -0
  160. package/dist/commands/skills.js +16 -0
  161. package/dist/commands/skills.js.map +1 -1
  162. package/dist/commands/status.d.ts +1 -4
  163. package/dist/commands/status.js +6 -35
  164. package/dist/commands/status.js.map +1 -1
  165. package/dist/commands/statusline.backoff.test.d.ts +13 -0
  166. package/dist/commands/statusline.backoff.test.js +100 -0
  167. package/dist/commands/statusline.backoff.test.js.map +1 -0
  168. package/dist/commands/statusline.js +16 -9
  169. package/dist/commands/statusline.js.map +1 -1
  170. package/dist/commands/sync-status.d.ts +12 -0
  171. package/dist/commands/sync-status.js +125 -0
  172. package/dist/commands/sync-status.js.map +1 -0
  173. package/dist/commands/templates-retire.d.ts +34 -0
  174. package/dist/commands/templates-retire.js +192 -0
  175. package/dist/commands/templates-retire.js.map +1 -0
  176. package/dist/commands/tools.js +6 -21
  177. package/dist/commands/tools.js.map +1 -1
  178. package/dist/commands/tracks.d.ts +112 -0
  179. package/dist/commands/tracks.js +543 -0
  180. package/dist/commands/tracks.js.map +1 -0
  181. package/dist/commands/update.d.ts +3 -11
  182. package/dist/commands/update.js +5 -134
  183. package/dist/commands/update.js.map +1 -1
  184. package/dist/commands/upload.d.ts +41 -3
  185. package/dist/commands/upload.js +120 -18
  186. package/dist/commands/upload.js.map +1 -1
  187. package/dist/commands/vendor.d.ts +28 -0
  188. package/dist/commands/vendor.js +110 -0
  189. package/dist/commands/vendor.js.map +1 -0
  190. package/dist/commands/versions.js +6 -0
  191. package/dist/commands/versions.js.map +1 -1
  192. package/dist/commands/view.js +10 -5
  193. package/dist/commands/view.js.map +1 -1
  194. package/dist/commands/whoami.d.ts +30 -3
  195. package/dist/commands/whoami.js +186 -23
  196. package/dist/commands/whoami.js.map +1 -1
  197. package/dist/commands/worker-accounts.d.ts +149 -0
  198. package/dist/commands/worker-accounts.js +339 -0
  199. package/dist/commands/worker-accounts.js.map +1 -0
  200. package/dist/commands/worker-accounts.test.d.ts +1 -0
  201. package/dist/commands/worker-accounts.test.js +224 -0
  202. package/dist/commands/worker-accounts.test.js.map +1 -0
  203. package/dist/commands/worker.d.ts +331 -0
  204. package/dist/commands/worker.js +1067 -0
  205. package/dist/commands/worker.js.map +1 -0
  206. package/dist/commands/worker.test.d.ts +1 -0
  207. package/dist/commands/worker.test.js +427 -0
  208. package/dist/commands/worker.test.js.map +1 -0
  209. package/dist/commands/workspace-ops.d.ts +35 -0
  210. package/dist/commands/workspace-ops.js +153 -0
  211. package/dist/commands/workspace-ops.js.map +1 -0
  212. package/dist/index.d.ts +6 -6
  213. package/dist/index.js +1043 -186
  214. package/dist/index.js.map +1 -1
  215. package/dist/lib/agent-connections.d.ts +31 -0
  216. package/dist/lib/agent-connections.js +33 -0
  217. package/dist/lib/agent-connections.js.map +1 -0
  218. package/dist/lib/agent-detect.d.ts +27 -0
  219. package/dist/lib/agent-detect.js +71 -0
  220. package/dist/lib/agent-detect.js.map +1 -0
  221. package/dist/lib/agent-door.d.ts +136 -0
  222. package/dist/lib/agent-door.js +429 -0
  223. package/dist/lib/agent-door.js.map +1 -0
  224. package/dist/lib/agents-config.d.ts +2 -0
  225. package/dist/lib/agents-config.js +4 -9
  226. package/dist/lib/agents-config.js.map +1 -1
  227. package/dist/lib/approval-poll.d.ts +31 -2
  228. package/dist/lib/approval-poll.js +20 -7
  229. package/dist/lib/approval-poll.js.map +1 -1
  230. package/dist/lib/atomic-file.d.ts +48 -0
  231. package/dist/lib/atomic-file.js +129 -0
  232. package/dist/lib/atomic-file.js.map +1 -0
  233. package/dist/lib/auth.d.ts +17 -11
  234. package/dist/lib/auth.js +47 -64
  235. package/dist/lib/auth.js.map +1 -1
  236. package/dist/lib/batch-approval.d.ts +85 -0
  237. package/dist/lib/batch-approval.js +170 -0
  238. package/dist/lib/batch-approval.js.map +1 -0
  239. package/dist/lib/box/egress.d.ts +82 -0
  240. package/dist/lib/box/egress.js +264 -0
  241. package/dist/lib/box/egress.js.map +1 -0
  242. package/dist/lib/box/evidence.d.ts +86 -0
  243. package/dist/lib/box/evidence.js +121 -0
  244. package/dist/lib/box/evidence.js.map +1 -0
  245. package/dist/lib/box/job-server.d.ts +72 -0
  246. package/dist/lib/box/job-server.js +246 -0
  247. package/dist/lib/box/job-server.js.map +1 -0
  248. package/dist/lib/box/provisioner.d.ts +83 -0
  249. package/dist/lib/box/provisioner.js +312 -0
  250. package/dist/lib/box/provisioner.js.map +1 -0
  251. package/dist/lib/box/proxmox.d.ts +112 -0
  252. package/dist/lib/box/proxmox.js +211 -0
  253. package/dist/lib/box/proxmox.js.map +1 -0
  254. package/dist/lib/box/wire.d.ts +98 -0
  255. package/dist/lib/box/wire.js +70 -0
  256. package/dist/lib/box/wire.js.map +1 -0
  257. package/dist/lib/capture-lane.d.ts +6 -5
  258. package/dist/lib/capture-lane.js +6 -5
  259. package/dist/lib/capture-lane.js.map +1 -1
  260. package/dist/lib/capture-structure.d.ts +230 -11
  261. package/dist/lib/capture-structure.js +251 -13
  262. package/dist/lib/capture-structure.js.map +1 -1
  263. package/dist/lib/catalog-templates.d.ts +59 -0
  264. package/dist/lib/catalog-templates.js +126 -0
  265. package/dist/lib/catalog-templates.js.map +1 -0
  266. package/dist/lib/cli-build.d.ts +19 -0
  267. package/dist/lib/cli-build.js +37 -0
  268. package/dist/lib/cli-build.js.map +1 -0
  269. package/dist/lib/client-header.test.d.ts +1 -0
  270. package/dist/lib/client-header.test.js +85 -0
  271. package/dist/lib/client-header.test.js.map +1 -0
  272. package/dist/lib/conversation-headers.d.ts +33 -0
  273. package/dist/lib/conversation-headers.js +69 -0
  274. package/dist/lib/conversation-headers.js.map +1 -0
  275. package/dist/lib/cp-packages.d.ts +167 -11
  276. package/dist/lib/cp-packages.js +253 -21
  277. package/dist/lib/cp-packages.js.map +1 -1
  278. package/dist/lib/credential-class.d.ts +144 -0
  279. package/dist/lib/credential-class.js +138 -0
  280. package/dist/lib/credential-class.js.map +1 -0
  281. package/dist/lib/describe-lens.d.ts +35 -0
  282. package/dist/lib/describe-lens.js +40 -0
  283. package/dist/lib/describe-lens.js.map +1 -1
  284. package/dist/lib/device-connect.d.ts +125 -0
  285. package/dist/lib/device-connect.js +256 -0
  286. package/dist/lib/device-connect.js.map +1 -0
  287. package/dist/lib/directory-lens.d.ts +99 -0
  288. package/dist/lib/directory-lens.js +187 -0
  289. package/dist/lib/directory-lens.js.map +1 -0
  290. package/dist/lib/exporter-coverage.d.ts +71 -0
  291. package/dist/lib/exporter-coverage.js +97 -0
  292. package/dist/lib/exporter-coverage.js.map +1 -0
  293. package/dist/lib/goal-words.d.ts +38 -0
  294. package/dist/lib/goal-words.js +112 -0
  295. package/dist/lib/goal-words.js.map +1 -0
  296. package/dist/lib/hub-client.d.ts +57 -15
  297. package/dist/lib/hub-client.js +396 -82
  298. package/dist/lib/hub-client.js.map +1 -1
  299. package/dist/lib/init-connect.d.ts +41 -0
  300. package/dist/lib/init-connect.js +75 -0
  301. package/dist/lib/init-connect.js.map +1 -0
  302. package/dist/lib/init-exit.d.ts +24 -0
  303. package/dist/lib/init-exit.js +41 -0
  304. package/dist/lib/init-exit.js.map +1 -0
  305. package/dist/lib/init-flow.d.ts +25 -0
  306. package/dist/lib/init-flow.js +40 -0
  307. package/dist/lib/init-flow.js.map +1 -0
  308. package/dist/lib/init-handoff.d.ts +24 -0
  309. package/dist/lib/init-handoff.js +26 -0
  310. package/dist/lib/init-handoff.js.map +1 -0
  311. package/dist/lib/init-output.d.ts +18 -0
  312. package/dist/lib/init-output.js +43 -0
  313. package/dist/lib/init-output.js.map +1 -0
  314. package/dist/lib/init-pod.d.ts +45 -0
  315. package/dist/lib/init-pod.js +36 -0
  316. package/dist/lib/init-pod.js.map +1 -0
  317. package/dist/lib/installed.d.ts +210 -11
  318. package/dist/lib/installed.js +234 -36
  319. package/dist/lib/installed.js.map +1 -1
  320. package/dist/lib/key-approval.d.ts +57 -0
  321. package/dist/lib/key-approval.js +117 -0
  322. package/dist/lib/key-approval.js.map +1 -0
  323. package/dist/lib/key-diagnosis.d.ts +56 -0
  324. package/dist/lib/key-diagnosis.js +227 -0
  325. package/dist/lib/key-diagnosis.js.map +1 -0
  326. package/dist/lib/key-doctor.d.ts +136 -0
  327. package/dist/lib/key-doctor.js +286 -0
  328. package/dist/lib/key-doctor.js.map +1 -0
  329. package/dist/lib/key-locations.d.ts +120 -0
  330. package/dist/lib/key-locations.js +326 -0
  331. package/dist/lib/key-locations.js.map +1 -0
  332. package/dist/lib/key-source.d.ts +68 -0
  333. package/dist/lib/key-source.js +109 -0
  334. package/dist/lib/key-source.js.map +1 -0
  335. package/dist/lib/key-state.d.ts +70 -0
  336. package/dist/lib/key-state.js +115 -0
  337. package/dist/lib/key-state.js.map +1 -0
  338. package/dist/lib/kind-package.d.ts +181 -0
  339. package/dist/lib/kind-package.js +679 -0
  340. package/dist/lib/kind-package.js.map +1 -0
  341. package/dist/lib/knowledge-title.d.ts +25 -0
  342. package/dist/lib/knowledge-title.js +47 -0
  343. package/dist/lib/knowledge-title.js.map +1 -0
  344. package/dist/lib/knowledge-title.test.d.ts +1 -0
  345. package/dist/lib/knowledge-title.test.js +34 -0
  346. package/dist/lib/knowledge-title.test.js.map +1 -0
  347. package/dist/lib/machine-instance.d.ts +64 -0
  348. package/dist/lib/machine-instance.js +142 -0
  349. package/dist/lib/machine-instance.js.map +1 -0
  350. package/dist/lib/mcp-bridge.d.ts +49 -0
  351. package/dist/lib/mcp-bridge.js +180 -0
  352. package/dist/lib/mcp-bridge.js.map +1 -0
  353. package/dist/lib/mcp-bridge.test.d.ts +1 -0
  354. package/dist/lib/mcp-bridge.test.js +118 -0
  355. package/dist/lib/mcp-bridge.test.js.map +1 -0
  356. package/dist/lib/mcp-call.d.ts +30 -0
  357. package/dist/lib/mcp-call.js +107 -0
  358. package/dist/lib/mcp-call.js.map +1 -0
  359. package/dist/lib/mcp-snippets.d.ts +53 -0
  360. package/dist/lib/mcp-snippets.js +82 -0
  361. package/dist/lib/mcp-snippets.js.map +1 -0
  362. package/dist/lib/next-steps.d.ts +8 -0
  363. package/dist/lib/next-steps.js +31 -1
  364. package/dist/lib/next-steps.js.map +1 -1
  365. package/dist/lib/openclaw.js +3 -2
  366. package/dist/lib/openclaw.js.map +1 -1
  367. package/dist/lib/package-wire.d.ts +179 -0
  368. package/dist/lib/package-wire.js +68 -0
  369. package/dist/lib/package-wire.js.map +1 -0
  370. package/dist/lib/pair-link.d.ts +38 -0
  371. package/dist/lib/pair-link.js +68 -0
  372. package/dist/lib/pair-link.js.map +1 -0
  373. package/dist/lib/pod-moved.d.ts +70 -0
  374. package/dist/lib/pod-moved.js +146 -0
  375. package/dist/lib/pod-moved.js.map +1 -0
  376. package/dist/lib/pod-reach.d.ts +39 -0
  377. package/dist/lib/pod-reach.js +117 -0
  378. package/dist/lib/pod-reach.js.map +1 -0
  379. package/dist/lib/pod-reach.test.d.ts +1 -0
  380. package/dist/lib/pod-reach.test.js +67 -0
  381. package/dist/lib/pod-reach.test.js.map +1 -0
  382. package/dist/lib/pod-wide.d.ts +40 -0
  383. package/dist/lib/pod-wide.js +46 -0
  384. package/dist/lib/pod-wide.js.map +1 -0
  385. package/dist/lib/pod.d.ts +74 -112
  386. package/dist/lib/pod.js +146 -415
  387. package/dist/lib/pod.js.map +1 -1
  388. package/dist/lib/project-ref.d.ts +9 -3
  389. package/dist/lib/project-ref.js +10 -4
  390. package/dist/lib/project-ref.js.map +1 -1
  391. package/dist/lib/register-claude-code-mcp.test.d.ts +1 -0
  392. package/dist/lib/register-claude-code-mcp.test.js +78 -0
  393. package/dist/lib/register-claude-code-mcp.test.js.map +1 -0
  394. package/dist/lib/review-credential.d.ts +119 -0
  395. package/dist/lib/review-credential.js +149 -0
  396. package/dist/lib/review-credential.js.map +1 -0
  397. package/dist/lib/safe-open.d.ts +49 -0
  398. package/dist/lib/safe-open.js +119 -0
  399. package/dist/lib/safe-open.js.map +1 -0
  400. package/dist/lib/session-feed.d.ts +185 -0
  401. package/dist/lib/session-feed.js +257 -0
  402. package/dist/lib/session-feed.js.map +1 -0
  403. package/dist/lib/session-lens.d.ts +40 -1
  404. package/dist/lib/session-lens.js +54 -4
  405. package/dist/lib/session-lens.js.map +1 -1
  406. package/dist/lib/superwhisper-import.d.ts +8 -0
  407. package/dist/lib/superwhisper-import.js +14 -7
  408. package/dist/lib/superwhisper-import.js.map +1 -1
  409. package/dist/lib/superwhisper-title.test.d.ts +1 -0
  410. package/dist/lib/superwhisper-title.test.js +18 -0
  411. package/dist/lib/superwhisper-title.test.js.map +1 -0
  412. package/dist/lib/targets.d.ts +152 -10
  413. package/dist/lib/targets.js +974 -325
  414. package/dist/lib/targets.js.map +1 -1
  415. package/dist/lib/template-file.d.ts +4 -0
  416. package/dist/lib/template-file.js.map +1 -1
  417. package/dist/lib/template-lifecycle.d.ts +217 -0
  418. package/dist/lib/template-lifecycle.js +433 -0
  419. package/dist/lib/template-lifecycle.js.map +1 -0
  420. package/dist/lib/template-steps.d.ts +88 -0
  421. package/dist/lib/template-steps.js +118 -0
  422. package/dist/lib/template-steps.js.map +1 -0
  423. package/dist/lib/time-ago.d.ts +2 -0
  424. package/dist/lib/time-ago.js +15 -0
  425. package/dist/lib/time-ago.js.map +1 -0
  426. package/dist/lib/wake-hook-settings.d.ts +57 -0
  427. package/dist/lib/wake-hook-settings.js +153 -0
  428. package/dist/lib/wake-hook-settings.js.map +1 -0
  429. package/dist/lib/wake-state.d.ts +65 -0
  430. package/dist/lib/wake-state.js +122 -0
  431. package/dist/lib/wake-state.js.map +1 -0
  432. package/dist/utils/logger.js +5 -2
  433. package/dist/utils/logger.js.map +1 -1
  434. package/package.json +26 -17
  435. package/skills/README.md +13 -11
  436. package/skills/agent-os/SKILL.md +214 -99
  437. package/skills/manifest.json +1 -1
  438. package/skills/onboard/SKILL.md +55 -26
  439. package/skills/synap/README.md +5 -8
  440. package/skills/synap/SKILL.md +1149 -289
  441. package/skills/synap/_order.txt +7 -0
  442. package/skills/synap/_skill.yaml +1 -1
  443. package/skills/synap/automations.md +15 -0
  444. package/skills/synap/capture.md +5 -0
  445. package/skills/synap/cli-operations.md +24 -18
  446. package/skills/synap/code-skills.md +70 -0
  447. package/skills/synap/concepts.md +36 -0
  448. package/skills/synap/content-os.md +10 -1
  449. package/skills/synap/creative-loop.md +15 -10
  450. package/skills/synap/crm.md +21 -52
  451. package/skills/synap/document-embeds.md +143 -47
  452. package/skills/synap/escalation-ladder.md +20 -10
  453. package/skills/synap/focus-sessions.md +56 -21
  454. package/skills/synap/from-intent.md +158 -0
  455. package/skills/synap/governance-rules.md +5 -5
  456. package/skills/synap/governance.md +10 -7
  457. package/skills/synap/hand-off.md +33 -0
  458. package/skills/synap/inline-patterns.md +15 -7
  459. package/skills/synap/lenses.md +34 -16
  460. package/skills/synap/linking.md +42 -41
  461. package/skills/synap/mcp-remote-servers.md +64 -0
  462. package/skills/synap/mental-model.md +17 -15
  463. package/skills/synap/operating-mode-rules.md +2 -2
  464. package/skills/synap/processes.md +118 -0
  465. package/skills/synap/quick-reference.md +7 -2
  466. package/skills/synap/reading.md +3 -1
  467. package/skills/synap/reflexes.md +12 -42
  468. package/skills/synap/viewframe-cells.md +38 -5
  469. package/skills/synap/work-flow.md +1 -1
  470. package/skills/synap/work-model.md +110 -0
  471. package/skills/synap/worked-examples.md +4 -5
  472. package/skills/synap/workspace-design.md +15 -11
  473. package/skills/synap/writes.md +105 -25
  474. package/skills/synap/writing-titles.md +63 -0
  475. package/skills/synap-app/SKILL.md +149 -67
  476. package/skills/synap-app/_skill.yaml +1 -1
  477. package/skills/synap-app/creating-the-base-app.md +12 -7
  478. package/skills/synap-app/governance.md +27 -16
  479. package/skills/synap-app/install-commands.md +18 -9
  480. package/skills/synap-app/overview.md +16 -9
  481. package/skills/synap-app/using-the-sdk.md +75 -25
  482. package/skills/synap-design/SKILL.md +474 -0
  483. package/skills/synap-design/_order.txt +4 -0
  484. package/skills/synap-design/_skill.yaml +21 -0
  485. package/skills/synap-design/loop.md +134 -0
  486. package/skills/synap-design/overview.md +44 -0
  487. package/skills/synap-design/principles.md +130 -0
  488. package/skills/synap-design/system.md +133 -0
  489. package/skills/synap-market/SKILL.md +306 -16
  490. package/skills/synap-market/_skill.yaml +1 -1
  491. package/skills/synap-market/author-and-publish.md +145 -8
  492. package/skills/synap-market/governance-and-catalog.md +7 -0
  493. package/skills/synap-market/install.md +79 -1
  494. package/skills/synap-market/overview.md +74 -6
  495. package/skills/synap-schema/SKILL.md +172 -10
  496. package/skills/synap-schema/_order.txt +2 -0
  497. package/skills/synap-schema/_skill.yaml +4 -2
  498. package/skills/synap-schema/common-mistakes.md +4 -2
  499. package/skills/synap-schema/discover-profiles.md +1 -1
  500. package/skills/synap-schema/entity-scope.md +15 -3
  501. package/skills/synap-schema/extend-first.md +29 -0
  502. package/skills/synap-schema/extend-vs-create.md +1 -1
  503. package/skills/synap-schema/intent-vocabulary-ssot.md +111 -0
  504. package/skills/synap-schema/property-types.md +1 -1
  505. package/skills/synap-schema/relations.md +1 -1
  506. package/skills/synap-ui/SKILL.md +19 -12
  507. package/skills/synap-ui/_skill.yaml +1 -1
  508. package/skills/synap-ui/ai-companion.md +1 -1
  509. package/skills/synap-ui/arranging-bento.md +2 -0
  510. package/skills/synap-ui/bento-layouts.md +10 -10
  511. package/skills/synap-ui/bento-recipes.md +313 -543
  512. package/skills/synap-ui/four-builds.md +5 -0
  513. package/skills/synap-ui/view-types.md +2 -2
  514. package/skills/synap-ui/widget-catalog.md +22 -278
  515. package/templates/automations/bookmark-enrichment.automation.json +290 -13
  516. package/templates/automations/url-bookmark-capture.automation.json +73 -11
  517. package/templates/box/runner.py +206 -0
  518. package/templates/skills/authoring-playbooks/SKILL.md +6 -3
  519. package/templates/skills/authoring-playbooks/reference/stages-contract.md +15 -0
  520. package/templates/skills/authoring-playbooks/reference/worked-example.md +3 -0
  521. package/dist/commands/infra.d.ts +0 -21
  522. package/dist/commands/infra.js +0 -262
  523. package/dist/commands/infra.js.map +0 -1
  524. package/node_modules/@synap/hub-rest-client/dist/index.cjs +0 -1261
  525. package/node_modules/@synap/hub-rest-client/dist/index.d.cts +0 -1647
  526. package/node_modules/@synap/hub-rest-client/dist/index.d.ts +0 -1647
  527. package/node_modules/@synap/hub-rest-client/dist/index.js +0 -1231
  528. package/node_modules/@synap/hub-rest-client/package.json +0 -45
  529. package/node_modules/@synap/hub-rest-client/src/client.ts +0 -1631
  530. package/node_modules/@synap/hub-rest-client/src/errors.ts +0 -30
  531. package/node_modules/@synap/hub-rest-client/src/index.ts +0 -153
  532. package/node_modules/@synap/hub-rest-client/src/setup.ts +0 -133
  533. package/node_modules/@synap/hub-rest-client/src/types.ts +0 -1299
@@ -13,10 +13,126 @@
13
13
  * ACTUALLY returned (applied vs proposed vs nothing-created) instead of guessing
14
14
  * off the planned proposal count.
15
15
  *
16
- * Kept local to the CLI (not imported from @synap/hub-rest-client) because the
16
+ * Kept local to the CLI (not imported from @synap-core/hub-rest-client) because the
17
17
  * CLI resolves the SDK via its built dist — the same reason the previous local
18
18
  * mirrors existed. This is now the ONE mirror instead of two.
19
19
  */
20
+ /**
21
+ * ADVISORY hints only — an AI pick proposes, it never places data. A user's
22
+ * deliberate choice (`--workspace` / `--project`) is NOT a hint.
23
+ */
24
+ export function captureExecuteRoutingHints(structured) {
25
+ return {
26
+ aiWorkspaceId: structured.targetWorkspaceId,
27
+ aiWorkspaceConfidence: structured.targetWorkspaceConfidence,
28
+ aiWorkspaceReason: structured.targetWorkspaceReason,
29
+ aiWorkspaceDecision: structured.targetWorkspaceDecision,
30
+ aiProjectId: structured.targetProjectId,
31
+ aiProjectConfidence: structured.targetProjectConfidence,
32
+ aiProjectReason: structured.targetProjectReason,
33
+ };
34
+ }
35
+ /** The AI's workspace-side hints only (drop them when the user pinned a workspace). */
36
+ export function workspaceRoutingHints(structured) {
37
+ const { aiWorkspaceId, aiWorkspaceConfidence, aiWorkspaceReason, aiWorkspaceDecision } = captureExecuteRoutingHints(structured);
38
+ return { aiWorkspaceId, aiWorkspaceConfidence, aiWorkspaceReason, aiWorkspaceDecision };
39
+ }
40
+ /** The AI's project-side hints only (drop them when the user pinned a project). */
41
+ export function projectRoutingHints(structured) {
42
+ const { aiProjectId, aiProjectConfidence, aiProjectReason } = captureExecuteRoutingHints(structured);
43
+ return { aiProjectId, aiProjectConfidence, aiProjectReason };
44
+ }
45
+ /** THE destination rule — see the shared type's docblock. */
46
+ export function deriveWorkspacePlacementView(placement, selection, opts) {
47
+ if (!placement) {
48
+ return {
49
+ destination: { workspaceId: null, workspaceName: null },
50
+ aiSuggested: false,
51
+ alternatives: [],
52
+ canRemove: false,
53
+ execute: {},
54
+ };
55
+ }
56
+ const suggestion = placement.suggestion;
57
+ const base = {
58
+ workspaceId: placement.workspaceId,
59
+ workspaceName: placement.workspaceName,
60
+ };
61
+ const pinBase = () => placement.deterministic && placement.workspaceId
62
+ ? { targetWorkspaceId: placement.workspaceId }
63
+ : {};
64
+ if (selection.kind === "chosen") {
65
+ return {
66
+ destination: {
67
+ workspaceId: selection.workspaceId,
68
+ workspaceName: selection.workspaceName,
69
+ },
70
+ aiSuggested: false,
71
+ alternatives: suggestion?.alternatives ?? [],
72
+ canRemove: false,
73
+ execute: {
74
+ targetWorkspaceId: selection.workspaceId,
75
+ ...(suggestion
76
+ ? {
77
+ workspaceChoice: selection.workspaceId === suggestion.workspaceId ? "accepted" : "changed",
78
+ }
79
+ : {}),
80
+ },
81
+ };
82
+ }
83
+ if (selection.kind === "removed" || !suggestion || !opts.interactive) {
84
+ const choice = !suggestion
85
+ ? undefined
86
+ : selection.kind === "removed"
87
+ ? "removed"
88
+ : "ignored";
89
+ return {
90
+ destination: base,
91
+ aiSuggested: false,
92
+ alternatives: suggestion?.alternatives ?? [],
93
+ canRemove: false,
94
+ execute: {
95
+ ...(choice === "removed" && placement.workspaceId
96
+ ? { targetWorkspaceId: placement.workspaceId }
97
+ : pinBase()),
98
+ ...(choice ? { workspaceChoice: choice } : {}),
99
+ },
100
+ };
101
+ }
102
+ return {
103
+ destination: {
104
+ workspaceId: suggestion.workspaceId,
105
+ workspaceName: suggestion.workspaceName,
106
+ },
107
+ aiSuggested: true,
108
+ alternatives: suggestion.alternatives,
109
+ canRemove: true,
110
+ execute: { targetWorkspaceId: suggestion.workspaceId, workspaceChoice: "accepted" },
111
+ };
112
+ }
113
+ /**
114
+ * The headless placement fields the CLI sends to `/capture/execute` — the ONE
115
+ * door, so the CLI can never hand-roll a destination. Headless ⇒ an AI
116
+ * suggestion stays a proposal; a deterministic placement is pinned explicitly.
117
+ */
118
+ export function headlessPlacementFields(structured) {
119
+ return deriveWorkspacePlacementView(structured.placement, { kind: "default" }, {
120
+ interactive: false,
121
+ }).execute;
122
+ }
123
+ /**
124
+ * The workspace line for a structure result: the NAME the pod resolved (never
125
+ * a raw id when a name is known) and the confidence percent, once.
126
+ */
127
+ export function formatWorkspaceRouting(result) {
128
+ const label = result.targetWorkspaceName || result.targetWorkspaceId;
129
+ if (!label)
130
+ return null;
131
+ const conf = typeof result.targetWorkspaceConfidence === "number"
132
+ ? ` (${Math.round(result.targetWorkspaceConfidence * 100)}%)`
133
+ : "";
134
+ return `${label}${conf}`;
135
+ }
20
136
  /**
21
137
  * Interpret a /capture/execute response HONESTLY. Distinguishes applied vs
22
138
  * proposed vs nothing-created and surfaces the real proposal/review handle so
@@ -33,25 +149,147 @@ export function readCaptureExecute(res) {
33
149
  relationsCreated: Array.isArray(res.relations) ? res.relations.length : 0,
34
150
  proposalId: res.proposalId ? String(res.proposalId) : undefined,
35
151
  reviewUrl: res.reviewUrl ? String(res.reviewUrl) : undefined,
36
- movedToWorkspace: res.movedToWorkspace
37
- ? String(res.movedToWorkspace)
38
- : undefined,
152
+ ...(res.pendingWorkspaceSwitch?.suggestedWorkspaceId
153
+ ? { pendingWorkspaceSwitch: res.pendingWorkspaceSwitch }
154
+ : {}),
39
155
  };
40
156
  }
41
- /** True when the structure step degraded (IS structurer unavailable). */
157
+ /**
158
+ * The one line every CLI surface prints for an outstanding workspace
159
+ * suggestion. It says what to DO (re-file with `--workspace`), because the pod
160
+ * moved nothing — the old "→ filed into workspace X" line reported a move that
161
+ * never happened.
162
+ */
163
+ export function formatPendingWorkspaceSwitch(outcome) {
164
+ const s = outcome.pendingWorkspaceSwitch;
165
+ if (!s)
166
+ return null;
167
+ const label = s.suggestedWorkspaceName || s.suggestedWorkspaceId;
168
+ const conf = typeof s.confidence === "number" ? ` (${Math.round(s.confidence * 100)}%)` : "";
169
+ return `AI suggests workspace ${label}${conf} — nothing was moved. Re-file with --workspace ${s.suggestedWorkspaceId} to accept.`;
170
+ }
171
+ /** True when the structure step degraded (nothing usable came back). */
42
172
  export function isDegraded(res) {
43
173
  return res.degraded === true;
44
174
  }
45
175
  /**
46
- * The ONE degraded message. When the structurer is down the server returns a
47
- * generic `item` stand-in wrapping the raw text — but the CLI does NOT
48
- * materialize it (the browser does the same via `offlineFallback:false`). We
49
- * create nothing and tell the user, so a captured note is never silently
50
- * downgraded to an unstructured blob behind a "success" line. Retry when the
51
- * structurer is back.
176
+ * One line of honest copy for a degraded reason: WHAT happened, and WHAT TO DO.
177
+ *
178
+ * ── Why this is a second table, deliberately ────────────────────────────────
179
+ * `@synap-core/capture-pipeline`'s `describeDegradedReason` is the existing
180
+ * one-door for this copy, and it is the RIGHT door — but the CLI is a separate
181
+ * pnpm workspace whose only Synap runtime dependencies are
182
+ * `@synap-core/hub-rest-client` (a file: link into synap-backend) and
183
+ * `@synap-core/workspace-templates`. It cannot reach a `synap-app` package
184
+ * without a package.json/lockfile change. Same reason the `StructureResult`
185
+ * mirror above is local.
186
+ *
187
+ * So: the `title` half is COPIED VERBATIM from `describeDegradedReason` and
188
+ * pinned by a parity test (`test/degraded-message-honesty.test.ts`) that reads
189
+ * the sibling repo's source, so the two can never drift on WHAT happened.
190
+ * The `detail` half is deliberately DIFFERENT, because the app's
191
+ * details end in "saved as a note in the meantime" and the CLI creates nothing
192
+ * at all — repeating the app's sentence here would be a new lie in place of the
193
+ * old one.
194
+ */
195
+ export function describeDegradedReason(reason) {
196
+ switch (reason) {
197
+ case "is_auth_error":
198
+ return {
199
+ title: "AI intelligence isn't connected",
200
+ detail: "This pod's Intelligence Service rejected its credentials. Check them with `synap doctor`, then re-run this import.",
201
+ };
202
+ case "llm_budget_exceeded":
203
+ return {
204
+ title: "The monthly AI budget is used up",
205
+ detail: "The Intelligence Service's monthly token budget is spent, so nothing was created. Re-run this import once the budget resets next month or an operator raises it.",
206
+ };
207
+ case "pdf_scanned_needs_ocr":
208
+ return {
209
+ title: "This PDF has no text layer",
210
+ detail: "It's a scan, not typed text, so there is nothing to read yet. OCR it first, or keep the original with `synap import --keep-raw <file>`.",
211
+ };
212
+ case "pdf_missing_binary":
213
+ return {
214
+ title: "The PDF file wasn't available to read",
215
+ detail: "The bytes never reached the pod. Re-run the import for this file.",
216
+ };
217
+ case "vision_provider_not_configured":
218
+ return {
219
+ title: "Image reading isn't set up on this pod",
220
+ detail: "No vision-capable model is configured, so images can't be described. Configure one in Settings → Intelligence; until then keep the original with `synap import --keep-raw <file>`.",
221
+ };
222
+ case "vision_provider_failed":
223
+ return {
224
+ title: "Couldn't reach the AI that reads images",
225
+ detail: "A vision model is configured but the call failed (an outage, an unfunded key or an unknown model). Re-run this import later; `synap doctor` checks the pod.",
226
+ };
227
+ case "image_missing_binary":
228
+ return {
229
+ title: "The image file wasn't available to read",
230
+ detail: "The bytes never reached the pod. Re-run the import for this file.",
231
+ };
232
+ case "transcription_provider_not_configured":
233
+ return {
234
+ title: "Audio transcription isn't set up on this pod",
235
+ detail: "No transcription model is configured, so speech can't be turned into text. Configure one in Settings → Intelligence; until then keep the original with `synap import --keep-raw <file>`.",
236
+ };
237
+ case "audio_missing_binary":
238
+ return {
239
+ title: "The audio file wasn't available to read",
240
+ detail: "The bytes never reached the pod. Re-run the import for this file.",
241
+ };
242
+ case "docx_missing_binary":
243
+ return {
244
+ title: "The document file wasn't available to read",
245
+ detail: "The bytes never reached the pod. Re-run the import for this file.",
246
+ };
247
+ case "docx_empty":
248
+ return {
249
+ title: "This document has no extractable text",
250
+ detail: "It parsed cleanly but came back empty. Keep the original with `synap import --keep-raw <file>` if you still want it stored.",
251
+ };
252
+ case "html_empty":
253
+ return {
254
+ title: "This page has no extractable text",
255
+ detail: "It parsed cleanly but came back empty — often a JavaScript-rendered page. Save the readable text yourself and pass it to `synap capture`.",
256
+ };
257
+ case "unsupported_type":
258
+ return {
259
+ title: "This file type isn't supported yet",
260
+ detail: "Nothing can be extracted from it. Keep the bytes anyway with `synap import --keep-raw <file>`, or `synap upload <file>` to store it as a file entity.",
261
+ };
262
+ case "is_invalid_response":
263
+ case "is_empty_result":
264
+ case undefined:
265
+ return {
266
+ title: "AI structuring is unavailable right now",
267
+ detail: "Nothing was created. Re-run this import when the structurer is back.",
268
+ };
269
+ default:
270
+ // A reason this list hasn't been taught yet (the IS added one, and the
271
+ // wire type is an open string). Degrade gracefully — never print the raw
272
+ // token at a user, and never crash on it.
273
+ return {
274
+ title: "This input couldn't be read",
275
+ detail: "Nothing was created. Run `synap doctor` to check what this pod can extract.",
276
+ };
277
+ }
278
+ }
279
+ /**
280
+ * The ONE degraded message. The CLI does NOT materialize the server's generic
281
+ * `item` stand-in (the browser does the same via `offlineFallback:false`), so a
282
+ * captured note is never silently downgraded to an unstructured blob behind a
283
+ * "success" line.
284
+ *
285
+ * It used to print a single sentence for every cause — "AI structuring
286
+ * unavailable (is_empty_result) — nothing was created. Retry when it's back."
287
+ * — which leaked a raw machine token AND told users to retry states that never
288
+ * change (a pod with no vision provider is not going to come back). Now each
289
+ * reason says what actually happened and what to do about it.
52
290
  */
53
291
  export function degradedMessage(res) {
54
- const why = res.degradedReason ? ` (${res.degradedReason})` : "";
55
- return `AI structuring unavailable${why} — nothing was created. Retry when it's back.`;
292
+ const { title, detail } = describeDegradedReason(res.degradedReason);
293
+ return `${title} — nothing was created. ${detail}`;
56
294
  }
57
295
  //# sourceMappingURL=capture-structure.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"capture-structure.js","sourceRoot":"","sources":["../../src/lib/capture-structure.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAmGH;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAkB;IACnD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9D,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,KAAK,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACtE,OAAO;QACL,QAAQ;QACR,eAAe,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM;QACxD,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM;QACtD,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACzE,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;QAC/D,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;QAC5D,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;YACpC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC;YAC9B,CAAC,CAAC,SAAS;KACd,CAAC;AACJ,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,UAAU,CAAC,GAAoB;IAC7C,OAAO,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC;AAC/B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,GAAoB;IAClD,MAAM,GAAG,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACjE,OAAO,6BAA6B,GAAG,+CAA+C,CAAC;AACzF,CAAC"}
1
+ {"version":3,"file":"capture-structure.js","sourceRoot":"","sources":["../../src/lib/capture-structure.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Where `synap bridge setup` reads the agency skills and the bridge automations.
3
+ *
4
+ * Their home is the catalog package (`@synap-core/catalog`, or
5
+ * `@synap-core/workspace-templates` before the rename): `skills/<name>/SKILL.md`
6
+ * and `automations/*.automation.json`. The CLI keeps copies under `templates/`
7
+ * for installs whose catalog package does not ship them yet. Resolution is per
8
+ * item: the INSTALLED package wins when it ships the item, the CLI copy is the
9
+ * fallback. The runtime skills (`authoring-*`, `coordinating-*`) have no catalog
10
+ * copy and always come from the CLI.
11
+ *
12
+ * Retirement: once the installed package ships an item, its CLI copy is dead
13
+ * weight that can silently fork. `catalogRetirementViolations` names those
14
+ * copies; `test/catalog-templates.test.ts` fails on any, so the pin bump that
15
+ * brings them in also deletes the CLI copies.
16
+ */
17
+ /** Package names the catalog may be installed under (new name first). */
18
+ export declare const CATALOG_TEMPLATE_PACKAGES: readonly ["@synap-core/catalog", "@synap-core/workspace-templates"];
19
+ /**
20
+ * The agency/domain skills whose home is the catalog. Every other bundled skill
21
+ * is a CLI runtime skill. Pinned (not derived from the catalog) so the set
22
+ * bridge-setup seeds does not grow because the catalog gained a skill.
23
+ */
24
+ export declare const AGENCY_SKILLS: readonly ["bookmark-enrichment", "mapping-the-server", "reading-client-progress", "routing-to-channels", "stellar-scf-grants-advisor"];
25
+ /** `<cli package root>/templates` (same depth from `src/lib` and `dist/lib`). */
26
+ export declare const CLI_TEMPLATES_DIR: string;
27
+ /**
28
+ * Root directory of the installed catalog package, or null when none resolves.
29
+ * Resolves the package's entry point and walks up to its package.json, because
30
+ * older versions do not export `./package.json`.
31
+ */
32
+ export declare function resolveInstalledCatalogRoot(resolve?: (id: string) => string): string | null;
33
+ /**
34
+ * The SKILL.md directories bridge-setup seeds: each agency skill from the
35
+ * installed catalog when it ships it, else from the CLI; plus every CLI runtime
36
+ * skill. `fromCatalog` names the skills read from the catalog.
37
+ */
38
+ export declare function resolveAgencySkillDirs(opts: {
39
+ cliSkillsDir: string | null;
40
+ catalogRoot: string | null;
41
+ }): {
42
+ dirs: string[];
43
+ fromCatalog: string[];
44
+ };
45
+ /**
46
+ * The automation templates directory: the `override` (AUTOMATION_TEMPLATES_DIR)
47
+ * when set (null if it does not exist), else the installed catalog's
48
+ * `automations/` when it ships any `*.automation.json`, else the CLI copy.
49
+ */
50
+ export declare function resolveAutomationTemplatesDir(opts: {
51
+ override?: string;
52
+ catalogRoot: string | null;
53
+ cliDir: string;
54
+ }): string | null;
55
+ /**
56
+ * CLI copies the installed catalog makes redundant, as paths relative to the CLI
57
+ * package root (`templates/skills/<name>`, `templates/automations/<file>`).
58
+ */
59
+ export declare function catalogRetirementViolations(catalogRoot: string | null, cliTemplatesDir: string): string[];
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Where `synap bridge setup` reads the agency skills and the bridge automations.
3
+ *
4
+ * Their home is the catalog package (`@synap-core/catalog`, or
5
+ * `@synap-core/workspace-templates` before the rename): `skills/<name>/SKILL.md`
6
+ * and `automations/*.automation.json`. The CLI keeps copies under `templates/`
7
+ * for installs whose catalog package does not ship them yet. Resolution is per
8
+ * item: the INSTALLED package wins when it ships the item, the CLI copy is the
9
+ * fallback. The runtime skills (`authoring-*`, `coordinating-*`) have no catalog
10
+ * copy and always come from the CLI.
11
+ *
12
+ * Retirement: once the installed package ships an item, its CLI copy is dead
13
+ * weight that can silently fork. `catalogRetirementViolations` names those
14
+ * copies; `test/catalog-templates.test.ts` fails on any, so the pin bump that
15
+ * brings them in also deletes the CLI copies.
16
+ */
17
+ import fs from "node:fs";
18
+ import path from "node:path";
19
+ import { createRequire } from "node:module";
20
+ import { fileURLToPath } from "node:url";
21
+ import { discoverSkillDirs } from "./skill-import.js";
22
+ /** Package names the catalog may be installed under (new name first). */
23
+ export const CATALOG_TEMPLATE_PACKAGES = ["@synap-core/catalog", "@synap-core/workspace-templates"];
24
+ /**
25
+ * The agency/domain skills whose home is the catalog. Every other bundled skill
26
+ * is a CLI runtime skill. Pinned (not derived from the catalog) so the set
27
+ * bridge-setup seeds does not grow because the catalog gained a skill.
28
+ */
29
+ export const AGENCY_SKILLS = [
30
+ "bookmark-enrichment",
31
+ "mapping-the-server",
32
+ "reading-client-progress",
33
+ "routing-to-channels",
34
+ "stellar-scf-grants-advisor",
35
+ ];
36
+ /** `<cli package root>/templates` (same depth from `src/lib` and `dist/lib`). */
37
+ export const CLI_TEMPLATES_DIR = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..", "..", "templates");
38
+ /**
39
+ * Root directory of the installed catalog package, or null when none resolves.
40
+ * Resolves the package's entry point and walks up to its package.json, because
41
+ * older versions do not export `./package.json`.
42
+ */
43
+ export function resolveInstalledCatalogRoot(resolve = createRequire(import.meta.url).resolve) {
44
+ for (const name of CATALOG_TEMPLATE_PACKAGES) {
45
+ let entry;
46
+ try {
47
+ entry = resolve(name);
48
+ }
49
+ catch {
50
+ continue; // not installed under this name
51
+ }
52
+ for (let dir = path.dirname(entry); dir !== path.dirname(dir); dir = path.dirname(dir)) {
53
+ const pj = path.join(dir, "package.json");
54
+ if (!fs.existsSync(pj))
55
+ continue;
56
+ if (JSON.parse(fs.readFileSync(pj, "utf8")).name === name)
57
+ return dir;
58
+ }
59
+ }
60
+ return null;
61
+ }
62
+ function catalogSkillDir(catalogRoot, name) {
63
+ if (!catalogRoot)
64
+ return null;
65
+ const dir = path.join(catalogRoot, "skills", name);
66
+ return fs.existsSync(path.join(dir, "SKILL.md")) ? dir : null;
67
+ }
68
+ function catalogAutomationFiles(catalogRoot) {
69
+ const dir = catalogRoot ? path.join(catalogRoot, "automations") : null;
70
+ if (!dir || !fs.existsSync(dir))
71
+ return [];
72
+ return fs.readdirSync(dir).filter((f) => f.endsWith(".automation.json"));
73
+ }
74
+ /**
75
+ * The SKILL.md directories bridge-setup seeds: each agency skill from the
76
+ * installed catalog when it ships it, else from the CLI; plus every CLI runtime
77
+ * skill. `fromCatalog` names the skills read from the catalog.
78
+ */
79
+ export function resolveAgencySkillDirs(opts) {
80
+ const agency = new Set(AGENCY_SKILLS);
81
+ const dirs = [];
82
+ const fromCatalog = [];
83
+ const cliDirs = opts.cliSkillsDir ? discoverSkillDirs(opts.cliSkillsDir) : [];
84
+ for (const cliDir of cliDirs)
85
+ if (!agency.has(path.basename(cliDir)))
86
+ dirs.push(cliDir);
87
+ for (const name of AGENCY_SKILLS) {
88
+ const fromPkg = catalogSkillDir(opts.catalogRoot, name);
89
+ if (fromPkg) {
90
+ dirs.push(fromPkg);
91
+ fromCatalog.push(name);
92
+ continue;
93
+ }
94
+ const cliDir = cliDirs.find((d) => path.basename(d) === name);
95
+ if (cliDir)
96
+ dirs.push(cliDir);
97
+ }
98
+ return { dirs, fromCatalog };
99
+ }
100
+ /**
101
+ * The automation templates directory: the `override` (AUTOMATION_TEMPLATES_DIR)
102
+ * when set (null if it does not exist), else the installed catalog's
103
+ * `automations/` when it ships any `*.automation.json`, else the CLI copy.
104
+ */
105
+ export function resolveAutomationTemplatesDir(opts) {
106
+ if (opts.override)
107
+ return fs.existsSync(opts.override) ? opts.override : null;
108
+ if (opts.catalogRoot && catalogAutomationFiles(opts.catalogRoot).length > 0)
109
+ return path.join(opts.catalogRoot, "automations");
110
+ return fs.existsSync(opts.cliDir) ? opts.cliDir : null;
111
+ }
112
+ /**
113
+ * CLI copies the installed catalog makes redundant, as paths relative to the CLI
114
+ * package root (`templates/skills/<name>`, `templates/automations/<file>`).
115
+ */
116
+ export function catalogRetirementViolations(catalogRoot, cliTemplatesDir) {
117
+ const out = [];
118
+ for (const name of AGENCY_SKILLS)
119
+ if (catalogSkillDir(catalogRoot, name) && fs.existsSync(path.join(cliTemplatesDir, "skills", name)))
120
+ out.push(`templates/skills/${name}`);
121
+ for (const file of catalogAutomationFiles(catalogRoot))
122
+ if (fs.existsSync(path.join(cliTemplatesDir, "automations", file)))
123
+ out.push(`templates/automations/${file}`);
124
+ return out;
125
+ }
126
+ //# sourceMappingURL=catalog-templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-templates.js","sourceRoot":"","sources":["../../src/lib/catalog-templates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Which CLI is running: its version AND the commit it was built from.
3
+ *
4
+ * The version alone could not tell an Oct-11 test-branch build from current
5
+ * main (2026-10-15 devbox incident: same version, old code, wrong success
6
+ * line). `build` stamps `dist/build-info.json` (`scripts/write-build-info.mjs`);
7
+ * running from source (`tsx`) there is no stamp, and that is said, not hidden.
8
+ */
9
+ export interface CliBuild {
10
+ version: string;
11
+ sha?: string;
12
+ branch?: string;
13
+ /** Built with uncommitted changes under src/. */
14
+ dirty?: boolean;
15
+ builtAt?: string;
16
+ }
17
+ export declare function cliBuild(dir?: string): CliBuild;
18
+ /** "1.12.0 (a750d09 main, built 2026-10-15)" — the version stays the first word. */
19
+ export declare function formatCliBuild(b: CliBuild): string;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Which CLI is running: its version AND the commit it was built from.
3
+ *
4
+ * The version alone could not tell an Oct-11 test-branch build from current
5
+ * main (2026-10-15 devbox incident: same version, old code, wrong success
6
+ * line). `build` stamps `dist/build-info.json` (`scripts/write-build-info.mjs`);
7
+ * running from source (`tsx`) there is no stamp, and that is said, not hidden.
8
+ */
9
+ import fs from "node:fs";
10
+ import path from "node:path";
11
+ import { fileURLToPath } from "node:url";
12
+ // dist/lib/cli-build.js → dist/build-info.json, package.json at the package
13
+ // root; the same two hops from src/lib when running from source.
14
+ const here = path.dirname(fileURLToPath(import.meta.url));
15
+ function readJson(file) {
16
+ try {
17
+ return JSON.parse(fs.readFileSync(file, "utf8"));
18
+ }
19
+ catch {
20
+ return null;
21
+ }
22
+ }
23
+ export function cliBuild(dir = here) {
24
+ const pkg = readJson(path.join(dir, "..", "..", "package.json"));
25
+ const stamp = readJson(path.join(dir, "..", "build-info.json"));
26
+ return { version: pkg?.version ?? "unknown", ...(stamp ?? {}) };
27
+ }
28
+ /** "1.12.0 (a750d09 main, built 2026-10-15)" — the version stays the first word. */
29
+ export function formatCliBuild(b) {
30
+ if (!b.builtAt)
31
+ return `${b.version} (no build stamp: running from source or an unstamped build)`;
32
+ const day = b.builtAt.slice(0, 10);
33
+ if (!b.sha)
34
+ return `${b.version} (built ${day}, commit unknown)`;
35
+ return `${b.version} (${b.sha}${b.dirty ? "+changes" : ""}${b.branch ? ` ${b.branch}` : ""}, built ${day})`;
36
+ }
37
+ //# sourceMappingURL=cli-build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-build.js","sourceRoot":"","sources":["../../src/lib/cli-build.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAWzC,4EAA4E;AAC5E,iEAAiE;AACjE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,SAAS,QAAQ,CAAI,IAAY;IAC/B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAM,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAG,GAAG,IAAI;IACjC,MAAM,GAAG,GAAG,QAAQ,CAAuB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;IACvF,MAAM,KAAK,GAAG,QAAQ,CAA4B,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAC3F,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,IAAI,SAAS,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;AAClE,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,cAAc,CAAC,CAAW;IACxC,IAAI,CAAC,CAAC,CAAC,OAAO;QAAE,OAAO,GAAG,CAAC,CAAC,OAAO,8DAA8D,CAAC;IAClG,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACnC,IAAI,CAAC,CAAC,CAAC,GAAG;QAAE,OAAO,GAAG,CAAC,CAAC,OAAO,WAAW,GAAG,mBAAmB,CAAC;IACjE,OAAO,GAAG,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,GAAG,GAAG,CAAC;AAC9G,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Every call names its client program (`X-Synap-Client: <name>/<version>`), so
3
+ * the pod's usage telemetry can tell the CLI, its stdio MCP bridge and the
4
+ * synap-bridge mod apart on one key and one conversation.
5
+ *
6
+ * Driven through the real doors: `hubGet` (every Hub call goes through
7
+ * `sessionHeaders`), the real bridge pump, and the `synap mcp bridge` command.
8
+ */
9
+ import { readFileSync } from "node:fs";
10
+ import { PassThrough } from "node:stream";
11
+ import { afterEach, describe, expect, it, vi } from "vitest";
12
+ const captured = vi.hoisted(() => ({ opts: undefined }));
13
+ vi.mock("./mcp-bridge.js", async (orig) => {
14
+ const real = await orig();
15
+ return {
16
+ ...real,
17
+ runMcpBridge: vi.fn(async (opts) => {
18
+ captured.opts = opts;
19
+ }),
20
+ };
21
+ });
22
+ import { hubGet } from "./hub-client.js";
23
+ import { mcpBridgeHeaders, CLIENT_HEADER, clientHeader } from "./conversation-headers.js";
24
+ import { mcpBridge } from "../commands/mcp.js";
25
+ const VERSION = JSON.parse(readFileSync(new URL("../../package.json", import.meta.url), "utf8")).version;
26
+ afterEach(() => {
27
+ vi.unstubAllGlobals();
28
+ vi.unstubAllEnvs();
29
+ });
30
+ describe("X-Synap-Client", () => {
31
+ it("names the package version; an unusable version says unknown", () => {
32
+ expect(VERSION).toMatch(/^\d+\.\d+\.\d+/);
33
+ expect(clientHeader("synap-cli")).toEqual({ [CLIENT_HEADER]: `synap-cli/${VERSION}` });
34
+ expect(clientHeader("synap-cli", "1 2")).toEqual({ [CLIENT_HEADER]: "synap-cli/unknown" });
35
+ });
36
+ it("every Hub call sends synap-cli/<version>", async () => {
37
+ const seen = [];
38
+ vi.stubGlobal("fetch", vi.fn(async (_url, init) => {
39
+ seen.push(init.headers);
40
+ return new Response(JSON.stringify({ ok: true }), {
41
+ status: 200,
42
+ headers: { "content-type": "application/json" },
43
+ });
44
+ }));
45
+ await hubGet("/workspaces", {}, { podUrl: "https://pod.example", apiKey: "k" });
46
+ expect(seen).toHaveLength(1);
47
+ expect(seen[0][CLIENT_HEADER]).toBe(`synap-cli/${VERSION}`);
48
+ });
49
+ it("the stdio MCP bridge sends synap-cli-mcp/<version> on every request", async () => {
50
+ const { runMcpBridge } = await vi.importActual("./mcp-bridge.js");
51
+ const input = new PassThrough();
52
+ const output = new PassThrough();
53
+ const sent = [];
54
+ const fetchImpl = (async (_u, init) => {
55
+ sent.push(init.headers);
56
+ return new Response(JSON.stringify({ jsonrpc: "2.0", id: sent.length, result: {} }), {
57
+ status: 200,
58
+ headers: { "content-type": "application/json" },
59
+ });
60
+ });
61
+ const done = runMcpBridge({
62
+ url: "https://pod/mcp",
63
+ apiKey: "k",
64
+ headers: mcpBridgeHeaders(undefined, "/x"),
65
+ input,
66
+ output,
67
+ fetchImpl,
68
+ log: () => { },
69
+ });
70
+ input.write(JSON.stringify({ jsonrpc: "2.0", id: 1, method: "initialize", params: {} }) + "\n");
71
+ input.write(JSON.stringify({ jsonrpc: "2.0", id: 2, method: "tools/list" }) + "\n");
72
+ input.end();
73
+ await done;
74
+ expect(sent.length).toBe(2);
75
+ for (const h of sent)
76
+ expect(h[CLIENT_HEADER]).toBe(`synap-cli-mcp/${VERSION}`);
77
+ });
78
+ it("`synap mcp bridge` hands the bridge those headers", async () => {
79
+ vi.stubEnv("SYNAP_HUB_API_KEY", "k");
80
+ await mcpBridge({ url: "https://pod/mcp" });
81
+ expect(captured.opts?.headers?.[CLIENT_HEADER]).toBe(`synap-cli-mcp/${VERSION}`);
82
+ expect(captured.opts?.headers?.["X-Synap-Conversation"]).toBeTruthy();
83
+ });
84
+ });
85
+ //# sourceMappingURL=client-header.test.js.map