@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
@@ -0,0 +1,261 @@
1
+ /**
2
+ * `synap session wait [sessionId] --events <kinds>` and `--hook`.
3
+ *
4
+ * `--events` waits on the session CHANGE FEED (`lib/session-feed.ts`) instead
5
+ * of answers only: answers, decided proposals, stage moves, the owner's room
6
+ * messages and — on pods that deliver them — messages from another session's
7
+ * agent (`session_message`). It prints each event's FENCED text, its intent
8
+ * and its sender session, and the exact reply (with `--cause`).
9
+ *
10
+ * `--hook` is the same wait shaped for a Claude Code `asyncRewake` Stop hook
11
+ * (installed by `synap hooks install-wake` / `synap init`): it blocks until a
12
+ * wake-worthy event, prints the message on stderr and exits 2 — the code
13
+ * Claude Code reads as "wake the model with this" — and exits 0 on everything
14
+ * else (timeout, no attached session, a newer waiter, a failure), so a hook
15
+ * can never wake an agent with an error and loop. The contract it relies on is
16
+ * documented in `lib/wake-hook-settings.ts`.
17
+ */
18
+ import chalk from "chalk";
19
+ import { log } from "../utils/logger.js";
20
+ import { resolveHubConfig, resolveActiveSessionId, renderHubError, } from "../lib/hub-client.js";
21
+ import { getClaudeSessionId } from "../lib/session-lens.js";
22
+ import { isUuid, requireFullId } from "../lib/id.js";
23
+ import { parseDuration } from "./proposals-await.js";
24
+ import { SESSION_MESSAGE_KIND, SessionMessagesUnsupportedError, WAKE_HOOK_DEFAULT_KINDS, isWakeEvent, parseEventKinds, renderFeedEvent, renderWakeMessage, waitForSessionFeed, } from "../lib/session-feed.js";
25
+ import { claimWake, isWakeOwner, readWakeState, recordRead, takeDelivery, wakeStatePath, } from "../lib/wake-state.js";
26
+ import { SESSION_WAIT_EXIT } from "./session-wait.js";
27
+ /** What `--hook` exits with — Claude Code's asyncRewake reads 2 as "wake". */
28
+ export const WAKE_HOOK_EXIT = { WAKE: 2, IDLE: 0 };
29
+ const DEFAULT_TIMEOUT_MS = 30 * 60_000;
30
+ function parseLimit(raw) {
31
+ if (raw === undefined)
32
+ return undefined;
33
+ const n = Number(raw);
34
+ return Number.isInteger(n) && n >= 1 && n <= 100 ? n : null;
35
+ }
36
+ // ─── --events ─────────────────────────────────────────────────────────────────
37
+ export async function waitSessionFeedCommand(sessionIdArg, opts) {
38
+ const fail = (msg) => {
39
+ console.error(chalk.red(msg));
40
+ process.exit(SESSION_WAIT_EXIT.FAILURE);
41
+ };
42
+ let kinds;
43
+ try {
44
+ kinds = opts.events ? parseEventKinds(opts.events) : [...WAKE_HOOK_DEFAULT_KINDS];
45
+ }
46
+ catch (e) {
47
+ return fail(e.message);
48
+ }
49
+ const timeoutMs = parseDuration(opts.timeout, DEFAULT_TIMEOUT_MS);
50
+ if (timeoutMs === null) {
51
+ return fail("Unparseable duration. Use a number with a unit: 500ms, 30s, 15m, 2h (bare number = seconds).");
52
+ }
53
+ const limit = parseLimit(opts.limit);
54
+ if (limit === null)
55
+ return fail("--limit must be a whole number between 1 and 100.");
56
+ let cfg;
57
+ let sessionId;
58
+ let result;
59
+ try {
60
+ cfg = await resolveHubConfig(opts);
61
+ const resolved = sessionIdArg ?? resolveActiveSessionId(cfg.podUrl);
62
+ if (!resolved) {
63
+ return fail("No session given and none attached to this terminal. Pass one, or run: synap session attach <id>");
64
+ }
65
+ requireFullId(resolved, "session", chalk, log);
66
+ sessionId = resolved;
67
+ if (!opts.json) {
68
+ log.dim(`Waiting on session ${sessionId.slice(0, 8)} for ${kinds.join(", ")}${opts.wakeOnly ? " (wake-worthy only)" : ""} — up to ${timeoutMs < 120_000 ? `${Math.round(timeoutMs / 1000)}s` : `${Math.round(timeoutMs / 60_000)}m`}.`);
69
+ }
70
+ result = await waitForSessionFeed(sessionId, cfg, {
71
+ kinds,
72
+ // No --since: the pod's UNREAD mode — answers not picked up and mail not
73
+ // read yet, of any age, so a message that landed before this wait counts.
74
+ since: opts.since,
75
+ timeoutMs,
76
+ limit,
77
+ stamp: !opts.peek,
78
+ once: opts.once,
79
+ ...(opts.wakeOnly ? { accept: isWakeEvent } : {}),
80
+ });
81
+ }
82
+ catch (e) {
83
+ if (e instanceof SessionMessagesUnsupportedError)
84
+ return fail(e.message);
85
+ renderHubError(e);
86
+ process.exit(SESSION_WAIT_EXIT.FAILURE);
87
+ return;
88
+ }
89
+ const resume = `synap session wait ${sessionId} --events ${kinds.join(",")}${opts.wakeOnly ? " --wake-only" : ""} --since ${result.nextSince ?? "<cursor>"}`;
90
+ if (opts.json) {
91
+ console.log(JSON.stringify({
92
+ sessionId,
93
+ since: result.nextSince,
94
+ events: result.events,
95
+ state: result.state,
96
+ hasMore: result.hasMore,
97
+ skipped: result.skipped,
98
+ ...(result.events.length === 0 ? { timedOut: true, elapsedMs: result.elapsedMs } : {}),
99
+ }, null, 2));
100
+ }
101
+ else if (result.events.length === 0) {
102
+ log.error(`Timed out after ${Math.round(result.elapsedMs / 1000)}s — nothing new.`);
103
+ if (result.skipped > 0)
104
+ log.hint(`${result.skipped} event(s) read that do not wake (--wake-only).`);
105
+ log.hint(`Resume → ${resume}`);
106
+ }
107
+ else {
108
+ for (const e of result.events) {
109
+ const [head, ...rest] = renderFeedEvent(e);
110
+ log.success(head ?? e.kind);
111
+ for (const line of rest)
112
+ console.log(line);
113
+ }
114
+ if (result.skipped > 0)
115
+ log.dim(`${result.skipped} other event(s) read that do not wake (--wake-only).`);
116
+ if (result.hasMore)
117
+ log.dim("More waiting: run the cursor line again.");
118
+ log.dim(`Cursor → ${resume}`);
119
+ }
120
+ process.exit(result.events.length > 0 ? SESSION_WAIT_EXIT.ANSWERED : SESSION_WAIT_EXIT.TIMEOUT);
121
+ }
122
+ // ─── --hook ───────────────────────────────────────────────────────────────────
123
+ /** The Stop hook's stdin (`session_id`, `cwd`, …); `{}` when there is none. */
124
+ async function readHookInput(timeoutMs = 1_000) {
125
+ if (process.stdin.isTTY)
126
+ return {};
127
+ return new Promise((resolve) => {
128
+ let raw = "";
129
+ const done = () => {
130
+ process.stdin.removeAllListeners();
131
+ process.stdin.pause();
132
+ try {
133
+ const v = JSON.parse(raw);
134
+ resolve(v && typeof v === "object" ? v : {});
135
+ }
136
+ catch {
137
+ resolve({});
138
+ }
139
+ };
140
+ const timer = setTimeout(done, timeoutMs);
141
+ timer.unref();
142
+ process.stdin.setEncoding("utf8");
143
+ process.stdin.on("data", (chunk) => (raw += chunk));
144
+ process.stdin.on("end", () => {
145
+ clearTimeout(timer);
146
+ done();
147
+ });
148
+ process.stdin.on("error", () => {
149
+ clearTimeout(timer);
150
+ done();
151
+ });
152
+ });
153
+ }
154
+ /** Write to stderr, THEN exit: a pipe write is async, and exit would cut it. */
155
+ function finishHook(code, message = "") {
156
+ return new Promise(() => {
157
+ if (!message)
158
+ process.exit(code);
159
+ process.stderr.write(message, () => process.exit(code));
160
+ });
161
+ }
162
+ /**
163
+ * The hook's whole decision, without the process around it — what the tests
164
+ * drive. Returns the exit code and the stderr text.
165
+ */
166
+ export async function runWakeHook(sessionId, cfg, p) {
167
+ const file = wakeStatePath(p.conversationId, sessionId);
168
+ const owner = claimWake(file);
169
+ let kinds = p.kinds;
170
+ let note = "";
171
+ const deadline = Date.now() + p.timeoutMs;
172
+ for (;;) {
173
+ let result;
174
+ try {
175
+ result = await waitForSessionFeed(sessionId, cfg, {
176
+ kinds,
177
+ since: readWakeState(file).since ?? undefined,
178
+ timeoutMs: Math.max(deadline - Date.now(), 1_000),
179
+ limit: p.limit,
180
+ pollSeconds: p.pollSeconds,
181
+ retryDelayMs: p.retryDelayMs,
182
+ accept: isWakeEvent,
183
+ onCursor: (since) => recordRead(file, { since }),
184
+ onSkipped: (carry) => recordRead(file, { since: null, carry }),
185
+ shouldStop: () => !isWakeOwner(file, owner),
186
+ });
187
+ }
188
+ catch (e) {
189
+ if (e instanceof SessionMessagesUnsupportedError && kinds.includes(SESSION_MESSAGE_KIND)) {
190
+ kinds = kinds.filter((k) => k !== SESSION_MESSAGE_KIND);
191
+ note = `[synap wake] ${e.message} Waiting on ${kinds.join(", ") || "nothing"} only.\n`;
192
+ if (kinds.length === 0)
193
+ return { code: WAKE_HOOK_EXIT.IDLE, message: note };
194
+ continue;
195
+ }
196
+ // Never wake an agent with an error: a hook that exits 2 on a failure
197
+ // would wake it, stop, re-arm and fail again, forever.
198
+ return {
199
+ code: WAKE_HOOK_EXIT.IDLE,
200
+ message: `${note}[synap wake] not waiting: ${e.message}\n`,
201
+ };
202
+ }
203
+ if (result.stopped)
204
+ return { code: WAKE_HOOK_EXIT.IDLE, message: `${note}[synap wake] a newer wait took over.\n` };
205
+ if (result.events.length === 0)
206
+ return { code: WAKE_HOOK_EXIT.IDLE, message: `${note}[synap wake] timed out, nothing new.\n` };
207
+ const delivery = takeDelivery(file, { events: result.events, since: result.nextSince });
208
+ if (delivery.events.length === 0) {
209
+ return { code: WAKE_HOOK_EXIT.IDLE, message: `${note}[synap wake] already delivered by another wait.\n` };
210
+ }
211
+ return {
212
+ code: WAKE_HOOK_EXIT.WAKE,
213
+ message: note + renderWakeMessage(sessionId, delivery.events, delivery.carried),
214
+ };
215
+ }
216
+ }
217
+ export async function waitSessionHookCommand(sessionIdArg, opts) {
218
+ // `claude -p` (and the SDK without streaming input) runs an asyncRewake hook
219
+ // in the FOREGROUND (Claude Code 2.1.309: backgrounded only when interactive
220
+ // or with streaming input), so a wait here would hold the whole run open.
221
+ const entrypoint = process.env.CLAUDE_CODE_ENTRYPOINT;
222
+ if (entrypoint?.startsWith("sdk-")) {
223
+ return finishHook(WAKE_HOOK_EXIT.IDLE, `[synap wake] not waiting: a non-interactive run (${entrypoint}) would block on this hook.\n`);
224
+ }
225
+ const input = await readHookInput();
226
+ // The hook's stdin names the conversation; the lens and the conversation
227
+ // header read it from the same variable the statusline uses.
228
+ if (input.session_id && !getClaudeSessionId())
229
+ process.env.SYNAP_LENS_SESSION = input.session_id;
230
+ let kinds;
231
+ try {
232
+ kinds = opts.events ? parseEventKinds(opts.events) : [...WAKE_HOOK_DEFAULT_KINDS];
233
+ }
234
+ catch (e) {
235
+ return finishHook(WAKE_HOOK_EXIT.IDLE, `[synap wake] ${e.message}\n`);
236
+ }
237
+ const timeoutMs = parseDuration(opts.timeout, DEFAULT_TIMEOUT_MS);
238
+ const limit = parseLimit(opts.limit);
239
+ if (timeoutMs === null || limit === null) {
240
+ return finishHook(WAKE_HOOK_EXIT.IDLE, "[synap wake] bad --timeout or --limit.\n");
241
+ }
242
+ let cfg;
243
+ try {
244
+ cfg = await resolveHubConfig(opts);
245
+ }
246
+ catch (e) {
247
+ return finishHook(WAKE_HOOK_EXIT.IDLE, `[synap wake] no pod: ${e.message}\n`);
248
+ }
249
+ const sessionId = sessionIdArg ?? resolveActiveSessionId(cfg.podUrl);
250
+ if (!sessionId || !isUuid(sessionId)) {
251
+ return finishHook(WAKE_HOOK_EXIT.IDLE, "[synap wake] no session attached to this terminal (synap session attach <id>), nothing to wait on.\n");
252
+ }
253
+ const { code, message } = await runWakeHook(sessionId, cfg, {
254
+ kinds,
255
+ timeoutMs,
256
+ conversationId: getClaudeSessionId(),
257
+ limit,
258
+ });
259
+ return finishHook(code, message);
260
+ }
261
+ //# sourceMappingURL=session-feed-wait.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-feed-wait.js","sourceRoot":"","sources":["../../src/commands/session-feed-wait.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * `synap session post <toSessionId> <text>` — an agent's typed message to
3
+ * ANOTHER session (a coordination post): `--intent blocked_on_you | handoff |
4
+ * done | fyi`, the reply's `--cause`, `--ref` pointers to the state behind it.
5
+ *
6
+ * The CLI twin of MCP `synap_post_message` with `toSessionId`. It goes through
7
+ * the Hub door `POST /threads/<target room>/messages` with `intent`, so the
8
+ * pod's ONE codec (`session-post.ts` in synap-backend) decides the sender
9
+ * session (this terminal's bound session, or `--from`), the target and the
10
+ * wake — only blocked_on_you and handoff may wake the other agent, a reply
11
+ * chain wakes at most once, at most 3 wakes per session pair per 10 minutes.
12
+ * The CLI decides none of it and only reports what the pod stamped.
13
+ *
14
+ * `--cause` is how a reply made inside a wake turn names the message that
15
+ * woke it (the feed event id `synap session wait --hook` prints): the pod's
16
+ * hop guard counts on it to stop two agents waking each other forever.
17
+ *
18
+ * A pod that predates coordination posts drops `intent` without a word and
19
+ * stores a plain room post; the reply then carries no `sessionPost`, and this
20
+ * command says so (exit 1) instead of reporting a delivery that did not happen.
21
+ */
22
+ import { type BaseOpts } from "./data.js";
23
+ export interface SessionPostOpts extends BaseOpts {
24
+ intent?: string;
25
+ cause?: string;
26
+ from?: string;
27
+ ref?: string[];
28
+ }
29
+ /** `kind:id` or `kind:id:label` → the pod's ref shape. The pod validates kind and id. */
30
+ export declare function parseRef(raw: string): {
31
+ kind: string;
32
+ id: string;
33
+ label?: string;
34
+ };
35
+ export declare const SESSION_POST_EXIT: {
36
+ readonly DELIVERED: 0;
37
+ readonly NOT_ADDRESSED: 1;
38
+ readonly FAILURE: 2;
39
+ };
40
+ export declare function sessionPostCommand(toSessionId: string, textParts: string[], opts: SessionPostOpts): Promise<void>;
@@ -0,0 +1,96 @@
1
+ /**
2
+ * `synap session post <toSessionId> <text>` — an agent's typed message to
3
+ * ANOTHER session (a coordination post): `--intent blocked_on_you | handoff |
4
+ * done | fyi`, the reply's `--cause`, `--ref` pointers to the state behind it.
5
+ *
6
+ * The CLI twin of MCP `synap_post_message` with `toSessionId`. It goes through
7
+ * the Hub door `POST /threads/<target room>/messages` with `intent`, so the
8
+ * pod's ONE codec (`session-post.ts` in synap-backend) decides the sender
9
+ * session (this terminal's bound session, or `--from`), the target and the
10
+ * wake — only blocked_on_you and handoff may wake the other agent, a reply
11
+ * chain wakes at most once, at most 3 wakes per session pair per 10 minutes.
12
+ * The CLI decides none of it and only reports what the pod stamped.
13
+ *
14
+ * `--cause` is how a reply made inside a wake turn names the message that
15
+ * woke it (the feed event id `synap session wait --hook` prints): the pod's
16
+ * hop guard counts on it to stop two agents waking each other forever.
17
+ *
18
+ * A pod that predates coordination posts drops `intent` without a word and
19
+ * stores a plain room post; the reply then carries no `sessionPost`, and this
20
+ * command says so (exit 1) instead of reporting a delivery that did not happen.
21
+ */
22
+ import chalk from "chalk";
23
+ import { log } from "../utils/logger.js";
24
+ import { resolveHubConfig, resolveUserId, hubGet, hubPost, renderHubError, } from "../lib/hub-client.js";
25
+ import { requireFullId } from "../lib/id.js";
26
+ /** `kind:id` or `kind:id:label` → the pod's ref shape. The pod validates kind and id. */
27
+ export function parseRef(raw) {
28
+ const [kind, id, ...label] = raw.split(":");
29
+ if (!kind || !id)
30
+ throw new Error(`--ref ${JSON.stringify(raw)}: use kind:id or kind:id:label (e.g. session:<id>).`);
31
+ return label.length > 0 ? { kind, id, label: label.join(":") } : { kind, id };
32
+ }
33
+ export const SESSION_POST_EXIT = { DELIVERED: 0, NOT_ADDRESSED: 1, FAILURE: 2 };
34
+ export async function sessionPostCommand(toSessionId, textParts, opts) {
35
+ requireFullId(toSessionId, "session", chalk, log);
36
+ const text = textParts.join(" ").trim();
37
+ if (!text) {
38
+ console.error(chalk.red("Say something: synap session post <sessionId> \"<text>\""));
39
+ process.exit(SESSION_POST_EXIT.FAILURE);
40
+ }
41
+ let refs;
42
+ try {
43
+ refs = opts.ref?.length ? opts.ref.map(parseRef) : undefined;
44
+ }
45
+ catch (e) {
46
+ console.error(chalk.red(e.message));
47
+ process.exit(SESSION_POST_EXIT.FAILURE);
48
+ }
49
+ let res;
50
+ try {
51
+ const cfg = await resolveHubConfig(opts);
52
+ // The target's room: every post to a session lands there.
53
+ const target = (await hubGet(`/focus-sessions/${toSessionId}`, {}, cfg));
54
+ if (!target?.channelId) {
55
+ console.error(chalk.red(`Session ${toSessionId} has no room yet, so it cannot receive a message.`));
56
+ process.exit(SESSION_POST_EXIT.FAILURE);
57
+ }
58
+ const userId = await resolveUserId(cfg);
59
+ res = (await hubPost(`/threads/${target.channelId}/messages`, {
60
+ role: "assistant",
61
+ content: text,
62
+ userId,
63
+ intent: opts.intent ?? "fyi",
64
+ ...(opts.from ? { fromSessionId: opts.from } : {}),
65
+ ...(refs ? { refs } : {}),
66
+ ...(opts.cause ? { cause: opts.cause } : {}),
67
+ }, cfg));
68
+ }
69
+ catch (e) {
70
+ renderHubError(e);
71
+ process.exit(SESSION_POST_EXIT.FAILURE);
72
+ return;
73
+ }
74
+ if (opts.json) {
75
+ console.log(JSON.stringify(res, null, 2));
76
+ process.exit(res.sessionPost ? SESSION_POST_EXIT.DELIVERED : SESSION_POST_EXIT.NOT_ADDRESSED);
77
+ }
78
+ const sp = res.sessionPost;
79
+ if (!sp) {
80
+ log.warn("This pod does not deliver agent messages yet: the text landed in that session's room as a plain post, addressed to no one, waking no one.");
81
+ if (res.messageId)
82
+ log.hint(`Message ${res.messageId}`);
83
+ process.exit(SESSION_POST_EXIT.NOT_ADDRESSED);
84
+ }
85
+ log.success(`${sp.intent} sent to session ${sp.to.sessionId.slice(0, 8)}` +
86
+ (sp.wake ? " — it may wake that session's agent." : " — delivered without waking anyone."));
87
+ if (res.note)
88
+ log.dim(res.note);
89
+ if (!sp.from.sessionId) {
90
+ log.dim("No sender session: this terminal is bound to none, so the other agent cannot reply. Pass --from <your session id>.");
91
+ }
92
+ if (res.messageId)
93
+ log.dim(`Message ${res.messageId}`);
94
+ process.exit(SESSION_POST_EXIT.DELIVERED);
95
+ }
96
+ //# sourceMappingURL=session-post.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-post.js","sourceRoot":"","sources":["../../src/commands/session-post.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * `synap session wait <sessionId>` — block until the session's human owner
3
+ * replies in the room.
4
+ *
5
+ * The loop-back half of the "ask, then wait" shape: an agent posts a question
6
+ * into the session room (`synap_post_message` / the room), then calls this
7
+ * command instead of a hand-rolled sleep loop or a blind re-invocation. It
8
+ * polls `GET /api/hub/focus-sessions/:id/answers` (owner-floored; `since`
9
+ * exclusive; contract in pod document
10
+ * `db390250-3a74-4707-bb29-5832a454d194`) and exits the moment a reply
11
+ * arrives, printing it so the calling agent (Claude Code or any shell agent)
12
+ * can read it back and continue.
13
+ *
14
+ * Reuses `pollForApproval` — the ONE poll loop already shared by CP login,
15
+ * agent-key provisioning, and `proposals await`. No second poller. The
16
+ * generic `onTick` hook (data:null on a network blip or non-2xx) is enough to
17
+ * add one behaviour pollForApproval doesn't have on its own: a FAILED read is
18
+ * not "no answer yet". A handful of transient blips are tolerated (the
19
+ * existing per-tick interval IS the backoff), but a run of them means the
20
+ * read is genuinely broken, not merely pending — so this throws out of the
21
+ * poll loop rather than silently accumulating toward a "timeout" verdict that
22
+ * would misreport a broken pod as "the human hasn't answered".
23
+ */
24
+ import { type HubConfig } from "../lib/hub-client.js";
25
+ import { type BaseOpts } from "./data.js";
26
+ /**
27
+ * The TYPED half of an answer, when the slot carried an `ask` (the pod's
28
+ * `SlotAnswerValue`). `text` stays the readable summary either way; this is
29
+ * the machine-readable pick. Loose on purpose: a CLI older than a new arm
30
+ * still prints it rather than dropping it.
31
+ */
32
+ export type SessionAnswerValue = {
33
+ type: string;
34
+ } & Record<string, unknown>;
35
+ export interface SessionAnswer {
36
+ id: string;
37
+ text: string;
38
+ /** Absent on pods that predate typed answers; `null` for a free-text one. */
39
+ value?: SessionAnswerValue | null;
40
+ answeredAt: string;
41
+ answeredBy: string;
42
+ messageId: string | null;
43
+ slot: {
44
+ label: string;
45
+ kind: string;
46
+ question: string | null;
47
+ } | null;
48
+ question: {
49
+ messageId: string;
50
+ text: string;
51
+ askedAt: string;
52
+ askedBy: string | null;
53
+ } | null;
54
+ }
55
+ export interface AnswersPage {
56
+ sessionId: string;
57
+ since: string | null;
58
+ answers: SessionAnswer[];
59
+ nextSince: string | null;
60
+ hasMore: boolean;
61
+ }
62
+ /**
63
+ * Thrown when a read FAILED (bad response shape, repeated non-2xx, or the
64
+ * network dropping) — never confused with "the human hasn't answered yet".
65
+ * Distinct from pollForApproval's own timeout error so the command can give
66
+ * each a different exit code.
67
+ */
68
+ export declare class SessionWaitReadFailure extends Error {
69
+ }
70
+ export interface WaitForAnswersOptions {
71
+ /** Only answers strictly after this ISO timestamp. Omit for "everything so far". */
72
+ since?: string;
73
+ timeoutMs: number;
74
+ intervalMs: number;
75
+ limit?: number;
76
+ }
77
+ export interface WaitForAnswersResult {
78
+ answers: SessionAnswer[];
79
+ /** Cursor to pass as `--since` on the next call — advances even on a timeout. */
80
+ nextSince: string | null;
81
+ elapsedMs: number;
82
+ }
83
+ /**
84
+ * Wait for at least one answer to land, or the deadline to elapse.
85
+ *
86
+ * Two phases, both against the same door: an IMMEDIATE first check (so an
87
+ * already-waiting answer, or a broken/owner-mismatched session, surfaces
88
+ * without paying one poll interval — same shape as `awaitProposal`'s first
89
+ * check), then the shared poll loop for the pending case.
90
+ */
91
+ export declare function waitForAnswers(sessionId: string, cfg: HubConfig, opts: WaitForAnswersOptions): Promise<WaitForAnswersResult>;
92
+ /**
93
+ * The answer's typed value worth printing: a structured pick (confirm, chip,
94
+ * form, provide). A `{type:"text"}` value adds nothing to the text line, and a
95
+ * malformed one (no string `type`) is not printed as if it were an answer.
96
+ */
97
+ export declare function typedValue(a: SessionAnswer): SessionAnswerValue | null;
98
+ /** Exit codes — documented on the command's `--help` (see index.ts). */
99
+ export declare const SESSION_WAIT_EXIT: {
100
+ readonly ANSWERED: 0;
101
+ readonly TIMEOUT: 1;
102
+ readonly FAILURE: 2;
103
+ };
104
+ export interface WaitSessionOpts extends BaseOpts {
105
+ since?: string;
106
+ timeout?: string;
107
+ interval?: string;
108
+ limit?: string;
109
+ /** The change feed instead of answers only (`session-feed-wait.ts`). */
110
+ events?: string;
111
+ once?: boolean;
112
+ wakeOnly?: boolean;
113
+ peek?: boolean;
114
+ hook?: boolean;
115
+ }
116
+ export declare function waitSessionCommand(sessionIdArg: string | undefined, opts: WaitSessionOpts): Promise<void>;