@synap-core/cli 1.10.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 (461) 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 +297 -176
  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 +3 -14
  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 +9 -2
  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 +198 -25
  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 +307 -24
  50. package/dist/commands/data.js.map +1 -1
  51. package/dist/commands/diagnose.d.ts +66 -4
  52. package/dist/commands/diagnose.js +329 -29
  53. package/dist/commands/diagnose.js.map +1 -1
  54. package/dist/commands/digest.js +2 -1
  55. package/dist/commands/digest.js.map +1 -1
  56. package/dist/commands/doc.d.ts +25 -4
  57. package/dist/commands/doc.js +100 -18
  58. package/dist/commands/doc.js.map +1 -1
  59. package/dist/commands/doctor.d.ts +130 -0
  60. package/dist/commands/doctor.js +814 -0
  61. package/dist/commands/doctor.js.map +1 -0
  62. package/dist/commands/events.js +3 -1
  63. package/dist/commands/events.js.map +1 -1
  64. package/dist/commands/explain.js +5 -5
  65. package/dist/commands/explain.js.map +1 -1
  66. package/dist/commands/graph.js +5 -3
  67. package/dist/commands/graph.js.map +1 -1
  68. package/dist/commands/import.d.ts +368 -13
  69. package/dist/commands/import.js +1096 -55
  70. package/dist/commands/import.js.map +1 -1
  71. package/dist/commands/init.d.ts +20 -9
  72. package/dist/commands/init.js +433 -973
  73. package/dist/commands/init.js.map +1 -1
  74. package/dist/commands/keys.d.ts +1 -0
  75. package/dist/commands/keys.js +15 -2
  76. package/dist/commands/keys.js.map +1 -1
  77. package/dist/commands/knowledge.d.ts +28 -6
  78. package/dist/commands/knowledge.js +358 -73
  79. package/dist/commands/knowledge.js.map +1 -1
  80. package/dist/commands/launch.js +2 -2
  81. package/dist/commands/launch.js.map +1 -1
  82. package/dist/commands/lens.d.ts +37 -1
  83. package/dist/commands/lens.js +193 -72
  84. package/dist/commands/lens.js.map +1 -1
  85. package/dist/commands/market-authoring.d.ts +72 -0
  86. package/dist/commands/market-authoring.js +566 -0
  87. package/dist/commands/market-authoring.js.map +1 -0
  88. package/dist/commands/market-official.d.ts +58 -0
  89. package/dist/commands/market-official.js +84 -0
  90. package/dist/commands/market-official.js.map +1 -0
  91. package/dist/commands/market.d.ts +419 -20
  92. package/dist/commands/market.js +2124 -193
  93. package/dist/commands/market.js.map +1 -1
  94. package/dist/commands/mcp.d.ts +70 -13
  95. package/dist/commands/mcp.js +308 -40
  96. package/dist/commands/mcp.js.map +1 -1
  97. package/dist/commands/open.d.ts +39 -9
  98. package/dist/commands/open.js +80 -25
  99. package/dist/commands/open.js.map +1 -1
  100. package/dist/commands/playbook.d.ts +42 -0
  101. package/dist/commands/playbook.js +162 -0
  102. package/dist/commands/playbook.js.map +1 -0
  103. package/dist/commands/pod.js +1 -1
  104. package/dist/commands/pod.js.map +1 -1
  105. package/dist/commands/pods.d.ts +19 -0
  106. package/dist/commands/pods.js +220 -85
  107. package/dist/commands/pods.js.map +1 -1
  108. package/dist/commands/proposals-actions.d.ts +62 -0
  109. package/dist/commands/proposals-actions.js +146 -8
  110. package/dist/commands/proposals-actions.js.map +1 -1
  111. package/dist/commands/proposals-await.d.ts +68 -0
  112. package/dist/commands/proposals-await.js +248 -0
  113. package/dist/commands/proposals-await.js.map +1 -0
  114. package/dist/commands/proton-setup.d.ts +73 -0
  115. package/dist/commands/proton-setup.js +577 -0
  116. package/dist/commands/proton-setup.js.map +1 -0
  117. package/dist/commands/providers.d.ts +23 -0
  118. package/dist/commands/providers.js +126 -1
  119. package/dist/commands/providers.js.map +1 -1
  120. package/dist/commands/raycast.js +6 -2
  121. package/dist/commands/raycast.js.map +1 -1
  122. package/dist/commands/rule.d.ts +150 -0
  123. package/dist/commands/rule.js +447 -0
  124. package/dist/commands/rule.js.map +1 -0
  125. package/dist/commands/session-wait.d.ts +111 -0
  126. package/dist/commands/session-wait.js +209 -0
  127. package/dist/commands/session-wait.js.map +1 -0
  128. package/dist/commands/sessions.d.ts +52 -0
  129. package/dist/commands/sessions.js +479 -58
  130. package/dist/commands/sessions.js.map +1 -1
  131. package/dist/commands/skill-manage.d.ts +21 -0
  132. package/dist/commands/skill-manage.js +136 -19
  133. package/dist/commands/skill-manage.js.map +1 -1
  134. package/dist/commands/skills.js +19 -1
  135. package/dist/commands/skills.js.map +1 -1
  136. package/dist/commands/status.d.ts +1 -4
  137. package/dist/commands/status.js +5 -34
  138. package/dist/commands/status.js.map +1 -1
  139. package/dist/commands/statusline.backoff.test.d.ts +13 -0
  140. package/dist/commands/statusline.backoff.test.js +100 -0
  141. package/dist/commands/statusline.backoff.test.js.map +1 -0
  142. package/dist/commands/statusline.js +16 -9
  143. package/dist/commands/statusline.js.map +1 -1
  144. package/dist/commands/sync-status.d.ts +12 -0
  145. package/dist/commands/sync-status.js +125 -0
  146. package/dist/commands/sync-status.js.map +1 -0
  147. package/dist/commands/templates-retire.d.ts +34 -0
  148. package/dist/commands/templates-retire.js +192 -0
  149. package/dist/commands/templates-retire.js.map +1 -0
  150. package/dist/commands/tools.js +6 -21
  151. package/dist/commands/tools.js.map +1 -1
  152. package/dist/commands/tracks.d.ts +51 -0
  153. package/dist/commands/tracks.js +291 -0
  154. package/dist/commands/tracks.js.map +1 -0
  155. package/dist/commands/update.d.ts +3 -11
  156. package/dist/commands/update.js +5 -134
  157. package/dist/commands/update.js.map +1 -1
  158. package/dist/commands/upload.d.ts +68 -0
  159. package/dist/commands/upload.js +257 -0
  160. package/dist/commands/upload.js.map +1 -0
  161. package/dist/commands/vendor.d.ts +28 -0
  162. package/dist/commands/vendor.js +110 -0
  163. package/dist/commands/vendor.js.map +1 -0
  164. package/dist/commands/versions.js +6 -0
  165. package/dist/commands/versions.js.map +1 -1
  166. package/dist/commands/view.js +10 -5
  167. package/dist/commands/view.js.map +1 -1
  168. package/dist/commands/whoami.d.ts +23 -3
  169. package/dist/commands/whoami.js +169 -23
  170. package/dist/commands/whoami.js.map +1 -1
  171. package/dist/commands/worker.d.ts +122 -0
  172. package/dist/commands/worker.js +435 -0
  173. package/dist/commands/worker.js.map +1 -0
  174. package/dist/commands/worker.test.d.ts +1 -0
  175. package/dist/commands/worker.test.js +116 -0
  176. package/dist/commands/worker.test.js.map +1 -0
  177. package/dist/commands/workspace-ops.d.ts +35 -0
  178. package/dist/commands/workspace-ops.js +153 -0
  179. package/dist/commands/workspace-ops.js.map +1 -0
  180. package/dist/index.d.ts +6 -6
  181. package/dist/index.js +1009 -171
  182. package/dist/index.js.map +1 -1
  183. package/dist/lib/agent-connections.d.ts +31 -0
  184. package/dist/lib/agent-connections.js +33 -0
  185. package/dist/lib/agent-connections.js.map +1 -0
  186. package/dist/lib/agent-detect.d.ts +27 -0
  187. package/dist/lib/agent-detect.js +71 -0
  188. package/dist/lib/agent-detect.js.map +1 -0
  189. package/dist/lib/agent-door.d.ts +138 -0
  190. package/dist/lib/agent-door.js +426 -0
  191. package/dist/lib/agent-door.js.map +1 -0
  192. package/dist/lib/agents-config.d.ts +2 -0
  193. package/dist/lib/agents-config.js +4 -9
  194. package/dist/lib/agents-config.js.map +1 -1
  195. package/dist/lib/approval-poll.d.ts +31 -2
  196. package/dist/lib/approval-poll.js +20 -7
  197. package/dist/lib/approval-poll.js.map +1 -1
  198. package/dist/lib/atomic-file.d.ts +48 -0
  199. package/dist/lib/atomic-file.js +129 -0
  200. package/dist/lib/atomic-file.js.map +1 -0
  201. package/dist/lib/auth.d.ts +14 -9
  202. package/dist/lib/auth.js +44 -61
  203. package/dist/lib/auth.js.map +1 -1
  204. package/dist/lib/batch-approval.d.ts +85 -0
  205. package/dist/lib/batch-approval.js +170 -0
  206. package/dist/lib/batch-approval.js.map +1 -0
  207. package/dist/lib/capture-lane.d.ts +6 -5
  208. package/dist/lib/capture-lane.js +11 -8
  209. package/dist/lib/capture-lane.js.map +1 -1
  210. package/dist/lib/capture-structure.d.ts +342 -0
  211. package/dist/lib/capture-structure.js +295 -0
  212. package/dist/lib/capture-structure.js.map +1 -0
  213. package/dist/lib/catalog-templates.d.ts +59 -0
  214. package/dist/lib/catalog-templates.js +126 -0
  215. package/dist/lib/catalog-templates.js.map +1 -0
  216. package/dist/lib/cli-build.d.ts +19 -0
  217. package/dist/lib/cli-build.js +37 -0
  218. package/dist/lib/cli-build.js.map +1 -0
  219. package/dist/lib/conversation-headers.d.ts +18 -0
  220. package/dist/lib/conversation-headers.js +32 -0
  221. package/dist/lib/conversation-headers.js.map +1 -0
  222. package/dist/lib/cp-packages.d.ts +216 -4
  223. package/dist/lib/cp-packages.js +414 -11
  224. package/dist/lib/cp-packages.js.map +1 -1
  225. package/dist/lib/credential-class.d.ts +117 -0
  226. package/dist/lib/credential-class.js +116 -0
  227. package/dist/lib/credential-class.js.map +1 -0
  228. package/dist/lib/describe-lens.d.ts +35 -0
  229. package/dist/lib/describe-lens.js +40 -0
  230. package/dist/lib/describe-lens.js.map +1 -1
  231. package/dist/lib/device-connect.d.ts +125 -0
  232. package/dist/lib/device-connect.js +256 -0
  233. package/dist/lib/device-connect.js.map +1 -0
  234. package/dist/lib/directory-lens.d.ts +99 -0
  235. package/dist/lib/directory-lens.js +187 -0
  236. package/dist/lib/directory-lens.js.map +1 -0
  237. package/dist/lib/exporter-coverage.d.ts +71 -0
  238. package/dist/lib/exporter-coverage.js +97 -0
  239. package/dist/lib/exporter-coverage.js.map +1 -0
  240. package/dist/lib/hub-client.d.ts +43 -9
  241. package/dist/lib/hub-client.js +429 -65
  242. package/dist/lib/hub-client.js.map +1 -1
  243. package/dist/lib/id.d.ts +23 -0
  244. package/dist/lib/id.js +35 -0
  245. package/dist/lib/id.js.map +1 -0
  246. package/dist/lib/init-connect.d.ts +41 -0
  247. package/dist/lib/init-connect.js +75 -0
  248. package/dist/lib/init-connect.js.map +1 -0
  249. package/dist/lib/init-exit.d.ts +24 -0
  250. package/dist/lib/init-exit.js +41 -0
  251. package/dist/lib/init-exit.js.map +1 -0
  252. package/dist/lib/init-flow.d.ts +25 -0
  253. package/dist/lib/init-flow.js +40 -0
  254. package/dist/lib/init-flow.js.map +1 -0
  255. package/dist/lib/init-handoff.d.ts +16 -0
  256. package/dist/lib/init-handoff.js +19 -0
  257. package/dist/lib/init-handoff.js.map +1 -0
  258. package/dist/lib/init-output.d.ts +18 -0
  259. package/dist/lib/init-output.js +43 -0
  260. package/dist/lib/init-output.js.map +1 -0
  261. package/dist/lib/init-pod.d.ts +45 -0
  262. package/dist/lib/init-pod.js +36 -0
  263. package/dist/lib/init-pod.js.map +1 -0
  264. package/dist/lib/installed.d.ts +210 -11
  265. package/dist/lib/installed.js +234 -36
  266. package/dist/lib/installed.js.map +1 -1
  267. package/dist/lib/key-approval.d.ts +57 -0
  268. package/dist/lib/key-approval.js +117 -0
  269. package/dist/lib/key-approval.js.map +1 -0
  270. package/dist/lib/key-diagnosis.d.ts +56 -0
  271. package/dist/lib/key-diagnosis.js +227 -0
  272. package/dist/lib/key-diagnosis.js.map +1 -0
  273. package/dist/lib/key-doctor.d.ts +136 -0
  274. package/dist/lib/key-doctor.js +286 -0
  275. package/dist/lib/key-doctor.js.map +1 -0
  276. package/dist/lib/key-locations.d.ts +120 -0
  277. package/dist/lib/key-locations.js +326 -0
  278. package/dist/lib/key-locations.js.map +1 -0
  279. package/dist/lib/key-source.d.ts +66 -0
  280. package/dist/lib/key-source.js +106 -0
  281. package/dist/lib/key-source.js.map +1 -0
  282. package/dist/lib/key-state.d.ts +70 -0
  283. package/dist/lib/key-state.js +115 -0
  284. package/dist/lib/key-state.js.map +1 -0
  285. package/dist/lib/kind-package.d.ts +181 -0
  286. package/dist/lib/kind-package.js +679 -0
  287. package/dist/lib/kind-package.js.map +1 -0
  288. package/dist/lib/knowledge-title.d.ts +24 -0
  289. package/dist/lib/knowledge-title.js +46 -0
  290. package/dist/lib/knowledge-title.js.map +1 -0
  291. package/dist/lib/knowledge-title.test.d.ts +1 -0
  292. package/dist/lib/knowledge-title.test.js +34 -0
  293. package/dist/lib/knowledge-title.test.js.map +1 -0
  294. package/dist/lib/machine-instance.d.ts +64 -0
  295. package/dist/lib/machine-instance.js +142 -0
  296. package/dist/lib/machine-instance.js.map +1 -0
  297. package/dist/lib/mcp-bridge.d.ts +42 -0
  298. package/dist/lib/mcp-bridge.js +147 -0
  299. package/dist/lib/mcp-bridge.js.map +1 -0
  300. package/dist/lib/mcp-bridge.test.d.ts +1 -0
  301. package/dist/lib/mcp-bridge.test.js +90 -0
  302. package/dist/lib/mcp-bridge.test.js.map +1 -0
  303. package/dist/lib/mcp-call.d.ts +30 -0
  304. package/dist/lib/mcp-call.js +107 -0
  305. package/dist/lib/mcp-call.js.map +1 -0
  306. package/dist/lib/mcp-snippets.d.ts +53 -0
  307. package/dist/lib/mcp-snippets.js +82 -0
  308. package/dist/lib/mcp-snippets.js.map +1 -0
  309. package/dist/lib/next-steps.d.ts +8 -0
  310. package/dist/lib/next-steps.js +31 -1
  311. package/dist/lib/next-steps.js.map +1 -1
  312. package/dist/lib/package-wire.d.ts +179 -0
  313. package/dist/lib/package-wire.js +68 -0
  314. package/dist/lib/package-wire.js.map +1 -0
  315. package/dist/lib/pair-link.d.ts +38 -0
  316. package/dist/lib/pair-link.js +68 -0
  317. package/dist/lib/pair-link.js.map +1 -0
  318. package/dist/lib/pod-wide.d.ts +40 -0
  319. package/dist/lib/pod-wide.js +46 -0
  320. package/dist/lib/pod-wide.js.map +1 -0
  321. package/dist/lib/pod.d.ts +119 -115
  322. package/dist/lib/pod.js +206 -412
  323. package/dist/lib/pod.js.map +1 -1
  324. package/dist/lib/project-ref.d.ts +9 -3
  325. package/dist/lib/project-ref.js +10 -4
  326. package/dist/lib/project-ref.js.map +1 -1
  327. package/dist/lib/review-credential.d.ts +119 -0
  328. package/dist/lib/review-credential.js +147 -0
  329. package/dist/lib/review-credential.js.map +1 -0
  330. package/dist/lib/safe-open.d.ts +49 -0
  331. package/dist/lib/safe-open.js +119 -0
  332. package/dist/lib/safe-open.js.map +1 -0
  333. package/dist/lib/session-lens.d.ts +40 -1
  334. package/dist/lib/session-lens.js +54 -4
  335. package/dist/lib/session-lens.js.map +1 -1
  336. package/dist/lib/superwhisper-import.d.ts +8 -0
  337. package/dist/lib/superwhisper-import.js +14 -7
  338. package/dist/lib/superwhisper-import.js.map +1 -1
  339. package/dist/lib/superwhisper-title.test.d.ts +1 -0
  340. package/dist/lib/superwhisper-title.test.js +18 -0
  341. package/dist/lib/superwhisper-title.test.js.map +1 -0
  342. package/dist/lib/targets.d.ts +134 -10
  343. package/dist/lib/targets.js +962 -258
  344. package/dist/lib/targets.js.map +1 -1
  345. package/dist/lib/template-file.d.ts +78 -0
  346. package/dist/lib/template-file.js +140 -0
  347. package/dist/lib/template-file.js.map +1 -0
  348. package/dist/lib/template-lifecycle.d.ts +217 -0
  349. package/dist/lib/template-lifecycle.js +433 -0
  350. package/dist/lib/template-lifecycle.js.map +1 -0
  351. package/dist/lib/template-steps.d.ts +88 -0
  352. package/dist/lib/template-steps.js +118 -0
  353. package/dist/lib/template-steps.js.map +1 -0
  354. package/dist/lib/time-ago.d.ts +2 -0
  355. package/dist/lib/time-ago.js +15 -0
  356. package/dist/lib/time-ago.js.map +1 -0
  357. package/dist/utils/logger.js +5 -2
  358. package/dist/utils/logger.js.map +1 -1
  359. package/package.json +25 -18
  360. package/skills/README.md +12 -10
  361. package/skills/agent-os/SKILL.md +220 -99
  362. package/skills/manifest.json +2 -2
  363. package/skills/onboard/SKILL.md +61 -25
  364. package/skills/synap/README.md +5 -8
  365. package/skills/synap/SKILL.md +1185 -301
  366. package/skills/synap/_order.txt +7 -0
  367. package/skills/synap/_skill.yaml +1 -1
  368. package/skills/synap/automations.md +15 -0
  369. package/skills/synap/capture.md +54 -151
  370. package/skills/synap/cli-operations.md +24 -18
  371. package/skills/synap/common-mistakes.md +1 -0
  372. package/skills/synap/concepts.md +28 -0
  373. package/skills/synap/content-os.md +92 -0
  374. package/skills/synap/creative-loop.md +15 -10
  375. package/skills/synap/crm.md +21 -52
  376. package/skills/synap/digesting-a-channel.md +25 -0
  377. package/skills/synap/document-embeds.md +141 -47
  378. package/skills/synap/escalation-ladder.md +20 -10
  379. package/skills/synap/focus-sessions.md +47 -21
  380. package/skills/synap/from-intent.md +142 -0
  381. package/skills/synap/governance-rules.md +4 -4
  382. package/skills/synap/governance.md +10 -7
  383. package/skills/synap/hand-off.md +33 -0
  384. package/skills/synap/inline-patterns.md +15 -7
  385. package/skills/synap/lenses.md +33 -15
  386. package/skills/synap/linking.md +41 -40
  387. package/skills/synap/mcp-remote-servers.md +64 -0
  388. package/skills/synap/mental-model.md +24 -22
  389. package/skills/synap/multi-entity-capture.md +6 -4
  390. package/skills/synap/operating-mode-rules.md +1 -1
  391. package/skills/synap/processes.md +118 -0
  392. package/skills/synap/quick-reference.md +5 -1
  393. package/skills/synap/reading.md +3 -1
  394. package/skills/synap/reflexes.md +12 -42
  395. package/skills/synap/viewframe-cells.md +38 -5
  396. package/skills/synap/work-flow.md +1 -1
  397. package/skills/synap/work-model.md +96 -0
  398. package/skills/synap/worked-examples.md +21 -1
  399. package/skills/synap/workspace-design.md +14 -10
  400. package/skills/synap/writes.md +165 -35
  401. package/skills/synap/writing-titles.md +63 -0
  402. package/skills/synap-app/SKILL.md +319 -0
  403. package/skills/synap-app/_order.txt +5 -0
  404. package/skills/synap-app/_skill.yaml +20 -0
  405. package/skills/synap-app/creating-the-base-app.md +64 -0
  406. package/skills/synap-app/governance.md +42 -0
  407. package/skills/synap-app/install-commands.md +55 -0
  408. package/skills/synap-app/overview.md +50 -0
  409. package/skills/synap-app/using-the-sdk.md +73 -0
  410. package/skills/synap-design/SKILL.md +474 -0
  411. package/skills/synap-design/_order.txt +4 -0
  412. package/skills/synap-design/_skill.yaml +21 -0
  413. package/skills/synap-design/loop.md +134 -0
  414. package/skills/synap-design/overview.md +44 -0
  415. package/skills/synap-design/principles.md +130 -0
  416. package/skills/synap-design/system.md +133 -0
  417. package/skills/synap-market/SKILL.md +625 -0
  418. package/skills/synap-market/_order.txt +5 -0
  419. package/skills/synap-market/_skill.yaml +24 -0
  420. package/skills/synap-market/author-and-publish.md +212 -0
  421. package/skills/synap-market/discover-and-fetch.md +59 -0
  422. package/skills/synap-market/governance-and-catalog.md +63 -0
  423. package/skills/synap-market/install.md +133 -0
  424. package/skills/synap-market/overview.md +119 -0
  425. package/skills/synap-schema/SKILL.md +172 -10
  426. package/skills/synap-schema/_order.txt +2 -0
  427. package/skills/synap-schema/_skill.yaml +4 -2
  428. package/skills/synap-schema/common-mistakes.md +4 -2
  429. package/skills/synap-schema/discover-profiles.md +1 -1
  430. package/skills/synap-schema/entity-scope.md +15 -3
  431. package/skills/synap-schema/extend-first.md +29 -0
  432. package/skills/synap-schema/extend-vs-create.md +1 -1
  433. package/skills/synap-schema/intent-vocabulary-ssot.md +111 -0
  434. package/skills/synap-schema/property-types.md +1 -1
  435. package/skills/synap-schema/relations.md +1 -1
  436. package/skills/synap-ui/SKILL.md +19 -12
  437. package/skills/synap-ui/_skill.yaml +1 -1
  438. package/skills/synap-ui/ai-companion.md +1 -1
  439. package/skills/synap-ui/arranging-bento.md +2 -0
  440. package/skills/synap-ui/bento-layouts.md +10 -10
  441. package/skills/synap-ui/bento-recipes.md +313 -543
  442. package/skills/synap-ui/four-builds.md +5 -0
  443. package/skills/synap-ui/view-types.md +2 -2
  444. package/skills/synap-ui/widget-catalog.md +22 -278
  445. package/templates/automations/bookmark-enrichment.automation.json +290 -13
  446. package/templates/automations/url-bookmark-capture.automation.json +73 -11
  447. package/templates/skills/authoring-playbooks/SKILL.md +6 -3
  448. package/templates/skills/authoring-playbooks/reference/stages-contract.md +15 -0
  449. package/templates/skills/authoring-playbooks/reference/worked-example.md +3 -0
  450. package/dist/commands/infra.d.ts +0 -21
  451. package/dist/commands/infra.js +0 -262
  452. package/dist/commands/infra.js.map +0 -1
  453. package/dist/lib/browser-auth.d.ts +0 -35
  454. package/dist/lib/browser-auth.js +0 -170
  455. package/dist/lib/browser-auth.js.map +0 -1
  456. package/dist/lib/openclaw.d.ts +0 -32
  457. package/dist/lib/openclaw.js +0 -164
  458. package/dist/lib/openclaw.js.map +0 -1
  459. package/dist/lib/seed.d.ts +0 -13
  460. package/dist/lib/seed.js +0 -135
  461. package/dist/lib/seed.js.map +0 -1
@@ -0,0 +1,295 @@
1
+ /**
2
+ * Shared shapes + honest reporting for the smart-capture pipeline
3
+ * (POST /capture/structure → POST /capture/execute).
4
+ *
5
+ * ONE declaration of the structure/execute wire shapes and ONE degraded/execute
6
+ * interpreter, imported by BOTH surfaces that drive this pipeline:
7
+ * • `synap capture "<free text>"` (commands/knowledge.ts)
8
+ * • `synap import <files|urls>` (commands/import.ts)
9
+ *
10
+ * These two used to keep independent `StructureResult` copies that had already
11
+ * drifted (import dropped fields knowledge kept). Consolidating here removes the
12
+ * drift AND the false-success reporting: the CLI now reports what /capture/execute
13
+ * ACTUALLY returned (applied vs proposed vs nothing-created) instead of guessing
14
+ * off the planned proposal count.
15
+ *
16
+ * Kept local to the CLI (not imported from @synap-core/hub-rest-client) because the
17
+ * CLI resolves the SDK via its built dist — the same reason the previous local
18
+ * mirrors existed. This is now the ONE mirror instead of two.
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
+ }
136
+ /**
137
+ * Interpret a /capture/execute response HONESTLY. Distinguishes applied vs
138
+ * proposed vs nothing-created and surfaces the real proposal/review handle so
139
+ * the CLI never claims "created" for a write that was proposed or a plan that
140
+ * only linked existing entities.
141
+ */
142
+ export function readCaptureExecute(res) {
143
+ const created = Array.isArray(res.created) ? res.created : [];
144
+ const proposed = res.status === "proposed" || Boolean(res.proposalId);
145
+ return {
146
+ proposed,
147
+ entitiesCreated: created.filter((c) => !c.linked).length,
148
+ entitiesLinked: created.filter((c) => c.linked).length,
149
+ relationsCreated: Array.isArray(res.relations) ? res.relations.length : 0,
150
+ proposalId: res.proposalId ? String(res.proposalId) : undefined,
151
+ reviewUrl: res.reviewUrl ? String(res.reviewUrl) : undefined,
152
+ ...(res.pendingWorkspaceSwitch?.suggestedWorkspaceId
153
+ ? { pendingWorkspaceSwitch: res.pendingWorkspaceSwitch }
154
+ : {}),
155
+ };
156
+ }
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). */
172
+ export function isDegraded(res) {
173
+ return res.degraded === true;
174
+ }
175
+ /**
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.
290
+ */
291
+ export function degradedMessage(res) {
292
+ const { title, detail } = describeDegradedReason(res.degradedReason);
293
+ return `${title} — nothing was created. ${detail}`;
294
+ }
295
+ //# sourceMappingURL=capture-structure.js.map
@@ -0,0 +1 @@
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,18 @@
1
+ /**
2
+ * The headers that name the calling CONVERSATION to the pod — the agent's own
3
+ * id, the one a person can reopen (`claude --resume <id>`). The pod reads
4
+ * `X-Synap-Conversation` as the conversation half of the client key, so every
5
+ * session the conversation touches records it (`resolveAgentConversation`,
6
+ * @synap-core/types/agents). Sent by every Hub call (`hub-client.ts`) and by
7
+ * the stdio MCP bridge (`mcp-bridge.ts`). Empty outside Claude Code.
8
+ */
9
+ export declare const CONVERSATION_HEADER = "X-Synap-Conversation";
10
+ export declare const CONVERSATION_CWD_HEADER = "X-Synap-Conversation-Cwd";
11
+ /** `claude-code:<uuid>` for the Claude Code conversation we run in, if any. */
12
+ export declare function claudeCodeConversation(sessionId: string | undefined): string | undefined;
13
+ /**
14
+ * The headers for `sessionId` (pass it explicitly: the CLI's live id is
15
+ * `getClaudeSessionId()`, a stdio server's is its spawn env). Empty without a
16
+ * real Claude Code id; the cwd rides only with a conversation.
17
+ */
18
+ export declare function conversationHeaders(sessionId: string | undefined, cwd?: string): Record<string, string>;
@@ -0,0 +1,32 @@
1
+ /**
2
+ * The headers that name the calling CONVERSATION to the pod — the agent's own
3
+ * id, the one a person can reopen (`claude --resume <id>`). The pod reads
4
+ * `X-Synap-Conversation` as the conversation half of the client key, so every
5
+ * session the conversation touches records it (`resolveAgentConversation`,
6
+ * @synap-core/types/agents). Sent by every Hub call (`hub-client.ts`) and by
7
+ * the stdio MCP bridge (`mcp-bridge.ts`). Empty outside Claude Code.
8
+ */
9
+ export const CONVERSATION_HEADER = "X-Synap-Conversation";
10
+ export const CONVERSATION_CWD_HEADER = "X-Synap-Conversation-Cwd";
11
+ const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
12
+ /** `claude-code:<uuid>` for the Claude Code conversation we run in, if any. */
13
+ export function claudeCodeConversation(sessionId) {
14
+ const id = sessionId?.trim();
15
+ return id && UUID.test(id) ? `claude-code:${id.toLowerCase()}` : undefined;
16
+ }
17
+ /**
18
+ * The headers for `sessionId` (pass it explicitly: the CLI's live id is
19
+ * `getClaudeSessionId()`, a stdio server's is its spawn env). Empty without a
20
+ * real Claude Code id; the cwd rides only with a conversation.
21
+ */
22
+ export function conversationHeaders(sessionId, cwd = process.cwd()) {
23
+ const conversation = claudeCodeConversation(sessionId);
24
+ if (!conversation)
25
+ return {};
26
+ // HTTP header values must be ByteStrings; a non-ASCII cwd is dropped rather
27
+ // than letting fetch throw and take the whole request down with it.
28
+ return /^[\x20-\x7E]{1,1024}$/.test(cwd)
29
+ ? { [CONVERSATION_HEADER]: conversation, [CONVERSATION_CWD_HEADER]: cwd }
30
+ : { [CONVERSATION_HEADER]: conversation };
31
+ }
32
+ //# sourceMappingURL=conversation-headers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-headers.js","sourceRoot":"","sources":["../../src/lib/conversation-headers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,sBAAsB,CAAC;AAC1D,MAAM,CAAC,MAAM,uBAAuB,GAAG,0BAA0B,CAAC;AAElE,MAAM,IAAI,GAAG,iEAAiE,CAAC;AAE/E,+EAA+E;AAC/E,MAAM,UAAU,sBAAsB,CAAC,SAA6B;IAClE,MAAM,EAAE,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,SAA6B,EAC7B,MAAc,OAAO,CAAC,GAAG,EAAE;IAE3B,MAAM,YAAY,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAC;IACvD,IAAI,CAAC,YAAY;QAAE,OAAO,EAAE,CAAC;IAC7B,4EAA4E;IAC5E,oEAAoE;IACpE,OAAO,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC;QACtC,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,EAAE,YAAY,EAAE,CAAC,uBAAuB,CAAC,EAAE,GAAG,EAAE;QACzE,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,EAAE,YAAY,EAAE,CAAC;AAC9C,CAAC"}