@synap-core/cli 1.12.2 → 1.13.1-next.20261102.246dc73

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 (358) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +38 -11
  3. package/dist/build-info.json +2 -3
  4. package/dist/commands/agents.d.ts +0 -1
  5. package/dist/commands/agents.js +13 -3
  6. package/dist/commands/agents.js.map +1 -1
  7. package/dist/commands/app.js +2 -1
  8. package/dist/commands/app.js.map +1 -1
  9. package/dist/commands/automation.js +46 -41
  10. package/dist/commands/automation.js.map +1 -1
  11. package/dist/commands/box.d.ts +42 -0
  12. package/dist/commands/box.js +89 -0
  13. package/dist/commands/box.js.map +1 -0
  14. package/dist/commands/bridge-setup.js +3 -1
  15. package/dist/commands/bridge-setup.js.map +1 -1
  16. package/dist/commands/capability.d.ts +87 -1
  17. package/dist/commands/capability.js +174 -64
  18. package/dist/commands/capability.js.map +1 -1
  19. package/dist/commands/close-questions.d.ts +27 -0
  20. package/dist/commands/close-questions.js +49 -0
  21. package/dist/commands/close-questions.js.map +1 -0
  22. package/dist/commands/close-questions.test.d.ts +1 -0
  23. package/dist/commands/close-questions.test.js +52 -0
  24. package/dist/commands/close-questions.test.js.map +1 -0
  25. package/dist/commands/connect.d.ts +1 -3
  26. package/dist/commands/connect.js +2 -2
  27. package/dist/commands/connect.js.map +1 -1
  28. package/dist/commands/context.js +74 -44
  29. package/dist/commands/context.js.map +1 -1
  30. package/dist/commands/data-extra.d.ts +13 -0
  31. package/dist/commands/data-extra.js +35 -6
  32. package/dist/commands/data-extra.js.map +1 -1
  33. package/dist/commands/data.js +2 -1
  34. package/dist/commands/data.js.map +1 -1
  35. package/dist/commands/doctor.d.ts +39 -0
  36. package/dist/commands/doctor.js +136 -14
  37. package/dist/commands/doctor.js.map +1 -1
  38. package/dist/commands/hooks.d.ts +19 -0
  39. package/dist/commands/hooks.js +70 -0
  40. package/dist/commands/hooks.js.map +1 -0
  41. package/dist/commands/import.d.ts +25 -0
  42. package/dist/commands/import.js +98 -12
  43. package/dist/commands/import.js.map +1 -1
  44. package/dist/commands/init.d.ts +14 -0
  45. package/dist/commands/init.js +63 -21
  46. package/dist/commands/init.js.map +1 -1
  47. package/dist/commands/keys-request.d.ts +48 -0
  48. package/dist/commands/keys-request.js +236 -0
  49. package/dist/commands/keys-request.js.map +1 -0
  50. package/dist/commands/keys-request.test.d.ts +1 -0
  51. package/dist/commands/keys-request.test.js +176 -0
  52. package/dist/commands/keys-request.test.js.map +1 -0
  53. package/dist/commands/knowledge.d.ts +42 -5
  54. package/dist/commands/knowledge.js +94 -29
  55. package/dist/commands/knowledge.js.map +1 -1
  56. package/dist/commands/lens.js +2 -1
  57. package/dist/commands/lens.js.map +1 -1
  58. package/dist/commands/market-authoring.js +1 -1
  59. package/dist/commands/market-authoring.js.map +1 -1
  60. package/dist/commands/market.d.ts +89 -31
  61. package/dist/commands/market.js +215 -222
  62. package/dist/commands/market.js.map +1 -1
  63. package/dist/commands/mcp.d.ts +1 -1
  64. package/dist/commands/mcp.js +14 -9
  65. package/dist/commands/mcp.js.map +1 -1
  66. package/dist/commands/observe.category.test.d.ts +1 -0
  67. package/dist/commands/observe.category.test.js +59 -0
  68. package/dist/commands/observe.category.test.js.map +1 -0
  69. package/dist/commands/observe.d.ts +3 -0
  70. package/dist/commands/observe.js +7 -5
  71. package/dist/commands/observe.js.map +1 -1
  72. package/dist/commands/observe.title.test.d.ts +1 -0
  73. package/dist/commands/observe.title.test.js +37 -0
  74. package/dist/commands/observe.title.test.js.map +1 -0
  75. package/dist/commands/playbook.js +9 -0
  76. package/dist/commands/playbook.js.map +1 -1
  77. package/dist/commands/pods.d.ts +6 -1
  78. package/dist/commands/pods.js +38 -17
  79. package/dist/commands/pods.js.map +1 -1
  80. package/dist/commands/proposals-actions.js +7 -1
  81. package/dist/commands/proposals-actions.js.map +1 -1
  82. package/dist/commands/proton-setup.js +3 -1
  83. package/dist/commands/proton-setup.js.map +1 -1
  84. package/dist/commands/providers.d.ts +22 -6
  85. package/dist/commands/providers.js +39 -32
  86. package/dist/commands/providers.js.map +1 -1
  87. package/dist/commands/raycast.d.ts +15 -0
  88. package/dist/commands/raycast.js +36 -10
  89. package/dist/commands/raycast.js.map +1 -1
  90. package/dist/commands/session-feed-wait.d.ts +48 -0
  91. package/dist/commands/session-feed-wait.js +261 -0
  92. package/dist/commands/session-feed-wait.js.map +1 -0
  93. package/dist/commands/session-post.d.ts +40 -0
  94. package/dist/commands/session-post.js +96 -0
  95. package/dist/commands/session-post.js.map +1 -0
  96. package/dist/commands/session-wait.d.ts +9 -4
  97. package/dist/commands/session-wait.js +20 -5
  98. package/dist/commands/session-wait.js.map +1 -1
  99. package/dist/commands/sessions.d.ts +2 -0
  100. package/dist/commands/sessions.js +23 -0
  101. package/dist/commands/sessions.js.map +1 -1
  102. package/dist/commands/skills-commands.d.ts +2 -0
  103. package/dist/commands/skills-commands.js +9 -1
  104. package/dist/commands/skills-commands.js.map +1 -1
  105. package/dist/commands/skills-commands.test.d.ts +1 -0
  106. package/dist/commands/skills-commands.test.js +57 -0
  107. package/dist/commands/skills-commands.test.js.map +1 -0
  108. package/dist/commands/status.js +13 -7
  109. package/dist/commands/status.js.map +1 -1
  110. package/dist/commands/statusline.backoff.test.js +13 -3
  111. package/dist/commands/statusline.backoff.test.js.map +1 -1
  112. package/dist/commands/statusline.d.ts +104 -9
  113. package/dist/commands/statusline.js +392 -148
  114. package/dist/commands/statusline.js.map +1 -1
  115. package/dist/commands/statusline.line2.test.d.ts +15 -0
  116. package/dist/commands/statusline.line2.test.js +226 -0
  117. package/dist/commands/statusline.line2.test.js.map +1 -0
  118. package/dist/commands/statusline.needs-you.test.d.ts +1 -0
  119. package/dist/commands/statusline.needs-you.test.js +17 -0
  120. package/dist/commands/statusline.needs-you.test.js.map +1 -0
  121. package/dist/commands/statusline.now.test.d.ts +10 -0
  122. package/dist/commands/statusline.now.test.js +250 -0
  123. package/dist/commands/statusline.now.test.js.map +1 -0
  124. package/dist/commands/tracks.d.ts +68 -6
  125. package/dist/commands/tracks.js +272 -16
  126. package/dist/commands/tracks.js.map +1 -1
  127. package/dist/commands/upload.js +12 -0
  128. package/dist/commands/upload.js.map +1 -1
  129. package/dist/commands/wait.d.ts +124 -0
  130. package/dist/commands/wait.js +384 -0
  131. package/dist/commands/wait.js.map +1 -0
  132. package/dist/commands/wait.test.d.ts +8 -0
  133. package/dist/commands/wait.test.js +308 -0
  134. package/dist/commands/wait.test.js.map +1 -0
  135. package/dist/commands/whoami.d.ts +7 -0
  136. package/dist/commands/whoami.js +17 -0
  137. package/dist/commands/whoami.js.map +1 -1
  138. package/dist/commands/worker-accounts.d.ts +149 -0
  139. package/dist/commands/worker-accounts.js +339 -0
  140. package/dist/commands/worker-accounts.js.map +1 -0
  141. package/dist/commands/worker-accounts.test.d.ts +1 -0
  142. package/dist/commands/worker-accounts.test.js +224 -0
  143. package/dist/commands/worker-accounts.test.js.map +1 -0
  144. package/dist/commands/worker-github-app.d.ts +63 -0
  145. package/dist/commands/worker-github-app.js +161 -0
  146. package/dist/commands/worker-github-app.js.map +1 -0
  147. package/dist/commands/worker-github-app.test.d.ts +1 -0
  148. package/dist/commands/worker-github-app.test.js +102 -0
  149. package/dist/commands/worker-github-app.test.js.map +1 -0
  150. package/dist/commands/worker-github-broker.d.ts +39 -0
  151. package/dist/commands/worker-github-broker.js +106 -0
  152. package/dist/commands/worker-github-broker.js.map +1 -0
  153. package/dist/commands/worker-github-broker.test.d.ts +1 -0
  154. package/dist/commands/worker-github-broker.test.js +90 -0
  155. package/dist/commands/worker-github-broker.test.js.map +1 -0
  156. package/dist/commands/worker-runs.test.d.ts +1 -0
  157. package/dist/commands/worker-runs.test.js +150 -0
  158. package/dist/commands/worker-runs.test.js.map +1 -0
  159. package/dist/commands/worker-worktrees.d.ts +34 -0
  160. package/dist/commands/worker-worktrees.js +87 -0
  161. package/dist/commands/worker-worktrees.js.map +1 -0
  162. package/dist/commands/worker.d.ts +406 -10
  163. package/dist/commands/worker.js +1180 -126
  164. package/dist/commands/worker.js.map +1 -1
  165. package/dist/commands/worker.test.js +588 -11
  166. package/dist/commands/worker.test.js.map +1 -1
  167. package/dist/index.js +220 -28
  168. package/dist/index.js.map +1 -1
  169. package/dist/lib/agent-door.d.ts +1 -3
  170. package/dist/lib/agent-door.js +10 -7
  171. package/dist/lib/agent-door.js.map +1 -1
  172. package/dist/lib/agents-config.d.ts +9 -0
  173. package/dist/lib/agents-config.js +20 -0
  174. package/dist/lib/agents-config.js.map +1 -1
  175. package/dist/lib/atomic-file.d.ts +20 -1
  176. package/dist/lib/atomic-file.js +100 -2
  177. package/dist/lib/atomic-file.js.map +1 -1
  178. package/dist/lib/auth.d.ts +28 -2
  179. package/dist/lib/auth.js +52 -12
  180. package/dist/lib/auth.js.map +1 -1
  181. package/dist/lib/box/egress.d.ts +82 -0
  182. package/dist/lib/box/egress.js +264 -0
  183. package/dist/lib/box/egress.js.map +1 -0
  184. package/dist/lib/box/evidence.d.ts +86 -0
  185. package/dist/lib/box/evidence.js +121 -0
  186. package/dist/lib/box/evidence.js.map +1 -0
  187. package/dist/lib/box/job-server.d.ts +72 -0
  188. package/dist/lib/box/job-server.js +250 -0
  189. package/dist/lib/box/job-server.js.map +1 -0
  190. package/dist/lib/box/provisioner.d.ts +83 -0
  191. package/dist/lib/box/provisioner.js +312 -0
  192. package/dist/lib/box/provisioner.js.map +1 -0
  193. package/dist/lib/box/proxmox.d.ts +112 -0
  194. package/dist/lib/box/proxmox.js +211 -0
  195. package/dist/lib/box/proxmox.js.map +1 -0
  196. package/dist/lib/box/wire.d.ts +98 -0
  197. package/dist/lib/box/wire.js +70 -0
  198. package/dist/lib/box/wire.js.map +1 -0
  199. package/dist/lib/bridge-invocation.test.d.ts +1 -0
  200. package/dist/lib/bridge-invocation.test.js +75 -0
  201. package/dist/lib/bridge-invocation.test.js.map +1 -0
  202. package/dist/lib/bridge-status.d.ts +144 -0
  203. package/dist/lib/bridge-status.js +227 -0
  204. package/dist/lib/bridge-status.js.map +1 -0
  205. package/dist/lib/bridge-status.test.d.ts +6 -0
  206. package/dist/lib/bridge-status.test.js +197 -0
  207. package/dist/lib/bridge-status.test.js.map +1 -0
  208. package/dist/lib/client-header.test.d.ts +1 -0
  209. package/dist/lib/client-header.test.js +103 -0
  210. package/dist/lib/client-header.test.js.map +1 -0
  211. package/dist/lib/conversation-headers.d.ts +89 -9
  212. package/dist/lib/conversation-headers.js +156 -3
  213. package/dist/lib/conversation-headers.js.map +1 -1
  214. package/dist/lib/conversation-headers.test.d.ts +1 -0
  215. package/dist/lib/conversation-headers.test.js +78 -0
  216. package/dist/lib/conversation-headers.test.js.map +1 -0
  217. package/dist/lib/credential-class.d.ts +40 -2
  218. package/dist/lib/credential-class.js +48 -6
  219. package/dist/lib/credential-class.js.map +1 -1
  220. package/dist/lib/device-connect.d.ts +45 -0
  221. package/dist/lib/device-connect.js +60 -0
  222. package/dist/lib/device-connect.js.map +1 -1
  223. package/dist/lib/exporter-coverage.d.ts +1 -1
  224. package/dist/lib/exporter-coverage.js +1 -1
  225. package/dist/lib/goal-words.d.ts +38 -0
  226. package/dist/lib/goal-words.js +115 -0
  227. package/dist/lib/goal-words.js.map +1 -0
  228. package/dist/lib/hub-client.d.ts +87 -8
  229. package/dist/lib/hub-client.js +205 -70
  230. package/dist/lib/hub-client.js.map +1 -1
  231. package/dist/lib/init-handoff.d.ts +8 -0
  232. package/dist/lib/init-handoff.js +9 -2
  233. package/dist/lib/init-handoff.js.map +1 -1
  234. package/dist/lib/key-locations.d.ts +3 -3
  235. package/dist/lib/key-locations.js +3 -39
  236. package/dist/lib/key-locations.js.map +1 -1
  237. package/dist/lib/key-source.d.ts +3 -1
  238. package/dist/lib/key-source.js +7 -4
  239. package/dist/lib/key-source.js.map +1 -1
  240. package/dist/lib/knowledge-title.d.ts +3 -2
  241. package/dist/lib/knowledge-title.js +3 -2
  242. package/dist/lib/knowledge-title.js.map +1 -1
  243. package/dist/lib/machine-instance.d.ts +7 -5
  244. package/dist/lib/machine-instance.js +7 -5
  245. package/dist/lib/machine-instance.js.map +1 -1
  246. package/dist/lib/mcp-bridge.d.ts +50 -0
  247. package/dist/lib/mcp-bridge.js +232 -11
  248. package/dist/lib/mcp-bridge.js.map +1 -1
  249. package/dist/lib/mcp-bridge.test.js +224 -4
  250. package/dist/lib/mcp-bridge.test.js.map +1 -1
  251. package/dist/lib/mcp-call.d.ts +5 -1
  252. package/dist/lib/mcp-call.js +7 -6
  253. package/dist/lib/mcp-call.js.map +1 -1
  254. package/dist/lib/mcp-connector-url.test.d.ts +1 -0
  255. package/dist/lib/mcp-connector-url.test.js +13 -0
  256. package/dist/lib/mcp-connector-url.test.js.map +1 -0
  257. package/dist/lib/mcp-snippets.d.ts +16 -0
  258. package/dist/lib/mcp-snippets.js +20 -2
  259. package/dist/lib/mcp-snippets.js.map +1 -1
  260. package/dist/lib/now-line.d.ts +66 -0
  261. package/dist/lib/now-line.js +193 -0
  262. package/dist/lib/now-line.js.map +1 -0
  263. package/dist/lib/now-line.test.d.ts +5 -0
  264. package/dist/lib/now-line.test.js +177 -0
  265. package/dist/lib/now-line.test.js.map +1 -0
  266. package/dist/lib/package-updates.d.ts +66 -0
  267. package/dist/lib/package-updates.js +76 -0
  268. package/dist/lib/package-updates.js.map +1 -0
  269. package/dist/lib/pod-moved.d.ts +70 -0
  270. package/dist/lib/pod-moved.js +146 -0
  271. package/dist/lib/pod-moved.js.map +1 -0
  272. package/dist/lib/pod-reach.d.ts +39 -0
  273. package/dist/lib/pod-reach.js +117 -0
  274. package/dist/lib/pod-reach.js.map +1 -0
  275. package/dist/lib/pod-reach.test.d.ts +1 -0
  276. package/dist/lib/pod-reach.test.js +67 -0
  277. package/dist/lib/pod-reach.test.js.map +1 -0
  278. package/dist/lib/pod.d.ts +8 -4
  279. package/dist/lib/pod.js +12 -10
  280. package/dist/lib/pod.js.map +1 -1
  281. package/dist/lib/register-claude-code-mcp.test.d.ts +1 -0
  282. package/dist/lib/register-claude-code-mcp.test.js +97 -0
  283. package/dist/lib/register-claude-code-mcp.test.js.map +1 -0
  284. package/dist/lib/review-credential.js +3 -1
  285. package/dist/lib/review-credential.js.map +1 -1
  286. package/dist/lib/safe-open.d.ts +5 -3
  287. package/dist/lib/safe-open.js +9 -8
  288. package/dist/lib/safe-open.js.map +1 -1
  289. package/dist/lib/self-host.d.ts +17 -0
  290. package/dist/lib/self-host.js +24 -0
  291. package/dist/lib/self-host.js.map +1 -0
  292. package/dist/lib/session-feed.d.ts +185 -0
  293. package/dist/lib/session-feed.js +257 -0
  294. package/dist/lib/session-feed.js.map +1 -0
  295. package/dist/lib/targets.d.ts +52 -3
  296. package/dist/lib/targets.js +150 -209
  297. package/dist/lib/targets.js.map +1 -1
  298. package/dist/lib/template-lifecycle.d.ts +0 -31
  299. package/dist/lib/template-lifecycle.js +0 -74
  300. package/dist/lib/template-lifecycle.js.map +1 -1
  301. package/dist/lib/term.d.ts +24 -0
  302. package/dist/lib/term.js +52 -0
  303. package/dist/lib/term.js.map +1 -0
  304. package/dist/lib/term.test.d.ts +1 -0
  305. package/dist/lib/term.test.js +29 -0
  306. package/dist/lib/term.test.js.map +1 -0
  307. package/dist/lib/transcript-index.d.ts +94 -0
  308. package/dist/lib/transcript-index.js +321 -0
  309. package/dist/lib/transcript-index.js.map +1 -0
  310. package/dist/lib/transcript-index.test.d.ts +10 -0
  311. package/dist/lib/transcript-index.test.js +200 -0
  312. package/dist/lib/transcript-index.test.js.map +1 -0
  313. package/dist/lib/wait-help.d.ts +11 -0
  314. package/dist/lib/wait-help.js +25 -0
  315. package/dist/lib/wait-help.js.map +1 -0
  316. package/dist/lib/wait-state.d.ts +57 -0
  317. package/dist/lib/wait-state.js +114 -0
  318. package/dist/lib/wait-state.js.map +1 -0
  319. package/dist/lib/wake-hook-settings.d.ts +57 -0
  320. package/dist/lib/wake-hook-settings.js +153 -0
  321. package/dist/lib/wake-hook-settings.js.map +1 -0
  322. package/dist/lib/wake-state.d.ts +65 -0
  323. package/dist/lib/wake-state.js +122 -0
  324. package/dist/lib/wake-state.js.map +1 -0
  325. package/package.json +5 -2
  326. package/skills/README.md +1 -1
  327. package/skills/agent-os/SKILL.md +8 -8
  328. package/skills/synap/SKILL.md +188 -94
  329. package/skills/synap/code-skills.md +84 -0
  330. package/skills/synap/concepts.md +38 -20
  331. package/skills/synap/creative-loop.md +1 -1
  332. package/skills/synap/document-embeds.md +17 -1
  333. package/skills/synap/focus-sessions.md +17 -8
  334. package/skills/synap/from-intent.md +33 -17
  335. package/skills/synap/governance-rules.md +3 -1
  336. package/skills/synap/hand-off.md +10 -6
  337. package/skills/synap/lenses.md +4 -4
  338. package/skills/synap/linking.md +2 -2
  339. package/skills/synap/mental-model.md +1 -1
  340. package/skills/synap/operating-mode-rules.md +1 -1
  341. package/skills/synap/quick-reference.md +2 -1
  342. package/skills/synap/reflexes.md +8 -8
  343. package/skills/synap/viewframe-cells.md +1 -1
  344. package/skills/synap/work-model.md +24 -10
  345. package/skills/synap/workspace-design.md +5 -5
  346. package/skills/synap/writes.md +16 -9
  347. package/skills/synap/writing-titles.md +7 -0
  348. package/skills/synap-app/SKILL.md +148 -66
  349. package/skills/synap-app/creating-the-base-app.md +12 -7
  350. package/skills/synap-app/governance.md +27 -16
  351. package/skills/synap-app/install-commands.md +18 -9
  352. package/skills/synap-app/overview.md +16 -9
  353. package/skills/synap-app/using-the-sdk.md +75 -25
  354. package/skills/synap-market/SKILL.md +1 -1
  355. package/skills/synap-market/governance-and-catalog.md +1 -1
  356. package/skills/synap-schema/SKILL.md +24 -21
  357. package/skills/synap-schema/intent-vocabulary-ssot.md +24 -21
  358. package/templates/box/runner.py +206 -0
@@ -0,0 +1,250 @@
1
+ /**
2
+ * The statusline's per-conversation pod cache and its 4th ("now") line,
3
+ * driven through the REAL exported `statusline()`.
4
+ *
5
+ * The `/tmp/synap-statusline-*` caches live in an in-memory map (a test must
6
+ * never read or write the person's real cache); every other path is the real
7
+ * fs under the throwaway HOME of test/setup/temp-home.ts. fd 0 (stdin) returns
8
+ * the Claude Code JSON fixture.
9
+ */
10
+ import fs from "node:fs";
11
+ import os from "node:os";
12
+ import path from "node:path";
13
+ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
14
+ const tmpFiles = new Map();
15
+ let stdin = "";
16
+ const isTmp = (p) => typeof p === "string" && p.startsWith("/tmp/synap-statusline");
17
+ vi.mock("node:fs", async () => {
18
+ const real = await vi.importActual("node:fs");
19
+ const fs = {
20
+ ...real,
21
+ readFileSync: ((p, ...rest) => {
22
+ if (p === 0)
23
+ return stdin;
24
+ if (isTmp(p)) {
25
+ if (!tmpFiles.has(p))
26
+ throw new Error(`ENOENT ${String(p)}`);
27
+ return tmpFiles.get(p);
28
+ }
29
+ return real.readFileSync(p, ...rest);
30
+ }),
31
+ writeFileSync: ((p, data, ...rest) => {
32
+ if (isTmp(p))
33
+ return void tmpFiles.set(p, String(data));
34
+ return real.writeFileSync(p, data, ...rest);
35
+ }),
36
+ unlinkSync: ((p) => {
37
+ if (isTmp(p))
38
+ return void tmpFiles.delete(p);
39
+ return real.unlinkSync(p);
40
+ }),
41
+ statSync: ((p, ...rest) => {
42
+ if (isTmp(p)) {
43
+ if (!tmpFiles.has(p))
44
+ throw new Error(`ENOENT ${String(p)}`);
45
+ return { mtimeMs: Date.now(), size: tmpFiles.get(p).length };
46
+ }
47
+ return real.statSync(p, ...rest);
48
+ }),
49
+ };
50
+ // `default` last: `real` carries its own `default`, which must not win.
51
+ return { ...fs, default: fs };
52
+ });
53
+ // Every way out of the process throws: render must never need one.
54
+ const spawn = vi.fn((_cmd, _args) => {
55
+ throw new Error("render must not spawn into the network");
56
+ });
57
+ const forbidden = (name) => () => {
58
+ throw new Error(`render must not call child_process.${name}`);
59
+ };
60
+ vi.mock("node:child_process", () => ({
61
+ spawn: (cmd, args) => spawn(cmd, args),
62
+ exec: forbidden("exec"),
63
+ execSync: forbidden("execSync"),
64
+ execFile: forbidden("execFile"),
65
+ execFileSync: forbidden("execFileSync"),
66
+ }));
67
+ const hubGet = vi.fn();
68
+ vi.mock("../lib/hub-client.js", async () => {
69
+ const real = await vi.importActual("../lib/hub-client.js");
70
+ return {
71
+ ...real,
72
+ resolveHubConfig: async () => ({ podUrl: "https://pod.test", apiKey: "k", workspaceId: `ws-${process.env.SYNAP_LENS_SESSION}` }),
73
+ hubGet: (...args) => hubGet(...args),
74
+ };
75
+ });
76
+ vi.mock("../lib/session-lens.js", () => ({
77
+ resolveActiveLens: () => ({ focusSessionId: `fs-${process.env.SYNAP_LENS_SESSION}` }),
78
+ }));
79
+ vi.mock("../lib/pod.js", () => ({ getSurfaceAgentKey: () => null, SURFACE_NAMES: [] }));
80
+ const { statusline, convCacheFile } = await import("./statusline.js");
81
+ const SHARED = "/tmp/synap-statusline-cache.json";
82
+ // eslint-disable-next-line no-control-regex
83
+ const plain = (s) => s.replace(/\x1b\[[0-9;]*m|\x1b\]8;;[^\x1b]*\x1b\\/g, "");
84
+ function podAnswers() {
85
+ hubGet.mockImplementation(async (p) => {
86
+ if (p === "/workspaces")
87
+ return { workspaces: [{ id: "ws-A", name: "Alpha", entityCount: 3 }, { id: "ws-B", name: "Beta", entityCount: 4 }] };
88
+ if (p.startsWith("/agent-skills"))
89
+ return { total: 7 };
90
+ if (p === "/needs-you")
91
+ return { count: { needsYou: 0, truncated: false } };
92
+ const m = /^\/focus-sessions\/fs-(\w+)$/.exec(p);
93
+ if (m)
94
+ return { id: `fs-${m[1]}`, goal: `goal of ${m[1]}` };
95
+ return null;
96
+ });
97
+ }
98
+ async function refreshAs(conv) {
99
+ vi.stubEnv("SYNAP_LENS_SESSION", conv);
100
+ await statusline({ refresh: true });
101
+ }
102
+ async function renderAs(conv, extra = {}) {
103
+ stdin = JSON.stringify({ session_id: conv, model: { display_name: "Opus" }, context_window: { used_percentage: 12 }, cost: { total_cost_usd: 1.5 }, ...extra });
104
+ const out = [];
105
+ const log = vi.spyOn(console, "log").mockImplementation((s) => void out.push(plain(String(s))));
106
+ try {
107
+ await statusline();
108
+ }
109
+ finally {
110
+ log.mockRestore();
111
+ }
112
+ return out;
113
+ }
114
+ beforeEach(() => {
115
+ tmpFiles.clear();
116
+ spawn.mockClear();
117
+ hubGet.mockReset();
118
+ vi.stubEnv("CLAUDE_CODE_SESSION_ID", "");
119
+ vi.stubEnv("SYNAP_STATUSLINE_TRANSCRIPT", "");
120
+ vi.stubEnv("COLUMNS", "");
121
+ });
122
+ afterEach(() => vi.unstubAllEnvs());
123
+ describe("per-conversation pod cache", () => {
124
+ it("each conversation's session lives in its own file; the pod-wide burst runs once for both", async () => {
125
+ podAnswers();
126
+ await refreshAs("A");
127
+ await refreshAs("B");
128
+ expect(JSON.parse(tmpFiles.get(convCacheFile("A")))).toMatchObject({ sessionGoal: "goal of A", activeWorkspaceId: "ws-A" });
129
+ expect(JSON.parse(tmpFiles.get(convCacheFile("B")))).toMatchObject({ sessionGoal: "goal of B", activeWorkspaceId: "ws-B" });
130
+ // N conversations never multiply the pod-wide burst: B found the shared cache fresh.
131
+ expect(hubGet.mock.calls.filter(([p]) => p === "/workspaces")).toHaveLength(1);
132
+ expect(JSON.parse(tmpFiles.get(SHARED))).not.toHaveProperty("sessionGoal");
133
+ const a = await renderAs("A");
134
+ const b = await renderAs("B");
135
+ expect(a[1]).toContain("goal of A");
136
+ expect(a[1]).toContain("Alpha");
137
+ expect(a[1]).not.toContain("goal of B");
138
+ expect(b[1]).toContain("goal of B");
139
+ expect(b[1]).toContain("Beta");
140
+ });
141
+ it("a conversation with no cache of its own never shows the session another conversation left in an old shared cache", async () => {
142
+ tmpFiles.set(SHARED, JSON.stringify({ ts: Date.now(), attemptedTs: Date.now(), ok: true, workspaces: [], sessionGoal: "someone else's goal", sessionId: "x" }));
143
+ const out = await renderAs("C");
144
+ expect(out.join("\n")).not.toContain("someone else's goal");
145
+ });
146
+ it("a failing pod keeps the conversation's last good values and stamps its attempt", async () => {
147
+ podAnswers();
148
+ await refreshAs("A");
149
+ const before = JSON.parse(tmpFiles.get(convCacheFile("A")));
150
+ hubGet.mockRejectedValue(new Error("429"));
151
+ tmpFiles.set(convCacheFile("A"), JSON.stringify({ ...before, attemptedTs: 0 })); // due again
152
+ await refreshAs("A");
153
+ const after = JSON.parse(tmpFiles.get(convCacheFile("A")));
154
+ expect(after).toMatchObject({ ok: false, sessionGoal: "goal of A", ts: before.ts }); // a 429 keeps the last good value
155
+ expect(Date.now() - after.attemptedTs).toBeLessThan(5_000); // …and stamps the attempt (no storm)
156
+ });
157
+ it("render refreshes only when a cache is due, and a refresh of one conversation does not refetch the other's", async () => {
158
+ const fresh = { ts: Date.now(), attemptedTs: Date.now(), ok: true };
159
+ tmpFiles.set(SHARED, JSON.stringify({ ...fresh, workspaces: [] }));
160
+ tmpFiles.set(convCacheFile("A"), JSON.stringify(fresh));
161
+ await renderAs("A");
162
+ expect(spawn).not.toHaveBeenCalled();
163
+ await renderAs("B"); // B has no cache yet → a refresh is wanted (spawn throws; render goes on)
164
+ expect(spawn).toHaveBeenCalledTimes(1);
165
+ });
166
+ });
167
+ describe("render touches no network", () => {
168
+ it("prints all 4 lines from local files with fetch and every child_process call throwing", async () => {
169
+ const fetchSpy = vi.fn(() => {
170
+ throw new Error("render must not fetch");
171
+ });
172
+ vi.stubGlobal("fetch", fetchSpy);
173
+ try {
174
+ const home = os.homedir();
175
+ const conv = "11111111-2222-3333-4444-555555555555";
176
+ // Claude Code's registry: this conversation is idle (its turn ended).
177
+ fs.mkdirSync(path.join(home, ".claude", "sessions"), { recursive: true });
178
+ fs.writeFileSync(path.join(home, ".claude", "sessions", "999.json"), JSON.stringify({ pid: 999, sessionId: conv, status: "shell", statusUpdatedAt: Date.now() - 60_000, startedAt: Date.now() - 3_600_000 }));
179
+ // The transcript: one background agent, still running.
180
+ const transcript = path.join(home, "t.jsonl");
181
+ const ts = new Date(Date.now() - 5 * 60_000).toISOString();
182
+ fs.writeFileSync(transcript, [
183
+ JSON.stringify({ type: "assistant", timestamp: ts, message: { content: [{ type: "tool_use", id: "toolu_a", name: "Agent", input: { description: "Review the diff" } }] } }),
184
+ JSON.stringify({ type: "user", timestamp: ts, message: { content: [{ type: "tool_result", tool_use_id: "toolu_a", content: "ok" }] }, toolUseResult: { status: "async_launched", agentId: "a1" } }),
185
+ ].join("\n") + "\n");
186
+ // A typed wait, running.
187
+ const wdir = path.join(home, ".synap", "waits", conv);
188
+ fs.mkdirSync(wdir, { recursive: true });
189
+ fs.writeFileSync(path.join(wdir, "w.json"), JSON.stringify({ id: "w", kind: "devbox", ref: "w7", label: "", pid: process.pid, startedAt: Date.now() - 120_000, probedAt: Date.now(), changedAt: Date.now(), state: "running", detail: "be-file · 1/2 done", attempt: 1, probeErrors: 0 }));
190
+ const out = await renderAs(conv, { transcript_path: transcript, cwd: home, rate_limits: { five_hour: { used_percentage: 10 } } });
191
+ expect(fetchSpy).not.toHaveBeenCalled();
192
+ expect(out).toHaveLength(4);
193
+ expect(out[3]).toBe("⏳ waiting on 2 · devbox w7 running (be-file · 1/2 done) 2m · Review the diff 5m");
194
+ // The index it built is on disk for the next render.
195
+ expect(JSON.parse(fs.readFileSync(path.join(home, ".synap", "statusline", `${conv}.json`), "utf-8")).open.a1).toBeDefined();
196
+ }
197
+ finally {
198
+ vi.unstubAllGlobals();
199
+ }
200
+ });
201
+ });
202
+ describe("line 4 from the bridge's status file", () => {
203
+ /** This conversation's registry (idle, its process started an hour ago) and, when given, its status file. */
204
+ function conversation(conv, statusFile) {
205
+ const home = os.homedir();
206
+ fs.mkdirSync(path.join(home, ".claude", "sessions"), { recursive: true });
207
+ fs.writeFileSync(path.join(home, ".claude", "sessions", `${conv.slice(0, 4)}.json`), JSON.stringify({ pid: 4321, sessionId: conv, status: "idle", statusUpdatedAt: Date.now() - 60_000, startedAt: Date.now() - 3_600_000 }));
208
+ if (statusFile === undefined)
209
+ return;
210
+ const dir = path.join(home, ".synap", "bridge", "status");
211
+ fs.mkdirSync(dir, { recursive: true });
212
+ fs.writeFileSync(path.join(dir, `${conv}.json`), statusFile);
213
+ }
214
+ const bridgeFile = (writtenAt) => JSON.stringify({
215
+ v: 1,
216
+ writtenAt: new Date(writtenAt).toISOString(),
217
+ sessionId: "54436c32-783f-4a9d-9322-16ff18f448f7",
218
+ title: "Lane cli-statusfile",
219
+ live: null,
220
+ nextMove: { kind: "agent_slot", actor: "ai", label: "Open the PR", reason: "" },
221
+ waitingOn: [{ reason: "approval", count: 2 }],
222
+ workUnits: [],
223
+ });
224
+ it("a fresh file is drawn: what the pod says the conversation waits on", async () => {
225
+ const conv = "aaaa1111-2222-3333-4444-555555555555";
226
+ conversation(conv, bridgeFile(Date.now() - 30_000));
227
+ const out = await renderAs(conv);
228
+ expect(out[3]).toBe("⏳ waiting on 2 · approval (2) · next: Open the PR");
229
+ });
230
+ it("no file: the transcript index line, as before", async () => {
231
+ const conv = "bbbb1111-2222-3333-4444-555555555555";
232
+ conversation(conv);
233
+ const out = await renderAs(conv);
234
+ expect(out[3]).toBe("■ stopped · nothing running · 1m");
235
+ });
236
+ it("a file an earlier Claude Code process wrote is stale: the transcript index line", async () => {
237
+ const conv = "cccc1111-2222-3333-4444-555555555555";
238
+ conversation(conv, bridgeFile(Date.now() - 2 * 3_600_000));
239
+ const out = await renderAs(conv);
240
+ expect(out[3]).toBe("■ stopped · nothing running · 1m");
241
+ });
242
+ it("a malformed file falls back, never throws, and is marked as a failed read", async () => {
243
+ const conv = "dddd1111-2222-3333-4444-555555555555";
244
+ conversation(conv, '{"v":1,"writ');
245
+ const out = await renderAs(conv);
246
+ expect(out).toHaveLength(4);
247
+ expect(out[3]).toBe("■ stopped · nothing running · 1m · ⚑ bridge status not JSON");
248
+ });
249
+ });
250
+ //# sourceMappingURL=statusline.now.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statusline.now.test.js","sourceRoot":"","sources":["../../src/commands/statusline.now.test.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,19 @@
1
1
  /**
2
- * `synap track` — a LASTING goal inside a project (Hub `/api/hub/tracks`).
3
- * Work in it = `synap session start --track <id>`. A legacy track also runs a
2
+ * `synap track` — a goal inside a project (Hub `/api/hub/tracks`).
3
+ * Work in it = `synap session start --track <id>`. A goal stays open as long as
4
+ * it matters, or a person closes it with a verdict. A legacy track also runs a
4
5
  * method (a project-scoped playbook) with steps; a new one needs none.
5
6
  *
6
- * list a project's tracks (defaults to the active project lens)
7
+ * list a project's tracks (the active project lens, else every goal on the pod)
7
8
  * show one track, its steps and where it stands
8
- * start start a track on a project (--name; --playbook is legacy)
9
+ * start start a track on a project (--name; --end-state, --criterion, … say what done is)
10
+ * update set a goal's direction, KPI and content
11
+ * accept the goal's judge accepts / sends back / rejects a claimed criterion
9
12
  * advance move a track to a step — returns the step's session OFFER
10
- * status pause / resume / complete / archive
13
+ * status move it through its lifecycle; close (completed) and drop
14
+ * (archived) carry --verdict
15
+ * reopen a closed or dropped goal comes back as a NEW version
16
+ * convert (`synap goal convert`) make a goal / objective / OKR entity a goal
11
17
  * params answer the method's params (merged; `key=null` clears)
12
18
  * start-step start the work session of one step (default: current step)
13
19
  *
@@ -19,14 +25,45 @@
19
25
  */
20
26
  import { type BaseOpts } from "./data.js";
21
27
  type Json = Record<string, unknown>;
28
+ /** The kinds of check a person can name for a criterion (`--criterion "judged: …"`). */
29
+ export declare const CRITERION_KINDS: readonly ["measured", "judged", "handed_over", "learning", "decided_outside", "certified"];
30
+ /**
31
+ * The stored evaluator a typed line gets for each kind — one the pod's
32
+ * `CHECK_MEANING_EVALUATORS` allows for it (a person typing a line cannot
33
+ * post evidence, so the person's grade wherever the meaning allows one);
34
+ * `test/goal-criterion-parity.test.ts` holds both tables to the pod's.
35
+ */
36
+ /** The pod's criterion key length (`sessionCriterionSchema` `key` `.max`). */
37
+ export declare const CRITERION_KEY_MAX = 80;
38
+ export declare const CRITERION_EVALUATOR: Record<(typeof CRITERION_KINDS)[number], string>;
39
+ /**
40
+ * `--criterion "[kind:] statement"` → a goal criterion. Kind defaults to
41
+ * `judged` (a person checks it); the key is a slug of the statement, made
42
+ * unique among `taken`. A `learning` criterion is about the method.
43
+ */
44
+ export declare function parseCriterion(line: string, taken: Set<string>): Json;
45
+ /** The goal-content flags shared by `track start` and `track update`. */
46
+ interface GoalContentOpts {
47
+ endState?: string;
48
+ criterion?: string[];
49
+ dropCondition?: string[];
50
+ kind?: string;
51
+ uncertainty?: string;
52
+ loop?: string;
53
+ }
54
+ /** Goal-content flags → the body fields the pod reads (only what was typed). */
55
+ export declare function goalContentBody(opts: GoalContentOpts): Json;
22
56
  /** `key=value` pairs → params. Values parse as JSON when they can (`null`, numbers, lists). */
23
57
  export declare function parseParamPairs(pairs: string[]): Json;
24
58
  export declare function listTracks(opts: BaseOpts & {
25
59
  project?: string;
26
60
  all?: boolean;
61
+ everywhere?: boolean;
62
+ limit?: string;
63
+ cursor?: string;
27
64
  }): Promise<void>;
28
65
  export declare function showTrack(id: string, opts: BaseOpts): Promise<void>;
29
- export declare function startTrack(opts: BaseOpts & {
66
+ export declare function startTrack(opts: BaseOpts & GoalContentOpts & {
30
67
  playbook?: string;
31
68
  project?: string;
32
69
  name?: string;
@@ -39,6 +76,14 @@ export declare function advanceTrack(id: string, toStage: string, opts: BaseOpts
39
76
  }): Promise<void>;
40
77
  export declare function setTrackStatus(id: string, status: string, opts: BaseOpts & {
41
78
  reason?: string;
79
+ verdict?: string;
80
+ verdictReason?: string;
81
+ expected?: string;
82
+ }): Promise<void>;
83
+ /** A closed or dropped goal comes back as a NEW version — never moved back. */
84
+ export declare function reopenTrack(id: string, opts: BaseOpts & {
85
+ name?: string;
86
+ reason?: string;
42
87
  }): Promise<void>;
43
88
  export declare function setTrackParams(id: string, pairs: string[], opts: BaseOpts & {
44
89
  reason?: string;
@@ -48,4 +93,21 @@ export declare function startStep(id: string, opts: BaseOpts & {
48
93
  title?: string;
49
94
  goal?: string;
50
95
  }): Promise<void>;
96
+ /** Set where a goal is heading, its KPI and what it holds (PATCH /tracks/:id/direction). */
97
+ export declare function updateTrack(id: string, opts: BaseOpts & GoalContentOpts & {
98
+ direction?: string;
99
+ kpiCurrent?: string;
100
+ kpiTarget?: string;
101
+ reason?: string;
102
+ }): Promise<void>;
103
+ /** The goal's JUDGE decides a claimed criterion (a person's act — an agent key is refused). */
104
+ export declare function acceptCriterion(id: string, key: string, decision: string, opts: BaseOpts & {
105
+ note?: string;
106
+ }): Promise<void>;
107
+ /** "Make it a goal" — a goal / objective / okr entity becomes a goal, once. */
108
+ export declare function convertToGoal(entityId: string, opts: BaseOpts & {
109
+ project?: string;
110
+ name?: string;
111
+ reason?: string;
112
+ }): Promise<void>;
51
113
  export {};