@ttctl/cli 0.0.0 → 0.1.0-rc.1

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 (391) hide show
  1. package/README.md +44 -9
  2. package/dist/commands/applications/index.d.ts +21 -0
  3. package/dist/commands/applications/index.d.ts.map +1 -0
  4. package/dist/commands/applications/index.js +87 -0
  5. package/dist/commands/applications/index.js.map +1 -0
  6. package/dist/commands/applications/list.d.ts +55 -0
  7. package/dist/commands/applications/list.d.ts.map +1 -0
  8. package/dist/commands/applications/list.js +106 -0
  9. package/dist/commands/applications/list.js.map +1 -0
  10. package/dist/commands/applications/shared.d.ts +14 -0
  11. package/dist/commands/applications/shared.d.ts.map +1 -0
  12. package/dist/commands/applications/shared.js +19 -0
  13. package/dist/commands/applications/shared.js.map +1 -0
  14. package/dist/commands/applications/show.d.ts +51 -0
  15. package/dist/commands/applications/show.d.ts.map +1 -0
  16. package/dist/commands/applications/show.js +154 -0
  17. package/dist/commands/applications/show.js.map +1 -0
  18. package/dist/commands/applications/stats.d.ts +42 -0
  19. package/dist/commands/applications/stats.d.ts.map +1 -0
  20. package/dist/commands/applications/stats.js +69 -0
  21. package/dist/commands/applications/stats.js.map +1 -0
  22. package/dist/commands/auth/index.d.ts +17 -0
  23. package/dist/commands/auth/index.d.ts.map +1 -0
  24. package/dist/commands/auth/index.js +69 -0
  25. package/dist/commands/auth/index.js.map +1 -0
  26. package/dist/commands/auth/init.d.ts +98 -0
  27. package/dist/commands/auth/init.d.ts.map +1 -0
  28. package/dist/commands/auth/init.js +387 -0
  29. package/dist/commands/auth/init.js.map +1 -0
  30. package/dist/commands/auth/signin.d.ts +81 -0
  31. package/dist/commands/auth/signin.d.ts.map +1 -0
  32. package/dist/commands/auth/signin.js +145 -0
  33. package/dist/commands/auth/signin.js.map +1 -0
  34. package/dist/commands/auth/signout.d.ts +133 -0
  35. package/dist/commands/auth/signout.d.ts.map +1 -0
  36. package/dist/commands/auth/signout.js +172 -0
  37. package/dist/commands/auth/signout.js.map +1 -0
  38. package/dist/commands/auth/status.d.ts +62 -0
  39. package/dist/commands/auth/status.d.ts.map +1 -0
  40. package/dist/commands/auth/status.js +98 -0
  41. package/dist/commands/auth/status.js.map +1 -0
  42. package/dist/commands/availability/allocated-hours.d.ts +27 -0
  43. package/dist/commands/availability/allocated-hours.d.ts.map +1 -0
  44. package/dist/commands/availability/allocated-hours.js +61 -0
  45. package/dist/commands/availability/allocated-hours.js.map +1 -0
  46. package/dist/commands/availability/index.d.ts +30 -0
  47. package/dist/commands/availability/index.d.ts.map +1 -0
  48. package/dist/commands/availability/index.js +124 -0
  49. package/dist/commands/availability/index.js.map +1 -0
  50. package/dist/commands/availability/shared.d.ts +11 -0
  51. package/dist/commands/availability/shared.d.ts.map +1 -0
  52. package/dist/commands/availability/shared.js +30 -0
  53. package/dist/commands/availability/shared.js.map +1 -0
  54. package/dist/commands/availability/show.d.ts +32 -0
  55. package/dist/commands/availability/show.d.ts.map +1 -0
  56. package/dist/commands/availability/show.js +86 -0
  57. package/dist/commands/availability/show.js.map +1 -0
  58. package/dist/commands/availability/working-hours.d.ts +53 -0
  59. package/dist/commands/availability/working-hours.d.ts.map +1 -0
  60. package/dist/commands/availability/working-hours.js +151 -0
  61. package/dist/commands/availability/working-hours.js.map +1 -0
  62. package/dist/commands/contracts/index.d.ts +69 -0
  63. package/dist/commands/contracts/index.d.ts.map +1 -0
  64. package/dist/commands/contracts/index.js +198 -0
  65. package/dist/commands/contracts/index.js.map +1 -0
  66. package/dist/commands/engagements/breaks.d.ts +81 -0
  67. package/dist/commands/engagements/breaks.d.ts.map +1 -0
  68. package/dist/commands/engagements/breaks.js +229 -0
  69. package/dist/commands/engagements/breaks.js.map +1 -0
  70. package/dist/commands/engagements/index.d.ts +29 -0
  71. package/dist/commands/engagements/index.d.ts.map +1 -0
  72. package/dist/commands/engagements/index.js +172 -0
  73. package/dist/commands/engagements/index.js.map +1 -0
  74. package/dist/commands/engagements/list.d.ts +49 -0
  75. package/dist/commands/engagements/list.d.ts.map +1 -0
  76. package/dist/commands/engagements/list.js +95 -0
  77. package/dist/commands/engagements/list.js.map +1 -0
  78. package/dist/commands/engagements/shared.d.ts +10 -0
  79. package/dist/commands/engagements/shared.d.ts.map +1 -0
  80. package/dist/commands/engagements/shared.js +31 -0
  81. package/dist/commands/engagements/shared.js.map +1 -0
  82. package/dist/commands/engagements/show.d.ts +19 -0
  83. package/dist/commands/engagements/show.d.ts.map +1 -0
  84. package/dist/commands/engagements/show.js +150 -0
  85. package/dist/commands/engagements/show.js.map +1 -0
  86. package/dist/commands/engagements/stats.d.ts +24 -0
  87. package/dist/commands/engagements/stats.d.ts.map +1 -0
  88. package/dist/commands/engagements/stats.js +51 -0
  89. package/dist/commands/engagements/stats.js.map +1 -0
  90. package/dist/commands/jobs/index.d.ts +49 -0
  91. package/dist/commands/jobs/index.d.ts.map +1 -0
  92. package/dist/commands/jobs/index.js +304 -0
  93. package/dist/commands/jobs/index.js.map +1 -0
  94. package/dist/commands/jobs/interest.d.ts +65 -0
  95. package/dist/commands/jobs/interest.d.ts.map +1 -0
  96. package/dist/commands/jobs/interest.js +172 -0
  97. package/dist/commands/jobs/interest.js.map +1 -0
  98. package/dist/commands/jobs/list.d.ts +81 -0
  99. package/dist/commands/jobs/list.d.ts.map +1 -0
  100. package/dist/commands/jobs/list.js +157 -0
  101. package/dist/commands/jobs/list.js.map +1 -0
  102. package/dist/commands/jobs/search.d.ts +71 -0
  103. package/dist/commands/jobs/search.d.ts.map +1 -0
  104. package/dist/commands/jobs/search.js +163 -0
  105. package/dist/commands/jobs/search.js.map +1 -0
  106. package/dist/commands/jobs/shared.d.ts +79 -0
  107. package/dist/commands/jobs/shared.d.ts.map +1 -0
  108. package/dist/commands/jobs/shared.js +133 -0
  109. package/dist/commands/jobs/shared.js.map +1 -0
  110. package/dist/commands/jobs/show.d.ts +20 -0
  111. package/dist/commands/jobs/show.d.ts.map +1 -0
  112. package/dist/commands/jobs/show.js +135 -0
  113. package/dist/commands/jobs/show.js.map +1 -0
  114. package/dist/commands/payments/index.d.ts +34 -0
  115. package/dist/commands/payments/index.d.ts.map +1 -0
  116. package/dist/commands/payments/index.js +160 -0
  117. package/dist/commands/payments/index.js.map +1 -0
  118. package/dist/commands/payments/methods.d.ts +17 -0
  119. package/dist/commands/payments/methods.d.ts.map +1 -0
  120. package/dist/commands/payments/methods.js +79 -0
  121. package/dist/commands/payments/methods.js.map +1 -0
  122. package/dist/commands/payments/payouts.d.ts +44 -0
  123. package/dist/commands/payments/payouts.d.ts.map +1 -0
  124. package/dist/commands/payments/payouts.js +147 -0
  125. package/dist/commands/payments/payouts.js.map +1 -0
  126. package/dist/commands/payments/rate.d.ts +48 -0
  127. package/dist/commands/payments/rate.d.ts.map +1 -0
  128. package/dist/commands/payments/rate.js +229 -0
  129. package/dist/commands/payments/rate.js.map +1 -0
  130. package/dist/commands/payments/shared.d.ts +10 -0
  131. package/dist/commands/payments/shared.d.ts.map +1 -0
  132. package/dist/commands/payments/shared.js +27 -0
  133. package/dist/commands/payments/shared.js.map +1 -0
  134. package/dist/commands/profile/basic/index.d.ts +18 -0
  135. package/dist/commands/profile/basic/index.d.ts.map +1 -0
  136. package/dist/commands/profile/basic/index.js +79 -0
  137. package/dist/commands/profile/basic/index.js.map +1 -0
  138. package/dist/commands/profile/basic/photo-show.d.ts +28 -0
  139. package/dist/commands/profile/basic/photo-show.d.ts.map +1 -0
  140. package/dist/commands/profile/basic/photo-show.js +112 -0
  141. package/dist/commands/profile/basic/photo-show.js.map +1 -0
  142. package/dist/commands/profile/basic/photo-upload.d.ts +10 -0
  143. package/dist/commands/profile/basic/photo-upload.d.ts.map +1 -0
  144. package/dist/commands/profile/basic/photo-upload.js +61 -0
  145. package/dist/commands/profile/basic/photo-upload.js.map +1 -0
  146. package/dist/commands/profile/basic/set.d.ts +54 -0
  147. package/dist/commands/profile/basic/set.d.ts.map +1 -0
  148. package/dist/commands/profile/basic/set.js +174 -0
  149. package/dist/commands/profile/basic/set.js.map +1 -0
  150. package/dist/commands/profile/basic/show.d.ts +95 -0
  151. package/dist/commands/profile/basic/show.d.ts.map +1 -0
  152. package/dist/commands/profile/basic/show.js +310 -0
  153. package/dist/commands/profile/basic/show.js.map +1 -0
  154. package/dist/commands/profile/certifications/index.d.ts +31 -0
  155. package/dist/commands/profile/certifications/index.d.ts.map +1 -0
  156. package/dist/commands/profile/certifications/index.js +298 -0
  157. package/dist/commands/profile/certifications/index.js.map +1 -0
  158. package/dist/commands/profile/education/index.d.ts +28 -0
  159. package/dist/commands/profile/education/index.d.ts.map +1 -0
  160. package/dist/commands/profile/education/index.js +287 -0
  161. package/dist/commands/profile/education/index.js.map +1 -0
  162. package/dist/commands/profile/employment/index.d.ts +40 -0
  163. package/dist/commands/profile/employment/index.d.ts.map +1 -0
  164. package/dist/commands/profile/employment/index.js +364 -0
  165. package/dist/commands/profile/employment/index.js.map +1 -0
  166. package/dist/commands/profile/external/_shared.d.ts +35 -0
  167. package/dist/commands/profile/external/_shared.d.ts.map +1 -0
  168. package/dist/commands/profile/external/_shared.js +59 -0
  169. package/dist/commands/profile/external/_shared.js.map +1 -0
  170. package/dist/commands/profile/external/advanced-wizard-show.d.ts +15 -0
  171. package/dist/commands/profile/external/advanced-wizard-show.d.ts.map +1 -0
  172. package/dist/commands/profile/external/advanced-wizard-show.js +82 -0
  173. package/dist/commands/profile/external/advanced-wizard-show.js.map +1 -0
  174. package/dist/commands/profile/external/custom-requirements-set.d.ts +32 -0
  175. package/dist/commands/profile/external/custom-requirements-set.d.ts.map +1 -0
  176. package/dist/commands/profile/external/custom-requirements-set.js +116 -0
  177. package/dist/commands/profile/external/custom-requirements-set.js.map +1 -0
  178. package/dist/commands/profile/external/custom-requirements-show.d.ts +16 -0
  179. package/dist/commands/profile/external/custom-requirements-show.d.ts.map +1 -0
  180. package/dist/commands/profile/external/custom-requirements-show.js +84 -0
  181. package/dist/commands/profile/external/custom-requirements-show.js.map +1 -0
  182. package/dist/commands/profile/external/index.d.ts +20 -0
  183. package/dist/commands/profile/external/index.d.ts.map +1 -0
  184. package/dist/commands/profile/external/index.js +102 -0
  185. package/dist/commands/profile/external/index.js.map +1 -0
  186. package/dist/commands/profile/external/readiness.d.ts +15 -0
  187. package/dist/commands/profile/external/readiness.d.ts.map +1 -0
  188. package/dist/commands/profile/external/readiness.js +104 -0
  189. package/dist/commands/profile/external/readiness.js.map +1 -0
  190. package/dist/commands/profile/external/recommendations.d.ts +17 -0
  191. package/dist/commands/profile/external/recommendations.d.ts.map +1 -0
  192. package/dist/commands/profile/external/recommendations.js +97 -0
  193. package/dist/commands/profile/external/recommendations.js.map +1 -0
  194. package/dist/commands/profile/external/update.d.ts +32 -0
  195. package/dist/commands/profile/external/update.d.ts.map +1 -0
  196. package/dist/commands/profile/external/update.js +118 -0
  197. package/dist/commands/profile/external/update.js.map +1 -0
  198. package/dist/commands/profile/index.d.ts +16 -0
  199. package/dist/commands/profile/index.d.ts.map +1 -0
  200. package/dist/commands/profile/index.js +81 -0
  201. package/dist/commands/profile/index.js.map +1 -0
  202. package/dist/commands/profile/industries/index.d.ts +36 -0
  203. package/dist/commands/profile/industries/index.d.ts.map +1 -0
  204. package/dist/commands/profile/industries/index.js +230 -0
  205. package/dist/commands/profile/industries/index.js.map +1 -0
  206. package/dist/commands/profile/portfolio/add.d.ts +43 -0
  207. package/dist/commands/profile/portfolio/add.d.ts.map +1 -0
  208. package/dist/commands/profile/portfolio/add.js +181 -0
  209. package/dist/commands/profile/portfolio/add.js.map +1 -0
  210. package/dist/commands/profile/portfolio/highlight.d.ts +11 -0
  211. package/dist/commands/profile/portfolio/highlight.d.ts.map +1 -0
  212. package/dist/commands/profile/portfolio/highlight.js +31 -0
  213. package/dist/commands/profile/portfolio/highlight.js.map +1 -0
  214. package/dist/commands/profile/portfolio/index.d.ts +16 -0
  215. package/dist/commands/profile/portfolio/index.d.ts.map +1 -0
  216. package/dist/commands/profile/portfolio/index.js +121 -0
  217. package/dist/commands/profile/portfolio/index.js.map +1 -0
  218. package/dist/commands/profile/portfolio/list.d.ts +83 -0
  219. package/dist/commands/profile/portfolio/list.d.ts.map +1 -0
  220. package/dist/commands/profile/portfolio/list.js +189 -0
  221. package/dist/commands/profile/portfolio/list.js.map +1 -0
  222. package/dist/commands/profile/portfolio/remove.d.ts +9 -0
  223. package/dist/commands/profile/portfolio/remove.d.ts.map +1 -0
  224. package/dist/commands/profile/portfolio/remove.js +24 -0
  225. package/dist/commands/profile/portfolio/remove.js.map +1 -0
  226. package/dist/commands/profile/portfolio/reorder.d.ts +17 -0
  227. package/dist/commands/profile/portfolio/reorder.d.ts.map +1 -0
  228. package/dist/commands/profile/portfolio/reorder.js +135 -0
  229. package/dist/commands/profile/portfolio/reorder.js.map +1 -0
  230. package/dist/commands/profile/portfolio/shared.d.ts +8 -0
  231. package/dist/commands/profile/portfolio/shared.d.ts.map +1 -0
  232. package/dist/commands/profile/portfolio/shared.js +10 -0
  233. package/dist/commands/profile/portfolio/shared.js.map +1 -0
  234. package/dist/commands/profile/portfolio/update.d.ts +18 -0
  235. package/dist/commands/profile/portfolio/update.d.ts.map +1 -0
  236. package/dist/commands/profile/portfolio/update.js +77 -0
  237. package/dist/commands/profile/portfolio/update.js.map +1 -0
  238. package/dist/commands/profile/portfolio/upload.d.ts +8 -0
  239. package/dist/commands/profile/portfolio/upload.d.ts.map +1 -0
  240. package/dist/commands/profile/portfolio/upload.js +131 -0
  241. package/dist/commands/profile/portfolio/upload.js.map +1 -0
  242. package/dist/commands/profile/resume/cancel-upload.d.ts +9 -0
  243. package/dist/commands/profile/resume/cancel-upload.d.ts.map +1 -0
  244. package/dist/commands/profile/resume/cancel-upload.js +30 -0
  245. package/dist/commands/profile/resume/cancel-upload.js.map +1 -0
  246. package/dist/commands/profile/resume/index.d.ts +15 -0
  247. package/dist/commands/profile/resume/index.d.ts.map +1 -0
  248. package/dist/commands/profile/resume/index.js +42 -0
  249. package/dist/commands/profile/resume/index.js.map +1 -0
  250. package/dist/commands/profile/resume/upload.d.ts +16 -0
  251. package/dist/commands/profile/resume/upload.d.ts.map +1 -0
  252. package/dist/commands/profile/resume/upload.js +65 -0
  253. package/dist/commands/profile/resume/upload.js.map +1 -0
  254. package/dist/commands/profile/reviews/_shared.d.ts +9 -0
  255. package/dist/commands/profile/reviews/_shared.d.ts.map +1 -0
  256. package/dist/commands/profile/reviews/_shared.js +15 -0
  257. package/dist/commands/profile/reviews/_shared.js.map +1 -0
  258. package/dist/commands/profile/reviews/approve-item.d.ts +30 -0
  259. package/dist/commands/profile/reviews/approve-item.d.ts.map +1 -0
  260. package/dist/commands/profile/reviews/approve-item.js +82 -0
  261. package/dist/commands/profile/reviews/approve-item.js.map +1 -0
  262. package/dist/commands/profile/reviews/approve-section.d.ts +15 -0
  263. package/dist/commands/profile/reviews/approve-section.d.ts.map +1 -0
  264. package/dist/commands/profile/reviews/approve-section.js +67 -0
  265. package/dist/commands/profile/reviews/approve-section.js.map +1 -0
  266. package/dist/commands/profile/reviews/index.d.ts +19 -0
  267. package/dist/commands/profile/reviews/index.d.ts.map +1 -0
  268. package/dist/commands/profile/reviews/index.js +71 -0
  269. package/dist/commands/profile/reviews/index.js.map +1 -0
  270. package/dist/commands/profile/reviews/list.d.ts +17 -0
  271. package/dist/commands/profile/reviews/list.d.ts.map +1 -0
  272. package/dist/commands/profile/reviews/list.js +96 -0
  273. package/dist/commands/profile/reviews/list.js.map +1 -0
  274. package/dist/commands/profile/reviews/submit-for-review.d.ts +16 -0
  275. package/dist/commands/profile/reviews/submit-for-review.d.ts.map +1 -0
  276. package/dist/commands/profile/reviews/submit-for-review.js +65 -0
  277. package/dist/commands/profile/reviews/submit-for-review.js.map +1 -0
  278. package/dist/commands/profile/shared.d.ts +46 -0
  279. package/dist/commands/profile/shared.d.ts.map +1 -0
  280. package/dist/commands/profile/shared.js +111 -0
  281. package/dist/commands/profile/shared.js.map +1 -0
  282. package/dist/commands/profile/skills/index.d.ts +29 -0
  283. package/dist/commands/profile/skills/index.d.ts.map +1 -0
  284. package/dist/commands/profile/skills/index.js +475 -0
  285. package/dist/commands/profile/skills/index.js.map +1 -0
  286. package/dist/commands/profile/visas/add.d.ts +19 -0
  287. package/dist/commands/profile/visas/add.d.ts.map +1 -0
  288. package/dist/commands/profile/visas/add.js +37 -0
  289. package/dist/commands/profile/visas/add.js.map +1 -0
  290. package/dist/commands/profile/visas/index.d.ts +13 -0
  291. package/dist/commands/profile/visas/index.d.ts.map +1 -0
  292. package/dist/commands/profile/visas/index.js +69 -0
  293. package/dist/commands/profile/visas/index.js.map +1 -0
  294. package/dist/commands/profile/visas/list.d.ts +40 -0
  295. package/dist/commands/profile/visas/list.d.ts.map +1 -0
  296. package/dist/commands/profile/visas/list.js +115 -0
  297. package/dist/commands/profile/visas/list.js.map +1 -0
  298. package/dist/commands/profile/visas/remove.d.ts +8 -0
  299. package/dist/commands/profile/visas/remove.d.ts.map +1 -0
  300. package/dist/commands/profile/visas/remove.js +23 -0
  301. package/dist/commands/profile/visas/remove.js.map +1 -0
  302. package/dist/commands/profile/visas/shared.d.ts +11 -0
  303. package/dist/commands/profile/visas/shared.d.ts.map +1 -0
  304. package/dist/commands/profile/visas/shared.js +16 -0
  305. package/dist/commands/profile/visas/shared.js.map +1 -0
  306. package/dist/commands/profile/visas/update.d.ts +13 -0
  307. package/dist/commands/profile/visas/update.d.ts.map +1 -0
  308. package/dist/commands/profile/visas/update.js +44 -0
  309. package/dist/commands/profile/visas/update.js.map +1 -0
  310. package/dist/commands/timesheet/index.d.ts +24 -0
  311. package/dist/commands/timesheet/index.d.ts.map +1 -0
  312. package/dist/commands/timesheet/index.js +98 -0
  313. package/dist/commands/timesheet/index.js.map +1 -0
  314. package/dist/commands/timesheet/list.d.ts +40 -0
  315. package/dist/commands/timesheet/list.d.ts.map +1 -0
  316. package/dist/commands/timesheet/list.js +79 -0
  317. package/dist/commands/timesheet/list.js.map +1 -0
  318. package/dist/commands/timesheet/shared.d.ts +10 -0
  319. package/dist/commands/timesheet/shared.d.ts.map +1 -0
  320. package/dist/commands/timesheet/shared.js +35 -0
  321. package/dist/commands/timesheet/shared.js.map +1 -0
  322. package/dist/commands/timesheet/show.d.ts +19 -0
  323. package/dist/commands/timesheet/show.d.ts.map +1 -0
  324. package/dist/commands/timesheet/show.js +109 -0
  325. package/dist/commands/timesheet/show.js.map +1 -0
  326. package/dist/commands/timesheet/submit.d.ts +50 -0
  327. package/dist/commands/timesheet/submit.d.ts.map +1 -0
  328. package/dist/commands/timesheet/submit.js +151 -0
  329. package/dist/commands/timesheet/submit.js.map +1 -0
  330. package/dist/crash-handlers.d.ts +67 -0
  331. package/dist/crash-handlers.d.ts.map +1 -0
  332. package/dist/crash-handlers.js +78 -0
  333. package/dist/crash-handlers.js.map +1 -0
  334. package/dist/errors.d.ts +45 -0
  335. package/dist/errors.d.ts.map +1 -0
  336. package/dist/errors.js +57 -0
  337. package/dist/errors.js.map +1 -0
  338. package/dist/index.d.ts +8 -0
  339. package/dist/index.d.ts.map +1 -0
  340. package/dist/index.js +15 -0
  341. package/dist/index.js.map +1 -0
  342. package/dist/lib/config-context.d.ts +41 -0
  343. package/dist/lib/config-context.d.ts.map +1 -0
  344. package/dist/lib/config-context.js +74 -0
  345. package/dist/lib/config-context.js.map +1 -0
  346. package/dist/lib/dry-run.d.ts +70 -0
  347. package/dist/lib/dry-run.d.ts.map +1 -0
  348. package/dist/lib/dry-run.js +114 -0
  349. package/dist/lib/dry-run.js.map +1 -0
  350. package/dist/lib/empty-state-cta.d.ts +63 -0
  351. package/dist/lib/empty-state-cta.d.ts.map +1 -0
  352. package/dist/lib/empty-state-cta.js +88 -0
  353. package/dist/lib/empty-state-cta.js.map +1 -0
  354. package/dist/lib/envelopes.d.ts +540 -0
  355. package/dist/lib/envelopes.d.ts.map +1 -0
  356. package/dist/lib/envelopes.js +598 -0
  357. package/dist/lib/envelopes.js.map +1 -0
  358. package/dist/lib/error-routing.d.ts +49 -0
  359. package/dist/lib/error-routing.d.ts.map +1 -0
  360. package/dist/lib/error-routing.js +72 -0
  361. package/dist/lib/error-routing.js.map +1 -0
  362. package/dist/lib/format-helpers.d.ts +65 -0
  363. package/dist/lib/format-helpers.d.ts.map +1 -0
  364. package/dist/lib/format-helpers.js +79 -0
  365. package/dist/lib/format-helpers.js.map +1 -0
  366. package/dist/lib/format-overrides.d.ts +81 -0
  367. package/dist/lib/format-overrides.d.ts.map +1 -0
  368. package/dist/lib/format-overrides.js +55 -0
  369. package/dist/lib/format-overrides.js.map +1 -0
  370. package/dist/lib/freetext.d.ts +83 -0
  371. package/dist/lib/freetext.d.ts.map +1 -0
  372. package/dist/lib/freetext.js +182 -0
  373. package/dist/lib/freetext.js.map +1 -0
  374. package/dist/lib/kill-switch-hook.d.ts +49 -0
  375. package/dist/lib/kill-switch-hook.d.ts.map +1 -0
  376. package/dist/lib/kill-switch-hook.js +34 -0
  377. package/dist/lib/kill-switch-hook.js.map +1 -0
  378. package/dist/lib/output.d.ts +173 -0
  379. package/dist/lib/output.d.ts.map +1 -0
  380. package/dist/lib/output.js +177 -0
  381. package/dist/lib/output.js.map +1 -0
  382. package/dist/lib/pagination.d.ts +49 -0
  383. package/dist/lib/pagination.d.ts.map +1 -0
  384. package/dist/lib/pagination.js +36 -0
  385. package/dist/lib/pagination.js.map +1 -0
  386. package/dist/program.d.ts +80 -0
  387. package/dist/program.d.ts.map +1 -0
  388. package/dist/program.js +273 -0
  389. package/dist/program.js.map +1 -0
  390. package/package.json +35 -13
  391. package/index.js +0 -7
package/README.md CHANGED
@@ -1,21 +1,56 @@
1
1
  # @ttctl/cli
2
2
 
3
- > **Placeholder reservation.** The real release is in development.
3
+ [![npm](https://img.shields.io/npm/v/%40ttctl%2Fcli?logo=npm)](https://www.npmjs.com/package/@ttctl/cli)
4
+ [![License](https://img.shields.io/npm/l/%40ttctl%2Fcli)](https://github.com/alexey-pelykh/ttctl/blob/main/LICENSE)
4
5
 
5
- This package on npm is currently a **name reservation** within the `@ttctl` scope. There is no working CLI library here yet — only a stub that exists to hold the `@ttctl/cli` name on the npm registry while the real implementation is finalized.
6
+ [Commander](https://github.com/tj/commander.js)-based CLI program for the [TTCtl](https://github.com/alexey-pelykh/ttctl) toolkit. Powers the `ttctl` binary shipped by the umbrella package.
6
7
 
7
- ## What this will become
8
+ > **Unofficial.** TTCtl is NOT affiliated with, endorsed by, or supported by Toptal LLC. See the [project README](https://github.com/alexey-pelykh/ttctl#readme) for the full use policy and disclaimer.
8
9
 
9
- `@ttctl/cli` will be the CLI command and program definition library used by the `ttctl` umbrella package — part of the unofficial personal-productivity toolkit for [Toptal Talent](https://talent.toptal.com) profiles.
10
+ ## Audience
10
11
 
11
- For development status, source code, and architecture, see:
12
+ End users should install the [`ttctl`](https://www.npmjs.com/package/ttctl) umbrella package — it ships the `ttctl` binary plus the MCP server.
12
13
 
13
- **→ https://github.com/alexey-pelykh/ttctl**
14
+ This package is published separately for **embedders** who want to mount the Commander program inside another CLI tree, or run it standalone in a controlled context (test harness, custom wrapper).
14
15
 
15
- ## ⚠️ Unofficial — Personal Use Only
16
+ ## Install
16
17
 
17
- `ttctl` and its workspace packages are **NOT** affiliated with, endorsed by, or supported by Toptal LLC. See the [GitHub repository](https://github.com/alexey-pelykh/ttctl) for the full unofficial-tool policy.
18
+ ```sh
19
+ npm install @ttctl/cli
20
+ ```
21
+
22
+ Requires **Node.js ≥ 24**, ESM only.
23
+
24
+ ## API Surface
25
+
26
+ - `buildProgram()` — returns a `commander` [`Command`](https://github.com/tj/commander.js) with every sub-command registered: `profile`, `applications`, `engagements`, `availability`, `jobs`, `timesheet`, `contracts`, `payments`, `auth`. Honors the global flags `--config`, `--output`, `--json`, `--yaml`, `--dry-run`, `--verbose`, `--debug` (run `ttctl --help` for details; see the project README's [Configuration](https://github.com/alexey-pelykh/ttctl#configuration) section for `--config` precedence).
27
+ - `presentTtctlError`, `exitCodeForTtctlError`, `formatTtctlErrorMessage` — typed-error rendering for embedders that want CLI-shaped exit codes and stderr messages.
28
+ - Re-exports `TtctlError`, `ConfigError`, `ConfigErrorCode` from `@ttctl/core` so embedders can `instanceof`-check error types without taking a direct `@ttctl/core` dependency.
29
+
30
+ ## Example
31
+
32
+ Minimal embedder:
33
+
34
+ ```ts
35
+ import { buildProgram, presentTtctlError, TtctlError } from "@ttctl/cli";
36
+
37
+ async function main(): Promise<void> {
38
+ const program = buildProgram();
39
+ try {
40
+ await program.parseAsync(process.argv);
41
+ } catch (err) {
42
+ if (err instanceof TtctlError) {
43
+ // Writes the formatted block to stderr and calls process.exit
44
+ // with the right code (1 for auth, 2 for Cf403). Never returns.
45
+ presentTtctlError(err);
46
+ }
47
+ throw err;
48
+ }
49
+ }
50
+
51
+ await main();
52
+ ```
18
53
 
19
54
  ## License
20
55
 
21
- [AGPL-3.0-only](./LICENSE)
56
+ [AGPL-3.0-only](https://github.com/alexey-pelykh/ttctl/blob/main/LICENSE). Importing `@ttctl/cli` into your own code means the combined work is covered by AGPL-3.0; using the unmodified `ttctl` binary as a tool does not. See the project README's [License](https://github.com/alexey-pelykh/ttctl#license) section.
@@ -0,0 +1,21 @@
1
+ import { Command } from "commander";
2
+ /**
3
+ * Build the `ttctl applications` command tree. Read-only access to the
4
+ * user's Toptal Talent **Activity** view (which Toptal colloquially
5
+ * calls "applications"). Three leaves:
6
+ *
7
+ * | Leaf | Description |
8
+ * |-----------|------------------------------------------------------------|
9
+ * | `list` | List recent activity rows (filterable by status group) |
10
+ * | `show <id>` | Detail view for one row |
11
+ * | `stats` | Per-status-group counts (5 server calls in parallel) |
12
+ *
13
+ * Per project non-goals (#15): no apply / withdraw / edit operations
14
+ * are exposed. The CLI is read-only by design.
15
+ *
16
+ * **Out of scope for v1** (see `.tmp/workitem-15.md` § Open Questions):
17
+ * `--from` / `--to` date filters and `--page` / `--per-page` pagination
18
+ * — captured operation accepts neither. Pagination will land via #138.
19
+ */
20
+ export declare function buildApplicationsCommand(): Command;
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/applications/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAgC,MAAM,WAAW,CAAC;AAUlE;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,wBAAwB,IAAI,OAAO,CA0DlD"}
@@ -0,0 +1,87 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (C) 2026 Oleksii PELYKH
3
+ import { Command, InvalidArgumentError, Option } from "commander";
4
+ import { applications } from "@ttctl/core";
5
+ import { OUTPUT_FORMATS } from "../../lib/output.js";
6
+ import { runApplicationsList } from "./list.js";
7
+ import { runApplicationsShow } from "./show.js";
8
+ import { runApplicationsStats } from "./stats.js";
9
+ /**
10
+ * Build the `ttctl applications` command tree. Read-only access to the
11
+ * user's Toptal Talent **Activity** view (which Toptal colloquially
12
+ * calls "applications"). Three leaves:
13
+ *
14
+ * | Leaf | Description |
15
+ * |-----------|------------------------------------------------------------|
16
+ * | `list` | List recent activity rows (filterable by status group) |
17
+ * | `show <id>` | Detail view for one row |
18
+ * | `stats` | Per-status-group counts (5 server calls in parallel) |
19
+ *
20
+ * Per project non-goals (#15): no apply / withdraw / edit operations
21
+ * are exposed. The CLI is read-only by design.
22
+ *
23
+ * **Out of scope for v1** (see `.tmp/workitem-15.md` § Open Questions):
24
+ * `--from` / `--to` date filters and `--page` / `--per-page` pagination
25
+ * — captured operation accepts neither. Pagination will land via #138.
26
+ */
27
+ export function buildApplicationsCommand() {
28
+ const cmd = new Command("applications").description("View your Toptal Talent activity (applications, availability requests, interviews, engagements)");
29
+ cmd
30
+ .command("list")
31
+ .description("List recent activity rows")
32
+ .option("--keywords <keyword...>", "free-text keyword filter (repeatable; AND across keywords)")
33
+ .addOption(new Option("--status-group <group...>", "filter by status group (repeatable; OR across groups)").choices([
34
+ ...applications.STATUS_GROUPS,
35
+ ]))
36
+ .addOption(new Option("-o, --output <format>", "output format")
37
+ .choices(OUTPUT_FORMATS)
38
+ .default("pretty"))
39
+ .action(async (options) => {
40
+ // `exactOptionalPropertyTypes: true` — build additively to keep
41
+ // omitted-vs-undefined semantics straight at the API boundary.
42
+ const listOpts = {
43
+ output: options.output,
44
+ };
45
+ if (options.keywords !== undefined)
46
+ listOpts.keywords = options.keywords;
47
+ if (options.statusGroup !== undefined)
48
+ listOpts.statusGroups = options.statusGroup;
49
+ await runApplicationsList(listOpts);
50
+ });
51
+ cmd
52
+ .command("show")
53
+ .description("Show one activity row by id")
54
+ .argument("<id>", "id of the activity row to show", parseIdArg)
55
+ .addOption(new Option("-o, --output <format>", "output format")
56
+ .choices(OUTPUT_FORMATS)
57
+ .default("pretty"))
58
+ .action(async (id, options) => {
59
+ await runApplicationsShow(id, options.output);
60
+ });
61
+ cmd
62
+ .command("stats")
63
+ .description("Per-status-group activity counts (issues 5 server calls in parallel)")
64
+ .addOption(new Option("-o, --output <format>", "output format")
65
+ .choices(OUTPUT_FORMATS)
66
+ .default("pretty"))
67
+ .action(async (options) => {
68
+ await runApplicationsStats(options.output);
69
+ });
70
+ return cmd;
71
+ }
72
+ /**
73
+ * Reject empty or whitespace-only id arguments at parse time so the
74
+ * service layer doesn't have to handle them defensively. Commander
75
+ * surfaces `InvalidArgumentError` as a clean `error: invalid argument
76
+ * <id>: <message>` line and a non-zero exit, NOT the structured
77
+ * envelope — argument-validation errors are pre-action and don't carry
78
+ * an operation context.
79
+ */
80
+ function parseIdArg(value) {
81
+ const trimmed = value.trim();
82
+ if (trimmed.length === 0) {
83
+ throw new InvalidArgumentError("id must not be empty");
84
+ }
85
+ return trimmed;
86
+ }
87
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/applications/index.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oCAAoC;AAEpC,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAElE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,wBAAwB;IACtC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC,WAAW,CACjD,iGAAiG,CAClG,CAAC;IAEF,GAAG;SACA,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,yBAAyB,EAAE,4DAA4D,CAAC;SAC/F,SAAS,CACR,IAAI,MAAM,CAAC,2BAA2B,EAAE,uDAAuD,CAAC,CAAC,OAAO,CAAC;QACvG,GAAG,YAAY,CAAC,aAAa;KAC9B,CAAC,CACH;SACA,SAAS,CACR,IAAI,MAAM,CAAC,uBAAuB,EAAE,eAAe,CAAC;SACjD,OAAO,CAAC,cAAc,CAAC;SACvB,OAAO,CAAC,QAA+B,CAAC,CAC5C;SACA,MAAM,CACL,KAAK,EAAE,OAAgG,EAAE,EAAE;QACzG,gEAAgE;QAChE,+DAA+D;QAC/D,MAAM,QAAQ,GAAgD;YAC5D,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC;QACF,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS;YAAE,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACzE,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS;YAAE,QAAQ,CAAC,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;QACnF,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC,CACF,CAAC;IAEJ,GAAG;SACA,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,6BAA6B,CAAC;SAC1C,QAAQ,CAAC,MAAM,EAAE,gCAAgC,EAAE,UAAU,CAAC;SAC9D,SAAS,CACR,IAAI,MAAM,CAAC,uBAAuB,EAAE,eAAe,CAAC;SACjD,OAAO,CAAC,cAAc,CAAC;SACvB,OAAO,CAAC,QAA+B,CAAC,CAC5C;SACA,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,OAAiC,EAAE,EAAE;QAC9D,MAAM,mBAAmB,CAAC,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEL,GAAG;SACA,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,sEAAsE,CAAC;SACnF,SAAS,CACR,IAAI,MAAM,CAAC,uBAAuB,EAAE,eAAe,CAAC;SACjD,OAAO,CAAC,cAAc,CAAC;SACvB,OAAO,CAAC,QAA+B,CAAC,CAC5C;SACA,MAAM,CAAC,KAAK,EAAE,OAAiC,EAAE,EAAE;QAClD,MAAM,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEL,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,UAAU,CAAC,KAAa;IAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,oBAAoB,CAAC,sBAAsB,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,55 @@
1
+ import { applications } from "@ttctl/core";
2
+ import type { OutputFormat } from "../../lib/output.js";
3
+ /**
4
+ * Action handler for `ttctl applications list`. Reads the user's
5
+ * activity items (applications, availability requests, interviews,
6
+ * engagements) and emits via the cross-CLI output helper, wrapped in
7
+ * the v0.4 list envelope (`{version, items, pageInfo?}` from #128) for
8
+ * `json` / `yaml`.
9
+ *
10
+ * Filters: `--keywords` (free-text, repeatable) and `--status-group`
11
+ * (one of the five `JobActivityItemStatusGroupEnum` values, repeatable
12
+ * — server-side AND across instances).
13
+ *
14
+ * **Pagination & date filters not exposed** — the captured
15
+ * `JobActivityItems` operation accepts neither. Per #183, pagination
16
+ * flags are declared PER paginating leaf (jobs only); this leaf
17
+ * does not declare `--page` / `--per-page`, so Commander emits its
18
+ * standard `error: unknown option '--page'` (exit 1) when a user
19
+ * passes either flag. Date filters remain out of scope per #15
20
+ * § Open Questions (RESOLVED) in `.tmp/workitem-15.md`.
21
+ */
22
+ export interface ApplicationsListOptions {
23
+ keywords?: string[];
24
+ statusGroups?: applications.StatusGroup[];
25
+ output: OutputFormat;
26
+ }
27
+ export declare function runApplicationsList(opts: ApplicationsListOptions): Promise<void>;
28
+ /**
29
+ * Render the activity list as a `cli-table3` table sized to the
30
+ * current terminal width. Columns: id, status (verbose), group, job
31
+ * title, last updated.
32
+ *
33
+ * Used by both `pretty` and `table` slots — the table layout is the
34
+ * primary human view; per the format-overrides registry pattern, lists
35
+ * with one-line-per-row data prefer `table`. Multi-line per-item
36
+ * formatting (`pretty` block) is reserved for sub-domains where one or
37
+ * more fields are paragraph-length (`description`, `accomplishment`).
38
+ * Activity rows have no such field at the list level — `descriptionMd`
39
+ * is on the detail view only.
40
+ */
41
+ export declare function formatApplicationsTable(items: applications.JobActivityItem[], terminalWidth?: number): string;
42
+ /**
43
+ * Shorten the `JobActivityItemStatusGroupEnum` value for column display.
44
+ * `ACTIVE_ENGAGEMENT` → `Active`, `ON_RECRUITER_REVIEW` → `Recruiter`,
45
+ * etc. The full value is preserved in `--json` / `--yaml` output via
46
+ * the unmodified `statusGroupV2.value`.
47
+ */
48
+ export declare function shortenStatusGroup(value: string): string;
49
+ /**
50
+ * Render an ISO 8601 timestamp as just the date portion (YYYY-MM-DD)
51
+ * for table compactness. Returns the input as-is when it doesn't parse
52
+ * — defensive against future server-format drift.
53
+ */
54
+ export declare function formatDate(iso: string): string;
55
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/applications/list.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,YAAY,CAAC,WAAW,EAAE,CAAC;IAC1C,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBtF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,YAAY,CAAC,eAAe,EAAE,EACrC,aAAa,GAAE,MAAsC,GACpD,MAAM,CA8BR;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAexD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG9C"}
@@ -0,0 +1,106 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (C) 2026 Oleksii PELYKH
3
+ import Table from "cli-table3";
4
+ import { applications } from "@ttctl/core";
5
+ import { wrapListEnvelope } from "../../lib/envelopes.js";
6
+ import { emitResult } from "../../lib/output.js";
7
+ import { handleApplicationsError, loadAuthTokenOrExit } from "./shared.js";
8
+ export async function runApplicationsList(opts) {
9
+ const token = await loadAuthTokenOrExit("applications list", opts.output);
10
+ // `exactOptionalPropertyTypes: true` requires us to OMIT optional
11
+ // fields rather than pass them as `undefined`; build the input
12
+ // additively per the project pattern (see `runProfileVisasAdd`).
13
+ const listOpts = {};
14
+ if (opts.keywords !== undefined)
15
+ listOpts.keywords = opts.keywords;
16
+ if (opts.statusGroups !== undefined)
17
+ listOpts.statusGroups = opts.statusGroups;
18
+ let items;
19
+ try {
20
+ items = await applications.list(token, listOpts);
21
+ }
22
+ catch (err) {
23
+ handleApplicationsError("applications list", err, opts.output);
24
+ }
25
+ emitResult(wrapListEnvelope(items), opts.output, {
26
+ pretty: (data) => formatApplicationsTable(data.items),
27
+ table: (data) => formatApplicationsTable(data.items),
28
+ empty: { command: "applications.list" },
29
+ });
30
+ }
31
+ /**
32
+ * Render the activity list as a `cli-table3` table sized to the
33
+ * current terminal width. Columns: id, status (verbose), group, job
34
+ * title, last updated.
35
+ *
36
+ * Used by both `pretty` and `table` slots — the table layout is the
37
+ * primary human view; per the format-overrides registry pattern, lists
38
+ * with one-line-per-row data prefer `table`. Multi-line per-item
39
+ * formatting (`pretty` block) is reserved for sub-domains where one or
40
+ * more fields are paragraph-length (`description`, `accomplishment`).
41
+ * Activity rows have no such field at the list level — `descriptionMd`
42
+ * is on the detail view only.
43
+ */
44
+ export function formatApplicationsTable(items, terminalWidth = process.stdout.columns || 100) {
45
+ if (items.length === 0) {
46
+ const empty = new Table({ head: ["id", "status", "group", "job", "updated"] });
47
+ return empty.toString();
48
+ }
49
+ // Fixed widths: id (≤20 chars usually), updated (10 chars for YYYY-MM-DD).
50
+ // Status / group are short-enum values verbose-rendered (~20 chars).
51
+ // Remaining width goes to job title.
52
+ const idWidth = 22;
53
+ const statusWidth = 18;
54
+ const groupWidth = 16;
55
+ const updatedWidth = 12;
56
+ // 5 columns × 2 padding-char each + 6 borders ≈ 16
57
+ const remaining = Math.max(20, terminalWidth - idWidth - statusWidth - groupWidth - updatedWidth - 16);
58
+ const titleWidth = Math.max(20, remaining);
59
+ const table = new Table({
60
+ head: ["id", "status", "group", "job", "updated"],
61
+ colWidths: [idWidth, statusWidth, groupWidth, titleWidth, updatedWidth],
62
+ wordWrap: true,
63
+ });
64
+ for (const it of items) {
65
+ table.push([
66
+ it.id,
67
+ it.statusV2.verbose,
68
+ shortenStatusGroup(it.statusGroupV2.value),
69
+ it.job.title ?? "(untitled)",
70
+ formatDate(it.lastUpdatedAt),
71
+ ]);
72
+ }
73
+ return table.toString();
74
+ }
75
+ /**
76
+ * Shorten the `JobActivityItemStatusGroupEnum` value for column display.
77
+ * `ACTIVE_ENGAGEMENT` → `Active`, `ON_RECRUITER_REVIEW` → `Recruiter`,
78
+ * etc. The full value is preserved in `--json` / `--yaml` output via
79
+ * the unmodified `statusGroupV2.value`.
80
+ */
81
+ export function shortenStatusGroup(value) {
82
+ switch (value) {
83
+ case "ACTIVE_ENGAGEMENT":
84
+ return "Active";
85
+ case "ARCHIVED":
86
+ return "Archived";
87
+ case "CLOSED_ENGAGEMENT":
88
+ return "Closed";
89
+ case "ON_CLIENT_REVIEW":
90
+ return "Client";
91
+ case "ON_RECRUITER_REVIEW":
92
+ return "Recruiter";
93
+ default:
94
+ return value;
95
+ }
96
+ }
97
+ /**
98
+ * Render an ISO 8601 timestamp as just the date portion (YYYY-MM-DD)
99
+ * for table compactness. Returns the input as-is when it doesn't parse
100
+ * — defensive against future server-format drift.
101
+ */
102
+ export function formatDate(iso) {
103
+ const m = /^(\d{4}-\d{2}-\d{2})/.exec(iso);
104
+ return m?.[1] ?? iso;
105
+ }
106
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/applications/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { OutputFormat } from "../../lib/output.js";
2
+ export { loadAuthTokenOrExit } from "../profile/shared.js";
3
+ /**
4
+ * Thin wrapper around the shared CLI error router (#330) closed over
5
+ * `applications.ApplicationsError`. The router applies the envelope ABI
6
+ * (#128) branching uniformly across sub-domains.
7
+ *
8
+ * `commandLabel` is the user-visible prefix (e.g. `"applications show"`);
9
+ * the envelope `operation` is derived by replacing spaces with dots
10
+ * (`"applications.show"`). No per-code hint adapter — `ApplicationsError`
11
+ * codes do not carry actionable next-step hints today.
12
+ */
13
+ export declare function handleApplicationsError(commandLabel: string, err: unknown, format?: OutputFormat): never;
14
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/commands/applications/shared.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,YAAuB,GAAG,KAAK,CAElH"}
@@ -0,0 +1,19 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (C) 2026 Oleksii PELYKH
3
+ import { applications } from "@ttctl/core";
4
+ import { handleDomainError } from "../../lib/error-routing.js";
5
+ export { loadAuthTokenOrExit } from "../profile/shared.js";
6
+ /**
7
+ * Thin wrapper around the shared CLI error router (#330) closed over
8
+ * `applications.ApplicationsError`. The router applies the envelope ABI
9
+ * (#128) branching uniformly across sub-domains.
10
+ *
11
+ * `commandLabel` is the user-visible prefix (e.g. `"applications show"`);
12
+ * the envelope `operation` is derived by replacing spaces with dots
13
+ * (`"applications.show"`). No per-code hint adapter — `ApplicationsError`
14
+ * codes do not carry actionable next-step hints today.
15
+ */
16
+ export function handleApplicationsError(commandLabel, err, format = "pretty") {
17
+ handleDomainError(commandLabel, err, applications.ApplicationsError, format);
18
+ }
19
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/commands/applications/shared.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oCAAoC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAG/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;;;;;;;;GASG;AACH,MAAM,UAAU,uBAAuB,CAAC,YAAoB,EAAE,GAAY,EAAE,SAAuB,QAAQ;IACzG,iBAAiB,CAAC,YAAY,EAAE,GAAG,EAAE,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;AAC/E,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { applications } from "@ttctl/core";
2
+ import type { OutputFormat } from "../../lib/output.js";
3
+ /**
4
+ * Action handler for `ttctl applications show <id>`. Reads a single
5
+ * activity item by id and emits via the cross-CLI output helper.
6
+ *
7
+ * Pretty rendering is a multi-line key:value layout grouped into
8
+ * sections (Status, Job, Application, Engagement). Sections with no
9
+ * data (e.g. no `engagement` for a row that hasn't reached engagement
10
+ * yet) are omitted — pretty's job is to be readable, not exhaustive.
11
+ *
12
+ * `json` / `yaml` always emit the full server payload — machine
13
+ * consumers may project as needed.
14
+ */
15
+ export declare function runApplicationsShow(id: string, output: OutputFormat): Promise<void>;
16
+ /**
17
+ * Render the activity-item detail as a sectioned multi-line block.
18
+ * Pure — directly unit-testable.
19
+ *
20
+ * Layout:
21
+ *
22
+ * Activity <id>
23
+ * Status: <verbose> (<value>)
24
+ * Group: <verbose> (<value>)
25
+ * Updated: <ISO>
26
+ *
27
+ * Job
28
+ * <title>
29
+ * <url>
30
+ * Client: <fullName>
31
+ * Commitment: <slug>
32
+ * Work type: <slug>
33
+ * Specialization: <title>
34
+ * Hours: <expectedHours>
35
+ * Length: <enumValue>
36
+ * Description:
37
+ * <descriptionMd, with paragraph breaks preserved>
38
+ *
39
+ * Application // omitted if jobApplication is null
40
+ * Id: <id>
41
+ * Requested rate: <decimal>
42
+ *
43
+ * Engagement // omitted if engagement is null
44
+ * Id: <id>
45
+ * Started: <startDate>
46
+ * Ended: <endDate> // omitted if null
47
+ * Commitment: <slug>
48
+ * Hours: <expectedHours>
49
+ */
50
+ export declare function formatApplicationDetail(item: applications.JobActivityItemDetail): string;
51
+ //# sourceMappingURL=show.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show.d.ts","sourceRoot":"","sources":["../../../src/commands/applications/show.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAazF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,YAAY,CAAC,qBAAqB,GAAG,MAAM,CA2FxF"}
@@ -0,0 +1,154 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (C) 2026 Oleksii PELYKH
3
+ import { applications } from "@ttctl/core";
4
+ import { emitResult } from "../../lib/output.js";
5
+ import { handleApplicationsError, loadAuthTokenOrExit } from "./shared.js";
6
+ /**
7
+ * Action handler for `ttctl applications show <id>`. Reads a single
8
+ * activity item by id and emits via the cross-CLI output helper.
9
+ *
10
+ * Pretty rendering is a multi-line key:value layout grouped into
11
+ * sections (Status, Job, Application, Engagement). Sections with no
12
+ * data (e.g. no `engagement` for a row that hasn't reached engagement
13
+ * yet) are omitted — pretty's job is to be readable, not exhaustive.
14
+ *
15
+ * `json` / `yaml` always emit the full server payload — machine
16
+ * consumers may project as needed.
17
+ */
18
+ export async function runApplicationsShow(id, output) {
19
+ const token = await loadAuthTokenOrExit("applications show", output);
20
+ let item;
21
+ try {
22
+ item = await applications.show(token, id);
23
+ }
24
+ catch (err) {
25
+ handleApplicationsError("applications show", err, output);
26
+ }
27
+ emitResult(item, output, {
28
+ pretty: (data) => formatApplicationDetail(data),
29
+ });
30
+ }
31
+ /**
32
+ * Render the activity-item detail as a sectioned multi-line block.
33
+ * Pure — directly unit-testable.
34
+ *
35
+ * Layout:
36
+ *
37
+ * Activity <id>
38
+ * Status: <verbose> (<value>)
39
+ * Group: <verbose> (<value>)
40
+ * Updated: <ISO>
41
+ *
42
+ * Job
43
+ * <title>
44
+ * <url>
45
+ * Client: <fullName>
46
+ * Commitment: <slug>
47
+ * Work type: <slug>
48
+ * Specialization: <title>
49
+ * Hours: <expectedHours>
50
+ * Length: <enumValue>
51
+ * Description:
52
+ * <descriptionMd, with paragraph breaks preserved>
53
+ *
54
+ * Application // omitted if jobApplication is null
55
+ * Id: <id>
56
+ * Requested rate: <decimal>
57
+ *
58
+ * Engagement // omitted if engagement is null
59
+ * Id: <id>
60
+ * Started: <startDate>
61
+ * Ended: <endDate> // omitted if null
62
+ * Commitment: <slug>
63
+ * Hours: <expectedHours>
64
+ */
65
+ export function formatApplicationDetail(item) {
66
+ const lines = [];
67
+ lines.push(`Activity ${item.id}`);
68
+ lines.push(` Status: ${item.statusV2.verbose} (${item.statusV2.value})`);
69
+ lines.push(` Group: ${item.statusGroupV2.verbose} (${item.statusGroupV2.value})`);
70
+ lines.push(` Updated: ${item.lastUpdatedAt}`);
71
+ lines.push("");
72
+ lines.push("Job");
73
+ if (item.job.title !== null)
74
+ lines.push(` ${item.job.title}`);
75
+ if (item.job.url !== null)
76
+ lines.push(` ${item.job.url}`);
77
+ if (item.job.client?.fullName != null) {
78
+ lines.push(` Client: ${item.job.client.fullName}`);
79
+ }
80
+ if (item.job.commitment?.slug != null) {
81
+ lines.push(` Commitment: ${item.job.commitment.slug}`);
82
+ }
83
+ if (item.job.workType?.slug != null) {
84
+ lines.push(` Work type: ${item.job.workType.slug}`);
85
+ }
86
+ if (item.job.specialization?.title != null) {
87
+ lines.push(` Specialization: ${item.job.specialization.title}`);
88
+ }
89
+ if (item.job.expectedHours !== null) {
90
+ lines.push(` Hours: ${item.job.expectedHours.toString()}`);
91
+ }
92
+ if (item.job.estimatedLength?.enumValue != null) {
93
+ lines.push(` Length: ${item.job.estimatedLength.enumValue}`);
94
+ }
95
+ if (item.job.startDate !== null) {
96
+ lines.push(` Starts: ${item.job.startDate}`);
97
+ }
98
+ if (item.job.postedWhen !== null) {
99
+ lines.push(` Posted: ${item.job.postedWhen}`);
100
+ }
101
+ // Surface the boolean job flags as compact one-liners — only when
102
+ // true, since `false` is the implicit default and rendering it would
103
+ // clutter the typical output.
104
+ if (item.job.isCoaching === true) {
105
+ lines.push(` Type: coaching`);
106
+ }
107
+ if (item.job.isToptalProject === true) {
108
+ lines.push(` Type: toptal-project`);
109
+ }
110
+ if (item.job.descriptionMd !== null && item.job.descriptionMd !== "") {
111
+ lines.push(` Description:`);
112
+ for (const para of item.job.descriptionMd.split(/\n+/)) {
113
+ if (para.trim().length > 0)
114
+ lines.push(` ${para}`);
115
+ }
116
+ }
117
+ if (item.jobApplication !== null) {
118
+ lines.push("");
119
+ lines.push("Application");
120
+ lines.push(` Id: ${item.jobApplication.id}`);
121
+ if (item.jobApplication.requestedHourlyRate?.decimal != null) {
122
+ lines.push(` Requested rate: ${item.jobApplication.requestedHourlyRate.decimal}`);
123
+ }
124
+ }
125
+ if (item.engagement !== null) {
126
+ lines.push("");
127
+ lines.push("Engagement");
128
+ lines.push(` Id: ${item.engagement.id}`);
129
+ if (item.engagement.startDate !== null) {
130
+ lines.push(` Started: ${item.engagement.startDate}`);
131
+ }
132
+ if (item.engagement.endDate !== null) {
133
+ lines.push(` Ended: ${item.engagement.endDate}`);
134
+ }
135
+ if (item.engagement.commitment?.slug != null) {
136
+ lines.push(` Commitment: ${item.engagement.commitment.slug}`);
137
+ }
138
+ if (item.engagement.expectedHours !== null) {
139
+ lines.push(` Hours: ${item.engagement.expectedHours.toString()}`);
140
+ }
141
+ }
142
+ // Surface availability-request / interview presence as one-liners.
143
+ // The schema marks `interview` as `Unknown` so we can't safely select
144
+ // more than `id` — and even `id` is a presence indicator.
145
+ if (item.availabilityRequest !== null) {
146
+ lines.push("");
147
+ lines.push(`Availability request: ${item.availabilityRequest.id}`);
148
+ }
149
+ if (item.interview !== null) {
150
+ lines.push(`Interview: ${item.interview.id}`);
151
+ }
152
+ return lines.join("\n");
153
+ }
154
+ //# sourceMappingURL=show.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show.js","sourceRoot":"","sources":["../../../src/commands/applications/show.ts"],"names":[],"mappings":"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"}