@synteq/cli 0.1.6 → 0.2.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 (357) hide show
  1. package/bin/run.js +61 -2
  2. package/dist/api/client.d.ts +2 -1
  3. package/dist/api/client.js +1 -1
  4. package/dist/api/client.js.map +1 -1
  5. package/dist/api/factory.d.ts +3 -0
  6. package/dist/api/factory.js +1 -1
  7. package/dist/api/factory.js.map +1 -1
  8. package/dist/api/types.d.ts +4 -1
  9. package/dist/auth/scope.d.ts +19 -0
  10. package/dist/auth/scope.js +65 -0
  11. package/dist/auth/scope.js.map +1 -0
  12. package/dist/base/command.d.ts +1 -1
  13. package/dist/base/command.js +49 -0
  14. package/dist/base/command.js.map +1 -1
  15. package/dist/commands/account/index.d.ts +1 -0
  16. package/dist/commands/account/index.js +1 -0
  17. package/dist/commands/account/index.js.map +1 -1
  18. package/dist/commands/account/show.d.ts +1 -0
  19. package/dist/commands/account/show.js +1 -0
  20. package/dist/commands/account/show.js.map +1 -1
  21. package/dist/commands/api.d.ts +1 -0
  22. package/dist/commands/api.js +1 -0
  23. package/dist/commands/api.js.map +1 -1
  24. package/dist/commands/catalog.d.ts +1 -0
  25. package/dist/commands/catalog.js +5 -0
  26. package/dist/commands/catalog.js.map +1 -1
  27. package/dist/commands/config/index.d.ts +1 -0
  28. package/dist/commands/config/index.js +1 -0
  29. package/dist/commands/config/index.js.map +1 -1
  30. package/dist/commands/config/set-api-url.d.ts +1 -0
  31. package/dist/commands/config/set-api-url.js +1 -0
  32. package/dist/commands/config/set-api-url.js.map +1 -1
  33. package/dist/commands/config/show.d.ts +1 -0
  34. package/dist/commands/config/show.js +1 -0
  35. package/dist/commands/config/show.js.map +1 -1
  36. package/dist/commands/credits/add.d.ts +1 -0
  37. package/dist/commands/credits/add.js +1 -0
  38. package/dist/commands/credits/add.js.map +1 -1
  39. package/dist/commands/credits/index.d.ts +1 -0
  40. package/dist/commands/credits/index.js +1 -0
  41. package/dist/commands/credits/index.js.map +1 -1
  42. package/dist/commands/credits/list.d.ts +1 -0
  43. package/dist/commands/credits/list.js +1 -0
  44. package/dist/commands/credits/list.js.map +1 -1
  45. package/dist/commands/gpu/activity.d.ts +1 -0
  46. package/dist/commands/gpu/activity.js +1 -0
  47. package/dist/commands/gpu/activity.js.map +1 -1
  48. package/dist/commands/gpu/bandwidth.d.ts +1 -0
  49. package/dist/commands/gpu/bandwidth.js +1 -0
  50. package/dist/commands/gpu/bandwidth.js.map +1 -1
  51. package/dist/commands/gpu/boot-order.d.ts +1 -0
  52. package/dist/commands/gpu/boot-order.js +1 -0
  53. package/dist/commands/gpu/boot-order.js.map +1 -1
  54. package/dist/commands/gpu/console.d.ts +1 -0
  55. package/dist/commands/gpu/console.js +1 -0
  56. package/dist/commands/gpu/console.js.map +1 -1
  57. package/dist/commands/gpu/details.d.ts +1 -0
  58. package/dist/commands/gpu/details.js +1 -0
  59. package/dist/commands/gpu/details.js.map +1 -1
  60. package/dist/commands/gpu/index.d.ts +1 -0
  61. package/dist/commands/gpu/index.js +1 -0
  62. package/dist/commands/gpu/index.js.map +1 -1
  63. package/dist/commands/gpu/ip/add.d.ts +1 -0
  64. package/dist/commands/gpu/ip/add.js +1 -0
  65. package/dist/commands/gpu/ip/add.js.map +1 -1
  66. package/dist/commands/gpu/ip/list.d.ts +1 -0
  67. package/dist/commands/gpu/ip/list.js +1 -0
  68. package/dist/commands/gpu/ip/list.js.map +1 -1
  69. package/dist/commands/gpu/list.d.ts +1 -0
  70. package/dist/commands/gpu/list.js +1 -0
  71. package/dist/commands/gpu/list.js.map +1 -1
  72. package/dist/commands/gpu/order.d.ts +1 -0
  73. package/dist/commands/gpu/order.js +1 -0
  74. package/dist/commands/gpu/order.js.map +1 -1
  75. package/dist/commands/gpu/power.d.ts +1 -0
  76. package/dist/commands/gpu/power.js +1 -0
  77. package/dist/commands/gpu/power.js.map +1 -1
  78. package/dist/commands/gpu/reinstall.d.ts +1 -0
  79. package/dist/commands/gpu/reinstall.js +1 -0
  80. package/dist/commands/gpu/reinstall.js.map +1 -1
  81. package/dist/commands/gpu/resize.d.ts +1 -0
  82. package/dist/commands/gpu/resize.js +1 -0
  83. package/dist/commands/gpu/resize.js.map +1 -1
  84. package/dist/commands/gpu/stats.d.ts +1 -0
  85. package/dist/commands/gpu/stats.js +1 -0
  86. package/dist/commands/gpu/stats.js.map +1 -1
  87. package/dist/commands/help.d.ts +2 -0
  88. package/dist/commands/help.js +5 -0
  89. package/dist/commands/help.js.map +1 -1
  90. package/dist/commands/instant-metal/activity.d.ts +1 -0
  91. package/dist/commands/instant-metal/activity.js +1 -0
  92. package/dist/commands/instant-metal/activity.js.map +1 -1
  93. package/dist/commands/instant-metal/bandwidth.d.ts +1 -0
  94. package/dist/commands/instant-metal/bandwidth.js +1 -0
  95. package/dist/commands/instant-metal/bandwidth.js.map +1 -1
  96. package/dist/commands/instant-metal/boot-order.d.ts +1 -0
  97. package/dist/commands/instant-metal/boot-order.js +1 -0
  98. package/dist/commands/instant-metal/boot-order.js.map +1 -1
  99. package/dist/commands/instant-metal/console.d.ts +1 -0
  100. package/dist/commands/instant-metal/console.js +1 -0
  101. package/dist/commands/instant-metal/console.js.map +1 -1
  102. package/dist/commands/instant-metal/details.d.ts +1 -0
  103. package/dist/commands/instant-metal/details.js +1 -0
  104. package/dist/commands/instant-metal/details.js.map +1 -1
  105. package/dist/commands/instant-metal/index.d.ts +1 -0
  106. package/dist/commands/instant-metal/index.js +1 -0
  107. package/dist/commands/instant-metal/index.js.map +1 -1
  108. package/dist/commands/instant-metal/ip/add.d.ts +1 -0
  109. package/dist/commands/instant-metal/ip/add.js +1 -0
  110. package/dist/commands/instant-metal/ip/add.js.map +1 -1
  111. package/dist/commands/instant-metal/ip/list.d.ts +1 -0
  112. package/dist/commands/instant-metal/ip/list.js +1 -0
  113. package/dist/commands/instant-metal/ip/list.js.map +1 -1
  114. package/dist/commands/instant-metal/list.d.ts +1 -0
  115. package/dist/commands/instant-metal/list.js +1 -0
  116. package/dist/commands/instant-metal/list.js.map +1 -1
  117. package/dist/commands/instant-metal/order.d.ts +1 -0
  118. package/dist/commands/instant-metal/order.js +1 -0
  119. package/dist/commands/instant-metal/order.js.map +1 -1
  120. package/dist/commands/instant-metal/power.d.ts +1 -0
  121. package/dist/commands/instant-metal/power.js +1 -0
  122. package/dist/commands/instant-metal/power.js.map +1 -1
  123. package/dist/commands/instant-metal/reinstall.d.ts +1 -0
  124. package/dist/commands/instant-metal/reinstall.js +1 -0
  125. package/dist/commands/instant-metal/reinstall.js.map +1 -1
  126. package/dist/commands/instant-metal/resize.d.ts +1 -0
  127. package/dist/commands/instant-metal/resize.js +1 -0
  128. package/dist/commands/instant-metal/resize.js.map +1 -1
  129. package/dist/commands/instant-metal/stats.d.ts +1 -0
  130. package/dist/commands/instant-metal/stats.js +1 -0
  131. package/dist/commands/instant-metal/stats.js.map +1 -1
  132. package/dist/commands/login.d.ts +1 -0
  133. package/dist/commands/login.js +1 -0
  134. package/dist/commands/login.js.map +1 -1
  135. package/dist/commands/logout.d.ts +1 -0
  136. package/dist/commands/logout.js +1 -0
  137. package/dist/commands/logout.js.map +1 -1
  138. package/dist/commands/order/gpu.d.ts +1 -0
  139. package/dist/commands/order/gpu.js +1 -0
  140. package/dist/commands/order/gpu.js.map +1 -1
  141. package/dist/commands/order/instant-metal.d.ts +1 -0
  142. package/dist/commands/order/instant-metal.js +1 -0
  143. package/dist/commands/order/instant-metal.js.map +1 -1
  144. package/dist/commands/order/storage.d.ts +1 -0
  145. package/dist/commands/order/storage.js +1 -0
  146. package/dist/commands/order/storage.js.map +1 -1
  147. package/dist/commands/order/vps.d.ts +1 -0
  148. package/dist/commands/order/vps.js +1 -0
  149. package/dist/commands/order/vps.js.map +1 -1
  150. package/dist/commands/order.d.ts +1 -0
  151. package/dist/commands/order.js +1 -0
  152. package/dist/commands/order.js.map +1 -1
  153. package/dist/commands/os-images.d.ts +1 -0
  154. package/dist/commands/os-images.js +3 -0
  155. package/dist/commands/os-images.js.map +1 -1
  156. package/dist/commands/payments/index.d.ts +1 -0
  157. package/dist/commands/payments/index.js +1 -0
  158. package/dist/commands/payments/index.js.map +1 -1
  159. package/dist/commands/payments/methods/add.d.ts +1 -0
  160. package/dist/commands/payments/methods/add.js +1 -0
  161. package/dist/commands/payments/methods/add.js.map +1 -1
  162. package/dist/commands/payments/methods/delete.d.ts +1 -0
  163. package/dist/commands/payments/methods/delete.js +1 -0
  164. package/dist/commands/payments/methods/delete.js.map +1 -1
  165. package/dist/commands/payments/methods/index.d.ts +1 -0
  166. package/dist/commands/payments/methods/index.js +1 -0
  167. package/dist/commands/payments/methods/index.js.map +1 -1
  168. package/dist/commands/payments/methods/list.d.ts +1 -0
  169. package/dist/commands/payments/methods/list.js +1 -0
  170. package/dist/commands/payments/methods/list.js.map +1 -1
  171. package/dist/commands/payments/methods/set-default.d.ts +1 -0
  172. package/dist/commands/payments/methods/set-default.js +1 -0
  173. package/dist/commands/payments/methods/set-default.js.map +1 -1
  174. package/dist/commands/projects/index.d.ts +1 -0
  175. package/dist/commands/projects/index.js +1 -0
  176. package/dist/commands/projects/index.js.map +1 -1
  177. package/dist/commands/projects/list.d.ts +1 -0
  178. package/dist/commands/projects/list.js +1 -0
  179. package/dist/commands/projects/list.js.map +1 -1
  180. package/dist/commands/resources.d.ts +1 -0
  181. package/dist/commands/resources.js +11 -0
  182. package/dist/commands/resources.js.map +1 -1
  183. package/dist/commands/settings/index.d.ts +1 -0
  184. package/dist/commands/settings/index.js +1 -0
  185. package/dist/commands/settings/index.js.map +1 -1
  186. package/dist/commands/settings/render-mode.d.ts +1 -0
  187. package/dist/commands/settings/render-mode.js +1 -0
  188. package/dist/commands/settings/render-mode.js.map +1 -1
  189. package/dist/commands/ssh-key/add.d.ts +1 -0
  190. package/dist/commands/ssh-key/add.js +1 -0
  191. package/dist/commands/ssh-key/add.js.map +1 -1
  192. package/dist/commands/ssh-key/delete.d.ts +1 -0
  193. package/dist/commands/ssh-key/delete.js +1 -0
  194. package/dist/commands/ssh-key/delete.js.map +1 -1
  195. package/dist/commands/ssh-key/list.d.ts +1 -0
  196. package/dist/commands/ssh-key/list.js +1 -0
  197. package/dist/commands/ssh-key/list.js.map +1 -1
  198. package/dist/commands/storage/attach.d.ts +1 -0
  199. package/dist/commands/storage/attach.js +1 -0
  200. package/dist/commands/storage/attach.js.map +1 -1
  201. package/dist/commands/storage/detach.d.ts +1 -0
  202. package/dist/commands/storage/detach.js +1 -0
  203. package/dist/commands/storage/detach.js.map +1 -1
  204. package/dist/commands/storage/list.d.ts +1 -0
  205. package/dist/commands/storage/list.js +1 -0
  206. package/dist/commands/storage/list.js.map +1 -1
  207. package/dist/commands/storage/order.d.ts +1 -0
  208. package/dist/commands/storage/order.js +1 -0
  209. package/dist/commands/storage/order.js.map +1 -1
  210. package/dist/commands/storage/resize.d.ts +1 -0
  211. package/dist/commands/storage/resize.js +1 -0
  212. package/dist/commands/storage/resize.js.map +1 -1
  213. package/dist/commands/team/details.d.ts +1 -0
  214. package/dist/commands/team/details.js +1 -0
  215. package/dist/commands/team/details.js.map +1 -1
  216. package/dist/commands/team/invite.d.ts +1 -0
  217. package/dist/commands/team/invite.js +1 -0
  218. package/dist/commands/team/invite.js.map +1 -1
  219. package/dist/commands/team.d.ts +1 -0
  220. package/dist/commands/team.js +1 -0
  221. package/dist/commands/team.js.map +1 -1
  222. package/dist/commands/tickets/close.d.ts +1 -0
  223. package/dist/commands/tickets/close.js +1 -0
  224. package/dist/commands/tickets/close.js.map +1 -1
  225. package/dist/commands/tickets/create.d.ts +1 -0
  226. package/dist/commands/tickets/create.js +1 -0
  227. package/dist/commands/tickets/create.js.map +1 -1
  228. package/dist/commands/tickets/departments.d.ts +1 -0
  229. package/dist/commands/tickets/departments.js +1 -0
  230. package/dist/commands/tickets/departments.js.map +1 -1
  231. package/dist/commands/tickets/list.d.ts +1 -0
  232. package/dist/commands/tickets/list.js +1 -0
  233. package/dist/commands/tickets/list.js.map +1 -1
  234. package/dist/commands/tickets/open.d.ts +1 -0
  235. package/dist/commands/tickets/open.js +1 -0
  236. package/dist/commands/tickets/open.js.map +1 -1
  237. package/dist/commands/tickets/reopen.d.ts +11 -0
  238. package/dist/commands/tickets/reopen.js +34 -0
  239. package/dist/commands/tickets/reopen.js.map +1 -0
  240. package/dist/commands/tickets/reply.d.ts +1 -0
  241. package/dist/commands/tickets/reply.js +1 -0
  242. package/dist/commands/tickets/reply.js.map +1 -1
  243. package/dist/commands/transit.d.ts +1 -0
  244. package/dist/commands/transit.js +1 -0
  245. package/dist/commands/transit.js.map +1 -1
  246. package/dist/commands/tui/index.d.ts +1 -0
  247. package/dist/commands/tui/index.js +21 -0
  248. package/dist/commands/tui/index.js.map +1 -1
  249. package/dist/commands/vds/activity.d.ts +1 -0
  250. package/dist/commands/vds/activity.js +1 -0
  251. package/dist/commands/vds/activity.js.map +1 -1
  252. package/dist/commands/vds/bandwidth.d.ts +1 -0
  253. package/dist/commands/vds/bandwidth.js +1 -0
  254. package/dist/commands/vds/bandwidth.js.map +1 -1
  255. package/dist/commands/vds/boot-order.d.ts +1 -0
  256. package/dist/commands/vds/boot-order.js +1 -0
  257. package/dist/commands/vds/boot-order.js.map +1 -1
  258. package/dist/commands/vds/console.d.ts +1 -0
  259. package/dist/commands/vds/console.js +1 -0
  260. package/dist/commands/vds/console.js.map +1 -1
  261. package/dist/commands/vds/details.d.ts +1 -0
  262. package/dist/commands/vds/details.js +1 -0
  263. package/dist/commands/vds/details.js.map +1 -1
  264. package/dist/commands/vds/index.d.ts +1 -0
  265. package/dist/commands/vds/index.js +1 -0
  266. package/dist/commands/vds/index.js.map +1 -1
  267. package/dist/commands/vds/ip/add.d.ts +1 -0
  268. package/dist/commands/vds/ip/add.js +1 -0
  269. package/dist/commands/vds/ip/add.js.map +1 -1
  270. package/dist/commands/vds/ip/list.d.ts +1 -0
  271. package/dist/commands/vds/ip/list.js +1 -0
  272. package/dist/commands/vds/ip/list.js.map +1 -1
  273. package/dist/commands/vds/list.d.ts +1 -0
  274. package/dist/commands/vds/list.js +1 -0
  275. package/dist/commands/vds/list.js.map +1 -1
  276. package/dist/commands/vds/order.d.ts +1 -0
  277. package/dist/commands/vds/order.js +1 -0
  278. package/dist/commands/vds/order.js.map +1 -1
  279. package/dist/commands/vds/power.d.ts +1 -0
  280. package/dist/commands/vds/power.js +1 -0
  281. package/dist/commands/vds/power.js.map +1 -1
  282. package/dist/commands/vds/reinstall.d.ts +1 -0
  283. package/dist/commands/vds/reinstall.js +1 -0
  284. package/dist/commands/vds/reinstall.js.map +1 -1
  285. package/dist/commands/vds/resize.d.ts +1 -0
  286. package/dist/commands/vds/resize.js +1 -0
  287. package/dist/commands/vds/resize.js.map +1 -1
  288. package/dist/commands/vds/stats.d.ts +1 -0
  289. package/dist/commands/vds/stats.js +1 -0
  290. package/dist/commands/vds/stats.js.map +1 -1
  291. package/dist/commands/vps/activity.d.ts +1 -0
  292. package/dist/commands/vps/activity.js +1 -0
  293. package/dist/commands/vps/activity.js.map +1 -1
  294. package/dist/commands/vps/bandwidth.d.ts +1 -0
  295. package/dist/commands/vps/bandwidth.js +1 -0
  296. package/dist/commands/vps/bandwidth.js.map +1 -1
  297. package/dist/commands/vps/boot-order.d.ts +1 -0
  298. package/dist/commands/vps/boot-order.js +1 -0
  299. package/dist/commands/vps/boot-order.js.map +1 -1
  300. package/dist/commands/vps/console.d.ts +1 -0
  301. package/dist/commands/vps/console.js +1 -0
  302. package/dist/commands/vps/console.js.map +1 -1
  303. package/dist/commands/vps/details.d.ts +1 -0
  304. package/dist/commands/vps/details.js +1 -0
  305. package/dist/commands/vps/details.js.map +1 -1
  306. package/dist/commands/vps/ip/add.d.ts +1 -0
  307. package/dist/commands/vps/ip/add.js +1 -0
  308. package/dist/commands/vps/ip/add.js.map +1 -1
  309. package/dist/commands/vps/ip/list.d.ts +1 -0
  310. package/dist/commands/vps/ip/list.js +1 -0
  311. package/dist/commands/vps/ip/list.js.map +1 -1
  312. package/dist/commands/vps/list.d.ts +1 -0
  313. package/dist/commands/vps/list.js +1 -0
  314. package/dist/commands/vps/list.js.map +1 -1
  315. package/dist/commands/vps/order.d.ts +1 -0
  316. package/dist/commands/vps/order.js +1 -0
  317. package/dist/commands/vps/order.js.map +1 -1
  318. package/dist/commands/vps/power.d.ts +1 -0
  319. package/dist/commands/vps/power.js +1 -0
  320. package/dist/commands/vps/power.js.map +1 -1
  321. package/dist/commands/vps/reinstall.d.ts +1 -0
  322. package/dist/commands/vps/reinstall.js +1 -0
  323. package/dist/commands/vps/reinstall.js.map +1 -1
  324. package/dist/commands/vps/resize.d.ts +1 -0
  325. package/dist/commands/vps/resize.js +1 -0
  326. package/dist/commands/vps/resize.js.map +1 -1
  327. package/dist/commands/vps/stats.d.ts +1 -0
  328. package/dist/commands/vps/stats.js +1 -0
  329. package/dist/commands/vps/stats.js.map +1 -1
  330. package/dist/commands/whoami.d.ts +1 -0
  331. package/dist/commands/whoami.js +1 -0
  332. package/dist/commands/whoami.js.map +1 -1
  333. package/dist/help/help-filter.d.ts +10 -0
  334. package/dist/help/help-filter.js +9 -0
  335. package/dist/help/help-filter.js.map +1 -0
  336. package/dist/help/scope-aware-help.d.ts +30 -0
  337. package/dist/help/scope-aware-help.js +71 -0
  338. package/dist/help/scope-aware-help.js.map +1 -0
  339. package/dist/tui/App.js +1 -1
  340. package/dist/tui/App.js.map +1 -1
  341. package/dist/tui/components/NumberInput.js +1 -1
  342. package/dist/tui/components/Sparkline.js +1 -1
  343. package/dist/tui/screens/Billing.js +10 -10
  344. package/dist/tui/screens/Billing.js.map +1 -1
  345. package/dist/tui/screens/Order.js +28 -28
  346. package/dist/tui/screens/Order.js.map +1 -1
  347. package/dist/tui/screens/Resources.js +4 -4
  348. package/dist/tui/screens/Resources.js.map +1 -1
  349. package/dist/tui/screens/Tickets.js +31 -22
  350. package/dist/tui/screens/Tickets.js.map +1 -1
  351. package/dist/version-check-bin.d.ts +35 -0
  352. package/dist/version-check-bin.js +123 -0
  353. package/dist/version-check-bin.js.map +1 -0
  354. package/dist/version-check.d.ts +39 -0
  355. package/dist/version-check.js +148 -0
  356. package/dist/version-check.js.map +1 -0
  357. package/package.json +11 -3
@@ -8,6 +8,7 @@ import { Tip } from "../components/Tip.js";
8
8
  import { Spinner } from "../components/Spinner.js";
9
9
  import { ActionButton } from "../components/ActionButton.js";
10
10
  import { BackButton } from "../components/BackButton.js";
11
+ import { Clickable } from "../components/Clickable.js";
11
12
  import { ConfirmModal } from "../components/ConfirmModal.js";
12
13
  import { useApi } from "../hooks/useApi.js";
13
14
  import { useHeader } from "../hooks/useHeader.js";
@@ -102,7 +103,10 @@ export function Tickets() {
102
103
  } }));
103
104
  }
104
105
  else {
105
- body = (React.createElement(TicketList, { tickets: visible, loading: loading, error: error, cursor: cursor, statusFilter: statusFilter, onHover: setCursor, onOpen: (id) => setMode({ kind: "detail", id }) }));
106
+ body = (React.createElement(TicketList, { tickets: visible, loading: loading, error: error, cursor: cursor, statusFilter: statusFilter, onHover: setCursor, onOpen: (id) => setMode({ kind: "detail", id }), onFilter: (v) => {
107
+ setStatusFilter(v);
108
+ setCursor(0);
109
+ }, onNew: () => setMode({ kind: "create" }), onRefresh: load }));
106
110
  }
107
111
  return (React.createElement(CenteredFrame, { fullHeight: true, maxWidth: 120 },
108
112
  React.createElement(Box, { paddingX: 2, flexShrink: 0 },
@@ -116,43 +120,48 @@ export function Tickets() {
116
120
  header.userEmail ?? "",
117
121
  ].filter(Boolean) }))));
118
122
  }
119
- function TicketList({ tickets, loading, error, cursor, statusFilter, onHover, onOpen, }) {
123
+ function TicketList({ tickets, loading, error, cursor, statusFilter, onHover, onOpen, onFilter, onNew, onRefresh, }) {
120
124
  return (React.createElement(Box, { flexDirection: "column" },
121
125
  React.createElement(Box, { marginBottom: 1 }, STATUS_FILTERS.map((f, i) => {
122
126
  const active = f.value === statusFilter;
123
- return (React.createElement(Text, { key: f.value, color: active ? colors.accent : colors.dim }, `${i > 0 ? " " : ""}${i + 1} ${f.label}${active ? " ●" : ""}`));
127
+ return (React.createElement(Clickable, { key: f.value, fitContent: true, onClick: () => onFilter(f.value) },
128
+ React.createElement(Text, { color: active ? colors.accent : colors.dim }, `${i > 0 ? " " : ""}${i + 1} ${f.label}${active ? " ●" : ""}`)));
124
129
  })),
125
130
  React.createElement(Panel, { title: "Your tickets", paddingX: 2, paddingY: 1 }, loading ? (React.createElement(Spinner, { label: "Loading tickets\u2026" })) : error ? (React.createElement(Text, { color: colors.error }, error)) : tickets.length === 0 ? (React.createElement(Text, { color: colors.dim }, statusFilter === "all"
126
131
  ? "No tickets yet. Press n to open your first one."
127
132
  : "No tickets with that status.")) : (React.createElement(Box, { flexDirection: "column" }, tickets.map((t, i) => (React.createElement(TicketRow, { key: t.id, ticket: t, focused: i === cursor, onHover: () => onHover(i), onClick: () => onOpen(t.id) })))))),
128
133
  React.createElement(Box, { marginTop: 1 },
129
- React.createElement(ActionButton, { keybind: "n", label: "New ticket", onPress: () => { } }),
134
+ React.createElement(ActionButton, { keybind: "n", label: "New ticket", onPress: onNew }),
130
135
  React.createElement(Box, { marginLeft: 1 }),
131
- React.createElement(ActionButton, { keybind: "r", label: "Refresh", onPress: () => { } }))));
136
+ React.createElement(ActionButton, { keybind: "r", label: "Refresh", onPress: onRefresh }))));
132
137
  }
133
138
  function TicketRow({ ticket, focused, onHover, onClick, }) {
134
139
  const marker = focused ? `${glyphs.chevronRight} ` : " ";
135
- return (React.createElement(Box, null,
136
- React.createElement(Text, { color: focused ? colors.accent : colors.dim }, marker),
137
- React.createElement(Box, { width: 7 },
138
- React.createElement(Text, { color: colors.dim }, `#${ticket.display_id}`)),
139
- ticket.is_unread ? (React.createElement(Text, { color: colors.accent }, "● ")) : (React.createElement(Text, null, " ")),
140
- React.createElement(Box, { width: 44 },
141
- React.createElement(Text, { bold: focused || ticket.is_unread, color: focused ? colors.accent : colors.text, wrap: "truncate-end" }, ticket.subject)),
142
- React.createElement(Box, { width: 18 },
143
- React.createElement(Text, { color: statusColor(ticket.status) ?? colors.dim }, ticket.status.replace(/_/g, " "))),
144
- React.createElement(Box, { width: 12 },
145
- React.createElement(Text, { color: priorityColor(ticket.priority) }, ticket.priority)),
146
- React.createElement(Text, { color: colors.dim }, shortDate(ticket.last_message_at))));
140
+ return (React.createElement(Clickable, { onClick: onClick, onHover: (entering) => {
141
+ if (entering)
142
+ onHover();
143
+ } },
144
+ React.createElement(Box, null,
145
+ React.createElement(Text, { color: focused ? colors.accent : colors.dim }, marker),
146
+ React.createElement(Box, { width: 7 },
147
+ React.createElement(Text, { color: colors.dim }, `#${ticket.display_id}`)),
148
+ ticket.is_unread ? (React.createElement(Text, { color: colors.accent }, "● ")) : (React.createElement(Text, null, " ")),
149
+ React.createElement(Box, { width: 44 },
150
+ React.createElement(Text, { bold: focused || ticket.is_unread, color: focused ? colors.accent : colors.text, wrap: "truncate-end" }, ticket.subject)),
151
+ React.createElement(Box, { width: 18 },
152
+ React.createElement(Text, { color: statusColor(ticket.status) ?? colors.dim }, ticket.status.replace(/_/g, " "))),
153
+ React.createElement(Box, { width: 12 },
154
+ React.createElement(Text, { color: priorityColor(ticket.priority) }, ticket.priority)),
155
+ React.createElement(Text, { color: colors.dim }, shortDate(ticket.last_message_at)))));
147
156
  }
148
157
  function TicketDetail({ ticketId, onBack, }) {
149
158
  const api = useApi();
150
- useMousePause(true);
151
159
  const [ticket, setTicket] = useState(null);
152
160
  const [messages, setMessages] = useState(null);
153
161
  const [error, setError] = useState(null);
154
162
  const [reply, setReply] = useState("");
155
163
  const [replyFocused, setReplyFocused] = useState(false);
164
+ useMousePause(replyFocused);
156
165
  const [sending, setSending] = useState(false);
157
166
  const [notice, setNotice] = useState(null);
158
167
  const [confirmClose, setConfirmClose] = useState(false);
@@ -277,8 +286,8 @@ function TicketDetail({ ticketId, onBack, }) {
277
286
  }
278
287
  function TicketCreate({ onDone, }) {
279
288
  const api = useApi();
280
- useMousePause(true);
281
289
  const [step, setStep] = useState("department");
290
+ useMousePause(step === "subject" || step === "message");
282
291
  const [departments, setDepartments] = useState(null);
283
292
  const [department, setDepartment] = useState("");
284
293
  const [subject, setSubject] = useState("");
@@ -337,14 +346,14 @@ function TicketCreate({ onDone, }) {
337
346
  label: d.name,
338
347
  hint: d.key,
339
348
  }));
340
- return (React.createElement(Panel, { title: "New ticket \u2014 which department?", paddingX: 2, paddingY: 1 },
349
+ return (React.createElement(Panel, { title: "New ticket - which department?", paddingX: 2, paddingY: 1 },
341
350
  React.createElement(Menu, { items: items, onSelect: (v) => {
342
351
  setDepartment(v);
343
352
  setStep("subject");
344
353
  } })));
345
354
  }
346
355
  if (step === "subject") {
347
- return (React.createElement(Panel, { title: "New ticket \u2014 subject", paddingX: 2, paddingY: 1 },
356
+ return (React.createElement(Panel, { title: "New ticket - subject", paddingX: 2, paddingY: 1 },
348
357
  React.createElement(Box, null,
349
358
  React.createElement(Text, { color: colors.dim }, "Subject "),
350
359
  React.createElement(TextInput, { value: subject, onChange: setSubject, onSubmit: (v) => {
@@ -355,7 +364,7 @@ function TicketCreate({ onDone, }) {
355
364
  React.createElement(Text, { color: colors.dim }, "Enter to continue \u00B7 Esc to cancel."))));
356
365
  }
357
366
  if (step === "message") {
358
- return (React.createElement(Panel, { title: "New ticket \u2014 message", paddingX: 2, paddingY: 1 },
367
+ return (React.createElement(Panel, { title: "New ticket - message", paddingX: 2, paddingY: 1 },
359
368
  React.createElement(Box, null,
360
369
  React.createElement(Text, { color: colors.dim }, "Message "),
361
370
  React.createElement(TextInput, { value: message, onChange: setMessage, onSubmit: (v) => {
@@ -1 +1 @@
1
- {"version":3,"file":"Tickets.js","sourceRoot":"","sources":["../../../src/tui/screens/Tickets.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Tickets.js","sourceRoot":"","sources":["../../../src/tui/screens/Tickets.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { CLI_VERSION } from "./api/client.js";
2
+ import { VERSION_CHECK_EXEMPT } from "./version-check.js";
3
+ export { VERSION_CHECK_EXEMPT, CLI_VERSION };
4
+ export declare function minVersionCachePath(): string;
5
+ /** True when SYNTEQ_SKIP_VERSION_CHECK=1 — mirrors the check in
6
+ * version-check.ts's loadOrFetchMinVersion (F2a). */
7
+ export declare function isSkipEnvSet(): boolean;
8
+ /** Does this argv invocation resolve to a VERSION_CHECK_EXEMPT command?
9
+ * (F2b/F2c)
10
+ *
11
+ * Two drift bugs this fixes relative to the old inline bin logic:
12
+ * - F2b (colon form): oclif accepts both `settings render-mode` and
13
+ * `settings:render-mode`. VERSION_CHECK_EXEMPT already lists both the
14
+ * bare topic ("settings") and the colon form ("settings:render-mode"),
15
+ * so testing each token both as-is AND split on ":" (topic-only) covers
16
+ * `settings`, `settings:render-mode`, and `settings render-mode` (two
17
+ * separate tokens, "settings" alone already matches).
18
+ * - F2c (flag-value false match): the old code took "the first non-flag
19
+ * token" as THE command, so `synteq -o json login` saw "json" first and
20
+ * never reached "login". Scanning ALL non-flag tokens for ANY exempt
21
+ * match is simpler and robust — login/logout/settings are commands here,
22
+ * never legitimate flag values in this CLI's grammar, so a false
23
+ * positive would require a flag value that's literally the string
24
+ * "login"/"logout"/"settings" — an acceptable, documented trade-off
25
+ * favoring "recovery command wrongly let through" over "recovery
26
+ * command wrongly blocked".
27
+ */
28
+ export declare function isExemptFromVersionCheck(argv: readonly string[]): boolean;
29
+ /** The single entry point bin/run.js calls. Returns the upgrade message to
30
+ * print (caller writes to stderr + exit 4), or null to proceed normally.
31
+ * Never throws — every failure mode (skip-env, exempt command, missing/
32
+ * corrupt/stale cache, invalid semver) resolves to null, i.e. fail-open,
33
+ * except the one case that's supposed to block: a validly-cached,
34
+ * unexpired min_version that's genuinely newer than CLI_VERSION. */
35
+ export declare function checkOutdatedFromCacheForBin(argv: readonly string[]): string | null;
@@ -0,0 +1,123 @@
1
+ // Shared shim consumed by bin/run.js (compiled to dist/version-check-bin.js).
2
+ //
3
+ // bin/run.js needs to answer "is this invocation outdated?" from the
4
+ // cache file alone, synchronously, BEFORE oclif boots — no network call,
5
+ // no command-class introspection. That's a materially different job than
6
+ // version-check.ts's guardCliVersion() (which runs inside a live command
7
+ // with a resolved ApiClient and cmdId). This module exists so the bin-level
8
+ // answer reuses the SAME exempt set, comparator, cache-path resolver, and
9
+ // skip-env check as the module — no second copy to drift out of sync.
10
+ //
11
+ // bin/run.js can safely import from dist/ because package.json's
12
+ // oclif.commands / oclif.helpClass already point at ./dist/*, meaning
13
+ // dist/ must exist for the CLI to run at all in production. The separate
14
+ // bin/dev.js (ts-node) path never touches this file.
15
+ import { existsSync, readFileSync } from "node:fs";
16
+ import { join } from "node:path";
17
+ import * as semver from "semver";
18
+ import { CLI_VERSION } from "./api/client.js";
19
+ import { configDir } from "./config/paths.js";
20
+ import { VERSION_CHECK_EXEMPT, stripControlChars } from "./version-check.js";
21
+ export { VERSION_CHECK_EXEMPT, CLI_VERSION };
22
+ export function minVersionCachePath() {
23
+ return join(configDir(), "min-version.json");
24
+ }
25
+ /** True when SYNTEQ_SKIP_VERSION_CHECK=1 — mirrors the check in
26
+ * version-check.ts's loadOrFetchMinVersion (F2a). */
27
+ export function isSkipEnvSet() {
28
+ return process.env.SYNTEQ_SKIP_VERSION_CHECK === "1";
29
+ }
30
+ /** Does this argv invocation resolve to a VERSION_CHECK_EXEMPT command?
31
+ * (F2b/F2c)
32
+ *
33
+ * Two drift bugs this fixes relative to the old inline bin logic:
34
+ * - F2b (colon form): oclif accepts both `settings render-mode` and
35
+ * `settings:render-mode`. VERSION_CHECK_EXEMPT already lists both the
36
+ * bare topic ("settings") and the colon form ("settings:render-mode"),
37
+ * so testing each token both as-is AND split on ":" (topic-only) covers
38
+ * `settings`, `settings:render-mode`, and `settings render-mode` (two
39
+ * separate tokens, "settings" alone already matches).
40
+ * - F2c (flag-value false match): the old code took "the first non-flag
41
+ * token" as THE command, so `synteq -o json login` saw "json" first and
42
+ * never reached "login". Scanning ALL non-flag tokens for ANY exempt
43
+ * match is simpler and robust — login/logout/settings are commands here,
44
+ * never legitimate flag values in this CLI's grammar, so a false
45
+ * positive would require a flag value that's literally the string
46
+ * "login"/"logout"/"settings" — an acceptable, documented trade-off
47
+ * favoring "recovery command wrongly let through" over "recovery
48
+ * command wrongly blocked".
49
+ */
50
+ export function isExemptFromVersionCheck(argv) {
51
+ for (let i = 2; i < argv.length; i++) {
52
+ const arg = argv[i];
53
+ if (!arg || arg.startsWith("-"))
54
+ continue;
55
+ if (VERSION_CHECK_EXEMPT.has(arg))
56
+ return true;
57
+ const topic = arg.split(":")[0];
58
+ if (topic && VERSION_CHECK_EXEMPT.has(topic))
59
+ return true;
60
+ }
61
+ return false;
62
+ }
63
+ /** Read + validate the on-disk cache. Fails open (returns null) on any
64
+ * parse error, missing/wrong-typed fields, staleness, clock skew, or
65
+ * invalid semver in min_version (F5-cli) — never throws. */
66
+ function readMinVersionCacheForBin(cachePath) {
67
+ if (!existsSync(cachePath))
68
+ return null;
69
+ try {
70
+ const parsed = JSON.parse(readFileSync(cachePath, "utf8"));
71
+ if (typeof parsed?.min_version !== "string" || typeof parsed?.fetched_at !== "number")
72
+ return null;
73
+ if (!semver.valid(parsed.min_version))
74
+ return null; // corrupt/overflowed → fail open
75
+ const now = Date.now();
76
+ if (now - parsed.fetched_at > 6 * 60 * 60 * 1000)
77
+ return null; // stale (6h TTL)
78
+ if (now - parsed.fetched_at < 0)
79
+ return null; // clock went backward
80
+ return {
81
+ min: parsed.min_version,
82
+ msg: typeof parsed.deprecated_message === "string" ? parsed.deprecated_message : null,
83
+ };
84
+ }
85
+ catch {
86
+ return null;
87
+ }
88
+ }
89
+ function buildOutdatedMessage(min, deprecatedMessage) {
90
+ const lines = [
91
+ `synteq: this CLI (v${CLI_VERSION}) is older than the portal's required minimum (v${min}).`,
92
+ `Upgrade with: npm i -g @synteq/cli`,
93
+ ];
94
+ if (deprecatedMessage) {
95
+ lines.push("");
96
+ lines.push(stripControlChars(deprecatedMessage));
97
+ }
98
+ return lines.join("\n");
99
+ }
100
+ /** The single entry point bin/run.js calls. Returns the upgrade message to
101
+ * print (caller writes to stderr + exit 4), or null to proceed normally.
102
+ * Never throws — every failure mode (skip-env, exempt command, missing/
103
+ * corrupt/stale cache, invalid semver) resolves to null, i.e. fail-open,
104
+ * except the one case that's supposed to block: a validly-cached,
105
+ * unexpired min_version that's genuinely newer than CLI_VERSION. */
106
+ export function checkOutdatedFromCacheForBin(argv) {
107
+ if (isSkipEnvSet())
108
+ return null;
109
+ if (isExemptFromVersionCheck(argv))
110
+ return null;
111
+ const cache = readMinVersionCacheForBin(minVersionCachePath());
112
+ if (!cache)
113
+ return null;
114
+ try {
115
+ if (!semver.lt(CLI_VERSION, cache.min))
116
+ return null;
117
+ }
118
+ catch {
119
+ return null; // fail open on any comparator surprise (F5-cli)
120
+ }
121
+ return buildOutdatedMessage(cache.min, cache.msg);
122
+ }
123
+ //# sourceMappingURL=version-check-bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-check-bin.js","sourceRoot":"","sources":["../src/version-check-bin.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,EAAE;AACF,qEAAqE;AACrE,yEAAyE;AACzE,yEAAyE;AACzE,yEAAyE;AACzE,4EAA4E;AAC5E,0EAA0E;AAC1E,sEAAsE;AACtE,EAAE;AACF,iEAAiE;AACjE,sEAAsE;AACtE,yEAAyE;AACzE,qDAAqD;AACrD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE7E,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,CAAC;AAE7C,MAAM,UAAU,mBAAmB;IACjC,OAAO,IAAI,CAAC,SAAS,EAAE,EAAE,kBAAkB,CAAC,CAAC;AAC/C,CAAC;AAED;sDACsD;AACtD,MAAM,UAAU,YAAY;IAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,GAAG,CAAC;AACvD,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAuB;IAC9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAC1C,IAAI,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAC/C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,KAAK,IAAI,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;IAC5D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAOD;;6DAE6D;AAC7D,SAAS,yBAAyB,CAAC,SAAiB;IAClD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;QAC3D,IAAI,OAAO,MAAM,EAAE,WAAW,KAAK,QAAQ,IAAI,OAAO,MAAM,EAAE,UAAU,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACnG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC;YAAE,OAAO,IAAI,CAAC,CAAC,iCAAiC;QACrF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,GAAG,GAAG,MAAM,CAAC,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;YAAE,OAAO,IAAI,CAAC,CAAC,iBAAiB;QAChF,IAAI,GAAG,GAAG,MAAM,CAAC,UAAU,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC,CAAC,sBAAsB;QACpE,OAAO;YACL,GAAG,EAAE,MAAM,CAAC,WAAW;YACvB,GAAG,EAAE,OAAO,MAAM,CAAC,kBAAkB,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI;SACtF,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,GAAW,EAAE,iBAAgC;IACzE,MAAM,KAAK,GAAG;QACZ,sBAAsB,WAAW,mDAAmD,GAAG,IAAI;QAC3F,oCAAoC;KACrC,CAAC;IACF,IAAI,iBAAiB,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;qEAKqE;AACrE,MAAM,UAAU,4BAA4B,CAAC,IAAuB;IAClE,IAAI,YAAY,EAAE;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,wBAAwB,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAEhD,MAAM,KAAK,GAAG,yBAAyB,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC/D,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,IAAI,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,CAAC,gDAAgD;IAC/D,CAAC;IAED,OAAO,oBAAoB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,39 @@
1
+ import type { ApiClient } from "./api/client.js";
2
+ export declare const VERSION_CHECK_CACHE_TTL_MS: number;
3
+ /** Commands that MUST work even when the local CLI is outdated. Keep tight:
4
+ * login/logout so users can complete a re-auth if upgrade requires it;
5
+ * settings so users can inspect the state they're stuck in. Nothing else. */
6
+ export declare const VERSION_CHECK_EXEMPT: ReadonlySet<string>;
7
+ export interface MinVersionInfo {
8
+ minVersion: string;
9
+ deprecatedMessage: string | null;
10
+ fetchedAt: number;
11
+ }
12
+ /** Fetch the min-version record. Returns null when we couldn't get one AND
13
+ * had no stale cache to fall back on — the caller MUST treat null as
14
+ * "unknown, allow through" per the spec's fail-open error handling. */
15
+ export declare function loadOrFetchMinVersion(api: Pick<ApiClient, "auth"> | {
16
+ auth: {
17
+ minCliVersion: () => Promise<{
18
+ min_cli_version: string;
19
+ deprecated_message: string | null;
20
+ }>;
21
+ };
22
+ }, cacheFilePath?: string): Promise<MinVersionInfo | null>;
23
+ export declare function isCliOutdated(current: string, min: string): boolean;
24
+ /** Strip C0/C1 control characters (except newline) and bidi-override
25
+ * codepoints from a string. Defence-in-depth for `deprecatedMessage`,
26
+ * which originates as unauthenticated, admin-free-text server input
27
+ * (`GET /auth/device/version`) and is printed raw to the user's terminal.
28
+ * The backend sanitizes on write (see `text_sanitize.py`); this is a
29
+ * second, independent line of defence on the print path in case that
30
+ * ever regresses or a stale cache from before the backend fix lingers
31
+ * on disk. Shared by `formatUpgradeMessage` here and the bin-level shim
32
+ * (`version-check-bin.ts`) so both print paths agree. */
33
+ export declare function stripControlChars(s: string): string;
34
+ export declare function formatUpgradeMessage(current: string, min: string, deprecatedMessage: string | null, binName: string): string;
35
+ export interface GuardResult {
36
+ outdated: boolean;
37
+ message?: string;
38
+ }
39
+ export declare function guardCliVersion(api: Pick<ApiClient, "auth">, cmdId: string, binName: string, cacheFilePath?: string): Promise<GuardResult>;
@@ -0,0 +1,148 @@
1
+ import { existsSync, readFileSync, writeFileSync, renameSync, mkdirSync, chmodSync } from "node:fs";
2
+ import { randomUUID } from "node:crypto";
3
+ import { dirname, join } from "node:path";
4
+ import * as semver from "semver";
5
+ import { CLI_VERSION } from "./api/client.js";
6
+ import { configDir } from "./config/paths.js";
7
+ export const VERSION_CHECK_CACHE_TTL_MS = 6 * 60 * 60 * 1000;
8
+ /** Commands that MUST work even when the local CLI is outdated. Keep tight:
9
+ * login/logout so users can complete a re-auth if upgrade requires it;
10
+ * settings so users can inspect the state they're stuck in. Nothing else. */
11
+ export const VERSION_CHECK_EXEMPT = new Set([
12
+ "login",
13
+ "logout",
14
+ "settings",
15
+ "settings:render-mode",
16
+ "settings:index", // topic index
17
+ ]);
18
+ function defaultCacheFile() {
19
+ return join(configDir(), "min-version.json");
20
+ }
21
+ function readCache(cacheFilePath) {
22
+ if (!existsSync(cacheFilePath))
23
+ return null;
24
+ try {
25
+ const parsed = JSON.parse(readFileSync(cacheFilePath, "utf8"));
26
+ if (typeof parsed?.min_version !== "string" || typeof parsed?.fetched_at !== "number")
27
+ return null;
28
+ // F5: the backend's regex + max_length historically admitted values
29
+ // semver.lt() throws on (e.g. overflowing MAX_SAFE_INTEGER), and a
30
+ // hand-edited or older-format cache file can carry a non-semver string
31
+ // ("1.0"). Drop the entry rather than let a corrupt/overflowed cache
32
+ // crash the guard later — fail open, same as a missing cache.
33
+ if (!semver.valid(parsed.min_version))
34
+ return null;
35
+ return {
36
+ minVersion: parsed.min_version,
37
+ deprecatedMessage: typeof parsed.deprecated_message === "string" ? parsed.deprecated_message : null,
38
+ fetchedAt: parsed.fetched_at,
39
+ };
40
+ }
41
+ catch {
42
+ return null;
43
+ }
44
+ }
45
+ function writeCacheAtomic(cacheFilePath, info) {
46
+ const dir = dirname(cacheFilePath);
47
+ if (!existsSync(dir))
48
+ mkdirSync(dir, { recursive: true });
49
+ // randomUUID suffix (in addition to pid) avoids a collision if the pid is
50
+ // reused (common in containers) while a prior write's tmp file lingers.
51
+ const tmp = `${cacheFilePath}.tmp.${process.pid}.${randomUUID()}`;
52
+ writeFileSync(tmp, JSON.stringify({
53
+ min_version: info.minVersion,
54
+ deprecated_message: info.deprecatedMessage,
55
+ fetched_at: info.fetchedAt,
56
+ }), { mode: 0o600 });
57
+ // Match TokenStore's belt-and-suspenders pattern (src/auth/tokens.ts) —
58
+ // explicit chmod in case the platform/umask ignored the writeFileSync mode.
59
+ chmodSync(tmp, 0o600);
60
+ renameSync(tmp, cacheFilePath);
61
+ }
62
+ /** Fetch the min-version record. Returns null when we couldn't get one AND
63
+ * had no stale cache to fall back on — the caller MUST treat null as
64
+ * "unknown, allow through" per the spec's fail-open error handling. */
65
+ export async function loadOrFetchMinVersion(api, cacheFilePath = defaultCacheFile()) {
66
+ if (process.env.SYNTEQ_SKIP_VERSION_CHECK === "1")
67
+ return null;
68
+ const cached = readCache(cacheFilePath);
69
+ const now = Date.now();
70
+ if (cached && now - cached.fetchedAt < VERSION_CHECK_CACHE_TTL_MS && now - cached.fetchedAt >= 0) {
71
+ return cached;
72
+ }
73
+ try {
74
+ const resp = await api.auth.minCliVersion();
75
+ const info = {
76
+ minVersion: resp.min_cli_version,
77
+ deprecatedMessage: resp.deprecated_message ?? null,
78
+ fetchedAt: now,
79
+ };
80
+ writeCacheAtomic(cacheFilePath, info);
81
+ return info;
82
+ }
83
+ catch {
84
+ // Network / non-2xx / parse failure. Stale cache beats blocking the user.
85
+ return cached ?? null;
86
+ }
87
+ }
88
+ export function isCliOutdated(current, min) {
89
+ return semver.lt(current, min);
90
+ }
91
+ /** Strip C0/C1 control characters (except newline) and bidi-override
92
+ * codepoints from a string. Defence-in-depth for `deprecatedMessage`,
93
+ * which originates as unauthenticated, admin-free-text server input
94
+ * (`GET /auth/device/version`) and is printed raw to the user's terminal.
95
+ * The backend sanitizes on write (see `text_sanitize.py`); this is a
96
+ * second, independent line of defence on the print path in case that
97
+ * ever regresses or a stale cache from before the backend fix lingers
98
+ * on disk. Shared by `formatUpgradeMessage` here and the bin-level shim
99
+ * (`version-check-bin.ts`) so both print paths agree. */
100
+ export function stripControlChars(s) {
101
+ // C0 controls (\x00-\x1F) except \n (\x0A), plus DEL (\x7F), plus C1
102
+ // controls (\x80-\x9F), plus Unicode bidi override/embedding/isolate
103
+ // control codepoints (U+200E-U+200F, U+202A-U+202E, U+2066-U+2069).
104
+ // eslint-disable-next-line no-control-regex
105
+ return s.replace(/[\x00-\x09\x0B-\x1F\x7F-\x9F\u200e\u200f\u202a-\u202e\u2066-\u2069]/g, "");
106
+ }
107
+ export function formatUpgradeMessage(current, min, deprecatedMessage, binName) {
108
+ const lines = [
109
+ `${binName}: this CLI (v${current}) is older than the portal's required minimum (v${min}).`,
110
+ `Upgrade with: npm i -g @synteq/cli`,
111
+ ];
112
+ if (deprecatedMessage) {
113
+ lines.push("");
114
+ lines.push(stripControlChars(deprecatedMessage));
115
+ }
116
+ // Deliberately NOT advertising SYNTEQ_SKIP_VERSION_CHECK here: telling every
117
+ // blocked user to bypass the gate defeats it and produces broken requests
118
+ // against a portal their CLI no longer matches. The env var still works and
119
+ // is documented for tests/support in cli/CLAUDE.md — it just isn't surfaced
120
+ // in the user-facing block. Keep this in sync with buildOutdatedMessage in
121
+ // version-check-bin.ts (which likewise omits it).
122
+ return lines.join("\n");
123
+ }
124
+ export async function guardCliVersion(api, cmdId, binName, cacheFilePath) {
125
+ if (VERSION_CHECK_EXEMPT.has(cmdId))
126
+ return { outdated: false };
127
+ const info = await loadOrFetchMinVersion(api, cacheFilePath);
128
+ if (!info)
129
+ return { outdated: false }; // fail-open per spec
130
+ let outdated;
131
+ try {
132
+ outdated = isCliOutdated(CLI_VERSION, info.minVersion);
133
+ }
134
+ catch {
135
+ // F5: readCache already drops non-semver min_version values, and the
136
+ // network path's response is a live fetch (not free-form), but this
137
+ // guard is deliberately unconditional — a comparator surprise must
138
+ // never crash the command, only fail open.
139
+ return { outdated: false };
140
+ }
141
+ if (!outdated)
142
+ return { outdated: false };
143
+ return {
144
+ outdated: true,
145
+ message: formatUpgradeMessage(CLI_VERSION, info.minVersion, info.deprecatedMessage, binName),
146
+ };
147
+ }
148
+ //# sourceMappingURL=version-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-check.js","sourceRoot":"","sources":["../src/version-check.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synteq/cli",
3
- "version": "0.1.6",
3
+ "version": "0.2.0",
4
4
  "description": "Synteq Cloud command-line client",
5
5
  "bin": {
6
6
  "synteq": "bin/run.js"
@@ -19,13 +19,17 @@
19
19
  "dev": "node ./bin/dev.js",
20
20
  "test": "vitest run",
21
21
  "test:watch": "vitest",
22
+ "test:scope": "tsx --test test/scope.test.ts",
23
+ "test:help-filter": "tsx --test test/help-filter.test.ts",
24
+ "test:scope-coverage": "tsx --test test/scope-coverage.test.ts",
25
+ "test:version-check": "tsx --test test/version-check.test.ts",
22
26
  "typecheck": "tsc -p tsconfig.json --noEmit"
23
27
  },
24
28
  "oclif": {
25
29
  "bin": "synteq",
26
30
  "dirname": "synteq",
27
31
  "commands": "./dist/commands",
28
- "helpClass": "./dist/help",
32
+ "helpClass": "./dist/help/scope-aware-help.js",
29
33
  "topicSeparator": " ",
30
34
  "topics": {
31
35
  "order": {
@@ -96,6 +100,7 @@
96
100
  }
97
101
  },
98
102
  "exitCodes": {
103
+ "4": "Outdated client — CLI version is below the portal's minimum. Run the update command shown in the error.",
99
104
  "default": 1,
100
105
  "failedFlagParsing": 1,
101
106
  "failedFlagValidation": 1,
@@ -122,14 +127,17 @@
122
127
  "ink-text-input": "^6.0.0",
123
128
  "log-update": "^8.0.0",
124
129
  "open": "^10.1.0",
125
- "react": "^19.2.7"
130
+ "react": "^19.2.7",
131
+ "semver": "^7.8.5"
126
132
  },
127
133
  "optionalDependencies": {
128
134
  "keytar": "^7.9.0"
129
135
  },
130
136
  "devDependencies": {
131
137
  "@types/node": "^20.11.0",
138
+ "@types/semver": "^7.7.1",
132
139
  "ts-node": "^10.9.2",
140
+ "tsx": "^4.23.1",
133
141
  "typescript": "^5.4.0",
134
142
  "vitest": "^1.6.0"
135
143
  },