@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,117 @@
1
+ /**
2
+ * Why a pod probe failed, told apart: the network between this machine and the
3
+ * pod (egress proxy, DNS, firewall, TLS) versus the pod itself answering badly.
4
+ *
5
+ * `checkPodHealth` used to fold every failure into `healthy: false`, so `synap
6
+ * init` behind an egress proxy that answers 403 to CONNECT printed a pod-side
7
+ * checklist ("is the container running?") for a pod that was never contacted.
8
+ * This is the one place that taxonomy lives for the probe.
9
+ */
10
+ const PROXY_ENV = ["HTTPS_PROXY", "https_proxy", "HTTP_PROXY", "http_proxy", "ALL_PROXY", "all_proxy"];
11
+ /** The env proxy that applies to `podUrl`, credentials removed. Honors NO_PROXY. */
12
+ export function proxyInUse(podUrl, env = process.env) {
13
+ let target;
14
+ try {
15
+ target = new URL(podUrl);
16
+ }
17
+ catch {
18
+ return undefined;
19
+ }
20
+ const noProxy = (env.NO_PROXY ?? env.no_proxy ?? "").split(",").map((s) => s.trim()).filter(Boolean);
21
+ const bypass = noProxy.some((p) => p === "*" ||
22
+ target.hostname === p.replace(/^\./, "") ||
23
+ target.hostname.endsWith(p.startsWith(".") ? p : `.${p}`));
24
+ if (bypass)
25
+ return undefined;
26
+ const order = target.protocol === "https:" ? PROXY_ENV : [...PROXY_ENV.slice(2, 4), ...PROXY_ENV.slice(0, 2), ...PROXY_ENV.slice(4)];
27
+ for (const name of order) {
28
+ const raw = env[name];
29
+ if (!raw)
30
+ continue;
31
+ try {
32
+ const u = new URL(raw);
33
+ u.username = "";
34
+ u.password = "";
35
+ return { env: name, url: u.origin };
36
+ }
37
+ catch {
38
+ return { env: name, url: "(unparseable)" };
39
+ }
40
+ }
41
+ return undefined;
42
+ }
43
+ function codeOf(err) {
44
+ const cause = err?.cause;
45
+ for (const e of [cause, err]) {
46
+ const c = e?.code;
47
+ if (typeof c === "string")
48
+ return c;
49
+ }
50
+ return "";
51
+ }
52
+ /** Classify a fetch that threw (no HTTP answer from the pod). */
53
+ export function classifyFetchError(err, podUrl, env = process.env) {
54
+ const proxy = proxyInUse(podUrl, env);
55
+ const cause = err?.cause;
56
+ const message = [cause?.message, err instanceof Error ? err.message : String(err)].filter(Boolean)[0] ?? "unknown error";
57
+ const code = codeOf(err);
58
+ // undici's ProxyAgent: "Proxy response (403) !== 200 when HTTP Tunneling";
59
+ // Node's env-proxy support surfaces "Tunnel ... 403" / ERR_PROXY_TUNNEL.
60
+ const tunnel = /proxy response \((\d{3})\)|tunnel.*?(\d{3})|ERR_PROXY_TUNNEL/i.exec(`${code} ${message}`);
61
+ if (tunnel || code === "UND_ERR_PRX_TLS" || code === "ERR_PROXY_TUNNEL") {
62
+ const status = tunnel?.[1] ?? tunnel?.[2];
63
+ return {
64
+ kind: "proxy",
65
+ detail: status ? `the egress proxy refused the tunnel (HTTP ${status} to CONNECT)` : `the egress proxy refused the tunnel (${message})`,
66
+ proxy,
67
+ };
68
+ }
69
+ const name = err instanceof Error ? err.name : "";
70
+ const label = code || (name === "TimeoutError" || name === "AbortError" ? "TIMEOUT" : message);
71
+ return {
72
+ kind: "network",
73
+ detail: `${label}${label === message ? "" : `: ${message}`}`,
74
+ proxy,
75
+ };
76
+ }
77
+ /** Classify a /health that answered with a non-2xx status. */
78
+ export function classifyHttpStatus(status, podUrl, env = process.env) {
79
+ return { kind: "pod", detail: `/health answered HTTP ${status}`, proxy: proxyInUse(podUrl, env) };
80
+ }
81
+ /** The lines `synap init` / `synap doctor` print under "not reachable", by cause. */
82
+ export function reachChecklist(f) {
83
+ const proxyLine = f?.proxy ? [`Proxy in use: ${f.proxy.url} (from ${f.proxy.env})`] : [];
84
+ if (f?.kind === "proxy") {
85
+ return [
86
+ ...proxyLine,
87
+ "Your network's egress proxy blocked the connection. The pod was not contacted.",
88
+ "- Ask the proxy's owner to allow CONNECT to the pod host (port 443).",
89
+ "- Or bypass the proxy for it: export NO_PROXY=<pod-host>",
90
+ ];
91
+ }
92
+ if (f?.kind === "network") {
93
+ return [
94
+ ...proxyLine,
95
+ "This machine could not reach the pod host. The pod itself may be fine.",
96
+ "- Is the pod URL correct? (scheme + host + port)",
97
+ "- Are you online, on the right network/VPN, behind a firewall or proxy?",
98
+ "- Can you open the URL in a browser from this machine?",
99
+ ];
100
+ }
101
+ return [
102
+ ...proxyLine,
103
+ "- Is the pod URL correct? (scheme + host + port)",
104
+ "- Is the pod container running? On the server: ./synap health",
105
+ "- Is there a firewall or reverse proxy in the way?",
106
+ "- For localhost setups, did you start the stack? ./synap start",
107
+ ];
108
+ }
109
+ /** The one-line headline: names the underlying error, not just "not reachable". */
110
+ export function unreachableMessage(podUrl, failure) {
111
+ if (!failure)
112
+ return `Pod at ${podUrl} is not reachable.`;
113
+ return failure.kind === "pod"
114
+ ? `Pod at ${podUrl} is not healthy: ${failure.detail}.`
115
+ : `Could not reach ${podUrl}: ${failure.detail}.`;
116
+ }
117
+ //# sourceMappingURL=pod-reach.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pod-reach.js","sourceRoot":"","sources":["../../src/lib/pod-reach.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,67 @@
1
+ import { describe, expect, it, vi, afterEach } from "vitest";
2
+ import { checkPodHealth } from "./pod.js";
3
+ import { classifyFetchError, proxyInUse, reachChecklist, unreachableMessage } from "./pod-reach.js";
4
+ const POD = "https://pod.example.com";
5
+ /** What undici throws when the proxy answers CONNECT with 403. */
6
+ function proxy403() {
7
+ const err = new TypeError("fetch failed");
8
+ err.cause = Object.assign(new Error("Proxy response (403) !== 200 when HTTP Tunneling"), {
9
+ code: "UND_ERR_PRX_TUNNEL",
10
+ });
11
+ return err;
12
+ }
13
+ function refused() {
14
+ const err = new TypeError("fetch failed");
15
+ err.cause = Object.assign(new Error("connect ECONNREFUSED 127.0.0.1:443"), { code: "ECONNREFUSED" });
16
+ return err;
17
+ }
18
+ afterEach(() => {
19
+ vi.unstubAllGlobals();
20
+ vi.unstubAllEnvs();
21
+ });
22
+ describe("classifyFetchError", () => {
23
+ it("a proxy 403 on CONNECT is a proxy failure naming the status and the env proxy used", () => {
24
+ const f = classifyFetchError(proxy403(), POD, { HTTPS_PROXY: "http://user:secret@egress.corp:3128" });
25
+ expect(f.kind).toBe("proxy");
26
+ expect(f.detail).toContain("403");
27
+ expect(f.proxy).toEqual({ env: "HTTPS_PROXY", url: "http://egress.corp:3128" });
28
+ expect(JSON.stringify(f)).not.toContain("secret");
29
+ });
30
+ it("ECONNREFUSED is a network failure that names the code", () => {
31
+ const f = classifyFetchError(refused(), POD, {});
32
+ expect(f.kind).toBe("network");
33
+ expect(f.detail).toContain("ECONNREFUSED");
34
+ expect(f.proxy).toBeUndefined();
35
+ });
36
+ it("NO_PROXY bypass means no proxy is reported", () => {
37
+ expect(proxyInUse(POD, { HTTPS_PROXY: "http://egress:3128", NO_PROXY: ".example.com" })).toBeUndefined();
38
+ });
39
+ });
40
+ describe("checkPodHealth carries the cause", () => {
41
+ it("proxy 403: not healthy, failure.kind proxy", async () => {
42
+ vi.stubGlobal("fetch", vi.fn().mockRejectedValue(proxy403()));
43
+ const h = await checkPodHealth(POD);
44
+ expect(h.healthy).toBe(false);
45
+ expect(h.failure?.kind).toBe("proxy");
46
+ });
47
+ it("pod answering 503: failure.kind pod", async () => {
48
+ vi.stubGlobal("fetch", vi.fn().mockResolvedValue(new Response("down", { status: 503 })));
49
+ const h = await checkPodHealth(POD);
50
+ expect(h.failure).toMatchObject({ kind: "pod", detail: "/health answered HTTP 503" });
51
+ });
52
+ });
53
+ describe("init message and checklist branch on the cause", () => {
54
+ it("proxy failure: headline has the status; checklist is not the pod-container list", () => {
55
+ const f = classifyFetchError(proxy403(), POD, { HTTPS_PROXY: "http://egress.corp:3128" });
56
+ expect(unreachableMessage(POD, f)).toContain("403");
57
+ const list = reachChecklist(f).join("\n");
58
+ expect(list).toContain("HTTPS_PROXY");
59
+ expect(list).toContain("NO_PROXY");
60
+ expect(list).not.toContain("container running");
61
+ });
62
+ it("pod failure keeps the pod-side checklist", () => {
63
+ const list = reachChecklist({ kind: "pod", detail: "/health answered HTTP 503" }).join("\n");
64
+ expect(list).toContain("container running");
65
+ });
66
+ });
67
+ //# sourceMappingURL=pod-reach.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pod-reach.test.js","sourceRoot":"","sources":["../../src/lib/pod-reach.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Pod-wide vocabulary — ONE canonical spelling for "not scoped to a workspace".
3
+ *
4
+ * The CLI had four different spellings of the pod-wide idea:
5
+ *
6
+ * 1. `--global` boolean flag on `capture` (index.ts:648 → knowledge.ts:628)
7
+ * 2. omitting `--workspace` documented as "(omit for pod-wide)" on ask/capture/
8
+ * knowledge/cell (index.ts:318, 623, 896, 1858)
9
+ * 3. omitting `--pin-workspace` documented as "(default: pod-wide lens)" (index.ts:116)
10
+ * 4. `__pod_wide__` internal sentinel in the launch picker (launch.ts:576)
11
+ *
12
+ * Only #1 is a knob the user TYPES to opt in; #2 and #3 are absences (a
13
+ * different mechanism — you cannot alias "not passing a flag"), and #4 never
14
+ * leaves the process. So the unification here is narrow and honest: canonicalise
15
+ * the typed opt-in, and leave the absences alone rather than pretend they are
16
+ * spellings of the same switch.
17
+ *
18
+ * CANONICAL: `--pod-wide`. Chosen over `--global` because "global" is already
19
+ * overloaded in this CLI to mean "durable rather than per-session" — `synap use`
20
+ * and `synap project use` both report `scope: "global"` for exactly that other
21
+ * meaning (data.ts:229,281; lens.ts:227,355,396). "Pod-wide" is the term the
22
+ * data model and every help string already use for the scope axis, so it is the
23
+ * one that cannot be misread.
24
+ *
25
+ * `--global` remains an accepted ALIAS — it is what every existing script and
26
+ * the `synap capture --global` line in CLAUDE.md types, and breaking that to win
27
+ * a naming argument would be a worse defect than the inconsistency.
28
+ */
29
+ /** Every accepted spelling of the pod-wide opt-in. First entry is canonical. */
30
+ export declare const POD_WIDE_FLAGS: readonly ["pod-wide", "global"];
31
+ /** True when a user-supplied scope value spells "pod-wide" rather than naming a workspace. */
32
+ export declare function isPodWideToken(value: string | undefined | null): boolean;
33
+ /**
34
+ * Resolve the pod-wide opt-in from parsed options, accepting every spelling.
35
+ * Commander camel-cases `--pod-wide` to `podWide`.
36
+ */
37
+ export declare function resolvePodWide(opts: {
38
+ podWide?: boolean;
39
+ global?: boolean;
40
+ }): boolean;
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Pod-wide vocabulary — ONE canonical spelling for "not scoped to a workspace".
3
+ *
4
+ * The CLI had four different spellings of the pod-wide idea:
5
+ *
6
+ * 1. `--global` boolean flag on `capture` (index.ts:648 → knowledge.ts:628)
7
+ * 2. omitting `--workspace` documented as "(omit for pod-wide)" on ask/capture/
8
+ * knowledge/cell (index.ts:318, 623, 896, 1858)
9
+ * 3. omitting `--pin-workspace` documented as "(default: pod-wide lens)" (index.ts:116)
10
+ * 4. `__pod_wide__` internal sentinel in the launch picker (launch.ts:576)
11
+ *
12
+ * Only #1 is a knob the user TYPES to opt in; #2 and #3 are absences (a
13
+ * different mechanism — you cannot alias "not passing a flag"), and #4 never
14
+ * leaves the process. So the unification here is narrow and honest: canonicalise
15
+ * the typed opt-in, and leave the absences alone rather than pretend they are
16
+ * spellings of the same switch.
17
+ *
18
+ * CANONICAL: `--pod-wide`. Chosen over `--global` because "global" is already
19
+ * overloaded in this CLI to mean "durable rather than per-session" — `synap use`
20
+ * and `synap project use` both report `scope: "global"` for exactly that other
21
+ * meaning (data.ts:229,281; lens.ts:227,355,396). "Pod-wide" is the term the
22
+ * data model and every help string already use for the scope axis, so it is the
23
+ * one that cannot be misread.
24
+ *
25
+ * `--global` remains an accepted ALIAS — it is what every existing script and
26
+ * the `synap capture --global` line in CLAUDE.md types, and breaking that to win
27
+ * a naming argument would be a worse defect than the inconsistency.
28
+ */
29
+ /** Every accepted spelling of the pod-wide opt-in. First entry is canonical. */
30
+ export const POD_WIDE_FLAGS = ["pod-wide", "global"];
31
+ /** Accepted string tokens meaning "pod-wide" where a scope VALUE is parsed. */
32
+ const POD_WIDE_TOKENS = new Set(["pod", "pod-wide", "podwide", "pod_wide", "global"]);
33
+ /** True when a user-supplied scope value spells "pod-wide" rather than naming a workspace. */
34
+ export function isPodWideToken(value) {
35
+ if (!value)
36
+ return false;
37
+ return POD_WIDE_TOKENS.has(value.trim().toLowerCase());
38
+ }
39
+ /**
40
+ * Resolve the pod-wide opt-in from parsed options, accepting every spelling.
41
+ * Commander camel-cases `--pod-wide` to `podWide`.
42
+ */
43
+ export function resolvePodWide(opts) {
44
+ return Boolean(opts.podWide || opts.global);
45
+ }
46
+ //# sourceMappingURL=pod-wide.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pod-wide.js","sourceRoot":"","sources":["../../src/lib/pod-wide.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,gFAAgF;AAChF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAU,CAAC;AAE9D,+EAA+E;AAC/E,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEtF,8FAA8F;AAC9F,MAAM,UAAU,cAAc,CAAC,KAAgC;IAC7D,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,OAAO,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AACzD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,IAA6C;IAC1E,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;AAC9C,CAAC"}
package/dist/lib/pod.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Synap pod connection and management utilities.
3
3
  */
4
+ import { type ReachFailure } from "./pod-reach.js";
4
5
  export interface LocalPodConfig {
5
6
  podUrl: string;
6
7
  podId?: string;
@@ -9,17 +10,28 @@ export interface LocalPodConfig {
9
10
  hubApiKey: string;
10
11
  label?: string;
11
12
  savedAt: string;
13
+ /**
14
+ * "computer" = `hubApiKey` is THIS machine's own key on the pod, from the
15
+ * device flow (`device-connect.ts`); `agentUserId` is then the computer's id.
16
+ * Absent = a pasted key or an older operator key.
17
+ */
18
+ credential?: "computer";
19
+ /** When `hubApiKey` stops working (ISO), if the pod said. `synap login`/`init` renew it 7 days before. */
20
+ keyExpiresAt?: string;
21
+ /** The computer's name on the pod ("devbox"). */
22
+ computerName?: string;
12
23
  }
13
24
  /** SSOT for every connect/surface agent identity. The type is derived from this
14
25
  * array so the two can't drift. */
15
- export declare const SURFACE_NAMES: readonly ["raycast", "claude-code", "claude-desktop", "cursor", "codex", "opencode", "aider", "windsurf", "goose", "zed", "vscode", "discord"];
26
+ export declare const SURFACE_NAMES: readonly ["raycast", "claude-code", "claude-desktop", "cursor", "codex", "chatgpt", "chatgpt-oauth", "opencode", "aider", "windsurf", "goose", "zed", "vscode", "grok", "discord", "proton", "generic"];
16
27
  export type SurfaceName = (typeof SURFACE_NAMES)[number];
17
28
  /**
18
- * agentTypes already owned by OTHER doors — `POST /setup/agent` treats agentType
19
- * as a POD-WIDE SINGLETON, so `agents create` deriving a slug that collides with
20
- * one of these would silently hijack that door's agent + key. Superset of the
21
- * surfaces above plus the non-surface provisioning types (generic/openwebui MCP
22
- * mappings; openclaw/cli/memory). Single source of truth for the collision guard.
29
+ * agentTypes already owned by OTHER doors — provisioning is singleton per
30
+ * (createdByUserId, agentType), so `agents create` deriving a slug that collides
31
+ * with one of these would reuse that surface's agent for this user. Superset of
32
+ * the surfaces above plus the non-surface provisioning types (generic/openwebui
33
+ * MCP mappings; cli/memory, and the retired "openclaw", which pods may still
34
+ * hold an agent of). Single source of truth for the collision guard.
23
35
  */
24
36
  export declare const RESERVED_AGENT_TYPES: ReadonlySet<string>;
25
37
  export interface SurfaceAgentKey {
@@ -71,6 +83,19 @@ export interface MultiPodConfig {
71
83
  activeProject?: ActiveProjectBinding;
72
84
  /** Per-surface dedicated agent keys (provisioned with named agentType). Separate from pod profile keys. */
73
85
  agentKeys?: Partial<Record<SurfaceName, SurfaceAgentKey>>;
86
+ /**
87
+ * Multi-pod surface keys: surface → normalized podUrl → key.
88
+ * `agentKeys[surface]` remains the last-written default for backward compat;
89
+ * this map is the source of truth when a consumer knows which pod it is talking to.
90
+ */
91
+ agentKeysByPod?: Partial<Record<SurfaceName, Record<string, SurfaceAgentKey>>>;
92
+ /**
93
+ * Keys minted but NOT yet approved: surface → normalized podUrl → key. Never
94
+ * read for authentication. Kept so the next `connect` / `doctor --fix`
95
+ * resumes the SAME request instead of minting another (one approval, one key),
96
+ * and moved into `agentKeysByPod` only once the pod says it is live.
97
+ */
98
+ pendingAgentKeys?: Record<string, Record<string, PendingAgentKey>>;
74
99
  /** Workspace routing set by `synap connect` wizard — drives capture/recall defaults. */
75
100
  agentWorkspaceRouting?: AgentWorkspaceRouting;
76
101
  }
@@ -106,7 +131,7 @@ export declare function setPodOverrideByName(name: string): LocalPodConfig;
106
131
  * Consume a position-independent `--pod <name>` (or `--pod=<name>`) from argv and
107
132
  * register it as the per-invocation override. Mutates `argv` in place so commander
108
133
  * never sees the flag (it isn't registered per-command). No-op when the argv
109
- * targets a command that owns `--pod` itself (agents, bridge-setup). Throws with a
134
+ * targets a command that owns `--pod` itself (bridge-setup). Throws with a
110
135
  * helpful message when the named profile is unknown.
111
136
  */
112
137
  export declare function bootstrapPodOverride(argv: string[]): void;
@@ -154,8 +179,13 @@ export declare function getActiveWorkspaceId(): string | undefined;
154
179
  export declare function setActiveWorkspaceId(workspaceId: string, podName?: string): void;
155
180
  /** Get the active project ID: durable override set by `synap project use`. */
156
181
  export declare function getActiveProjectId(): string | undefined;
157
- /** Persist a project as the active context for all subsequent commands. */
158
- export declare function setActiveProjectId(projectId: string): void;
182
+ /**
183
+ * Persist a project as the active context for all subsequent commands.
184
+ * Records the pod it was set against (defaults to the active pod) so
185
+ * {@link resolveHubConfig} can refuse to send it to a foreign pod.
186
+ * Peer of {@link setActiveWorkspaceId}.
187
+ */
188
+ export declare function setActiveProjectId(projectId: string, podName?: string): void;
159
189
  /**
160
190
  * Pin project AND the pod it lives on together — the cross-pod `project use`
161
191
  * door. Stores the binding so later drift (active pod switched away from the
@@ -166,23 +196,53 @@ export declare function setActiveProjectBinding(binding: ActiveProjectBinding):
166
196
  export declare function getActiveProjectBinding(): ActiveProjectBinding | undefined;
167
197
  /** Remove the active project override — subsequent commands see all projects. */
168
198
  export declare function clearActiveProjectId(): void;
169
- /** Store a dedicated agent key for a specific surface (e.g. "raycast", "claude-code"). */
199
+ /**
200
+ * Store a dedicated agent key for a specific surface (e.g. "raycast", "claude-code").
201
+ * Always writes `agentKeys[surface]` (last-write, backward compat). When `key.podUrl`
202
+ * is set, also stores under `agentKeysByPod[surface][normalizedPodUrl]` so multi-pod
203
+ * surfaces can look up the key for the pod they are actually talking to.
204
+ */
170
205
  export declare function setSurfaceAgentKey(surface: SurfaceName, key: SurfaceAgentKey): void;
171
- /** Read back the stored agent key for a surface. Returns null if not provisioned. */
172
- export declare function getSurfaceAgentKey(surface: SurfaceName): SurfaceAgentKey | null;
206
+ /**
207
+ * Read back the stored agent key for a surface.
208
+ * When `podUrl` is provided, prefer `agentKeysByPod` for that pod; if only a legacy
209
+ * `agentKeys[surface]` entry exists, return it only when its podUrl matches (or is
210
+ * unset). Never return a key known to belong to a different pod.
211
+ */
212
+ export declare function getSurfaceAgentKey(surface: SurfaceName, podUrl?: string): SurfaceAgentKey | null;
213
+ /** A minted agent key waiting for its owner's approval (see `pendingAgentKeys`). */
214
+ export interface PendingAgentKey {
215
+ hubApiKey: string;
216
+ agentUserId: string;
217
+ podUrl: string;
218
+ /** The key's id on the pod (the approval page names it). */
219
+ keyId: string;
220
+ approvalUrl: string;
221
+ /** This computer's instance label the key was minted with. */
222
+ instanceId?: string;
223
+ createdAt: string;
224
+ }
225
+ export declare function getPendingAgentKey(surface: string, podUrl: string): PendingAgentKey | null;
226
+ export declare function setPendingAgentKey(surface: string, key: PendingAgentKey): void;
227
+ export declare function clearPendingAgentKey(surface: string, podUrl: string): void;
173
228
  export declare function setAgentWorkspaceRouting(routing: AgentWorkspaceRouting): void;
174
229
  export declare function getAgentWorkspaceRouting(): AgentWorkspaceRouting | undefined;
175
230
  /** Remove the active workspace override — subsequent commands see all workspaces. */
176
231
  export declare function clearActiveWorkspaceId(): void;
177
232
  export declare function removePodProfile(name: string): void;
178
- /** @deprecated Use addPodProfile("default", config) */
179
- export declare function saveLocalPodConfig(podConfig: LocalPodConfig): void;
180
233
  export interface PodStatus {
181
234
  url: string;
182
235
  healthy: boolean;
183
236
  version?: string;
184
237
  entityCount?: number;
185
238
  workspaceId?: string;
239
+ /**
240
+ * The address redirects to ANOTHER host — the pod has most likely moved
241
+ * (pod-moved.ts). Never followed; `synap doctor` asks the Control Plane.
242
+ */
243
+ moved?: boolean;
244
+ /** Why the probe failed, when it did (network / proxy / pod). Absent when healthy or moved. */
245
+ failure?: ReachFailure;
186
246
  }
187
247
  /**
188
248
  * Check if a Synap pod is healthy.
@@ -192,101 +252,3 @@ export declare function checkPodHealth(podUrl: string): Promise<PodStatus>;
192
252
  * Install Docker and start a self-hosted Synap pod.
193
253
  */
194
254
  export declare function startSelfHostedPod(): void;
195
- /**
196
- * Install the synap skill into OpenClaw.
197
- */
198
- /**
199
- * Open a Pod session for the CP-authenticated user.
200
- * Calls the issuer for a short-lived generic assertion, then exchanges that
201
- * assertion directly with the Pod. The issuer never receives a Pod session.
202
- *
203
- * Returns the Kratos session token the Pod mints after its own membership check.
204
- * That token authenticates subsequent pod tRPC calls (e.g.
205
- * `apiKeys.connectIntegration`) as the pod user, via the X-Session-Token header.
206
- * `sessionToken` is null only if the pod handshake returned no token (e.g. 409).
207
- */
208
- export declare function provisionUserOnPod(podUrl: string, cpToken: string): Promise<{
209
- sessionToken: string | null;
210
- }>;
211
- /**
212
- * Issue a scoped Hub Protocol API key on the pod for an authenticated user.
213
- *
214
- * Canonical path: the pod's `apiKeys.connectIntegration` tRPC procedure — the
215
- * same one the pod-admin `/connect` page and the browser's LocalCliRow use.
216
- * Auth is the Kratos session token minted by {@link provisionUserOnPod},
217
- * forwarded as the `X-Session-Token` header. (Replaces the removed CP relay
218
- * `POST /pods/setup-agent`, which now returns 410.)
219
- *
220
- * Backend tRPC uses the superjson transformer, so the input rides in a
221
- * `{ json: ... }` envelope and the output is unwrapped from `result.data.json`.
222
- */
223
- export declare function setupAgentViaPod(podUrl: string, sessionToken: string, integration?: "cli" | "openclaw" | "raycast" | "custom"): Promise<{
224
- hubApiKey: string;
225
- agentUserId: string;
226
- workspaceId: string;
227
- }>;
228
- /**
229
- * Enable OpenClaw as a free addon on a SELF-HOSTED pod.
230
- * Uses the PROVISIONING_TOKEN directly against the pod.
231
- *
232
- * Routes through the shared `provisionAgentKey()` wrapper (dynamic import to
233
- * avoid a circular pod.ts <-> targets.ts static import). `workspaceId` is no
234
- * longer part of the response — agents are pod-wide singletons now; scope is
235
- * granted separately via `enrollAgentIfNeeded()`, not returned from setup.
236
- */
237
- export declare function enableOpenClawAddon(podUrl: string, provisioningToken: string): Promise<{
238
- hubApiKey: string;
239
- agentUserId: string;
240
- workspaceId: string;
241
- }>;
242
- /**
243
- * Enable OpenClaw as an addon on a MANAGED pod via the Control Plane.
244
- * Calls POST /openclaw/provision on the CP (requires CP session token).
245
- * Returns the podId so the caller can poll status if needed.
246
- */
247
- export declare function enableOpenClawAddonManaged(cpToken: string, podUrl: string): Promise<{
248
- podId: string;
249
- }>;
250
- /**
251
- * Check server resources (RAM, disk).
252
- */
253
- export declare function checkServerResources(): {
254
- ramTotal: number;
255
- ramFree: number;
256
- diskFree: string;
257
- };
258
- /**
259
- * Start OpenClaw as a Docker addon on the local server.
260
- * Writes env vars to the pod's .env file and runs docker compose --profile openclaw.
261
- * Only works when the CLI is running ON the pod server.
262
- */
263
- /**
264
- * Find the Synap deploy directory — where the .env and docker-compose files live.
265
- *
266
- * Strategy (most reliable first):
267
- * 1. Docker label — inspect any running synap container for
268
- * com.docker.compose.project.working_dir (always accurate, zero guessing)
269
- * 2. Walk up from cwd — works when running from inside the repo
270
- * 3. Common install paths as a last resort
271
- */
272
- export declare function findSynapDeployDir(): string | null;
273
- /**
274
- * Write OpenClaw env vars into the deploy dir .env and start the container.
275
- * Does NOT wait for health — OpenClaw can take several minutes to initialize
276
- * (first run pulls ~1GB image + runs setup). Caller should tell user to run
277
- * `synap finish` once it's up.
278
- *
279
- * Returns the deploy dir used.
280
- */
281
- export declare function startOpenClawOnServer(hubApiKey: string, agentUserId: string, workspaceId: string, podUrl: string, projectId?: string): string;
282
- /**
283
- * Install the synap skill into OpenClaw.
284
- * Automatically chooses the right execution path:
285
- * - Local install: runs `openclaw skills install synap` directly
286
- * - Docker container: runs `docker exec <container> openclaw skills install synap`
287
- */
288
- export declare function installSynapSkill(containerName?: string): void;
289
- /**
290
- * Check whether the synap skill is installed inside a Docker container.
291
- */
292
- export declare function isSynapSkillInstalledInDocker(containerName: string): boolean;