@synap-core/cli 1.8.0 → 1.10.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 (332) hide show
  1. package/dist/commands/agent-chat.d.ts +47 -0
  2. package/dist/commands/agent-chat.js +250 -0
  3. package/dist/commands/agent-chat.js.map +1 -0
  4. package/dist/commands/agent-run.js +3 -4
  5. package/dist/commands/agent-run.js.map +1 -1
  6. package/dist/commands/agents.js +85 -46
  7. package/dist/commands/agents.js.map +1 -1
  8. package/dist/commands/automation.js +2 -1
  9. package/dist/commands/automation.js.map +1 -1
  10. package/dist/commands/bridge-setup.d.ts +66 -0
  11. package/dist/commands/bridge-setup.js +1112 -0
  12. package/dist/commands/bridge-setup.js.map +1 -0
  13. package/dist/commands/cap-connections.d.ts +28 -0
  14. package/dist/commands/cap-connections.js +224 -0
  15. package/dist/commands/cap-connections.js.map +1 -0
  16. package/dist/commands/capability.d.ts +89 -0
  17. package/dist/commands/capability.js +1523 -0
  18. package/dist/commands/capability.js.map +1 -0
  19. package/dist/commands/centrality.d.ts +20 -0
  20. package/dist/commands/centrality.js +94 -0
  21. package/dist/commands/centrality.js.map +1 -0
  22. package/dist/commands/connect.d.ts +2 -0
  23. package/dist/commands/connect.js +16 -35
  24. package/dist/commands/connect.js.map +1 -1
  25. package/dist/commands/context.js +4 -6
  26. package/dist/commands/context.js.map +1 -1
  27. package/dist/commands/data-extra.d.ts +1 -0
  28. package/dist/commands/data-extra.js +34 -10
  29. package/dist/commands/data-extra.js.map +1 -1
  30. package/dist/commands/data.d.ts +4 -4
  31. package/dist/commands/data.js +241 -184
  32. package/dist/commands/data.js.map +1 -1
  33. package/dist/commands/diagnose.d.ts +20 -0
  34. package/dist/commands/diagnose.js +143 -0
  35. package/dist/commands/diagnose.js.map +1 -0
  36. package/dist/commands/digest.d.ts +17 -0
  37. package/dist/commands/digest.js +121 -0
  38. package/dist/commands/digest.js.map +1 -0
  39. package/dist/commands/discover.d.ts +2 -0
  40. package/dist/commands/discover.js +25 -8
  41. package/dist/commands/discover.js.map +1 -1
  42. package/dist/commands/events.js +2 -1
  43. package/dist/commands/events.js.map +1 -1
  44. package/dist/commands/explain.d.ts +1 -1
  45. package/dist/commands/explain.js +18 -15
  46. package/dist/commands/explain.js.map +1 -1
  47. package/dist/commands/facet.d.ts +29 -0
  48. package/dist/commands/facet.js +113 -0
  49. package/dist/commands/facet.js.map +1 -0
  50. package/dist/commands/graph.js +2 -1
  51. package/dist/commands/graph.js.map +1 -1
  52. package/dist/commands/import.d.ts +38 -0
  53. package/dist/commands/import.js +440 -0
  54. package/dist/commands/import.js.map +1 -0
  55. package/dist/commands/init.js +35 -16
  56. package/dist/commands/init.js.map +1 -1
  57. package/dist/commands/keys.js +3 -4
  58. package/dist/commands/keys.js.map +1 -1
  59. package/dist/commands/knowledge.d.ts +2 -0
  60. package/dist/commands/knowledge.js +61 -9
  61. package/dist/commands/knowledge.js.map +1 -1
  62. package/dist/commands/launch.d.ts +50 -0
  63. package/dist/commands/launch.js +790 -0
  64. package/dist/commands/launch.js.map +1 -0
  65. package/dist/commands/lens.d.ts +45 -0
  66. package/dist/commands/lens.js +386 -0
  67. package/dist/commands/lens.js.map +1 -0
  68. package/dist/commands/market.d.ts +209 -0
  69. package/dist/commands/market.js +1368 -0
  70. package/dist/commands/market.js.map +1 -0
  71. package/dist/commands/mcp.d.ts +42 -0
  72. package/dist/commands/mcp.js +184 -0
  73. package/dist/commands/mcp.js.map +1 -0
  74. package/dist/commands/observe.js +14 -11
  75. package/dist/commands/observe.js.map +1 -1
  76. package/dist/commands/open.d.ts +21 -4
  77. package/dist/commands/open.js +45 -4
  78. package/dist/commands/open.js.map +1 -1
  79. package/dist/commands/pod.d.ts +100 -0
  80. package/dist/commands/pod.js +359 -0
  81. package/dist/commands/pod.js.map +1 -0
  82. package/dist/commands/pods.d.ts +1 -0
  83. package/dist/commands/pods.js +77 -15
  84. package/dist/commands/pods.js.map +1 -1
  85. package/dist/commands/proposals-actions.js +40 -3
  86. package/dist/commands/proposals-actions.js.map +1 -1
  87. package/dist/commands/purge.d.ts +23 -0
  88. package/dist/commands/purge.js +148 -0
  89. package/dist/commands/purge.js.map +1 -0
  90. package/dist/commands/raycast.d.ts +15 -0
  91. package/dist/commands/raycast.js +153 -0
  92. package/dist/commands/raycast.js.map +1 -0
  93. package/dist/commands/sessions.js +45 -21
  94. package/dist/commands/sessions.js.map +1 -1
  95. package/dist/commands/skill-manage.d.ts +21 -0
  96. package/dist/commands/skill-manage.js +195 -0
  97. package/dist/commands/skill-manage.js.map +1 -0
  98. package/dist/commands/skills-commands.js +2 -1
  99. package/dist/commands/skills-commands.js.map +1 -1
  100. package/dist/commands/skills.js +4 -3
  101. package/dist/commands/skills.js.map +1 -1
  102. package/dist/commands/status.d.ts +3 -1
  103. package/dist/commands/status.js +166 -14
  104. package/dist/commands/status.js.map +1 -1
  105. package/dist/commands/statusline.d.ts +24 -0
  106. package/dist/commands/statusline.js +450 -0
  107. package/dist/commands/statusline.js.map +1 -0
  108. package/dist/commands/subscribe.js +2 -2
  109. package/dist/commands/subscribe.js.map +1 -1
  110. package/dist/commands/tools.d.ts +30 -0
  111. package/dist/commands/tools.js +315 -0
  112. package/dist/commands/tools.js.map +1 -0
  113. package/dist/commands/versions.d.ts +27 -0
  114. package/dist/commands/versions.js +277 -0
  115. package/dist/commands/versions.js.map +1 -0
  116. package/dist/commands/view.js +3 -2
  117. package/dist/commands/view.js.map +1 -1
  118. package/dist/commands/whoami.d.ts +21 -0
  119. package/dist/commands/whoami.js +129 -0
  120. package/dist/commands/whoami.js.map +1 -0
  121. package/dist/index.js +776 -60
  122. package/dist/index.js.map +1 -1
  123. package/dist/lib/approval-poll.d.ts +42 -0
  124. package/dist/lib/approval-poll.js +52 -0
  125. package/dist/lib/approval-poll.js.map +1 -0
  126. package/dist/lib/auth.d.ts +29 -6
  127. package/dist/lib/auth.js +105 -94
  128. package/dist/lib/auth.js.map +1 -1
  129. package/dist/lib/bundle-version.d.ts +11 -0
  130. package/dist/lib/bundle-version.js +33 -0
  131. package/dist/lib/bundle-version.js.map +1 -0
  132. package/dist/lib/capture-lane.d.ts +30 -12
  133. package/dist/lib/capture-lane.js +71 -14
  134. package/dist/lib/capture-lane.js.map +1 -1
  135. package/dist/lib/cp-packages.d.ts +121 -0
  136. package/dist/lib/cp-packages.js +218 -0
  137. package/dist/lib/cp-packages.js.map +1 -0
  138. package/dist/lib/describe-lens.d.ts +46 -0
  139. package/dist/lib/describe-lens.js +33 -0
  140. package/dist/lib/describe-lens.js.map +1 -0
  141. package/dist/lib/hub-client.d.ts +78 -1
  142. package/dist/lib/hub-client.js +474 -22
  143. package/dist/lib/hub-client.js.map +1 -1
  144. package/dist/lib/installed.d.ts +51 -0
  145. package/dist/lib/installed.js +70 -0
  146. package/dist/lib/installed.js.map +1 -0
  147. package/dist/lib/next-steps.d.ts +61 -0
  148. package/dist/lib/next-steps.js +146 -0
  149. package/dist/lib/next-steps.js.map +1 -0
  150. package/dist/lib/pod.d.ts +91 -19
  151. package/dist/lib/pod.js +222 -56
  152. package/dist/lib/pod.js.map +1 -1
  153. package/dist/lib/project-ref.d.ts +95 -0
  154. package/dist/lib/project-ref.js +144 -0
  155. package/dist/lib/project-ref.js.map +1 -0
  156. package/dist/lib/project.d.ts +35 -0
  157. package/dist/lib/project.js +39 -0
  158. package/dist/lib/project.js.map +1 -0
  159. package/dist/lib/session-lens.d.ts +33 -0
  160. package/dist/lib/session-lens.js +76 -0
  161. package/dist/lib/session-lens.js.map +1 -0
  162. package/dist/lib/skill-import.d.ts +40 -0
  163. package/dist/lib/skill-import.js +203 -0
  164. package/dist/lib/skill-import.js.map +1 -0
  165. package/dist/lib/skills-installer.d.ts +17 -6
  166. package/dist/lib/skills-installer.js +133 -19
  167. package/dist/lib/skills-installer.js.map +1 -1
  168. package/dist/lib/suite.d.ts +28 -0
  169. package/dist/lib/suite.js +29 -0
  170. package/dist/lib/suite.js.map +1 -0
  171. package/dist/lib/superwhisper-import.d.ts +40 -0
  172. package/dist/lib/superwhisper-import.js +389 -0
  173. package/dist/lib/superwhisper-import.js.map +1 -0
  174. package/dist/lib/targets.d.ts +49 -1
  175. package/dist/lib/targets.js +420 -288
  176. package/dist/lib/targets.js.map +1 -1
  177. package/dist/lib/unwrapList.d.ts +1 -0
  178. package/dist/lib/unwrapList.js +20 -0
  179. package/dist/lib/unwrapList.js.map +1 -0
  180. package/dist/utils/logger.d.ts +2 -0
  181. package/dist/utils/logger.js +10 -2
  182. package/dist/utils/logger.js.map +1 -1
  183. package/package.json +9 -4
  184. package/skills/agent-os/SKILL.md +212 -0
  185. package/skills/manifest.json +5 -0
  186. package/skills/onboard/SKILL.md +186 -0
  187. package/skills/synap/SKILL.md +1182 -37
  188. package/skills/synap/_order.txt +37 -0
  189. package/skills/synap/_skill.yaml +24 -0
  190. package/skills/synap/authentication.md +10 -0
  191. package/skills/synap/automations.md +264 -0
  192. package/skills/synap/capabilities.md +107 -0
  193. package/skills/synap/capture.md +10 -0
  194. package/skills/synap/cli-operations.md +107 -0
  195. package/skills/synap/common-mistakes.md +12 -0
  196. package/skills/synap/creative-loop.md +43 -0
  197. package/skills/synap/crm.md +117 -0
  198. package/skills/synap/diagnostics.md +35 -0
  199. package/skills/synap/digesting-a-channel.md +38 -0
  200. package/skills/synap/document-embeds.md +123 -0
  201. package/skills/synap/escalation-ladder.md +71 -0
  202. package/skills/synap/focus-sessions.md +47 -0
  203. package/skills/synap/governance-rules.md +64 -0
  204. package/skills/synap/governance.md +6 -6
  205. package/skills/synap/graph-gardening.md +21 -0
  206. package/skills/synap/inline-patterns.md +38 -0
  207. package/skills/synap/lenses.md +38 -0
  208. package/skills/synap/linking-principle.md +39 -0
  209. package/skills/synap/linking.md +1 -0
  210. package/skills/synap/mental-model.md +45 -0
  211. package/skills/synap/more.md +7 -0
  212. package/skills/synap/multi-entity-capture.md +10 -0
  213. package/skills/synap/next-action.md +37 -0
  214. package/skills/synap/north-star.md +17 -0
  215. package/skills/synap/operating-mode-rules.md +45 -0
  216. package/skills/synap/operating-mode.md +9 -0
  217. package/skills/synap/quick-reference.md +67 -0
  218. package/skills/synap/reading.md +43 -0
  219. package/skills/synap/recap.md +21 -0
  220. package/skills/synap/reflexes.md +46 -0
  221. package/skills/synap/response-style.md +21 -0
  222. package/skills/synap/scope.md +13 -0
  223. package/skills/synap/showing.md +17 -0
  224. package/skills/synap/user-model.md +25 -0
  225. package/skills/synap/viewframe-cells.md +290 -0
  226. package/skills/synap/work-flow.md +113 -0
  227. package/skills/synap/worked-examples.md +53 -0
  228. package/skills/synap/workspace-design.md +45 -0
  229. package/skills/synap/workspace-edges.md +49 -0
  230. package/skills/synap/writes.md +156 -0
  231. package/skills/synap-schema/SKILL.md +97 -6
  232. package/skills/synap-schema/_order.txt +13 -0
  233. package/skills/synap-schema/_skill.yaml +22 -0
  234. package/skills/synap-schema/before-you-touch.md +14 -0
  235. package/skills/synap-schema/common-mistakes.md +9 -0
  236. package/skills/synap-schema/creating-profiles.md +17 -0
  237. package/skills/synap-schema/discover-profiles.md +24 -0
  238. package/skills/synap-schema/entity-scope.md +8 -0
  239. package/skills/synap-schema/extend-vs-create.md +31 -0
  240. package/skills/synap-schema/more.md +6 -0
  241. package/skills/synap-schema/overlay-properties.md +22 -0
  242. package/skills/synap-schema/profiles.md +3 -0
  243. package/skills/synap-schema/property-defs.md +29 -0
  244. package/skills/synap-schema/read-before-write.md +50 -0
  245. package/skills/synap-schema/relations.md +18 -0
  246. package/skills/synap-schema/worked-example.md +30 -0
  247. package/skills/synap-ui/SKILL.md +26 -2
  248. package/skills/synap-ui/_order.txt +13 -0
  249. package/skills/synap-ui/_skill.yaml +23 -0
  250. package/skills/synap-ui/ai-companion.md +27 -0
  251. package/skills/synap-ui/arranging-bento.md +8 -0
  252. package/skills/synap-ui/before-you-build.md +20 -0
  253. package/skills/synap-ui/bento-layouts.md +35 -0
  254. package/skills/synap-ui/common-mistakes.md +10 -0
  255. package/skills/synap-ui/creating-views.md +26 -0
  256. package/skills/synap-ui/four-builds.md +24 -0
  257. package/skills/synap-ui/more.md +7 -0
  258. package/skills/synap-ui/proposing-vs-extending.md +11 -0
  259. package/skills/synap-ui/view-list.md +24 -0
  260. package/skills/synap-ui/views.md +3 -0
  261. package/skills/synap-ui/worked-example.md +18 -0
  262. package/skills/synap-ui/workspaces.md +47 -0
  263. package/templates/automations/bookmark-enrichment.automation.json +44 -0
  264. package/templates/automations/mail-feed.automation.json +86 -0
  265. package/templates/automations/url-bookmark-capture.automation.json +70 -0
  266. package/templates/skills/README.md +21 -0
  267. package/templates/skills/authoring-automations/SKILL.md +95 -0
  268. package/templates/skills/authoring-automations/reference/node-matrix.md +49 -0
  269. package/templates/skills/authoring-capabilities/SKILL.md +93 -0
  270. package/templates/skills/authoring-capabilities/reference/template-anatomy.md +70 -0
  271. package/templates/skills/authoring-playbooks/SKILL.md +102 -0
  272. package/templates/skills/authoring-playbooks/reference/stages-contract.md +35 -0
  273. package/templates/skills/authoring-playbooks/reference/worked-example.md +64 -0
  274. package/templates/skills/bookmark-enrichment/SKILL.md +40 -0
  275. package/templates/skills/coordinating-agents/SKILL.md +32 -0
  276. package/templates/skills/coordinating-branches/SKILL.md +27 -0
  277. package/templates/skills/mapping-the-server/SKILL.md +54 -0
  278. package/templates/skills/reading-client-progress/SKILL.md +65 -0
  279. package/templates/skills/routing-to-channels/SKILL.md +54 -0
  280. package/templates/skills/stellar-scf-grants-advisor/ASSOCIATE-CHEATSHEET.md +133 -0
  281. package/templates/skills/stellar-scf-grants-advisor/ASSOCIATE-ONBOARDING-GUIDE.md +761 -0
  282. package/templates/skills/stellar-scf-grants-advisor/CLIENT-FAQ.md +181 -0
  283. package/templates/skills/stellar-scf-grants-advisor/PARTNER-HANDOVER.md +130 -0
  284. package/templates/skills/stellar-scf-grants-advisor/SKILL.md +102 -0
  285. package/templates/skills/stellar-scf-grants-advisor/examples/README.md +43 -0
  286. package/templates/skills/stellar-scf-grants-advisor/examples/chat-summary-templates.md +158 -0
  287. package/templates/skills/stellar-scf-grants-advisor/examples/corpus-comparable-rows.md +136 -0
  288. package/templates/skills/stellar-scf-grants-advisor/examples/q10-team-rewrites.md +109 -0
  289. package/templates/skills/stellar-scf-grants-advisor/examples/q2-description-rewrites.md +88 -0
  290. package/templates/skills/stellar-scf-grants-advisor/examples/q6-integration-rewrites.md +107 -0
  291. package/templates/skills/stellar-scf-grants-advisor/examples/tranche-structures.md +176 -0
  292. package/templates/skills/stellar-scf-grants-advisor/reference/01-methodology.md +96 -0
  293. package/templates/skills/stellar-scf-grants-advisor/reference/02-scoring-framework.md +199 -0
  294. package/templates/skills/stellar-scf-grants-advisor/reference/03-rejection-patterns.md +241 -0
  295. package/templates/skills/stellar-scf-grants-advisor/reference/04-winner-patterns.md +120 -0
  296. package/templates/skills/stellar-scf-grants-advisor/reference/05-comeback-patterns.md +92 -0
  297. package/templates/skills/stellar-scf-grants-advisor/reference/06-budget-benchmarks.md +125 -0
  298. package/templates/skills/stellar-scf-grants-advisor/reference/07-integration-list.md +147 -0
  299. package/templates/skills/stellar-scf-grants-advisor/reference/08-abstract-fields.md +258 -0
  300. package/templates/skills/stellar-scf-grants-advisor/reference/09-build-fields.md +259 -0
  301. package/templates/skills/stellar-scf-grants-advisor/reference/10-corpus-winners.md +135 -0
  302. package/templates/skills/stellar-scf-grants-advisor/reference/11-corpus-rejects.md +267 -0
  303. package/templates/skills/stellar-scf-grants-advisor/reference/12-client-communication.md +131 -0
  304. package/templates/skills/stellar-scf-grants-advisor/reference/13-excel-output-spec.md +199 -0
  305. package/templates/skills/stellar-scf-grants-advisor/reference/14-worked-examples.md +160 -0
  306. package/templates/skills/stellar-scf-grants-advisor/templates/abstract-review-builder.py +253 -0
  307. package/templates/skills/stellar-scf-grants-advisor/templates/build-review-builder.py +213 -0
  308. package/dist/commands/connectors.d.ts +0 -31
  309. package/dist/commands/connectors.js +0 -276
  310. package/dist/commands/connectors.js.map +0 -1
  311. package/dist/commands/finish.d.ts +0 -25
  312. package/dist/commands/finish.js +0 -274
  313. package/dist/commands/finish.js.map +0 -1
  314. package/dist/commands/openclaw.d.ts +0 -40
  315. package/dist/commands/openclaw.js +0 -1148
  316. package/dist/commands/openclaw.js.map +0 -1
  317. package/dist/commands/security-audit.d.ts +0 -12
  318. package/dist/commands/security-audit.js +0 -100
  319. package/dist/commands/security-audit.js.map +0 -1
  320. package/dist/lib/hardening.d.ts +0 -18
  321. package/dist/lib/hardening.js +0 -214
  322. package/dist/lib/hardening.js.map +0 -1
  323. package/node_modules/@synap/hub-rest-client/dist/index.cjs +0 -881
  324. package/node_modules/@synap/hub-rest-client/dist/index.d.cts +0 -907
  325. package/node_modules/@synap/hub-rest-client/dist/index.d.ts +0 -907
  326. package/node_modules/@synap/hub-rest-client/dist/index.js +0 -851
  327. package/node_modules/@synap/hub-rest-client/package.json +0 -45
  328. package/node_modules/@synap/hub-rest-client/src/client.ts +0 -1143
  329. package/node_modules/@synap/hub-rest-client/src/errors.ts +0 -30
  330. package/node_modules/@synap/hub-rest-client/src/index.ts +0 -111
  331. package/node_modules/@synap/hub-rest-client/src/setup.ts +0 -77
  332. package/node_modules/@synap/hub-rest-client/src/types.ts +0 -639
@@ -1,8 +1,228 @@
1
1
  import { existsSync, readFileSync, writeFileSync, unlinkSync } from "node:fs";
2
2
  import { join } from "node:path";
3
- import { getActivePodConfig, getActiveWorkspaceId, listPodProfiles } from "./pod.js";
3
+ import { getActivePodConfig, getActiveWorkspaceId, getActiveProjectId, listPodProfiles, getPodOverride, getSurfaceAgentKey } from "./pod.js";
4
4
  import { resolveAgentOverride } from "./agents-config.js";
5
+ import { resolveActiveLens } from "./session-lens.js";
5
6
  import { HubRestClient } from "@synap/hub-rest-client";
7
+ import { log } from "../utils/logger.js";
8
+ /**
9
+ * A failed Hub call, carrying the structured facts callers need to branch on.
10
+ *
11
+ * `message` is HUMAN-READABLE and is what the many `log.error((err as Error).message)`
12
+ * sites print. It keeps a literal `(HTTP <status>)` token: several call sites
13
+ * classify errors by matching that substring, and the token is the contract they
14
+ * depend on. The raw response body is kept on `rawBody` and never spliced into
15
+ * `message` — a JSON blob truncated mid-object is unreadable and leaks internals.
16
+ */
17
+ export class HubError extends Error {
18
+ status;
19
+ code;
20
+ reason;
21
+ body;
22
+ rawBody;
23
+ path;
24
+ method;
25
+ constructor(init) {
26
+ super(init.message);
27
+ this.name = "HubError";
28
+ this.status = init.status;
29
+ this.code = init.code;
30
+ this.reason = init.reason;
31
+ this.body = init.body;
32
+ this.rawBody = init.rawBody;
33
+ this.path = init.path;
34
+ this.method = init.method;
35
+ }
36
+ }
37
+ /**
38
+ * A Hub call that never reached the pod — DNS, TCP, TLS or timeout.
39
+ *
40
+ * Peer of {@link HubError}: same rendering path, same `message`-is-human-readable
41
+ * rule. It deliberately carries NO `(HTTP <status>)` token — there was no HTTP
42
+ * response, and the call sites that classify on that substring must not match.
43
+ * `podUrl` is the origin we failed to reach and `hint` is the next action.
44
+ */
45
+ export class HubNetworkError extends Error {
46
+ /** Transport code we classified on: ENOTFOUND, ECONNREFUSED, TIMEOUT, TLS… */
47
+ code;
48
+ podUrl;
49
+ path;
50
+ method;
51
+ /** The one thing the user should do next. Rendered under the message. */
52
+ hint;
53
+ constructor(init) {
54
+ super(init.message, { cause: init.cause });
55
+ this.name = "HubNetworkError";
56
+ this.code = init.code;
57
+ this.podUrl = init.podUrl;
58
+ this.path = init.path;
59
+ this.method = init.method;
60
+ this.hint = init.hint;
61
+ }
62
+ }
63
+ /** Origin of a Hub URL, for messages. Falls back to the raw URL if unparseable. */
64
+ function originOf(url) {
65
+ try {
66
+ return new URL(url).origin;
67
+ }
68
+ catch {
69
+ return url;
70
+ }
71
+ }
72
+ /**
73
+ * Classify a transport-layer failure into a HubNetworkError.
74
+ *
75
+ * undici throws a bare `TypeError: fetch failed` and hangs the real cause off
76
+ * `err.cause`, so a wrong DNS name, a pod that is down, an offline laptop and a
77
+ * fired AbortSignal.timeout are otherwise indistinguishable at the call sites
78
+ * that print `err.message`. This is the one place that taxonomy lives.
79
+ */
80
+ function networkError(err, url, method, path, timeoutMs) {
81
+ const podUrl = originOf(url);
82
+ const name = err instanceof Error ? err.name : "";
83
+ const cause = err?.cause;
84
+ const rawCode = cause && typeof cause === "object" && typeof cause.code === "string"
85
+ ? (cause.code)
86
+ : "";
87
+ const fail = (code, detail, hint) => new HubNetworkError({
88
+ message: `Hub ${method} ${path} failed: ${detail}`,
89
+ code,
90
+ podUrl,
91
+ path,
92
+ method,
93
+ hint,
94
+ cause: err,
95
+ });
96
+ // AbortSignal.timeout() rejects with a TimeoutError; undici's own connect/header
97
+ // timeouts surface as codes. Both mean the same thing to the user.
98
+ if (name === "TimeoutError" ||
99
+ name === "AbortError" ||
100
+ rawCode === "ETIMEDOUT" ||
101
+ rawCode === "UND_ERR_CONNECT_TIMEOUT" ||
102
+ rawCode === "UND_ERR_HEADERS_TIMEOUT") {
103
+ return fail("TIMEOUT", `no response from the pod at ${podUrl} after ${Math.round(timeoutMs / 1000)}s`, "The pod accepted the connection but did not answer in time — it may be overloaded or mid-restart. Check it with: synap status");
104
+ }
105
+ if (rawCode === "ENOTFOUND" || rawCode === "EAI_AGAIN") {
106
+ return fail(rawCode, `could not resolve the pod host for ${podUrl}`, rawCode === "EAI_AGAIN"
107
+ ? "DNS lookup failed temporarily — check this machine is online, then retry."
108
+ : "That hostname does not resolve — check the pod URL is spelled right. See your saved pods with: synap pods list");
109
+ }
110
+ if (rawCode === "ECONNREFUSED") {
111
+ return fail(rawCode, `the pod at ${podUrl} refused the connection`, "Nothing is listening there — check the pod is up, or switch to another saved pod with: synap pods use <name>");
112
+ }
113
+ if (rawCode === "ECONNRESET" || rawCode === "EPIPE") {
114
+ return fail(rawCode, `the connection to ${podUrl} was dropped mid-request`, "The pod or a proxy in front of it closed the connection — retry, then check the pod with: synap status");
115
+ }
116
+ if (rawCode === "ENETUNREACH" || rawCode === "EHOSTUNREACH") {
117
+ return fail(rawCode, `no network route to ${podUrl}`, "This machine cannot reach that host — check you are online and on the right network/VPN.");
118
+ }
119
+ if (rawCode.startsWith("CERT_") || rawCode.startsWith("ERR_TLS_") || rawCode.includes("SELF_SIGNED") || rawCode === "UNABLE_TO_VERIFY_LEAF_SIGNATURE" || rawCode === "DEPTH_ZERO_SELF_SIGNED_CERT") {
120
+ return fail(rawCode, `the TLS certificate of ${podUrl} was rejected (${rawCode})`, "The pod's certificate is not trusted by this machine — check the pod URL and its TLS setup.");
121
+ }
122
+ // Unknown transport failure: still name the pod and the underlying code rather
123
+ // than letting a bare "fetch failed" through.
124
+ const detail = rawCode
125
+ ? `could not reach the pod at ${podUrl} (${rawCode})`
126
+ : `could not reach the pod at ${podUrl}`;
127
+ return fail(rawCode || "NETWORK", detail, "Check this machine is online and the pod URL is right: synap pods list");
128
+ }
129
+ /** Fallback wording when the body carries no usable message of its own. */
130
+ function statusPhrase(status) {
131
+ if (status >= 500)
132
+ return "the pod hit an internal error";
133
+ switch (status) {
134
+ case 400:
135
+ return "the pod rejected the request as invalid";
136
+ case 401:
137
+ return "the pod did not accept these credentials";
138
+ case 403:
139
+ return "the pod refused this operation";
140
+ case 404:
141
+ return "the pod has no such endpoint or record";
142
+ case 409:
143
+ return "this conflicts with what the pod already has";
144
+ case 429:
145
+ return "the pod is rate limiting this key";
146
+ default:
147
+ return "the pod returned an unexpected status";
148
+ }
149
+ }
150
+ /**
151
+ * Turn a raw error body into { detail, code, reason, parsed }.
152
+ * JSON bodies contribute only their `message`/`error` field; a JSON body with
153
+ * neither falls back to the status phrase rather than dumping the object.
154
+ */
155
+ function readErrorBody(status, rawBody) {
156
+ const trimmed = rawBody.trim();
157
+ if (!trimmed)
158
+ return { detail: statusPhrase(status) };
159
+ let parsed;
160
+ try {
161
+ parsed = JSON.parse(trimmed);
162
+ }
163
+ catch {
164
+ // Plain-text body (Hono default, a proxy page): safe to show inline — it is
165
+ // not structured, so a length cap cannot cut it mid-object.
166
+ const oneLine = trimmed.replace(/\s+/g, " ");
167
+ return { detail: oneLine.length > 200 ? `${oneLine.slice(0, 200)}…` : oneLine };
168
+ }
169
+ if (parsed && typeof parsed === "object") {
170
+ const o = parsed;
171
+ const code = typeof o.code === "string" ? o.code : undefined;
172
+ const reason = typeof o.reason === "string" ? o.reason : undefined;
173
+ const detail = typeof o.message === "string" && o.message
174
+ ? o.message
175
+ : typeof o.error === "string" && o.error
176
+ ? o.error
177
+ : statusPhrase(status);
178
+ return { detail, code, reason, parsed };
179
+ }
180
+ return { detail: statusPhrase(status), parsed };
181
+ }
182
+ /** Build the HubError for a non-ok response body. */
183
+ function hubError(method, path, status, rawBody, suffix) {
184
+ const { detail, code, reason, parsed } = readErrorBody(status, rawBody);
185
+ return new HubError({
186
+ message: `Hub ${method} ${path} failed (HTTP ${status})${suffix ? ` ${suffix}` : ""}: ${detail}`,
187
+ status,
188
+ code,
189
+ reason,
190
+ body: parsed,
191
+ rawBody,
192
+ path,
193
+ method,
194
+ });
195
+ }
196
+ /**
197
+ * Print a failed Hub call: its humanized message plus a hint for the classes
198
+ * where the cause is not obvious from the message alone. Lives here rather than
199
+ * in utils/logger so the logger stays domain-agnostic and the taxonomy and its
200
+ * presentation sit in one file.
201
+ */
202
+ export function renderHubError(err) {
203
+ // Hints use log.hint (stderr), not log.dim (stdout): a hint belongs to the
204
+ // error it explains, and splitting one message across two streams means
205
+ // `2>/dev/null` shows a bare hint with no error above it.
206
+ if (err instanceof HubNetworkError) {
207
+ log.error(err.message);
208
+ log.hint(err.hint);
209
+ return;
210
+ }
211
+ if (!(err instanceof HubError)) {
212
+ log.error(err instanceof Error ? err.message : String(err));
213
+ return;
214
+ }
215
+ log.error(err.message);
216
+ if (err.status >= 500) {
217
+ log.hint("The pod hit an internal error — this is a fault on the pod side, not in this command.");
218
+ }
219
+ else if (err.status === 401 || err.status === 403) {
220
+ log.hint("The pod rejected this key's credentials or its scopes for this operation.");
221
+ }
222
+ else if (err.status === 404) {
223
+ log.hint("The pod has no such endpoint or record — it may be running an older build.");
224
+ }
225
+ }
6
226
  const userIdCache = new Map();
7
227
  export async function resolveUserId(cfg) {
8
228
  if (cfg.userId && cfg.userId !== "cli")
@@ -25,6 +245,21 @@ export function assertScope(cfg, required) {
25
245
  }
26
246
  }
27
247
  export async function resolveHubConfig(opts) {
248
+ // 0. Per-invocation `--pod <name>` override (highest precedence): a single
249
+ // command targets another saved pod while other agents keep their default.
250
+ // Beats the env vars deliberately — that is the whole point of the flag.
251
+ const podOverride = getPodOverride();
252
+ if (podOverride) {
253
+ return {
254
+ podUrl: podOverride.podUrl,
255
+ apiKey: podOverride.hubApiKey,
256
+ // A profile's agentUserId may be empty; "cli" makes resolveUserId fetch /users/me.
257
+ userId: podOverride.agentUserId || "cli",
258
+ // Use the TARGET pod's own workspace — NOT this session's lens, which
259
+ // belongs to the default pod and would be meaningless on the target.
260
+ workspaceId: podOverride.workspaceId || undefined,
261
+ };
262
+ }
28
263
  // 1. Explicit flags (escape hatch)
29
264
  if (opts?.podUrl && opts?.apiKey) {
30
265
  return {
@@ -53,12 +288,33 @@ export async function resolveHubConfig(opts) {
53
288
  const envUser = process.env.SYNAP_USER_ID;
54
289
  const envScopes = process.env.SYNAP_KEY_SCOPES;
55
290
  const envWorkspace = process.env.SYNAP_WORKSPACE_ID;
291
+ const envProject = process.env.SYNAP_PROJECT_ID;
56
292
  if (envPod && envKey && envUser) {
293
+ // Surface-bound resolution guard: if this pod has a `claude-code` surface
294
+ // key pinned to it (via `synap connect --target=claude-code`) and the
295
+ // ambient SYNAP_HUB_API_KEY doesn't match it, the session inherited a
296
+ // FOREIGN key (e.g. another agent's, like the Discord bridge's) — prefer
297
+ // the pinned key so a leaked/inherited env var can't silently redefine
298
+ // which agent this session acts as. Conservative: only applies here, in
299
+ // step 3 — steps 0-2 (--pod, explicit flags, SYNAP_AGENT) still win
300
+ // outright, untouched.
301
+ const surfaceKey = getSurfaceAgentKey("claude-code");
302
+ let apiKey = envKey;
303
+ let userId = envUser;
304
+ if (surfaceKey && surfaceKey.podUrl === envPod && surfaceKey.hubApiKey && surfaceKey.hubApiKey !== envKey) {
305
+ process.stderr.write(`[synap] warning: ambient SYNAP_HUB_API_KEY does not match the claude-code surface key pinned to ${envPod} — using the pinned key instead of the inherited one.\n`);
306
+ apiKey = surfaceKey.hubApiKey;
307
+ userId = surfaceKey.agentUserId || envUser;
308
+ }
57
309
  return {
58
310
  podUrl: envPod,
59
- apiKey: envKey,
60
- userId: envUser,
61
- workspaceId: envWorkspace || getActiveWorkspaceId(),
311
+ apiKey,
312
+ userId,
313
+ // Per-Claude-session lens wins over the global env var, so concurrent
314
+ // sessions can each be scoped to a different workspace.
315
+ workspaceId: resolveActiveLens()?.workspaceId || envWorkspace || getActiveWorkspaceId(),
316
+ // Project is a peer lens, threaded exactly like workspaceId.
317
+ projectId: resolveActiveLens()?.projectId || envProject || getActiveProjectId(),
62
318
  scopes: envScopes ? envScopes.split(",") : undefined,
63
319
  };
64
320
  }
@@ -70,7 +326,8 @@ export async function resolveHubConfig(opts) {
70
326
  podUrl: config.podUrl,
71
327
  apiKey: config.hubApiKey,
72
328
  userId: config.agentUserId,
73
- workspaceId: getActiveWorkspaceId(),
329
+ workspaceId: resolveActiveLens()?.workspaceId || getActiveWorkspaceId(),
330
+ projectId: resolveActiveLens()?.projectId || getActiveProjectId(),
74
331
  };
75
332
  }
76
333
  const SESSION_FILE = ".synap-session";
@@ -96,51 +353,246 @@ export function clearActiveSessionId() {
96
353
  unlinkSync(filePath);
97
354
  }
98
355
  function sessionHeaders() {
99
- const id = readActiveSessionId();
356
+ // Per-Claude-session lens wins; fall back to the legacy per-CWD .synap-session.
357
+ const id = resolveActiveLens()?.focusSessionId || readActiveSessionId();
100
358
  return id ? { "X-Session-Id": id } : {};
101
359
  }
360
+ /** Max 429 retries for bulk import (each waits up to the rate-limit window). */
361
+ const HUB_429_MAX_RETRIES = 12;
362
+ /** Default wait when server gives no Retry-After (API-key window is 60s). */
363
+ const HUB_429_DEFAULT_WAIT_MS = 62_000;
364
+ /** Never sleep more than this on a single 429 (proxies sometimes send 180+). */
365
+ const HUB_429_MAX_WAIT_MS = 75_000;
366
+ /**
367
+ * Client-side request budget — stay UNDER the server limit so we rarely 429.
368
+ * Default 80/min is safe for pods still on the old 100/min auth limit.
369
+ * After deploying 1200/min server budget: `export SYNAP_HUB_RPM=1000`.
370
+ */
371
+ function hubRpmBudget() {
372
+ const raw = process.env.SYNAP_HUB_RPM;
373
+ if (raw) {
374
+ const n = parseInt(raw, 10);
375
+ if (Number.isFinite(n) && n >= 10)
376
+ return Math.min(n, 5000);
377
+ }
378
+ return 80;
379
+ }
380
+ const hubRequestTimestamps = [];
381
+ function sleep(ms) {
382
+ return new Promise((r) => setTimeout(r, ms));
383
+ }
384
+ /**
385
+ * Pace Hub calls so we never burst past hubRpmBudget() in any 60s window.
386
+ * This is the primary bulk-import fix — reactive 429 sleep is the backup.
387
+ */
388
+ async function acquireHubSlot() {
389
+ const rpm = hubRpmBudget();
390
+ for (;;) {
391
+ const now = Date.now();
392
+ while (hubRequestTimestamps.length > 0 &&
393
+ hubRequestTimestamps[0] < now - 60_000) {
394
+ hubRequestTimestamps.shift();
395
+ }
396
+ if (hubRequestTimestamps.length < rpm) {
397
+ hubRequestTimestamps.push(now);
398
+ return;
399
+ }
400
+ const wait = hubRequestTimestamps[0] + 60_000 - now + 25;
401
+ if (wait > 500) {
402
+ console.error(`[hub] pacing: ${hubRequestTimestamps.length}/${rpm} req in last 60s — wait ${Math.ceil(wait / 1000)}s`);
403
+ }
404
+ await sleep(Math.max(wait, 50));
405
+ }
406
+ }
407
+ /**
408
+ * Parse Retry-After from headers or a Hub 429 body. Caps at 75s so a bad
409
+ * proxy header never parks the importer for 3 minutes.
410
+ */
411
+ function retryAfterMs(res, bodyText) {
412
+ const h = res.headers.get("retry-after");
413
+ if (h) {
414
+ const sec = parseInt(h, 10);
415
+ if (Number.isFinite(sec) && sec > 0) {
416
+ return Math.min(Math.max(sec * 1000, 1_000), HUB_429_MAX_WAIT_MS);
417
+ }
418
+ }
419
+ const m = bodyText.match(/retry after\s+(\d+)\s*s/i);
420
+ if (m) {
421
+ const sec = parseInt(m[1], 10);
422
+ if (Number.isFinite(sec) && sec > 0) {
423
+ return Math.min(Math.max(sec * 1000, 1_000), HUB_429_MAX_WAIT_MS);
424
+ }
425
+ }
426
+ return HUB_429_DEFAULT_WAIT_MS;
427
+ }
428
+ /**
429
+ * fetch with client pacing + automatic 429 backoff.
430
+ *
431
+ * `timeoutMs` mirrors the AbortSignal.timeout() the caller put on `init` — it is
432
+ * only used to say how long we waited when the signal fires.
433
+ */
434
+ async function hubFetchWithRetry(url, init, label, timeoutMs) {
435
+ const [labelMethod, ...labelRest] = label.split(" ");
436
+ const labelPath = labelRest.join(" ");
437
+ let attempt = 0;
438
+ for (;;) {
439
+ await acquireHubSlot();
440
+ let res;
441
+ try {
442
+ res = await fetch(url, init);
443
+ }
444
+ catch (err) {
445
+ throw networkError(err, url, labelMethod, labelPath, timeoutMs);
446
+ }
447
+ if (res.status !== 429)
448
+ return res;
449
+ attempt++;
450
+ if (attempt > HUB_429_MAX_RETRIES) {
451
+ const bodyText = await res.text().catch(() => "");
452
+ throw hubError(labelMethod, labelPath, 429, bodyText, `after ${HUB_429_MAX_RETRIES} retries`);
453
+ }
454
+ const bodyText = await res.text().catch(() => "");
455
+ const wait = retryAfterMs(res, bodyText);
456
+ console.error(`[hub] 429 rate limit on ${label} — waiting ${Math.ceil(wait / 1000)}s (retry ${attempt}/${HUB_429_MAX_RETRIES})`);
457
+ await sleep(wait);
458
+ }
459
+ }
102
460
  export async function hubGet(path, params, cfg) {
103
461
  const url = new URL(`${cfg.podUrl}/api/hub${path}`);
104
462
  for (const [k, v] of Object.entries(params)) {
105
463
  if (v !== undefined)
106
464
  url.searchParams.set(k, String(v));
107
465
  }
108
- const res = await fetch(url.toString(), {
466
+ const res = await hubFetchWithRetry(url.toString(), {
109
467
  headers: { Authorization: `Bearer ${cfg.apiKey}`, ...sessionHeaders() },
110
468
  signal: AbortSignal.timeout(15_000),
111
- });
469
+ }, `GET ${path}`, 15_000);
112
470
  if (!res.ok) {
113
471
  const body = await res.text().catch(() => "");
114
- throw new Error(`Hub API error (HTTP ${res.status}): ${body.slice(0, 300)}`);
472
+ throw hubError("GET", path, res.status, body);
115
473
  }
116
474
  return res.json();
117
475
  }
118
- export async function hubPost(path, body, cfg) {
119
- const res = await fetch(`${cfg.podUrl}/api/hub${path}`, {
476
+ export async function hubPost(path, body, cfg,
477
+ // Default 15s suits CRUD doors. Capability runs invoke external provider APIs
478
+ // (often several sequential calls) and legitimately take longer — callers
479
+ // override (e.g. `cap run` passes 90s).
480
+ timeoutMs = 15_000) {
481
+ const res = await hubFetchWithRetry(`${cfg.podUrl}/api/hub${path}`, {
120
482
  method: "POST",
121
- headers: { Authorization: `Bearer ${cfg.apiKey}`, "Content-Type": "application/json", ...sessionHeaders() },
483
+ headers: {
484
+ Authorization: `Bearer ${cfg.apiKey}`,
485
+ "Content-Type": "application/json",
486
+ ...sessionHeaders(),
487
+ },
122
488
  body: JSON.stringify(body),
123
- signal: AbortSignal.timeout(15_000),
124
- });
489
+ signal: AbortSignal.timeout(timeoutMs),
490
+ }, `POST ${path}`, timeoutMs);
125
491
  if (!res.ok) {
126
492
  const bodyText = await res.text().catch(() => "");
127
- throw new Error(`Hub API error (HTTP ${res.status}): ${bodyText.slice(0, 300)}`);
493
+ throw hubError("POST", path, res.status, bodyText);
128
494
  }
129
495
  return res.json();
130
496
  }
497
+ /**
498
+ * Multipart POST for Hub doors that accept file uploads (e.g. source-file).
499
+ * Do NOT set Content-Type — fetch sets the boundary for FormData.
500
+ *
501
+ * Note: on 429 retry we cannot re-use a consumed FormData body in all runtimes.
502
+ * Callers that hit 429 mid-bulk should rebuild FormData — see hubPostMultipartRetryable.
503
+ */
504
+ export async function hubPostMultipart(path, form, cfg, timeoutMs = 120_000) {
505
+ const res = await hubFetchWithRetry(`${cfg.podUrl}/api/hub${path}`, {
506
+ method: "POST",
507
+ headers: { Authorization: `Bearer ${cfg.apiKey}`, ...sessionHeaders() },
508
+ body: form,
509
+ signal: AbortSignal.timeout(timeoutMs),
510
+ }, `POST multipart ${path}`, timeoutMs);
511
+ if (!res.ok) {
512
+ const bodyText = await res.text().catch(() => "");
513
+ throw hubError("POST multipart", path, res.status, bodyText);
514
+ }
515
+ return res.json();
516
+ }
517
+ /**
518
+ * Multipart POST that rebuilds the body on each 429 retry (FormData streams
519
+ * can only be read once).
520
+ */
521
+ export async function hubPostMultipartRetryable(path, buildForm, cfg, timeoutMs = 120_000) {
522
+ let attempt = 0;
523
+ for (;;) {
524
+ await acquireHubSlot();
525
+ const form = buildForm();
526
+ const url = `${cfg.podUrl}/api/hub${path}`;
527
+ let res;
528
+ try {
529
+ res = await fetch(url, {
530
+ method: "POST",
531
+ headers: { Authorization: `Bearer ${cfg.apiKey}`, ...sessionHeaders() },
532
+ body: form,
533
+ signal: AbortSignal.timeout(timeoutMs),
534
+ });
535
+ }
536
+ catch (err) {
537
+ throw networkError(err, url, "POST multipart", path, timeoutMs);
538
+ }
539
+ if (res.status !== 429) {
540
+ if (!res.ok) {
541
+ const bodyText = await res.text().catch(() => "");
542
+ throw hubError("POST multipart", path, res.status, bodyText);
543
+ }
544
+ return res.json();
545
+ }
546
+ attempt++;
547
+ if (attempt > HUB_429_MAX_RETRIES) {
548
+ const bodyText = await res.text().catch(() => "");
549
+ throw hubError("POST multipart", path, 429, bodyText, `after ${HUB_429_MAX_RETRIES} retries`);
550
+ }
551
+ const bodyText = await res.text().catch(() => "");
552
+ const wait = retryAfterMs(res, bodyText);
553
+ console.error(`[hub] 429 rate limit on POST multipart ${path} — waiting ${Math.ceil(wait / 1000)}s (retry ${attempt}/${HUB_429_MAX_RETRIES})`);
554
+ await sleep(wait);
555
+ }
556
+ }
131
557
  export async function hubPatch(path, body, cfg) {
132
- const res = await fetch(`${cfg.podUrl}/api/hub${path}`, {
133
- method: "PATCH",
134
- headers: { Authorization: `Bearer ${cfg.apiKey}`, "Content-Type": "application/json", ...sessionHeaders() },
135
- body: JSON.stringify(body),
136
- signal: AbortSignal.timeout(15_000),
137
- });
558
+ const url = `${cfg.podUrl}/api/hub${path}`;
559
+ let res;
560
+ try {
561
+ res = await fetch(url, {
562
+ method: "PATCH",
563
+ headers: { Authorization: `Bearer ${cfg.apiKey}`, "Content-Type": "application/json", ...sessionHeaders() },
564
+ body: JSON.stringify(body),
565
+ signal: AbortSignal.timeout(15_000),
566
+ });
567
+ }
568
+ catch (err) {
569
+ throw networkError(err, url, "PATCH", path, 15_000);
570
+ }
138
571
  if (!res.ok) {
139
572
  const bodyText = await res.text().catch(() => "");
140
- throw new Error(`Hub API error (HTTP ${res.status}): ${bodyText.slice(0, 300)}`);
573
+ throw hubError("PATCH", path, res.status, bodyText);
141
574
  }
142
575
  return res.json();
143
576
  }
577
+ export async function hubDelete(path, cfg) {
578
+ const url = `${cfg.podUrl}/api/hub${path}`;
579
+ let res;
580
+ try {
581
+ res = await fetch(url, {
582
+ method: "DELETE",
583
+ headers: { Authorization: `Bearer ${cfg.apiKey}`, ...sessionHeaders() },
584
+ signal: AbortSignal.timeout(15_000),
585
+ });
586
+ }
587
+ catch (err) {
588
+ throw networkError(err, url, "DELETE", path, 15_000);
589
+ }
590
+ if (!res.ok) {
591
+ const bodyText = await res.text().catch(() => "");
592
+ throw hubError("DELETE", path, res.status, bodyText);
593
+ }
594
+ return res.json().catch(() => ({}));
595
+ }
144
596
  /**
145
597
  * Create a typed HubRestClient from a resolved HubConfig.
146
598
  * Use this in new code and shared surfaces (e.g. Raycast) to get full
@@ -1 +1 @@
1
- {"version":3,"file":"hub-client.js","sourceRoot":"","sources":["../../src/lib/hub-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hub-client.js","sourceRoot":"","sources":["../../src/lib/hub-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Installed-awareness — which packages are already on the active pod.
3
+ * ===================================================================
4
+ *
5
+ * The pod stamps `workspace.settings.packageSlug` on every workspace it
6
+ * provisions from a package (Hub `GET /workspaces` surfaces it — see
7
+ * `workspaces.ts:508`). Cross-referencing the discovery catalog against that set
8
+ * lets `launch --list` / the picker / `market` mark what is already installed
9
+ * instead of re-offering it.
10
+ *
11
+ * NON-FATAL by design: if the pod is unreachable, unconfigured, or on an older
12
+ * build, this degrades to an empty set (no markers) rather than failing the
13
+ * discovery command — you can always browse the catalog offline.
14
+ */
15
+ /** An installed workspace's package identity — slug plus (when the pod stamped one) its content version. */
16
+ export interface InstalledTemplateInfo {
17
+ slug: string;
18
+ /**
19
+ * `settings.packageVersion`, when the pod stamped one — `GET /api/hub/workspaces`
20
+ * (`hub-protocol/rest/workspaces.ts`) projects it off `workspace.settings`.
21
+ * Undefined for workspaces the pod never version-stamped: installs that
22
+ * predate versioning, OR any install whose template only resolved from the
23
+ * frozen bundle (no CP cache hit — `resolveWorkspaceTemplate` returns no
24
+ * `version` for a bundle fallback). `market update` treats undefined as
25
+ * "can't check" rather than "outdated" — see `market.ts`'s `computeUpdates`.
26
+ */
27
+ version?: string;
28
+ workspaceId: string;
29
+ workspaceName: string;
30
+ }
31
+ /**
32
+ * Every installed workspace's `{slug, version, workspaceId, workspaceName}` —
33
+ * the raw material for "what's installed" (`fetchInstalledSlugs`) and "what's
34
+ * out of date" (`market update`'s `computeUpdates`). One Hub call, derived
35
+ * views. Unions TWO install shapes, mirroring the browser's
36
+ * `useInstalledPackageSlugs` (see that hook's doc for the full rationale):
37
+ *
38
+ * 1. `workspace.packageSlug` — a workspace-creating install (template).
39
+ * 2. `workspace.settings.installedPacks[]` — additive packs (profile/view/
40
+ * bento) that create no workspace of their own, so never set `packageSlug`.
41
+ *
42
+ * A workspace carrying BOTH contributes one row per shape — they're different
43
+ * package identities layered onto the same workspace.
44
+ */
45
+ export declare function fetchInstalledTemplates(): Promise<InstalledTemplateInfo[]>;
46
+ /**
47
+ * The set of `packageSlug`s installed on the active pod. Empty on ANY failure
48
+ * (no pod configured, unreachable, older build without the field) — the caller
49
+ * simply shows no "installed" markers.
50
+ */
51
+ export declare function fetchInstalledSlugs(): Promise<Set<string>>;