@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,447 @@
1
+ /**
2
+ * synap rule — the fourth door.
3
+ *
4
+ * `ask` recalls, `capture` writes a fact, `diagnose` inspects. `rule` states a
5
+ * STANDING instruction: something that should keep holding, not something to do
6
+ * once.
7
+ *
8
+ * WHAT THIS DOOR DOES NOT DO — and deliberately never pretends to:
9
+ * synthesising the BEHAVIOUR half (an automation flow) from a sentence needs an
10
+ * agent, and that is not this wave. This command classifies the sentence, shows
11
+ * the reading (including the literal cues that fired, so an AI-authored routing
12
+ * is inspectable rather than oracular), refuses to guess when the classifier
13
+ * asks for clarification, creates the rule RECORD through the governed door,
14
+ * and then says plainly that no behaviour is attached yet.
15
+ *
16
+ * It does NOT point at `synap automate`: that door asks the agent for a
17
+ * standalone automation and never links it back to this rule (the only
18
+ * callers of `linkRuleHalves` are the rule create/update doors), so the hint
19
+ * sent users to make an orphan. The door that CAN attach behaviour to an
20
+ * existing rule is `skills.updateRule` with a sentence — reachable today from
21
+ * Relay's rule editor (Rules → the rule → Edit). The browser's rule modal is
22
+ * not that door: it writes a new automation, not an edit to this rule.
23
+ *
24
+ * The expensive failure this command exists to prevent is materialising a
25
+ * ONE-OFF request ("we're working on Stellar Grants — research the process")
26
+ * as a permanent rule. The classifier flags it; we stop and ask.
27
+ */
28
+ import chalk from "chalk";
29
+ import prompts from "prompts";
30
+ import { log } from "../utils/logger.js";
31
+ import { renderNextSteps } from "../lib/next-steps.js";
32
+ import { resolveHubConfig, hubGet, hubPost, HubError, } from "../lib/hub-client.js";
33
+ /**
34
+ * How many automations this rule activates.
35
+ *
36
+ * Prefers the pod's edge-derived projection and falls back to the JSONB only
37
+ * when the field is ABSENT — an older pod — never when it is an empty array,
38
+ * which is a real answer meaning "no behaviour". Coalescing those two would
39
+ * resurrect the divergence this function exists to end.
40
+ */
41
+ function behaviourCountOf(r) {
42
+ return r.automationIds !== undefined
43
+ ? r.automationIds.length
44
+ : (r.rule.behaviours?.length ?? 0);
45
+ }
46
+ /**
47
+ * The classify door is not deployed on the pod we are talking to. This is a
48
+ * distinct outcome from "the pod said no": we refuse to write a rule we could
49
+ * not read, so this fails CLOSED rather than falling back to a blind create.
50
+ */
51
+ export class ClassifyDoorMissingError extends Error {
52
+ door;
53
+ constructor(door) {
54
+ // User-facing sentence first, route second. "no rule-intent classifier
55
+ // door" named an internal component: true, and useless to someone deciding
56
+ // what to do about it. The route stays in parentheses because this is a
57
+ // terminal — the reader may well be the person who deploys the pod.
58
+ super(`This pod can't read rules yet — it's running a build from before rules existed (${door} not found).`);
59
+ this.door = door;
60
+ }
61
+ }
62
+ /**
63
+ * The door exists and the pod is current — this API KEY simply lacks the Bearer
64
+ * scope. A third distinct cause, and it must never be reported as either of the
65
+ * other two: "your pod is old" sends the user to an upgrade they don't need,
66
+ * and "your sentence is ambiguous" sends them to rewrite a fine sentence.
67
+ */
68
+ export class MissingScopeError extends Error {
69
+ scope;
70
+ constructor(scope) {
71
+ super(`This API key lacks the \`${scope}\` scope.`);
72
+ this.scope = scope;
73
+ }
74
+ }
75
+ /** Discriminate the door's two different 403s by their body. */
76
+ function scopeErrorOrRethrow(err, scope) {
77
+ if (err instanceof HubError && err.status === 403) {
78
+ throw new MissingScopeError(scope);
79
+ }
80
+ throw err;
81
+ }
82
+ // ── Transport: the Hub-REST rule doors ───────────────────────────────────────
83
+ // NOT `${podUrl}/trpc/skills.*`. Those are `protectedProcedure`, and
84
+ // `src/commands/automation.ts:118-131` documents that a `protectedProcedure`
85
+ // trips an identity-remap bug for API-key-authenticated CLI callers and answers
86
+ // a bare 403. The Hub-REST doors reach the same logic through
87
+ // `scopedProcedure`, which is API-key-native.
88
+ //
89
+ // Every door the CLI touches is named here and nowhere else, so a backend
90
+ // contract correction is a one-place change.
91
+ const CLASSIFY_DOOR = "POST /api/hub/rules/classify";
92
+ const liveDeps = {
93
+ // Body is `{ text, context? }` — the door takes NO workspaceId. `context`
94
+ // (the pod's capability + profile slugs) is optional grounding that only
95
+ // sharpens confidences and can never raise a shape on its own, so it is
96
+ // deliberately not fetched: two extra round-trips before every `synap rule`
97
+ // would buy nothing the verdict depends on.
98
+ classify: async (text, cfg) => {
99
+ try {
100
+ return (await hubPost("/rules/classify", { text }, cfg));
101
+ }
102
+ catch (err) {
103
+ // A pod on an older build has no such route — a DIFFERENT outcome from
104
+ // both "your sentence is ambiguous" and "your key lacks the scope".
105
+ if (err instanceof HubError && err.status === 404) {
106
+ throw new ClassifyDoorMissingError(CLASSIFY_DOOR);
107
+ }
108
+ scopeErrorOrRethrow(err, "hub-protocol.read");
109
+ }
110
+ },
111
+ create: async (input, cfg) => {
112
+ try {
113
+ return (await hubPost("/rules", { ...input, automationIds: [] }, cfg));
114
+ }
115
+ catch (err) {
116
+ // The door answers a governance DENIAL with 403 + the verdict body
117
+ // (`{ status:"denied", reason }`), and a missing Bearer scope with 403 +
118
+ // `{ error }`. Same status, different causes — discriminate on the body,
119
+ // and hand the denial back as the normal result it is.
120
+ if (err instanceof HubError && err.status === 403) {
121
+ const body = err.body;
122
+ if (body?.status === "denied") {
123
+ return {
124
+ status: "denied",
125
+ reason: String(body.reason ?? "no reason given"),
126
+ };
127
+ }
128
+ }
129
+ scopeErrorOrRethrow(err, "hub-protocol.write");
130
+ }
131
+ },
132
+ // `includeProposed=true` is ALWAYS sent: this listing answers "what rules are
133
+ // there", and a rule awaiting review is one of them. Without it the door
134
+ // returns 0 straight after `synap rule "…"` proposes one, and the next reader
135
+ // (human or agent) proposes the same rule again. Proposed rows arrive marked
136
+ // (`status:"proposed"` + `proposalId`) and are rendered as pending, never
137
+ // silently mixed in with rules that are actually in effect. An older pod
138
+ // ignores the param and answers exactly as before.
139
+ list: async (cfg, workspaceId) => {
140
+ try {
141
+ const res = (await hubGet("/rules", { ...(workspaceId ? { workspaceId } : {}), includeProposed: "true" }, cfg));
142
+ return res?.rules ?? [];
143
+ }
144
+ catch (err) {
145
+ scopeErrorOrRethrow(err, "hub-protocol.read");
146
+ }
147
+ },
148
+ config: (opts) => resolveHubConfig(opts),
149
+ confirm: async (message) => {
150
+ if (!process.stdin.isTTY)
151
+ return false;
152
+ const { ok } = await prompts({ type: "confirm", name: "ok", message, initial: false });
153
+ return Boolean(ok);
154
+ },
155
+ };
156
+ // ── Rendering ────────────────────────────────────────────────────────────────
157
+ const SHAPE_MEANING = {
158
+ fact: "an instruction the agent should keep in mind",
159
+ behaviour: "something that should happen automatically",
160
+ structure: "how things should be organised",
161
+ schedule: "something recurring on a clock",
162
+ notification: "someone should be told",
163
+ extraction: "data should be pulled out of something",
164
+ unknown: "not recognisable as a standing rule",
165
+ };
166
+ /**
167
+ * Show WHY it read the sentence that way. A routing the user cannot inspect is
168
+ * exactly what this product refuses to ship, so the cues are printed beside
169
+ * every shape — not just the verdict.
170
+ *
171
+ * Cues are human-readable LABELS, not necessarily substrings of the input
172
+ * (some are synthetic, e.g. "identity attribute" / "capability: calendly"), so
173
+ * they are printed as a `because:` list and never highlighted in the sentence.
174
+ * `shapes` is never empty: the unclassifiable/one-off case arrives as a single
175
+ * `unknown` entry, which still carries the cues that led there — so it is
176
+ * rendered, not filtered away.
177
+ */
178
+ function renderReading(route) {
179
+ log.heading(" Understood as");
180
+ const width = Math.max(...route.shapes.map((s) => s.shape.length));
181
+ for (const s of route.shapes) {
182
+ const label = s.shape.padEnd(width);
183
+ const lead = s.shape === route.primary ? chalk.bold(label) : chalk.dim(label);
184
+ // Confidences are numbers in a column — pad so the decimal points align.
185
+ // Never rendered as a percentage: the classifier caps at 0.95 on purpose.
186
+ const conf = s.confidence.toFixed(2).padStart(5);
187
+ console.log(` ${lead} ${chalk.cyan(conf)} ${chalk.dim(SHAPE_MEANING[s.shape])}`);
188
+ if (s.cues.length > 0) {
189
+ console.log(chalk.dim(` ${" ".repeat(width)} because: ${s.cues.join(", ")}`));
190
+ }
191
+ }
192
+ }
193
+ function scopeLabel(scope) {
194
+ return scope.kind === "workspace" && scope.workspaceId
195
+ ? `workspace ${scope.workspaceId.slice(0, 8)}…`
196
+ : scope.kind;
197
+ }
198
+ export async function rule(text, opts, deps = liveDeps) {
199
+ const intent = text.trim();
200
+ if (!intent) {
201
+ console.error(chalk.red('Error: a rule is required. Usage: synap rule "your rule"'));
202
+ process.exit(1);
203
+ return;
204
+ }
205
+ let cfg;
206
+ try {
207
+ cfg = await deps.config({ podUrl: opts.podUrl, apiKey: opts.apiKey });
208
+ }
209
+ catch (err) {
210
+ log.error(err instanceof Error ? err.message : String(err));
211
+ process.exit(1);
212
+ return;
213
+ }
214
+ const workspaceId = opts.podWide ? undefined : (opts.workspace ?? cfg.workspaceId);
215
+ const scope = workspaceId
216
+ ? { kind: "workspace", workspaceId }
217
+ : { kind: "pod" };
218
+ // 1. READ before writing. A rule we could not classify is a rule we refuse
219
+ // to create — nothing here falls back to a blind create.
220
+ let route;
221
+ let classifyOutcome = "classify-failed";
222
+ try {
223
+ route = await deps.classify(intent, cfg);
224
+ }
225
+ catch (err) {
226
+ if (err instanceof ClassifyDoorMissingError) {
227
+ classifyOutcome = "classify-door-missing";
228
+ log.error(err.message);
229
+ log.hint("This is your POD's build, not your sentence — update the pod, then retry.");
230
+ log.hint("`synap rule` will not create a rule it could not read first.");
231
+ }
232
+ else if (err instanceof MissingScopeError) {
233
+ classifyOutcome = "missing-scope";
234
+ log.error(err.message);
235
+ log.hint("This is your API KEY, not your pod or your sentence — re-issue it with that scope:");
236
+ log.hint(" synap connect --target=<surface>");
237
+ }
238
+ else {
239
+ log.error(err instanceof Error ? err.message : String(err));
240
+ }
241
+ if (opts.json) {
242
+ console.log(JSON.stringify({ ok: false, outcome: classifyOutcome, intent }, null, 2));
243
+ }
244
+ process.exit(1);
245
+ return;
246
+ }
247
+ if (!opts.json) {
248
+ log.heading(" Rule");
249
+ log.dim(`"${intent}"`);
250
+ renderReading(route);
251
+ log.blank();
252
+ console.log(chalk.dim(` scope: ${scopeLabel(scope)}`));
253
+ }
254
+ // 2. Refuse to guess. `--yes` does NOT override this: the classifier is
255
+ // saying it cannot route the sentence, and skipping a confirmation is not
256
+ // the same as answering the question.
257
+ if (route.needsClarification) {
258
+ if (opts.json) {
259
+ console.log(JSON.stringify({ ok: false, outcome: "needs-clarification", intent, route }, null, 2));
260
+ }
261
+ else {
262
+ log.blank();
263
+ log.warn(`Ambiguous: ${route.needsClarification.reason}`);
264
+ log.hint(route.needsClarification.question);
265
+ log.hint("Nothing was created — this is your sentence, not your pod. Re-run with a clearer one.");
266
+ }
267
+ process.exit(1);
268
+ return;
269
+ }
270
+ // 3. A one-off request is not a rule. Creating a permanent rule from a
271
+ // one-shot ask is the expensive mistake — stop and confirm.
272
+ if (route.oneShot) {
273
+ if (opts.json && !opts.yes) {
274
+ console.log(JSON.stringify({ ok: false, outcome: "one-shot-refused", intent, route }, null, 2));
275
+ process.exit(1);
276
+ return;
277
+ }
278
+ if (!opts.json) {
279
+ log.blank();
280
+ log.warn("This reads as a ONE-OFF request, not a standing rule.");
281
+ log.hint("A rule is permanent — it keeps applying. For a one-time job, ask the agent:");
282
+ log.hint(` synap ask "${intent}"`);
283
+ }
284
+ if (!opts.yes) {
285
+ const confirmed = await deps.confirm("Create a permanent rule anyway?");
286
+ if (!confirmed) {
287
+ log.blank();
288
+ log.info("No rule created.");
289
+ renderNextSteps([
290
+ { command: `synap ask "${intent}"`, why: "run this once instead of standing it up as a rule" },
291
+ { command: "synap rule --yes \"<text>\"", why: "create it as a rule anyway" },
292
+ ]);
293
+ return;
294
+ }
295
+ }
296
+ }
297
+ // 4. Governed write. `proposed` is the normal agent outcome — a PR, not a
298
+ // failure — and is never rendered as an error.
299
+ let result;
300
+ try {
301
+ result = await deps.create({ intent, scope }, cfg);
302
+ }
303
+ catch (err) {
304
+ log.error(err instanceof Error ? err.message : String(err));
305
+ if (err instanceof MissingScopeError) {
306
+ log.hint("Re-issue the key with that scope: synap connect --target=<surface>");
307
+ }
308
+ if (opts.json) {
309
+ console.log(JSON.stringify({
310
+ ok: false,
311
+ outcome: err instanceof MissingScopeError ? "missing-scope" : "create-failed",
312
+ intent,
313
+ }, null, 2));
314
+ }
315
+ process.exit(1);
316
+ return;
317
+ }
318
+ const nextSteps = [];
319
+ if (result.status === "proposed" && result.proposalId) {
320
+ nextSteps.push({
321
+ command: `synap open proposal ${result.proposalId}`,
322
+ why: "review and approve the rule",
323
+ });
324
+ }
325
+ nextSteps.push({ command: "synap rule list", why: "see every rule and what is attached" });
326
+ if (opts.json) {
327
+ console.log(JSON.stringify({
328
+ ok: result.status !== "denied",
329
+ outcome: result.status,
330
+ intent,
331
+ scope,
332
+ route,
333
+ ...(result.ruleId ? { ruleId: result.ruleId } : {}),
334
+ ...(result.proposalId ? { proposalId: result.proposalId } : {}),
335
+ ...(result.reason ? { reason: result.reason } : {}),
336
+ // Honest about the half that does not exist yet.
337
+ behaviourAttached: false,
338
+ nextSteps,
339
+ }, null, 2));
340
+ if (result.status === "denied")
341
+ process.exit(1);
342
+ return;
343
+ }
344
+ log.blank();
345
+ if (result.status === "denied") {
346
+ log.error(`Rule refused: ${result.reason ?? "no reason given"}`);
347
+ process.exit(1);
348
+ return;
349
+ }
350
+ if (result.status === "proposed") {
351
+ log.info("Rule — proposed (queued for your review)");
352
+ if (result.proposalId)
353
+ log.dim(` proposal: ${result.proposalId}`);
354
+ }
355
+ else {
356
+ log.success(`Rule created${result.ruleId ? " " + chalk.dim(result.ruleId) : ""}`);
357
+ }
358
+ log.warn("Intent recorded only — no behaviour is attached, so this rule will not run anything.");
359
+ log.hint(`${result.status === "proposed" ? "Once approved, open it" : "To make it run, open it"} in Relay (Rules → this rule → Edit) and set its WHEN and THEN.`);
360
+ log.hint("`synap automate` would build a separate automation that is not linked to this rule.");
361
+ renderNextSteps(nextSteps);
362
+ }
363
+ export async function ruleList(opts, deps = liveDeps) {
364
+ let cfg;
365
+ let rows;
366
+ try {
367
+ cfg = await deps.config({ podUrl: opts.podUrl, apiKey: opts.apiKey });
368
+ rows = await deps.list(cfg, opts.workspace ?? cfg.workspaceId);
369
+ }
370
+ catch (err) {
371
+ log.error(err instanceof Error ? err.message : String(err));
372
+ if (err instanceof MissingScopeError) {
373
+ log.hint("Re-issue the key with that scope: synap connect --target=<surface>");
374
+ }
375
+ process.exit(1);
376
+ return;
377
+ }
378
+ if (opts.json) {
379
+ console.log(JSON.stringify({
380
+ ok: true,
381
+ count: rows.length,
382
+ rules: rows.map((r) => ({
383
+ id: r.id,
384
+ name: r.name,
385
+ approved: r.approved,
386
+ // A pod that predates the proposed-rule read sends no `status`;
387
+ // every row it returns IS a materialized rule.
388
+ status: r.status ?? "active",
389
+ ...(r.proposalId ? { proposalId: r.proposalId } : {}),
390
+ intent: r.rule.intent,
391
+ scope: r.rule.scope,
392
+ trust: r.rule.trust,
393
+ behaviourCount: behaviourCountOf(r),
394
+ behaviourAttached: behaviourCountOf(r) > 0,
395
+ })),
396
+ }, null, 2));
397
+ return;
398
+ }
399
+ log.heading(` Rules ${chalk.cyan(String(rows.length))}`);
400
+ if (rows.length === 0) {
401
+ log.dim("none yet");
402
+ renderNextSteps([
403
+ { command: 'synap rule "<your rule>"', why: "state a standing rule in plain language" },
404
+ ]);
405
+ return;
406
+ }
407
+ const intents = rows.map((r) => r.rule.intent);
408
+ const intentWidth = Math.min(56, Math.max(...intents.map((i) => i.length)));
409
+ const scopes = rows.map((r) => scopeLabel(r.rule.scope));
410
+ const scopeWidth = Math.max(...scopes.map((s) => s.length));
411
+ for (const [i, r] of rows.entries()) {
412
+ // Three states, not two. A PROPOSED rule does not exist on the pod yet —
413
+ // collapsing it into "awaiting review" (which an unapproved but REAL row
414
+ // also is) would hide that nothing was written.
415
+ const proposed = r.status === "proposed";
416
+ const badge = proposed
417
+ ? chalk.magenta("◇")
418
+ : r.approved
419
+ ? chalk.green("●")
420
+ : chalk.yellow("○");
421
+ const intent = intents[i].length > intentWidth
422
+ ? intents[i].slice(0, intentWidth - 1) + "…"
423
+ : intents[i].padEnd(intentWidth);
424
+ const count = behaviourCountOf(r);
425
+ // Counts are a column — pad the PLAIN text, then colour, so ANSI codes
426
+ // never enter the width arithmetic.
427
+ const plain = count > 0
428
+ ? `${String(count).padStart(2)} automation${count === 1 ? "" : "s"}`
429
+ : " — no behaviour";
430
+ const behaviour = count > 0 ? chalk.green(plain.padEnd(14)) : chalk.dim(plain.padEnd(14));
431
+ // A proposed rule's own id is not addressable yet — show the PROPOSAL id,
432
+ // which is the only id that opens anything (`synap open proposal <id>`).
433
+ const trailingId = proposed
434
+ ? chalk.magenta(`proposal ${(r.proposalId ?? "").slice(0, 8)}…`)
435
+ : chalk.dim(r.id.slice(0, 8) + "…");
436
+ console.log(` ${badge} ${intent} ${chalk.dim(scopes[i].padEnd(scopeWidth))} ${behaviour} ${trailingId}`);
437
+ }
438
+ log.blank();
439
+ console.log(chalk.dim(` ${chalk.green("●")} approved ${chalk.yellow("○")} awaiting review ${chalk.magenta("◇")} proposed — not written yet`));
440
+ renderNextSteps([
441
+ { command: "synap open proposal <id>", why: "approve a rule that is awaiting review" },
442
+ ]);
443
+ if (rows.some((r) => behaviourCountOf(r) === 0)) {
444
+ log.hint("A rule with no behaviour runs nothing — set its WHEN and THEN in Relay (Rules → the rule → Edit).");
445
+ }
446
+ }
447
+ //# sourceMappingURL=rule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule.js","sourceRoot":"","sources":["../../src/commands/rule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
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 { type HubConfig } from "../lib/hub-client.js";
19
+ import { type WaitSessionOpts } from "./session-wait.js";
20
+ export interface WaitSessionFeedOpts extends WaitSessionOpts {
21
+ events?: string;
22
+ once?: boolean;
23
+ wakeOnly?: boolean;
24
+ peek?: boolean;
25
+ hook?: boolean;
26
+ }
27
+ /** What `--hook` exits with — Claude Code's asyncRewake reads 2 as "wake". */
28
+ export declare const WAKE_HOOK_EXIT: {
29
+ readonly WAKE: 2;
30
+ readonly IDLE: 0;
31
+ };
32
+ export declare function waitSessionFeedCommand(sessionIdArg: string | undefined, opts: WaitSessionFeedOpts): Promise<void>;
33
+ /**
34
+ * The hook's whole decision, without the process around it — what the tests
35
+ * drive. Returns the exit code and the stderr text.
36
+ */
37
+ export declare function runWakeHook(sessionId: string, cfg: HubConfig, p: {
38
+ kinds: string[];
39
+ timeoutMs: number;
40
+ conversationId: string | undefined;
41
+ limit?: number;
42
+ pollSeconds?: number;
43
+ retryDelayMs?: number;
44
+ }): Promise<{
45
+ code: number;
46
+ message: string;
47
+ }>;
48
+ export declare function waitSessionHookCommand(sessionIdArg: string | undefined, opts: WaitSessionFeedOpts): Promise<void>;