@synap-core/cli 1.10.0 → 1.12.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (461) hide show
  1. package/README.md +23 -198
  2. package/dist/build-info.json +6 -0
  3. package/dist/commands/agent-run.js +3 -2
  4. package/dist/commands/agent-run.js.map +1 -1
  5. package/dist/commands/agents.d.ts +33 -17
  6. package/dist/commands/agents.js +203 -237
  7. package/dist/commands/agents.js.map +1 -1
  8. package/dist/commands/app.d.ts +143 -0
  9. package/dist/commands/app.js +523 -0
  10. package/dist/commands/app.js.map +1 -0
  11. package/dist/commands/automate.d.ts +21 -0
  12. package/dist/commands/automate.js +42 -0
  13. package/dist/commands/automate.js.map +1 -0
  14. package/dist/commands/automation-schema.test.d.ts +16 -0
  15. package/dist/commands/automation-schema.test.js +77 -0
  16. package/dist/commands/automation-schema.test.js.map +1 -0
  17. package/dist/commands/automation.d.ts +12 -0
  18. package/dist/commands/automation.js +80 -35
  19. package/dist/commands/automation.js.map +1 -1
  20. package/dist/commands/bridge-setup.d.ts +14 -1
  21. package/dist/commands/bridge-setup.js +392 -128
  22. package/dist/commands/bridge-setup.js.map +1 -1
  23. package/dist/commands/cap-connections.d.ts +4 -4
  24. package/dist/commands/cap-connections.js +14 -14
  25. package/dist/commands/cap-connections.js.map +1 -1
  26. package/dist/commands/capability.d.ts +2 -0
  27. package/dist/commands/capability.js +297 -176
  28. package/dist/commands/capability.js.map +1 -1
  29. package/dist/commands/catalog.d.ts +275 -0
  30. package/dist/commands/catalog.js +481 -0
  31. package/dist/commands/catalog.js.map +1 -0
  32. package/dist/commands/cell.d.ts +155 -8
  33. package/dist/commands/cell.js +416 -40
  34. package/dist/commands/cell.js.map +1 -1
  35. package/dist/commands/centrality.js +3 -14
  36. package/dist/commands/centrality.js.map +1 -1
  37. package/dist/commands/connect.d.ts +38 -13
  38. package/dist/commands/connect.js +68 -167
  39. package/dist/commands/connect.js.map +1 -1
  40. package/dist/commands/connections.d.ts +3 -2
  41. package/dist/commands/connections.js +95 -25
  42. package/dist/commands/connections.js.map +1 -1
  43. package/dist/commands/context.js +9 -2
  44. package/dist/commands/context.js.map +1 -1
  45. package/dist/commands/data-extra.d.ts +34 -0
  46. package/dist/commands/data-extra.js +198 -25
  47. package/dist/commands/data-extra.js.map +1 -1
  48. package/dist/commands/data.d.ts +120 -2
  49. package/dist/commands/data.js +307 -24
  50. package/dist/commands/data.js.map +1 -1
  51. package/dist/commands/diagnose.d.ts +66 -4
  52. package/dist/commands/diagnose.js +329 -29
  53. package/dist/commands/diagnose.js.map +1 -1
  54. package/dist/commands/digest.js +2 -1
  55. package/dist/commands/digest.js.map +1 -1
  56. package/dist/commands/doc.d.ts +25 -4
  57. package/dist/commands/doc.js +100 -18
  58. package/dist/commands/doc.js.map +1 -1
  59. package/dist/commands/doctor.d.ts +130 -0
  60. package/dist/commands/doctor.js +814 -0
  61. package/dist/commands/doctor.js.map +1 -0
  62. package/dist/commands/events.js +3 -1
  63. package/dist/commands/events.js.map +1 -1
  64. package/dist/commands/explain.js +5 -5
  65. package/dist/commands/explain.js.map +1 -1
  66. package/dist/commands/graph.js +5 -3
  67. package/dist/commands/graph.js.map +1 -1
  68. package/dist/commands/import.d.ts +368 -13
  69. package/dist/commands/import.js +1096 -55
  70. package/dist/commands/import.js.map +1 -1
  71. package/dist/commands/init.d.ts +20 -9
  72. package/dist/commands/init.js +433 -973
  73. package/dist/commands/init.js.map +1 -1
  74. package/dist/commands/keys.d.ts +1 -0
  75. package/dist/commands/keys.js +15 -2
  76. package/dist/commands/keys.js.map +1 -1
  77. package/dist/commands/knowledge.d.ts +28 -6
  78. package/dist/commands/knowledge.js +358 -73
  79. package/dist/commands/knowledge.js.map +1 -1
  80. package/dist/commands/launch.js +2 -2
  81. package/dist/commands/launch.js.map +1 -1
  82. package/dist/commands/lens.d.ts +37 -1
  83. package/dist/commands/lens.js +193 -72
  84. package/dist/commands/lens.js.map +1 -1
  85. package/dist/commands/market-authoring.d.ts +72 -0
  86. package/dist/commands/market-authoring.js +566 -0
  87. package/dist/commands/market-authoring.js.map +1 -0
  88. package/dist/commands/market-official.d.ts +58 -0
  89. package/dist/commands/market-official.js +84 -0
  90. package/dist/commands/market-official.js.map +1 -0
  91. package/dist/commands/market.d.ts +419 -20
  92. package/dist/commands/market.js +2124 -193
  93. package/dist/commands/market.js.map +1 -1
  94. package/dist/commands/mcp.d.ts +70 -13
  95. package/dist/commands/mcp.js +308 -40
  96. package/dist/commands/mcp.js.map +1 -1
  97. package/dist/commands/open.d.ts +39 -9
  98. package/dist/commands/open.js +80 -25
  99. package/dist/commands/open.js.map +1 -1
  100. package/dist/commands/playbook.d.ts +42 -0
  101. package/dist/commands/playbook.js +162 -0
  102. package/dist/commands/playbook.js.map +1 -0
  103. package/dist/commands/pod.js +1 -1
  104. package/dist/commands/pod.js.map +1 -1
  105. package/dist/commands/pods.d.ts +19 -0
  106. package/dist/commands/pods.js +220 -85
  107. package/dist/commands/pods.js.map +1 -1
  108. package/dist/commands/proposals-actions.d.ts +62 -0
  109. package/dist/commands/proposals-actions.js +146 -8
  110. package/dist/commands/proposals-actions.js.map +1 -1
  111. package/dist/commands/proposals-await.d.ts +68 -0
  112. package/dist/commands/proposals-await.js +248 -0
  113. package/dist/commands/proposals-await.js.map +1 -0
  114. package/dist/commands/proton-setup.d.ts +73 -0
  115. package/dist/commands/proton-setup.js +577 -0
  116. package/dist/commands/proton-setup.js.map +1 -0
  117. package/dist/commands/providers.d.ts +23 -0
  118. package/dist/commands/providers.js +126 -1
  119. package/dist/commands/providers.js.map +1 -1
  120. package/dist/commands/raycast.js +6 -2
  121. package/dist/commands/raycast.js.map +1 -1
  122. package/dist/commands/rule.d.ts +150 -0
  123. package/dist/commands/rule.js +447 -0
  124. package/dist/commands/rule.js.map +1 -0
  125. package/dist/commands/session-wait.d.ts +111 -0
  126. package/dist/commands/session-wait.js +209 -0
  127. package/dist/commands/session-wait.js.map +1 -0
  128. package/dist/commands/sessions.d.ts +52 -0
  129. package/dist/commands/sessions.js +479 -58
  130. package/dist/commands/sessions.js.map +1 -1
  131. package/dist/commands/skill-manage.d.ts +21 -0
  132. package/dist/commands/skill-manage.js +136 -19
  133. package/dist/commands/skill-manage.js.map +1 -1
  134. package/dist/commands/skills.js +19 -1
  135. package/dist/commands/skills.js.map +1 -1
  136. package/dist/commands/status.d.ts +1 -4
  137. package/dist/commands/status.js +5 -34
  138. package/dist/commands/status.js.map +1 -1
  139. package/dist/commands/statusline.backoff.test.d.ts +13 -0
  140. package/dist/commands/statusline.backoff.test.js +100 -0
  141. package/dist/commands/statusline.backoff.test.js.map +1 -0
  142. package/dist/commands/statusline.js +16 -9
  143. package/dist/commands/statusline.js.map +1 -1
  144. package/dist/commands/sync-status.d.ts +12 -0
  145. package/dist/commands/sync-status.js +125 -0
  146. package/dist/commands/sync-status.js.map +1 -0
  147. package/dist/commands/templates-retire.d.ts +34 -0
  148. package/dist/commands/templates-retire.js +192 -0
  149. package/dist/commands/templates-retire.js.map +1 -0
  150. package/dist/commands/tools.js +6 -21
  151. package/dist/commands/tools.js.map +1 -1
  152. package/dist/commands/tracks.d.ts +51 -0
  153. package/dist/commands/tracks.js +291 -0
  154. package/dist/commands/tracks.js.map +1 -0
  155. package/dist/commands/update.d.ts +3 -11
  156. package/dist/commands/update.js +5 -134
  157. package/dist/commands/update.js.map +1 -1
  158. package/dist/commands/upload.d.ts +68 -0
  159. package/dist/commands/upload.js +257 -0
  160. package/dist/commands/upload.js.map +1 -0
  161. package/dist/commands/vendor.d.ts +28 -0
  162. package/dist/commands/vendor.js +110 -0
  163. package/dist/commands/vendor.js.map +1 -0
  164. package/dist/commands/versions.js +6 -0
  165. package/dist/commands/versions.js.map +1 -1
  166. package/dist/commands/view.js +10 -5
  167. package/dist/commands/view.js.map +1 -1
  168. package/dist/commands/whoami.d.ts +23 -3
  169. package/dist/commands/whoami.js +169 -23
  170. package/dist/commands/whoami.js.map +1 -1
  171. package/dist/commands/worker.d.ts +122 -0
  172. package/dist/commands/worker.js +435 -0
  173. package/dist/commands/worker.js.map +1 -0
  174. package/dist/commands/worker.test.d.ts +1 -0
  175. package/dist/commands/worker.test.js +116 -0
  176. package/dist/commands/worker.test.js.map +1 -0
  177. package/dist/commands/workspace-ops.d.ts +35 -0
  178. package/dist/commands/workspace-ops.js +153 -0
  179. package/dist/commands/workspace-ops.js.map +1 -0
  180. package/dist/index.d.ts +6 -6
  181. package/dist/index.js +1009 -171
  182. package/dist/index.js.map +1 -1
  183. package/dist/lib/agent-connections.d.ts +31 -0
  184. package/dist/lib/agent-connections.js +33 -0
  185. package/dist/lib/agent-connections.js.map +1 -0
  186. package/dist/lib/agent-detect.d.ts +27 -0
  187. package/dist/lib/agent-detect.js +71 -0
  188. package/dist/lib/agent-detect.js.map +1 -0
  189. package/dist/lib/agent-door.d.ts +138 -0
  190. package/dist/lib/agent-door.js +426 -0
  191. package/dist/lib/agent-door.js.map +1 -0
  192. package/dist/lib/agents-config.d.ts +2 -0
  193. package/dist/lib/agents-config.js +4 -9
  194. package/dist/lib/agents-config.js.map +1 -1
  195. package/dist/lib/approval-poll.d.ts +31 -2
  196. package/dist/lib/approval-poll.js +20 -7
  197. package/dist/lib/approval-poll.js.map +1 -1
  198. package/dist/lib/atomic-file.d.ts +48 -0
  199. package/dist/lib/atomic-file.js +129 -0
  200. package/dist/lib/atomic-file.js.map +1 -0
  201. package/dist/lib/auth.d.ts +14 -9
  202. package/dist/lib/auth.js +44 -61
  203. package/dist/lib/auth.js.map +1 -1
  204. package/dist/lib/batch-approval.d.ts +85 -0
  205. package/dist/lib/batch-approval.js +170 -0
  206. package/dist/lib/batch-approval.js.map +1 -0
  207. package/dist/lib/capture-lane.d.ts +6 -5
  208. package/dist/lib/capture-lane.js +11 -8
  209. package/dist/lib/capture-lane.js.map +1 -1
  210. package/dist/lib/capture-structure.d.ts +342 -0
  211. package/dist/lib/capture-structure.js +295 -0
  212. package/dist/lib/capture-structure.js.map +1 -0
  213. package/dist/lib/catalog-templates.d.ts +59 -0
  214. package/dist/lib/catalog-templates.js +126 -0
  215. package/dist/lib/catalog-templates.js.map +1 -0
  216. package/dist/lib/cli-build.d.ts +19 -0
  217. package/dist/lib/cli-build.js +37 -0
  218. package/dist/lib/cli-build.js.map +1 -0
  219. package/dist/lib/conversation-headers.d.ts +18 -0
  220. package/dist/lib/conversation-headers.js +32 -0
  221. package/dist/lib/conversation-headers.js.map +1 -0
  222. package/dist/lib/cp-packages.d.ts +216 -4
  223. package/dist/lib/cp-packages.js +414 -11
  224. package/dist/lib/cp-packages.js.map +1 -1
  225. package/dist/lib/credential-class.d.ts +117 -0
  226. package/dist/lib/credential-class.js +116 -0
  227. package/dist/lib/credential-class.js.map +1 -0
  228. package/dist/lib/describe-lens.d.ts +35 -0
  229. package/dist/lib/describe-lens.js +40 -0
  230. package/dist/lib/describe-lens.js.map +1 -1
  231. package/dist/lib/device-connect.d.ts +125 -0
  232. package/dist/lib/device-connect.js +256 -0
  233. package/dist/lib/device-connect.js.map +1 -0
  234. package/dist/lib/directory-lens.d.ts +99 -0
  235. package/dist/lib/directory-lens.js +187 -0
  236. package/dist/lib/directory-lens.js.map +1 -0
  237. package/dist/lib/exporter-coverage.d.ts +71 -0
  238. package/dist/lib/exporter-coverage.js +97 -0
  239. package/dist/lib/exporter-coverage.js.map +1 -0
  240. package/dist/lib/hub-client.d.ts +43 -9
  241. package/dist/lib/hub-client.js +429 -65
  242. package/dist/lib/hub-client.js.map +1 -1
  243. package/dist/lib/id.d.ts +23 -0
  244. package/dist/lib/id.js +35 -0
  245. package/dist/lib/id.js.map +1 -0
  246. package/dist/lib/init-connect.d.ts +41 -0
  247. package/dist/lib/init-connect.js +75 -0
  248. package/dist/lib/init-connect.js.map +1 -0
  249. package/dist/lib/init-exit.d.ts +24 -0
  250. package/dist/lib/init-exit.js +41 -0
  251. package/dist/lib/init-exit.js.map +1 -0
  252. package/dist/lib/init-flow.d.ts +25 -0
  253. package/dist/lib/init-flow.js +40 -0
  254. package/dist/lib/init-flow.js.map +1 -0
  255. package/dist/lib/init-handoff.d.ts +16 -0
  256. package/dist/lib/init-handoff.js +19 -0
  257. package/dist/lib/init-handoff.js.map +1 -0
  258. package/dist/lib/init-output.d.ts +18 -0
  259. package/dist/lib/init-output.js +43 -0
  260. package/dist/lib/init-output.js.map +1 -0
  261. package/dist/lib/init-pod.d.ts +45 -0
  262. package/dist/lib/init-pod.js +36 -0
  263. package/dist/lib/init-pod.js.map +1 -0
  264. package/dist/lib/installed.d.ts +210 -11
  265. package/dist/lib/installed.js +234 -36
  266. package/dist/lib/installed.js.map +1 -1
  267. package/dist/lib/key-approval.d.ts +57 -0
  268. package/dist/lib/key-approval.js +117 -0
  269. package/dist/lib/key-approval.js.map +1 -0
  270. package/dist/lib/key-diagnosis.d.ts +56 -0
  271. package/dist/lib/key-diagnosis.js +227 -0
  272. package/dist/lib/key-diagnosis.js.map +1 -0
  273. package/dist/lib/key-doctor.d.ts +136 -0
  274. package/dist/lib/key-doctor.js +286 -0
  275. package/dist/lib/key-doctor.js.map +1 -0
  276. package/dist/lib/key-locations.d.ts +120 -0
  277. package/dist/lib/key-locations.js +326 -0
  278. package/dist/lib/key-locations.js.map +1 -0
  279. package/dist/lib/key-source.d.ts +66 -0
  280. package/dist/lib/key-source.js +106 -0
  281. package/dist/lib/key-source.js.map +1 -0
  282. package/dist/lib/key-state.d.ts +70 -0
  283. package/dist/lib/key-state.js +115 -0
  284. package/dist/lib/key-state.js.map +1 -0
  285. package/dist/lib/kind-package.d.ts +181 -0
  286. package/dist/lib/kind-package.js +679 -0
  287. package/dist/lib/kind-package.js.map +1 -0
  288. package/dist/lib/knowledge-title.d.ts +24 -0
  289. package/dist/lib/knowledge-title.js +46 -0
  290. package/dist/lib/knowledge-title.js.map +1 -0
  291. package/dist/lib/knowledge-title.test.d.ts +1 -0
  292. package/dist/lib/knowledge-title.test.js +34 -0
  293. package/dist/lib/knowledge-title.test.js.map +1 -0
  294. package/dist/lib/machine-instance.d.ts +64 -0
  295. package/dist/lib/machine-instance.js +142 -0
  296. package/dist/lib/machine-instance.js.map +1 -0
  297. package/dist/lib/mcp-bridge.d.ts +42 -0
  298. package/dist/lib/mcp-bridge.js +147 -0
  299. package/dist/lib/mcp-bridge.js.map +1 -0
  300. package/dist/lib/mcp-bridge.test.d.ts +1 -0
  301. package/dist/lib/mcp-bridge.test.js +90 -0
  302. package/dist/lib/mcp-bridge.test.js.map +1 -0
  303. package/dist/lib/mcp-call.d.ts +30 -0
  304. package/dist/lib/mcp-call.js +107 -0
  305. package/dist/lib/mcp-call.js.map +1 -0
  306. package/dist/lib/mcp-snippets.d.ts +53 -0
  307. package/dist/lib/mcp-snippets.js +82 -0
  308. package/dist/lib/mcp-snippets.js.map +1 -0
  309. package/dist/lib/next-steps.d.ts +8 -0
  310. package/dist/lib/next-steps.js +31 -1
  311. package/dist/lib/next-steps.js.map +1 -1
  312. package/dist/lib/package-wire.d.ts +179 -0
  313. package/dist/lib/package-wire.js +68 -0
  314. package/dist/lib/package-wire.js.map +1 -0
  315. package/dist/lib/pair-link.d.ts +38 -0
  316. package/dist/lib/pair-link.js +68 -0
  317. package/dist/lib/pair-link.js.map +1 -0
  318. package/dist/lib/pod-wide.d.ts +40 -0
  319. package/dist/lib/pod-wide.js +46 -0
  320. package/dist/lib/pod-wide.js.map +1 -0
  321. package/dist/lib/pod.d.ts +119 -115
  322. package/dist/lib/pod.js +206 -412
  323. package/dist/lib/pod.js.map +1 -1
  324. package/dist/lib/project-ref.d.ts +9 -3
  325. package/dist/lib/project-ref.js +10 -4
  326. package/dist/lib/project-ref.js.map +1 -1
  327. package/dist/lib/review-credential.d.ts +119 -0
  328. package/dist/lib/review-credential.js +147 -0
  329. package/dist/lib/review-credential.js.map +1 -0
  330. package/dist/lib/safe-open.d.ts +49 -0
  331. package/dist/lib/safe-open.js +119 -0
  332. package/dist/lib/safe-open.js.map +1 -0
  333. package/dist/lib/session-lens.d.ts +40 -1
  334. package/dist/lib/session-lens.js +54 -4
  335. package/dist/lib/session-lens.js.map +1 -1
  336. package/dist/lib/superwhisper-import.d.ts +8 -0
  337. package/dist/lib/superwhisper-import.js +14 -7
  338. package/dist/lib/superwhisper-import.js.map +1 -1
  339. package/dist/lib/superwhisper-title.test.d.ts +1 -0
  340. package/dist/lib/superwhisper-title.test.js +18 -0
  341. package/dist/lib/superwhisper-title.test.js.map +1 -0
  342. package/dist/lib/targets.d.ts +134 -10
  343. package/dist/lib/targets.js +962 -258
  344. package/dist/lib/targets.js.map +1 -1
  345. package/dist/lib/template-file.d.ts +78 -0
  346. package/dist/lib/template-file.js +140 -0
  347. package/dist/lib/template-file.js.map +1 -0
  348. package/dist/lib/template-lifecycle.d.ts +217 -0
  349. package/dist/lib/template-lifecycle.js +433 -0
  350. package/dist/lib/template-lifecycle.js.map +1 -0
  351. package/dist/lib/template-steps.d.ts +88 -0
  352. package/dist/lib/template-steps.js +118 -0
  353. package/dist/lib/template-steps.js.map +1 -0
  354. package/dist/lib/time-ago.d.ts +2 -0
  355. package/dist/lib/time-ago.js +15 -0
  356. package/dist/lib/time-ago.js.map +1 -0
  357. package/dist/utils/logger.js +5 -2
  358. package/dist/utils/logger.js.map +1 -1
  359. package/package.json +25 -18
  360. package/skills/README.md +12 -10
  361. package/skills/agent-os/SKILL.md +220 -99
  362. package/skills/manifest.json +2 -2
  363. package/skills/onboard/SKILL.md +61 -25
  364. package/skills/synap/README.md +5 -8
  365. package/skills/synap/SKILL.md +1185 -301
  366. package/skills/synap/_order.txt +7 -0
  367. package/skills/synap/_skill.yaml +1 -1
  368. package/skills/synap/automations.md +15 -0
  369. package/skills/synap/capture.md +54 -151
  370. package/skills/synap/cli-operations.md +24 -18
  371. package/skills/synap/common-mistakes.md +1 -0
  372. package/skills/synap/concepts.md +28 -0
  373. package/skills/synap/content-os.md +92 -0
  374. package/skills/synap/creative-loop.md +15 -10
  375. package/skills/synap/crm.md +21 -52
  376. package/skills/synap/digesting-a-channel.md +25 -0
  377. package/skills/synap/document-embeds.md +141 -47
  378. package/skills/synap/escalation-ladder.md +20 -10
  379. package/skills/synap/focus-sessions.md +47 -21
  380. package/skills/synap/from-intent.md +142 -0
  381. package/skills/synap/governance-rules.md +4 -4
  382. package/skills/synap/governance.md +10 -7
  383. package/skills/synap/hand-off.md +33 -0
  384. package/skills/synap/inline-patterns.md +15 -7
  385. package/skills/synap/lenses.md +33 -15
  386. package/skills/synap/linking.md +41 -40
  387. package/skills/synap/mcp-remote-servers.md +64 -0
  388. package/skills/synap/mental-model.md +24 -22
  389. package/skills/synap/multi-entity-capture.md +6 -4
  390. package/skills/synap/operating-mode-rules.md +1 -1
  391. package/skills/synap/processes.md +118 -0
  392. package/skills/synap/quick-reference.md +5 -1
  393. package/skills/synap/reading.md +3 -1
  394. package/skills/synap/reflexes.md +12 -42
  395. package/skills/synap/viewframe-cells.md +38 -5
  396. package/skills/synap/work-flow.md +1 -1
  397. package/skills/synap/work-model.md +96 -0
  398. package/skills/synap/worked-examples.md +21 -1
  399. package/skills/synap/workspace-design.md +14 -10
  400. package/skills/synap/writes.md +165 -35
  401. package/skills/synap/writing-titles.md +63 -0
  402. package/skills/synap-app/SKILL.md +319 -0
  403. package/skills/synap-app/_order.txt +5 -0
  404. package/skills/synap-app/_skill.yaml +20 -0
  405. package/skills/synap-app/creating-the-base-app.md +64 -0
  406. package/skills/synap-app/governance.md +42 -0
  407. package/skills/synap-app/install-commands.md +55 -0
  408. package/skills/synap-app/overview.md +50 -0
  409. package/skills/synap-app/using-the-sdk.md +73 -0
  410. package/skills/synap-design/SKILL.md +474 -0
  411. package/skills/synap-design/_order.txt +4 -0
  412. package/skills/synap-design/_skill.yaml +21 -0
  413. package/skills/synap-design/loop.md +134 -0
  414. package/skills/synap-design/overview.md +44 -0
  415. package/skills/synap-design/principles.md +130 -0
  416. package/skills/synap-design/system.md +133 -0
  417. package/skills/synap-market/SKILL.md +625 -0
  418. package/skills/synap-market/_order.txt +5 -0
  419. package/skills/synap-market/_skill.yaml +24 -0
  420. package/skills/synap-market/author-and-publish.md +212 -0
  421. package/skills/synap-market/discover-and-fetch.md +59 -0
  422. package/skills/synap-market/governance-and-catalog.md +63 -0
  423. package/skills/synap-market/install.md +133 -0
  424. package/skills/synap-market/overview.md +119 -0
  425. package/skills/synap-schema/SKILL.md +172 -10
  426. package/skills/synap-schema/_order.txt +2 -0
  427. package/skills/synap-schema/_skill.yaml +4 -2
  428. package/skills/synap-schema/common-mistakes.md +4 -2
  429. package/skills/synap-schema/discover-profiles.md +1 -1
  430. package/skills/synap-schema/entity-scope.md +15 -3
  431. package/skills/synap-schema/extend-first.md +29 -0
  432. package/skills/synap-schema/extend-vs-create.md +1 -1
  433. package/skills/synap-schema/intent-vocabulary-ssot.md +111 -0
  434. package/skills/synap-schema/property-types.md +1 -1
  435. package/skills/synap-schema/relations.md +1 -1
  436. package/skills/synap-ui/SKILL.md +19 -12
  437. package/skills/synap-ui/_skill.yaml +1 -1
  438. package/skills/synap-ui/ai-companion.md +1 -1
  439. package/skills/synap-ui/arranging-bento.md +2 -0
  440. package/skills/synap-ui/bento-layouts.md +10 -10
  441. package/skills/synap-ui/bento-recipes.md +313 -543
  442. package/skills/synap-ui/four-builds.md +5 -0
  443. package/skills/synap-ui/view-types.md +2 -2
  444. package/skills/synap-ui/widget-catalog.md +22 -278
  445. package/templates/automations/bookmark-enrichment.automation.json +290 -13
  446. package/templates/automations/url-bookmark-capture.automation.json +73 -11
  447. package/templates/skills/authoring-playbooks/SKILL.md +6 -3
  448. package/templates/skills/authoring-playbooks/reference/stages-contract.md +15 -0
  449. package/templates/skills/authoring-playbooks/reference/worked-example.md +3 -0
  450. package/dist/commands/infra.d.ts +0 -21
  451. package/dist/commands/infra.js +0 -262
  452. package/dist/commands/infra.js.map +0 -1
  453. package/dist/lib/browser-auth.d.ts +0 -35
  454. package/dist/lib/browser-auth.js +0 -170
  455. package/dist/lib/browser-auth.js.map +0 -1
  456. package/dist/lib/openclaw.d.ts +0 -32
  457. package/dist/lib/openclaw.js +0 -164
  458. package/dist/lib/openclaw.js.map +0 -1
  459. package/dist/lib/seed.d.ts +0 -13
  460. package/dist/lib/seed.js +0 -135
  461. package/dist/lib/seed.js.map +0 -1
@@ -0,0 +1,170 @@
1
+ /**
2
+ * One-click approval for the agent keys `synap init` mints (V1 D5).
3
+ *
4
+ * Codex and Cursor each mint their agent key with `requireApproval`, and
5
+ * `provisionAgentKey` used to open one review page per key and block on it.
6
+ * Connecting both meant two pages and two clicks, one after the other.
7
+ *
8
+ * Now `init` mints every key that needs approval FIRST (deferred), opens ONE
9
+ * page (`/approve-agents?keys=…` on the pod admin, backed by
10
+ * `POST /api/hub/setup/agent/pending/approve-batch`), and polls every key
11
+ * until the person approves them together. The approved keys are then handed
12
+ * to the installers through `takePreApprovedKey`, so each installer's own
13
+ * `provisionAgentKey` call returns the key the person already approved instead
14
+ * of minting a second one.
15
+ *
16
+ * A pod older than the batch door has no `/approve-agents` page: `init`
17
+ * probes the batch lookup door first and, when it is missing, opens each
18
+ * key's own review page instead (every pod version serves those).
19
+ */
20
+ import chalk from "chalk";
21
+ import { log } from "../utils/logger.js";
22
+ import { openPodPage } from "./safe-open.js";
23
+ /**
24
+ * The targets whose installer mints an agent key that needs the person's
25
+ * approval. Claude Code mints without approval, so it is not here. The installers read their spec from this table
26
+ * (`installCodex` / `installCursor`), so the pre-mint cannot ask for a key the
27
+ * installer would not have asked for.
28
+ */
29
+ export const TARGET_KEY_MINT = {
30
+ codex: { agentType: "codex", idempotent: true },
31
+ cursor: { agentType: "cursor", idempotent: true },
32
+ };
33
+ const ready = new Map();
34
+ /** Take (once) the key already minted — and approved — for `agentType`. */
35
+ export function takePreApprovedKey(agentType) {
36
+ const key = ready.get(agentType);
37
+ ready.delete(agentType);
38
+ return key;
39
+ }
40
+ /**
41
+ * Hand an installer a key that is already approved — the device flow returns
42
+ * one per agent the person approved with the computer (`device-connect.ts`).
43
+ * The installer's own `provisionAgentKey` call then takes it instead of minting,
44
+ * and `approveAgentKeysAtOnce` asks for nothing more for that agent.
45
+ */
46
+ export function presetApprovedKey(agentType, key) {
47
+ ready.set(agentType, key);
48
+ }
49
+ /** The ONE review page for several pending keys, on the same origin as a single key's review URL. */
50
+ export function batchReviewUrl(reviewUrl, keyIds) {
51
+ const origin = new URL(reviewUrl).origin;
52
+ return `${origin}/approve-agents?keys=${keyIds.map(encodeURIComponent).join(",")}`;
53
+ }
54
+ /**
55
+ * Does this pod serve the batch approval page? Its lookup door answers 401/400
56
+ * without a signed-in session; a pod older than it answers 404. Unreachable
57
+ * reads as "no": the per-key pages work on every pod.
58
+ */
59
+ export async function podSupportsBatchApproval(podUrl) {
60
+ const res = await fetch(`${podUrl.replace(/\/$/, "")}/api/hub/setup/agent/pending/lookup`, {
61
+ method: "POST",
62
+ headers: { "Content-Type": "application/json" },
63
+ body: JSON.stringify({ keyIds: [] }),
64
+ signal: AbortSignal.timeout(10_000),
65
+ }).catch(() => null);
66
+ return res !== null && res.status !== 404;
67
+ }
68
+ /**
69
+ * Mint every approval-gated key for `targets`, open one page, wait for all.
70
+ * Returns the targets the person did NOT approve (rejected, timed out, or
71
+ * failed to mint): `init` skips those instead of asking again, and prints
72
+ * one line for each.
73
+ */
74
+ export async function approveAgentKeysAtOnce(podUrl, humanApiKey, targets, deps = {}) {
75
+ const provision = deps.provision ?? (await import("./targets.js")).provisionAgentKey;
76
+ const wait = deps.wait ?? (await import("./key-approval.js")).waitForKeyLive;
77
+ const openUrl = deps.openUrl ?? (await import("./targets.js")).openBrowserUrl;
78
+ const supportsBatch = deps.supportsBatch ?? podSupportsBatchApproval;
79
+ const podBase = podUrl.replace(/\/$/, "");
80
+ const pending = [];
81
+ const notApproved = [];
82
+ const reasons = {};
83
+ for (const target of targets) {
84
+ const spec = TARGET_KEY_MINT[target];
85
+ if (!spec)
86
+ continue;
87
+ // Approved already (with the computer, in the device flow): nothing to ask.
88
+ if (ready.has(spec.agentType))
89
+ continue;
90
+ try {
91
+ const r = await provision(podUrl, humanApiKey, spec.agentType, {
92
+ idempotent: spec.idempotent,
93
+ deferApproval: true,
94
+ });
95
+ if (r.pending) {
96
+ pending.push({
97
+ target,
98
+ agentType: spec.agentType,
99
+ hubApiKey: r.hubApiKey,
100
+ agentUserId: r.agentUserId,
101
+ ...r.pending,
102
+ });
103
+ }
104
+ else {
105
+ // Already valid (reused) or active on mint: nothing to approve.
106
+ ready.set(spec.agentType, { hubApiKey: r.hubApiKey, agentUserId: r.agentUserId });
107
+ }
108
+ }
109
+ catch (err) {
110
+ notApproved.push(target);
111
+ reasons[target] = err instanceof Error ? err.message : String(err);
112
+ }
113
+ }
114
+ if (pending.length === 0)
115
+ return { notApproved, reasons };
116
+ // One key keeps its own review page (which every pod version serves); so do
117
+ // several on a pod that predates the batch page.
118
+ const batch = pending.length > 1 && (await supportsBatch(podUrl));
119
+ const urls = batch
120
+ ? [batchReviewUrl(pending[0].reviewUrl, pending.map((p) => p.pendingToken))]
121
+ : pending.map((p) => p.reviewUrl);
122
+ log.blank();
123
+ log.info(batch
124
+ ? `Approve your ${pending.length} agents in one step:`
125
+ : pending.length > 1
126
+ ? `Approve each of your ${pending.length} agents:`
127
+ : "Approve your agent:");
128
+ for (const url of urls) {
129
+ log.dim(url);
130
+ // A pod-supplied link: opened only on this pod's own / pod-admin origin.
131
+ openPodPage(url, podUrl, openUrl);
132
+ }
133
+ process.stdout.write(chalk.dim(" Waiting for approval"));
134
+ const ticker = setInterval(() => process.stdout.write(chalk.dim(".")), 2000);
135
+ try {
136
+ const outcomes = await Promise.allSettled(pending.map((p) => wait({ podUrl: podBase, pendingKey: p.hubApiKey, pendingToken: p.pendingToken, humanApiKey })));
137
+ process.stdout.write("\n");
138
+ const { clearPendingAgentKey } = await import("./pod.js");
139
+ outcomes.forEach((o, i) => {
140
+ const p = pending[i];
141
+ const outcome = o.status === "fulfilled" ? o.value : null;
142
+ if (outcome === "approved") {
143
+ // Live now: the recorded request is done; the installer writes the key.
144
+ clearPendingAgentKey(p.agentType, podUrl);
145
+ ready.set(p.agentType, { hubApiKey: p.hubApiKey, agentUserId: p.agentUserId });
146
+ return;
147
+ }
148
+ notApproved.push(p.target);
149
+ if (outcome === "rejected") {
150
+ clearPendingAgentKey(p.agentType, podUrl);
151
+ reasons[p.target] = "It was declined on the pod.";
152
+ }
153
+ else if (outcome === "timeout") {
154
+ // Still filed and recorded: the next connect resumes this request.
155
+ reasons[p.target] = `Nobody approved it in time — approve it at ${p.reviewUrl}, then run: synap doctor --fix`;
156
+ }
157
+ else {
158
+ reasons[p.target] = o.status === "rejected" && o.reason instanceof Error ? o.reason.message : String(o.status === "rejected" ? o.reason : "unknown");
159
+ }
160
+ });
161
+ }
162
+ finally {
163
+ clearInterval(ticker);
164
+ }
165
+ const approved = pending.length - pending.filter((p) => notApproved.includes(p.target)).length;
166
+ if (approved > 0)
167
+ log.success(`Approved ${approved} agent${approved > 1 ? "s" : ""}.`);
168
+ return { notApproved, reasons };
169
+ }
170
+ //# sourceMappingURL=batch-approval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-approval.js","sourceRoot":"","sources":["../../src/lib/batch-approval.ts"],"names":[],"mappings":"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"}
@@ -31,12 +31,13 @@ export interface LaneReport {
31
31
  }
32
32
  /**
33
33
  * Derive the lane from the workspace-routing `source` returned by
34
- * `resolveKnowledgeWorkspace`. A domain capture always lands in a real product
35
- * workspace → the Work lane. (The backend routing endpoint P7b is the SSoT for
36
- * resolving user/global lanes; the CLI's lane detection is a best-effort hint.)
34
+ * `resolveKnowledgeWorkspace`. Domain capture is the Work lane (even when
35
+ * workspaceId is omitted for server-derived / pod-wide preferred placement).
36
+ * (The backend routing endpoint P7b is the SSoT for resolving user/global
37
+ * lanes; the CLI's lane detection is a best-effort hint.)
37
38
  *
38
- * source → lane
39
- * "explicit" / "team" / "active …" → work
39
+ * source → lane
40
+ * "explicit" / "team" / "server-derived …" → work
40
41
  */
41
42
  export declare function laneFromSource(_source: string): CaptureLane;
42
43
  /** Best-effort resolve a workspace name from the pod. Never throws. */
@@ -22,12 +22,13 @@ import { hubGet } from "./hub-client.js";
22
22
  import { unwrapList } from "./unwrapList.js";
23
23
  /**
24
24
  * Derive the lane from the workspace-routing `source` returned by
25
- * `resolveKnowledgeWorkspace`. A domain capture always lands in a real product
26
- * workspace → the Work lane. (The backend routing endpoint P7b is the SSoT for
27
- * resolving user/global lanes; the CLI's lane detection is a best-effort hint.)
25
+ * `resolveKnowledgeWorkspace`. Domain capture is the Work lane (even when
26
+ * workspaceId is omitted for server-derived / pod-wide preferred placement).
27
+ * (The backend routing endpoint P7b is the SSoT for resolving user/global
28
+ * lanes; the CLI's lane detection is a best-effort hint.)
28
29
  *
29
- * source → lane
30
- * "explicit" / "team" / "active …" → work
30
+ * source → lane
31
+ * "explicit" / "team" / "server-derived …" → work
31
32
  */
32
33
  export function laneFromSource(_source) {
33
34
  return "work";
@@ -120,16 +121,18 @@ export async function reportWrite(res, o) {
120
121
  // A proposal is normal (a PR under review), NOT a failure — neutral tone,
121
122
  // never an alarm. The agent keeps composing; it just goes live on approval.
122
123
  log.info(`${o.label} — proposed (under review)`);
124
+ // Full ids — feed straight into `synap proposals approve <id>` /
125
+ // a follow-up create-relation call referencing the proposed entity.
123
126
  if (proposalId)
124
- log.dim(` proposal: ${proposalId.slice(0, 8)}`);
127
+ log.dim(` proposal: ${proposalId}`);
125
128
  // Expose the stable proposed entity ID so the AI can reference this entity
126
129
  // in cross-write proposal graphs (e.g. create entity B linked to entity A).
127
130
  const proposedEntityId = String(res.proposedEntityId ?? "");
128
131
  if (proposedEntityId)
129
- log.dim(` entity: ${proposedEntityId.slice(0, 8)}`);
132
+ log.dim(` entity: ${proposedEntityId}`);
130
133
  }
131
134
  else {
132
- log.success(`${o.label}${id ? " " + chalk.dim(id.slice(0, 8)) : ""}`);
135
+ log.success(`${o.label}${id ? " " + chalk.dim(id) : ""}`);
133
136
  }
134
137
  console.log(" " + formatLaneLine(report));
135
138
  }
@@ -1 +1 @@
1
- {"version":3,"file":"capture-lane.js","sourceRoot":"","sources":["../../src/lib/capture-lane.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"capture-lane.js","sourceRoot":"","sources":["../../src/lib/capture-lane.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,342 @@
1
+ /**
2
+ * Shared shapes + honest reporting for the smart-capture pipeline
3
+ * (POST /capture/structure → POST /capture/execute).
4
+ *
5
+ * ONE declaration of the structure/execute wire shapes and ONE degraded/execute
6
+ * interpreter, imported by BOTH surfaces that drive this pipeline:
7
+ * • `synap capture "<free text>"` (commands/knowledge.ts)
8
+ * • `synap import <files|urls>` (commands/import.ts)
9
+ *
10
+ * These two used to keep independent `StructureResult` copies that had already
11
+ * drifted (import dropped fields knowledge kept). Consolidating here removes the
12
+ * drift AND the false-success reporting: the CLI now reports what /capture/execute
13
+ * ACTUALLY returned (applied vs proposed vs nothing-created) instead of guessing
14
+ * off the planned proposal count.
15
+ *
16
+ * Kept local to the CLI (not imported from @synap-core/hub-rest-client) because the
17
+ * CLI resolves the SDK via its built dist — the same reason the previous local
18
+ * mirrors existed. This is now the ONE mirror instead of two.
19
+ */
20
+ export interface StructureProposal {
21
+ tempId: string;
22
+ profileSlug: string;
23
+ title: string;
24
+ description?: string;
25
+ properties?: Record<string, unknown>;
26
+ content?: string;
27
+ existingEntityId?: string;
28
+ }
29
+ export interface StructureRelation {
30
+ sourceTempId: string;
31
+ targetTempId: string;
32
+ relationType: string;
33
+ }
34
+ export interface FollowUpChip {
35
+ label: string;
36
+ value: string;
37
+ action?: "link_entity" | "set_property" | "add_relation" | "confirm" | "dismiss";
38
+ entityId?: string;
39
+ propertyKey?: string;
40
+ }
41
+ export interface FollowUp {
42
+ question: string;
43
+ suggestions?: FollowUpChip[];
44
+ }
45
+ /** The distribution behind an AI workspace pick (see the shared type). */
46
+ export interface WorkspaceDecisionRecord {
47
+ decider: "jev" | "llm";
48
+ model?: string;
49
+ probabilities?: Record<string, number>;
50
+ candidates?: Array<{
51
+ id: string;
52
+ name: string;
53
+ }>;
54
+ }
55
+ /** The placement advice a `capture.structure` result carries (a subset). */
56
+ export interface CaptureStructureRouting {
57
+ targetWorkspaceId?: string | null;
58
+ targetWorkspaceReason?: string | null;
59
+ targetWorkspaceConfidence?: number | null;
60
+ targetWorkspaceDecision?: WorkspaceDecisionRecord | null;
61
+ targetProjectId?: string | null;
62
+ targetProjectReason?: string | null;
63
+ targetProjectConfidence?: number | null;
64
+ }
65
+ /** The advisory routing fields `capture.execute` accepts. */
66
+ export interface CaptureExecuteRoutingHints {
67
+ aiWorkspaceId?: string | null;
68
+ aiWorkspaceConfidence?: number | null;
69
+ aiWorkspaceReason?: string | null;
70
+ aiWorkspaceDecision?: WorkspaceDecisionRecord | null;
71
+ aiProjectId?: string | null;
72
+ aiProjectConfidence?: number | null;
73
+ aiProjectReason?: string | null;
74
+ }
75
+ /**
76
+ * ADVISORY hints only — an AI pick proposes, it never places data. A user's
77
+ * deliberate choice (`--workspace` / `--project`) is NOT a hint.
78
+ */
79
+ export declare function captureExecuteRoutingHints(structured: CaptureStructureRouting): CaptureExecuteRoutingHints;
80
+ /** The AI's workspace-side hints only (drop them when the user pinned a workspace). */
81
+ export declare function workspaceRoutingHints(structured: CaptureStructureRouting): {
82
+ aiWorkspaceId: string | null | undefined;
83
+ aiWorkspaceConfidence: number | null | undefined;
84
+ aiWorkspaceReason: string | null | undefined;
85
+ aiWorkspaceDecision: WorkspaceDecisionRecord | null | undefined;
86
+ };
87
+ /** The AI's project-side hints only (drop them when the user pinned a project). */
88
+ export declare function projectRoutingHints(structured: CaptureStructureRouting): {
89
+ aiProjectId: string | null | undefined;
90
+ aiProjectConfidence: number | null | undefined;
91
+ aiProjectReason: string | null | undefined;
92
+ };
93
+ /** Where a capture will land, as `capture.structure` resolved it. */
94
+ export interface CapturePlacement {
95
+ workspaceId: string | null;
96
+ workspaceName: string | null;
97
+ /** A deterministic rung placed it — never an AI guess. */
98
+ deterministic: boolean;
99
+ suggestion?: {
100
+ workspaceId: string;
101
+ workspaceName: string;
102
+ reason: string | null;
103
+ alternatives: Array<{
104
+ workspaceId: string;
105
+ workspaceName: string;
106
+ weight: number;
107
+ }>;
108
+ };
109
+ }
110
+ /** What the person did with the destination field before saving. */
111
+ export type WorkspaceSelection = {
112
+ kind: "default";
113
+ } | {
114
+ kind: "chosen";
115
+ workspaceId: string;
116
+ workspaceName: string;
117
+ } | {
118
+ kind: "removed";
119
+ };
120
+ export type WorkspaceChoice = "accepted" | "changed" | "removed" | "ignored";
121
+ export interface WorkspacePlacementView {
122
+ destination: {
123
+ workspaceId: string | null;
124
+ workspaceName: string | null;
125
+ };
126
+ aiSuggested: boolean;
127
+ alternatives: NonNullable<CapturePlacement["suggestion"]>["alternatives"];
128
+ canRemove: boolean;
129
+ execute: {
130
+ targetWorkspaceId?: string;
131
+ workspaceChoice?: WorkspaceChoice;
132
+ };
133
+ }
134
+ /** THE destination rule — see the shared type's docblock. */
135
+ export declare function deriveWorkspacePlacementView(placement: CapturePlacement | null | undefined, selection: WorkspaceSelection, opts: {
136
+ interactive: boolean;
137
+ }): WorkspacePlacementView;
138
+ /**
139
+ * The headless placement fields the CLI sends to `/capture/execute` — the ONE
140
+ * door, so the CLI can never hand-roll a destination. Headless ⇒ an AI
141
+ * suggestion stays a proposal; a deterministic placement is pinned explicitly.
142
+ */
143
+ export declare function headlessPlacementFields(structured: Pick<StructureResult, "placement">): {
144
+ targetWorkspaceId?: string;
145
+ workspaceChoice?: WorkspaceChoice;
146
+ };
147
+ /**
148
+ * The workspace line for a structure result: the NAME the pod resolved (never
149
+ * a raw id when a name is known) and the confidence percent, once.
150
+ */
151
+ export declare function formatWorkspaceRouting(result: {
152
+ targetWorkspaceId?: string | null;
153
+ targetWorkspaceName?: string | null;
154
+ targetWorkspaceConfidence?: number | null;
155
+ }): string | null;
156
+ /** Response of POST /capture/structure (the AI plan — writes NOTHING). */
157
+ export interface StructureResult {
158
+ proposals?: StructureProposal[];
159
+ relations?: StructureRelation[];
160
+ followUp?: string | FollowUp | null;
161
+ targetWorkspaceId?: string | null;
162
+ /** The pod's display name for `targetWorkspaceId` — what the CLI prints. */
163
+ targetWorkspaceName?: string | null;
164
+ targetWorkspaceConfidence?: number | null;
165
+ targetWorkspaceReason?: string | null;
166
+ targetWorkspaceDecision?: WorkspaceDecisionRecord | null;
167
+ targetProjectId?: string | null;
168
+ targetProjectConfidence?: number | null;
169
+ targetProjectReason?: string | null;
170
+ /**
171
+ * The honest destination block — where the capture lands and, separately,
172
+ * what the AI would SUGGEST. Read it through `headlessPlacementFields` /
173
+ * `deriveWorkspacePlacementView`, never by digging at `targetWorkspaceId`
174
+ * (which mixes a deterministic placement and an AI guess into one field).
175
+ * Absent on an older pod.
176
+ */
177
+ placement?: CapturePlacement | null;
178
+ /** True when the IS structurer is down and the server returned a raw fallback. */
179
+ degraded?: boolean;
180
+ degradedReason?: DegradedReason;
181
+ /**
182
+ * Summary of the extraction pass, present when a `file` input was normalized
183
+ * to text before structuring. `text` is what the pod needs echoed back on
184
+ * execute (as `file.extractedText`) so a kept original lands with a real
185
+ * document body instead of an empty one — the pod cannot re-derive it,
186
+ * because extraction runs in the Intelligence Service.
187
+ */
188
+ extraction?: {
189
+ kind: string;
190
+ extractor: string;
191
+ metadata?: Record<string, unknown>;
192
+ warnings?: string[];
193
+ text?: string;
194
+ textTruncated?: boolean;
195
+ };
196
+ }
197
+ /** One materialized entity row in a /capture/execute response. */
198
+ export interface ExecuteCreated {
199
+ tempId?: string;
200
+ entityId?: string;
201
+ id?: string;
202
+ profileSlug?: string;
203
+ /** true = linked/deduped onto an EXISTING entity (nothing new was created). */
204
+ linked?: boolean;
205
+ degradedFrom?: string;
206
+ propertiesDropped?: boolean;
207
+ deduplicated?: boolean;
208
+ }
209
+ /**
210
+ * Response of POST /capture/execute — either a governed proposal (nothing
211
+ * written) or a materialized graph. The CLI authenticates as an agent, so it
212
+ * usually materializes, but a workspace policy can still queue a proposal; the
213
+ * reporter below reflects whichever actually happened.
214
+ *
215
+ * NOTE: there is no top-level `entitiesCreated`/`relationsCreated` on this
216
+ * response — those live only in the server's log line. Counts MUST be derived
217
+ * from `created`/`relations` (see `readCaptureExecute`).
218
+ */
219
+ export interface ExecuteResult {
220
+ /** "proposed" when governance queued the write instead of applying it. */
221
+ status?: string;
222
+ created?: ExecuteCreated[];
223
+ relations?: unknown[];
224
+ proposalId?: string;
225
+ reviewUrl?: string;
226
+ reviewPath?: string;
227
+ /**
228
+ * The AI's outstanding "move to X?" suggestion. NOTHING was moved — the
229
+ * capture landed where it would have without the AI; re-file with an
230
+ * explicit workspace to accept it. (This replaced `movedToWorkspace`, which
231
+ * claimed a move the ladder never performs.)
232
+ */
233
+ pendingWorkspaceSwitch?: {
234
+ suggestedWorkspaceId: string;
235
+ suggestedWorkspaceName: string | null;
236
+ reason: string | null;
237
+ confidence: number | null;
238
+ } | null;
239
+ message?: string;
240
+ /**
241
+ * Disposition of the ORIGINAL file, present only when the caller sent
242
+ * `keepRaw: true` + `file`. Four honest outcomes — the blob can be stored,
243
+ * parked behind governance, denied by policy, or fail on storage — and a
244
+ * caller that prints "kept" for all four is back to false success.
245
+ */
246
+ sourceFile?: {
247
+ status: "stored" | "proposed" | "denied" | "failed";
248
+ entityId?: string;
249
+ documentId?: string;
250
+ proposalId?: string;
251
+ reviewUrl?: string;
252
+ reason?: string;
253
+ };
254
+ }
255
+ /** The honest outcome of a /capture/execute call, derived from the response. */
256
+ export interface CaptureExecuteOutcome {
257
+ /** true when the write was queued for review, NOT applied. */
258
+ proposed: boolean;
259
+ /** entities newly created (excludes rows linked/deduped onto existing ones). */
260
+ entitiesCreated: number;
261
+ /** entities linked/deduped onto existing entities (nothing new stored). */
262
+ entitiesLinked: number;
263
+ relationsCreated: number;
264
+ proposalId?: string;
265
+ reviewUrl?: string;
266
+ /**
267
+ * The AI suggested another workspace and the pod did NOT move anything —
268
+ * a proposal for the caller to confirm, never a receipt of a move.
269
+ */
270
+ pendingWorkspaceSwitch?: {
271
+ suggestedWorkspaceId: string;
272
+ suggestedWorkspaceName: string | null;
273
+ reason: string | null;
274
+ confidence: number | null;
275
+ };
276
+ }
277
+ /**
278
+ * Interpret a /capture/execute response HONESTLY. Distinguishes applied vs
279
+ * proposed vs nothing-created and surfaces the real proposal/review handle so
280
+ * the CLI never claims "created" for a write that was proposed or a plan that
281
+ * only linked existing entities.
282
+ */
283
+ export declare function readCaptureExecute(res: ExecuteResult): CaptureExecuteOutcome;
284
+ /**
285
+ * The one line every CLI surface prints for an outstanding workspace
286
+ * suggestion. It says what to DO (re-file with `--workspace`), because the pod
287
+ * moved nothing — the old "→ filed into workspace X" line reported a move that
288
+ * never happened.
289
+ */
290
+ export declare function formatPendingWorkspaceSwitch(outcome: Pick<CaptureExecuteOutcome, "pendingWorkspaceSwitch">): string | null;
291
+ /** True when the structure step degraded (nothing usable came back). */
292
+ export declare function isDegraded(res: StructureResult): boolean;
293
+ /**
294
+ * WHY a capture degraded. Two families, and the difference is the whole point:
295
+ *
296
+ * • pod plumbing (`is_*`) — the structurer itself failed. Retrying is sensible.
297
+ * • Intelligence Service extraction honesty (everything else) — the INPUT
298
+ * could not be read. Several of these are PERMANENT CONFIGURATION states
299
+ * (`vision_provider_not_configured`, `transcription_provider_not_configured`)
300
+ * where "retry when it's back" is simply a lie: nothing is coming back.
301
+ *
302
+ * Open-ended (`string & {}`) because the IS owns this vocabulary and may add to
303
+ * it. An unknown value must humanize, never leak, never crash.
304
+ */
305
+ export type DegradedReason = "is_auth_error" | "is_invalid_response" | "is_empty_result" | "llm_budget_exceeded" | "pdf_scanned_needs_ocr" | "pdf_missing_binary" | "vision_provider_not_configured" | "vision_provider_failed" | "image_missing_binary" | "transcription_provider_not_configured" | "audio_missing_binary" | "docx_missing_binary" | "docx_empty" | "html_empty" | "unsupported_type" | (string & {});
306
+ /**
307
+ * One line of honest copy for a degraded reason: WHAT happened, and WHAT TO DO.
308
+ *
309
+ * ── Why this is a second table, deliberately ────────────────────────────────
310
+ * `@synap-core/capture-pipeline`'s `describeDegradedReason` is the existing
311
+ * one-door for this copy, and it is the RIGHT door — but the CLI is a separate
312
+ * pnpm workspace whose only Synap runtime dependencies are
313
+ * `@synap-core/hub-rest-client` (a file: link into synap-backend) and
314
+ * `@synap-core/workspace-templates`. It cannot reach a `synap-app` package
315
+ * without a package.json/lockfile change. Same reason the `StructureResult`
316
+ * mirror above is local.
317
+ *
318
+ * So: the `title` half is COPIED VERBATIM from `describeDegradedReason` and
319
+ * pinned by a parity test (`test/degraded-message-honesty.test.ts`) that reads
320
+ * the sibling repo's source, so the two can never drift on WHAT happened.
321
+ * The `detail` half is deliberately DIFFERENT, because the app's
322
+ * details end in "saved as a note in the meantime" and the CLI creates nothing
323
+ * at all — repeating the app's sentence here would be a new lie in place of the
324
+ * old one.
325
+ */
326
+ export declare function describeDegradedReason(reason: DegradedReason | undefined): {
327
+ title: string;
328
+ detail: string;
329
+ };
330
+ /**
331
+ * The ONE degraded message. The CLI does NOT materialize the server's generic
332
+ * `item` stand-in (the browser does the same via `offlineFallback:false`), so a
333
+ * captured note is never silently downgraded to an unstructured blob behind a
334
+ * "success" line.
335
+ *
336
+ * It used to print a single sentence for every cause — "AI structuring
337
+ * unavailable (is_empty_result) — nothing was created. Retry when it's back."
338
+ * — which leaked a raw machine token AND told users to retry states that never
339
+ * change (a pod with no vision provider is not going to come back). Now each
340
+ * reason says what actually happened and what to do about it.
341
+ */
342
+ export declare function degradedMessage(res: StructureResult): string;