@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
@@ -0,0 +1,450 @@
1
+ /**
2
+ * synap statusline — full 3-line ANSI status for the Claude Code statusLine.
3
+ *
4
+ * Two modes, both via `synap statusline`:
5
+ *
6
+ * RENDER (default) Parse the Claude Code JSON from stdin, read the pod
7
+ * cache file (NO network), compose 3 ANSI lines, print,
8
+ * exit. Always instant. If the cache is stale it spawns a
9
+ * detached refresh (fire-and-forget) so the NEXT render is
10
+ * fresh — this render never blocks on the network.
11
+ *
12
+ * REFRESH (--refresh) Fetch pod data in a single parallel burst and write the
13
+ * cache. Lock-guarded so only one refresh runs at a time.
14
+ * On error/429, the last good cache is preserved (the dot
15
+ * goes stale, not blank).
16
+ *
17
+ * Why: Claude Code calls the statusline on every render (debounced ~300ms +
18
+ * periodic refresh). Fetching live pod data synchronously per render hammers
19
+ * the pod's 100-req/min budget → 429 → red dot. Decoupling render from fetch
20
+ * caps pod traffic at ~1 burst / REFRESH_TTL regardless of render frequency.
21
+ */
22
+ import fs from "node:fs";
23
+ import os from "node:os";
24
+ import { execSync, spawn } from "node:child_process";
25
+ import { resolveHubConfig, hubGet } from "../lib/hub-client.js";
26
+ import { resolveActiveLens } from "../lib/session-lens.js";
27
+ import { describeLens } from "../lib/describe-lens.js";
28
+ import { getSurfaceAgentKey, SURFACE_NAMES } from "../lib/pod.js";
29
+ const CACHE_FILE = "/tmp/synap-statusline-cache.json";
30
+ const LOCK_FILE = "/tmp/synap-statusline-refresh.lock";
31
+ // The pod sits behind a strict edge rate-limiter (15-min window) shared with
32
+ // the agent's own traffic on the same key. Keep statusline cost minimal:
33
+ // refresh at most once per 120s; the burst is ~4-6 GETs (workspaces, skills,
34
+ // session, proposals, + conditional project/identity). Fold new fields into an
35
+ // existing call rather than adding to the burst.
36
+ const REFRESH_TTL_MS = 120_000;
37
+ const LOCK_STALE_MS = 30_000; // a lock older than this is considered dead
38
+ // ── ANSI + OSC 8 helpers ───────────────────────────────────────────────
39
+ const G = "\x1b[01;32m"; // green bold
40
+ const Y = "\x1b[01;33m"; // yellow bold
41
+ const R = "\x1b[01;31m"; // red bold
42
+ const C = "\x1b[36m"; // cyan
43
+ const BB = "\x1b[01;34m"; // bold blue — used for the pinned PROJECT (prominence)
44
+ const M = "\x1b[35m"; // magenta
45
+ const D = "\x1b[2m"; // dim
46
+ const X = "\x1b[0m"; // reset
47
+ function osc8(url, text) {
48
+ if (!url)
49
+ return text;
50
+ return `\x1b]8;;${url}\x1b\\${text}\x1b]8;;\x1b\\`;
51
+ }
52
+ function ctxColor(pct) {
53
+ if (pct >= 80)
54
+ return R;
55
+ if (pct >= 60)
56
+ return Y;
57
+ return G;
58
+ }
59
+ function rateColor(pct) {
60
+ if (pct >= 80)
61
+ return R;
62
+ if (pct >= 50)
63
+ return Y;
64
+ return G;
65
+ }
66
+ function bar(pct, width = 16) {
67
+ const filled = Math.max(0, Math.min(width, Math.round((pct / 100) * width)));
68
+ return ctxColor(pct) + "▰".repeat(filled) + D + "▱".repeat(width - filled) + X;
69
+ }
70
+ function compact(n) {
71
+ if (n >= 1_000_000)
72
+ return `${(n / 1_000_000).toFixed(1)}M`;
73
+ if (n >= 1_000)
74
+ return `${(n / 1000).toFixed(0)}K`;
75
+ return String(n);
76
+ }
77
+ function emptyCache() {
78
+ return {
79
+ ts: 0, ok: false, podUrl: "", activeWorkspaceId: "", workspaces: [], projectName: "", projectId: "",
80
+ skillCount: 0, proposalCount: 0, proposalsFetched: false, sessionGoal: "", sessionId: "", totalEntities: 0,
81
+ actingAgentLabel: "", identityMismatch: false,
82
+ };
83
+ }
84
+ /** Find which known surface (if any) owns this hub API key — for a friendly acting-agent label. */
85
+ function findSurfaceLabelForKey(hubApiKey) {
86
+ for (const s of SURFACE_NAMES) {
87
+ if (getSurfaceAgentKey(s)?.hubApiKey === hubApiKey)
88
+ return s;
89
+ }
90
+ return null;
91
+ }
92
+ function readCache() {
93
+ try {
94
+ return JSON.parse(fs.readFileSync(CACHE_FILE, "utf-8"));
95
+ }
96
+ catch {
97
+ return null;
98
+ }
99
+ }
100
+ // ── Detached refresh trigger (fire-and-forget) ─────────────────────────
101
+ function lockIsFresh() {
102
+ try {
103
+ return Date.now() - fs.statSync(LOCK_FILE).mtimeMs < LOCK_STALE_MS;
104
+ }
105
+ catch {
106
+ return false;
107
+ }
108
+ }
109
+ function triggerRefresh(claudeSessionId) {
110
+ if (lockIsFresh())
111
+ return; // a refresh is already running
112
+ try {
113
+ const entry = process.argv[1]; // the CLI entry script
114
+ // The detached refresh has no Claude env of its own — forward the session
115
+ // id (from stdin) so its resolveHubConfig/lens picks the right workspace.
116
+ const env = claudeSessionId
117
+ ? { ...process.env, SYNAP_LENS_SESSION: claudeSessionId }
118
+ : process.env;
119
+ const child = spawn(process.execPath, [entry, "statusline", "--refresh"], {
120
+ detached: true,
121
+ stdio: "ignore",
122
+ env,
123
+ });
124
+ child.unref();
125
+ }
126
+ catch {
127
+ /* best-effort */
128
+ }
129
+ }
130
+ // ── REFRESH mode: fetch pod, write cache (lock-guarded) ────────────────
131
+ async function refresh() {
132
+ if (lockIsFresh())
133
+ return; // another refresh owns the window
134
+ try {
135
+ fs.writeFileSync(LOCK_FILE, String(process.pid));
136
+ }
137
+ catch {
138
+ /* ignore */
139
+ }
140
+ const prev = readCache();
141
+ try {
142
+ const cfg = await resolveHubConfig({});
143
+ if (!cfg.podUrl || !cfg.apiKey)
144
+ return;
145
+ // This connection's per-Claude-session lens (forwarded as SYNAP_LENS_SESSION
146
+ // by the render process). Drives WHICH project/session we show — the bound
147
+ // ones, not a global guess.
148
+ const lens = resolveActiveLens();
149
+ // Minimal burst (the pod's edge limiter is shared with agent traffic).
150
+ // `/workspaces` succeeding doubles as the liveness signal — no separate
151
+ // `/health`. The bound focus-session and project are fetched by id only
152
+ // when the lens has them (0–2 extra calls).
153
+ const sessionReq = lens?.focusSessionId
154
+ ? hubGet(`/focus-sessions/${lens.focusSessionId}`, cfg.workspaceId ? { workspaceId: cfg.workspaceId } : {}, cfg)
155
+ : hubGet("/focus-sessions?status=active&limit=1", {}, cfg);
156
+ // Use the FULLY-RESOLVED project id (cfg.projectId = session-lens ?? env ??
157
+ // durable activeProjectId), NOT just the session lens — so a durable
158
+ // `synap project use` shows even in a fresh session with no lens file yet.
159
+ // Mirrors how activeWorkspaceId already uses cfg.workspaceId below.
160
+ const resolvedProjectId = cfg.projectId;
161
+ // Resolve the NAME via the single-project route. `GET /projects` returns a
162
+ // bare array and ignores `?ids=` (only status/limit) — the old call read a
163
+ // nonexistent `.projects` field, so the name never resolved and the line
164
+ // showed the raw UUID. `/projects/:id` returns the row directly ({id,name}).
165
+ const projectReq = resolvedProjectId
166
+ ? hubGet(`/projects/${encodeURIComponent(resolvedProjectId)}`, {}, cfg)
167
+ : Promise.resolve(null);
168
+ // Identity safety: compare the AMBIENT SYNAP_HUB_API_KEY against the
169
+ // claude-code surface key pinned to this pod. A cheap string compare
170
+ // covers the common case (no pod call). Only when they diverge do we pay
171
+ // for one extra `/users/me` call — resolved with the RAW ambient key
172
+ // (not `cfg`, which resolveHubConfig may already have self-corrected to
173
+ // the pinned key) so the acting identity we show reflects what this
174
+ // session's environment actually carries, not the corrected value.
175
+ const surfaceKey = getSurfaceAgentKey("claude-code");
176
+ const expectedAgentUserId = surfaceKey?.podUrl === cfg.podUrl ? surfaceKey.agentUserId : "";
177
+ const ambientKey = process.env.SYNAP_HUB_API_KEY;
178
+ const ambientMatchesExpected = Boolean(ambientKey && surfaceKey && ambientKey === surfaceKey.hubApiKey);
179
+ const needsIdentityCheck = Boolean(expectedAgentUserId && ambientKey && !ambientMatchesExpected);
180
+ const identityReq = needsIdentityCheck
181
+ ? hubGet("/users/me", {}, { podUrl: cfg.podUrl, apiKey: ambientKey, userId: "cli" })
182
+ : Promise.resolve(null);
183
+ // Pending proposals — the one actionable ambient signal. No dedicated
184
+ // count endpoint exists yet (verified: `/proposals` returns `{ proposals: [] }`,
185
+ // no `total`); a high `limit` on the pending-only list is the cheapest
186
+ // accurate count within the burst budget (a personal pod won't realistically
187
+ // clear 1000 pending proposals before this undercounts).
188
+ const proposalsReq = hubGet("/proposals", { status: "pending", limit: 1000 }, cfg);
189
+ const [ws, skills, session, project, identity, proposals] = await Promise.allSettled([
190
+ hubGet("/workspaces", {}, cfg),
191
+ hubGet("/agent-skills?limit=1", {}, cfg),
192
+ sessionReq,
193
+ projectReq,
194
+ identityReq,
195
+ proposalsReq,
196
+ ]);
197
+ // Reached the pod iff /workspaces returned a well-formed payload.
198
+ const ok = ws.status === "fulfilled" && Array.isArray(ws.value?.workspaces);
199
+ if (!ok)
200
+ throw new Error("pod unreachable");
201
+ const workspaces = [];
202
+ let totalEntities = 0;
203
+ const list = ws.value?.workspaces ?? [];
204
+ for (const w of list) {
205
+ workspaces.push({ id: w.id, name: w.name, count: w.entityCount ?? 0 });
206
+ totalEntities += w.entityCount ?? 0;
207
+ }
208
+ const skillCount = skills.status === "fulfilled" ? (skills.value?.total ?? 0) : prev?.skillCount ?? 0;
209
+ // Bound session — either the by-id fetch (object) or the active-list fallback.
210
+ let sessionGoal = prev?.sessionGoal ?? "";
211
+ let sessionId = prev?.sessionId ?? "";
212
+ if (session.status === "fulfilled" && session.value) {
213
+ const v = session.value;
214
+ const s = v.sessions ? v.sessions[0] : v; // list-shape vs object-shape
215
+ sessionGoal = s?.goal?.slice(0, 60) ?? "";
216
+ sessionId = s?.id ?? "";
217
+ }
218
+ else if (lens?.focusSessionId) {
219
+ sessionGoal = "";
220
+ sessionId = "";
221
+ }
222
+ // Bound project (from the fully-resolved id — durable or session).
223
+ let projectName = resolvedProjectId ? prev?.projectName ?? "" : "";
224
+ let projectId = resolvedProjectId ?? "";
225
+ if (project.status === "fulfilled" && project.value) {
226
+ const p = project.value?.projects?.find((x) => x.id === resolvedProjectId);
227
+ projectName = p?.name?.slice(0, 30) ?? "";
228
+ }
229
+ // Acting identity: clean unless we detected a real divergence.
230
+ let actingAgentLabel = "";
231
+ let identityMismatch = false;
232
+ if (expectedAgentUserId && !ambientMatchesExpected && identity.status === "fulfilled" && identity.value) {
233
+ const actingId = identity.value?.id ?? "";
234
+ if (actingId && actingId !== expectedAgentUserId) {
235
+ identityMismatch = true;
236
+ actingAgentLabel = (ambientKey && findSurfaceLabelForKey(ambientKey)) || actingId.slice(0, 8);
237
+ }
238
+ }
239
+ // Only a well-shaped array counts as "fetched" — a malformed 200 must not
240
+ // masquerade as "0 pending"; it falls back to the last-good count instead.
241
+ const proposalsRaw = proposals.status === "fulfilled"
242
+ ? proposals.value?.proposals
243
+ : undefined;
244
+ const proposalsFetched = Array.isArray(proposalsRaw);
245
+ const proposalCount = Array.isArray(proposalsRaw)
246
+ ? proposalsRaw.length
247
+ : prev?.proposalCount ?? 0;
248
+ const out = {
249
+ ts: Date.now(),
250
+ ok: true,
251
+ podUrl: cfg.podUrl,
252
+ activeWorkspaceId: cfg.workspaceId ?? "", // the lens THIS connection resolves to
253
+ workspaces,
254
+ projectName,
255
+ projectId,
256
+ skillCount,
257
+ proposalCount,
258
+ proposalsFetched: proposalsFetched || (prev?.proposalsFetched ?? false),
259
+ sessionGoal,
260
+ sessionId,
261
+ totalEntities,
262
+ actingAgentLabel,
263
+ identityMismatch,
264
+ };
265
+ fs.writeFileSync(CACHE_FILE, JSON.stringify(out));
266
+ }
267
+ catch {
268
+ // Preserve last good cache, just mark it not-ok so render can dim the dot.
269
+ if (prev) {
270
+ try {
271
+ fs.writeFileSync(CACHE_FILE, JSON.stringify({ ...prev, ok: false }));
272
+ }
273
+ catch { }
274
+ }
275
+ }
276
+ finally {
277
+ try {
278
+ fs.unlinkSync(LOCK_FILE);
279
+ }
280
+ catch { }
281
+ }
282
+ }
283
+ // ── RENDER mode: stdin + cache → 3 lines (no network) ──────────────────
284
+ function render() {
285
+ let cc = {};
286
+ try {
287
+ const raw = fs.readFileSync(0, "utf-8");
288
+ if (raw?.trim())
289
+ cc = JSON.parse(raw);
290
+ }
291
+ catch { }
292
+ // The Claude session id — forwarded to the detached refresh so it resolves
293
+ // THIS session's lens (workspace/project/session), not a global guess.
294
+ const claudeSessionId = cc.session_id || process.env.CLAUDE_CODE_SESSION_ID;
295
+ const cache = readCache();
296
+ // Trigger a background refresh if cache is missing or stale.
297
+ if (!cache || Date.now() - cache.ts > REFRESH_TTL_MS)
298
+ triggerRefresh(claudeSessionId);
299
+ const pod = cache ?? emptyCache();
300
+ // ── Claude Code fields ───────────────────────────────────────────────
301
+ const modelName = (cc.model?.display_name ?? "").replace(/\s*\((?:1M|200K) context\)/, "").trim();
302
+ const ctxPct = cc.context_window?.used_percentage;
303
+ const cost = cc.cost?.total_cost_usd;
304
+ const linesAdd = cc.cost?.total_lines_added ?? 0;
305
+ const linesDel = cc.cost?.total_lines_removed ?? 0;
306
+ const rl = cc.rate_limits;
307
+ const fhPct = rl?.five_hour?.used_percentage;
308
+ const sdPct = rl?.seven_day?.used_percentage;
309
+ const fhReset = rl?.five_hour?.resets_at;
310
+ const vimMode = cc.vim?.mode;
311
+ const cwd = (cc.cwd ?? "");
312
+ let branch = "";
313
+ if (cwd) {
314
+ try {
315
+ branch = execSync(`git -C ${JSON.stringify(cwd)} --no-optional-locks symbolic-ref --short HEAD`, { encoding: "utf-8", timeout: 1000, stdio: ["ignore", "pipe", "ignore"] }).trim();
316
+ }
317
+ catch { /* not a git repo */ }
318
+ }
319
+ // ── Session stats (local file) ───────────────────────────────────────
320
+ let callCount = 0;
321
+ let sessionCount = 0;
322
+ try {
323
+ const ss = JSON.parse(fs.readFileSync(os.homedir() + "/.claude/.session-stats.json", "utf-8"));
324
+ const sessions = ss?.sessions;
325
+ if (sessions) {
326
+ sessionCount = Object.keys(sessions).length;
327
+ callCount = Object.values(sessions).reduce((s, v) => s + (v.total_calls ?? 0), 0);
328
+ }
329
+ }
330
+ catch { }
331
+ // ── Pod dot: green=fresh, yellow=stale, grey=never fetched ───────────
332
+ let dot = `${D}○${X}`;
333
+ if (pod.ts > 0) {
334
+ const stale = !pod.ok || Date.now() - pod.ts > REFRESH_TTL_MS * 3;
335
+ dot = stale ? `${Y}●${X}` : `${G}●${X}`;
336
+ }
337
+ // Show the workspace THIS connection is scoped to. No fallback to
338
+ // workspaces[0] — an unset activeWorkspaceId means pod-wide, and faking an
339
+ // "active" workspace would hide that state from the 4-state lens (pod /
340
+ // project / project×workspace / workspace).
341
+ const activeWsEntry = pod.activeWorkspaceId
342
+ ? pod.workspaces.find((w) => w.id === pod.activeWorkspaceId)
343
+ : undefined;
344
+ const described = describeLens({
345
+ workspace: pod.activeWorkspaceId ? { id: pod.activeWorkspaceId, name: activeWsEntry?.name } : undefined,
346
+ project: pod.projectId ? { id: pod.projectId, name: pod.projectName } : undefined,
347
+ });
348
+ const hasWs = Boolean(described.structured.workspace);
349
+ const hasProject = Boolean(described.structured.project);
350
+ const activeWs = described.structured.workspace?.name;
351
+ const activeWsId = described.structured.workspace?.id ?? "";
352
+ const activeWsCount = activeWsEntry?.count ?? 0;
353
+ // ─═─ LINE 1 — model · context bar · branch · vim ─═─────────────────────
354
+ const l1 = [];
355
+ if (modelName) {
356
+ l1.push(`${C}${modelName}${X}`);
357
+ if (branch)
358
+ l1.push(`${D}${branch}${X}`);
359
+ if (vimMode && vimMode !== "NORMAL")
360
+ l1.push(`${M}${vimMode}${X}`);
361
+ }
362
+ if (ctxPct !== undefined)
363
+ l1.push(` ${bar(ctxPct)} ${ctxColor(ctxPct)}${Math.round(ctxPct)}%${X}`);
364
+ if (l1.length)
365
+ console.log(l1.join(" "));
366
+ // ─═─ LINE 2 — pod dot · identity warning · lens state (pod/project/project×ws/ws) · session · metrics ─═──
367
+ const l2 = [dot];
368
+ // Identity safety: an inherited/foreign SYNAP_HUB_API_KEY (e.g. another
369
+ // agent's key) is otherwise invisible — surface it loudly, not clean.
370
+ if (pod.identityMismatch)
371
+ l2.push(`${R}⚠ as ${pod.actingAgentLabel || "unknown"}${X}`);
372
+ // PROJECT leads the lens fields — it's the "what am I working on" answer.
373
+ // cmd/ctrl-click opens the project home in the Synap app via the /open bounce
374
+ // (`project` is registered in apps/api/src/index.ts ALLOWED + handled by the
375
+ // browser deep-link handler, which switches the lens + lands on home).
376
+ // OSC 8 degrades to plain text where the terminal/renderer doesn't support it.
377
+ if (hasProject) {
378
+ const projectLink = pod.podUrl ? `${pod.podUrl}/open/project/${pod.projectId}` : "";
379
+ l2.push(`${BB}${osc8(projectLink, described.structured.project?.name ?? pod.projectId)}${X}`);
380
+ }
381
+ if (hasWs) {
382
+ // Same /open bounce — `workspace` switches the workspace lens + lands on home.
383
+ const wsLink = pod.podUrl && activeWsId ? `${pod.podUrl}/open/workspace/${activeWsId}` : "";
384
+ l2.push(activeWsId ? osc8(wsLink, activeWs ?? "") : activeWs ?? "");
385
+ if (activeWsCount > 0)
386
+ l2.push(`${compact(activeWsCount)} entities`);
387
+ }
388
+ else if (described.structured.podWide) {
389
+ l2.push(`${D}pod-wide${X}`);
390
+ }
391
+ if (pod.skillCount > 0)
392
+ l2.push(`${pod.skillCount} skills`);
393
+ if (pod.sessionGoal) {
394
+ const sg = pod.sessionId ? osc8(`synap://open/session/${pod.sessionId}`, pod.sessionGoal) : pod.sessionGoal;
395
+ l2.push(`${D}▸${X} ${Y}${sg}${X}`);
396
+ }
397
+ if (pod.proposalCount > 0) {
398
+ // cmd/ctrl-click opens the Proposals review app via the /open bounce
399
+ // (bare `proposals` keyword → synap://open/proposals → browser opens the app).
400
+ const proposalsLink = pod.podUrl ? `${pod.podUrl}/open/proposals` : "";
401
+ const label = `${pod.proposalCount} proposals`;
402
+ l2.push(`${D}↳${X} ${Y}${proposalsLink ? osc8(proposalsLink, label) : label}${X}`);
403
+ }
404
+ else if (pod.proposalsFetched) {
405
+ // Genuinely fetched and empty — distinct from "never fetched" so the line
406
+ // never silently omits a signal a user might mistake for "not checked yet".
407
+ l2.push(`${D}↳ 0 proposals${X}`);
408
+ }
409
+ else {
410
+ // No successful refresh has completed yet (fresh cache / all refreshes failed).
411
+ l2.push(`${D}↳ proposals —${X}`);
412
+ }
413
+ console.log(l2.join(" · "));
414
+ // ─═─ LINE 3 — cost · rate limits · session stats ─═─────────────────────
415
+ const l3 = [];
416
+ if (cost !== undefined && cost > 0) {
417
+ l3.push(`${D}$${cost.toFixed(2)}${X}`);
418
+ if (linesAdd > 0)
419
+ l3.push(`${D}+${linesAdd}/-${linesDel}${X}`);
420
+ }
421
+ if (fhPct !== undefined) {
422
+ if (l3.length)
423
+ l3.push(`${D}│${X}`);
424
+ l3.push(`${D}5h${X} ${rateColor(fhPct)}${Math.round(fhPct)}%${X}`);
425
+ }
426
+ if (sdPct !== undefined)
427
+ l3.push(`${D}7d${X} ${rateColor(sdPct)}${Math.round(sdPct)}%${X}`);
428
+ if (fhReset !== undefined && (fhPct ?? 0) >= 60) {
429
+ const rem = fhReset - Math.floor(Date.now() / 1000);
430
+ if (rem > 0)
431
+ l3.push(`${D}resets ${Math.floor(rem / 3600)}h${String(Math.floor((rem % 3600) / 60)).padStart(2, "0")}${X}`);
432
+ }
433
+ if (callCount > 0) {
434
+ if (l3.length)
435
+ l3.push(`${D}│${X}`);
436
+ l3.push(`${D}${compact(callCount)} calls · ${sessionCount} sessions${X}`);
437
+ }
438
+ if (l3.length)
439
+ console.log(l3.join(" "));
440
+ }
441
+ // ── Entry ──────────────────────────────────────────────────────────────
442
+ export async function statusline(opts) {
443
+ if (opts?.refresh) {
444
+ await refresh();
445
+ }
446
+ else {
447
+ render();
448
+ }
449
+ }
450
+ //# sourceMappingURL=statusline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statusline.js","sourceRoot":"","sources":["../../src/commands/statusline.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,7 @@
11
11
  */
12
12
  import { log } from "../utils/logger.js";
13
13
  import { resolveHubConfig, hubGet } from "../lib/hub-client.js";
14
+ import { unwrapList } from "../lib/unwrapList.js";
14
15
  /** Simple glob match: "proposal.*" matches "proposal.approved", "proposal.created", etc. */
15
16
  function matchesPattern(eventType, pattern) {
16
17
  if (pattern === "*")
@@ -47,8 +48,7 @@ export async function subscribeEvents(opts) {
47
48
  const params = { limit, since: cursor };
48
49
  const res = await hubGet("/subscriptions", params, cfg);
49
50
  consecutiveErrors = 0;
50
- const rawEvents = (res.events ?? res.items ?? []);
51
- const events = Array.isArray(rawEvents) ? rawEvents : [];
51
+ const events = unwrapList(res, ["events", "items"]);
52
52
  for (const event of events) {
53
53
  const id = String(event.id ?? "");
54
54
  if (id && seenIds.has(id))
@@ -1 +1 @@
1
- {"version":3,"file":"subscribe.js","sourceRoot":"","sources":["../../src/commands/subscribe.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subscribe.js","sourceRoot":"","sources":["../../src/commands/subscribe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * synap tools — Add and manage external service tools (credentials + connections)
3
+ *
4
+ * Subcommands: list, connect, disconnect, sync, schema
5
+ */
6
+ export interface ConnectOpts {
7
+ workspace?: string;
8
+ podUrl?: string;
9
+ apiKey?: string;
10
+ }
11
+ export declare function toolsConnect(service: string | undefined, opts: ConnectOpts): Promise<void>;
12
+ export interface ListOpts {
13
+ json?: boolean;
14
+ workspace?: string;
15
+ }
16
+ export declare function toolsList(opts: ListOpts): Promise<void>;
17
+ export interface SyncOpts {
18
+ workspace?: string;
19
+ }
20
+ export declare function toolsSync(provider: string, opts: SyncOpts): Promise<void>;
21
+ export interface DisconnectOpts {
22
+ workspace?: string;
23
+ force?: boolean;
24
+ }
25
+ export declare function toolsDisconnect(provider: string, opts: DisconnectOpts): Promise<void>;
26
+ export interface SchemaOpts {
27
+ writeContext?: string | boolean;
28
+ json?: boolean;
29
+ }
30
+ export declare function toolsSchema(opts: SchemaOpts): Promise<void>;