@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/profile/industries/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { profile } from "@ttctl/core";
2
+ import type { OutputFormat } from "../../../lib/output.js";
3
+ /**
4
+ * Action handler for `ttctl profile portfolio add`. Creates a new
5
+ * portfolio item; if `--cover` is supplied, the cover image is uploaded
6
+ * first and its server-issued `coverImageCacheName` is forwarded into
7
+ * the create call so the new item carries the cover from creation.
8
+ */
9
+ export declare function runProfilePortfolioAdd(options: {
10
+ title: string;
11
+ description?: string;
12
+ edit?: boolean;
13
+ url?: string;
14
+ link?: string;
15
+ cover?: string;
16
+ industryId?: string[];
17
+ output: OutputFormat;
18
+ }): Promise<void>;
19
+ /**
20
+ * Route service errors through the envelope ABI (#128). `TtctlError`
21
+ * subclasses keep their dedicated 3-block pretty rendering on `pretty`;
22
+ * `json`/`yaml` flow through the envelope so machine consumers see the
23
+ * stable wire shape. Domain `PortfolioError` codes always flow through
24
+ * the envelope.
25
+ */
26
+ declare function handlePortfolioError(commandLabel: string, err: unknown, format?: OutputFormat): never;
27
+ /**
28
+ * Emit the post-mutation portfolio list, wrapped in the v0.4 envelope
29
+ * ABI (#128). The portfolio core API returns the FULL post-mutation
30
+ * list rather than the single mutated entity, so the envelope's
31
+ * `created` / `updated` field carries the list (`PortfolioItem[]`)
32
+ * rather than a single `PortfolioItem`. The pretty rendering keeps the
33
+ * existing "success header + table" UX so users continue to see the
34
+ * post-state at a glance.
35
+ */
36
+ export declare function emitMutationResult(items: profile.portfolio.PortfolioItem[], format: OutputFormat, verb: "add" | "update" | "remove", options: {
37
+ id?: string;
38
+ prettyHeader: string;
39
+ }): void;
40
+ /** Backward-compatible alias; new call sites use `emitMutationResult`. */
41
+ export declare function emitListResult(items: profile.portfolio.PortfolioItem[], format: OutputFormat, successMessage: string): void;
42
+ export { handlePortfolioError };
43
+ //# sourceMappingURL=add.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../../src/commands/profile/portfolio/add.ts"],"names":[],"mappings":"AAGA,OAAO,EAAc,OAAO,EAAE,MAAM,aAAa,CAAC;AAMlD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAG3D;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,EAAE;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,YAAY,CAAC;CACtB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgFhB;AAED;;;;;;GAMG;AACH,iBAAS,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,YAAuB,GAAG,KAAK,CA0BxG;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,aAAa,EAAE,EACxC,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,EACjC,OAAO,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAC7C,IAAI,CAoCN;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAC5B,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,aAAa,EAAE,EACxC,MAAM,EAAE,YAAY,EACpB,cAAc,EAAE,MAAM,GACrB,IAAI,CAEN;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
@@ -0,0 +1,181 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (C) 2026 Oleksii PELYKH
3
+ import { TtctlError, profile } from "@ttctl/core";
4
+ import { presentTtctlError } from "../../../errors.js";
5
+ import { emitAddSuccess, emitErrorAndExit, emitRemoveSuccess, emitUpdateSuccess } from "../../../lib/envelopes.js";
6
+ import { FreeTextError, resolveFreeText } from "../../../lib/freetext.js";
7
+ import { loadAuthTokenOrExit } from "./shared.js";
8
+ /**
9
+ * Action handler for `ttctl profile portfolio add`. Creates a new
10
+ * portfolio item; if `--cover` is supplied, the cover image is uploaded
11
+ * first and its server-issued `coverImageCacheName` is forwarded into
12
+ * the create call so the new item carries the cover from creation.
13
+ */
14
+ export async function runProfilePortfolioAdd(options) {
15
+ let description;
16
+ try {
17
+ description = await resolveFreeText(options.description, {
18
+ flagName: "description",
19
+ enableEditor: options.edit ?? false,
20
+ });
21
+ }
22
+ catch (err) {
23
+ if (err instanceof FreeTextError) {
24
+ emitErrorAndExit({
25
+ operation: "profile.portfolio.add",
26
+ format: options.output,
27
+ errors: [{ code: err.code, message: err.message }],
28
+ prettySummary: `portfolio add failed (${err.code}): ${err.message}`,
29
+ });
30
+ }
31
+ throw err;
32
+ }
33
+ if (options.url !== undefined && options.link !== undefined && options.url !== options.link) {
34
+ emitErrorAndExit({
35
+ operation: "profile.portfolio.add",
36
+ format: options.output,
37
+ errors: [{ code: "VALIDATION_ERROR", message: "--url and --link cannot disagree." }],
38
+ prettySummary: "portfolio add failed (VALIDATION_ERROR): --url and --link cannot disagree.",
39
+ });
40
+ }
41
+ if (options.industryId === undefined || options.industryId.length === 0) {
42
+ emitErrorAndExit({
43
+ operation: "profile.portfolio.add",
44
+ format: options.output,
45
+ errors: [
46
+ {
47
+ code: "VALIDATION_ERROR",
48
+ message: "--industry-id is required (at least one). " +
49
+ 'Discover catalog IDs via `ttctl profile industries autocomplete "<query>"`.',
50
+ },
51
+ ],
52
+ prettySummary: "portfolio add failed (VALIDATION_ERROR): --industry-id is required.",
53
+ });
54
+ }
55
+ const link = options.link ?? options.url;
56
+ const token = await loadAuthTokenOrExit("portfolio add", options.output);
57
+ // Optional cover-image upload BEFORE create. The two calls are sequenced
58
+ // because `createPortfolioItem` needs the server-issued cache name to
59
+ // bind the cover to the new item; uploading is idempotent so a retry on
60
+ // a transient create failure is safe.
61
+ let coverImageCacheName = null;
62
+ if (options.cover !== undefined) {
63
+ try {
64
+ const result = await profile.portfolio.uploadCover(token, { kind: "path", path: options.cover });
65
+ coverImageCacheName = result.coverImageCacheName;
66
+ }
67
+ catch (err) {
68
+ handlePortfolioError("portfolio add", err, options.output);
69
+ return;
70
+ }
71
+ }
72
+ // `options.industryId` is verified non-empty above (emitErrorAndExit
73
+ // short-circuits) — narrow for TypeScript's benefit.
74
+ const industryIds = options.industryId;
75
+ const input = {
76
+ title: options.title,
77
+ industryIds,
78
+ };
79
+ if (description !== undefined)
80
+ input.description = description;
81
+ if (link !== undefined)
82
+ input.link = link;
83
+ if (coverImageCacheName !== null)
84
+ input.coverImage = coverImageCacheName;
85
+ let items;
86
+ try {
87
+ items = await profile.portfolio.add(token, input);
88
+ }
89
+ catch (err) {
90
+ handlePortfolioError("portfolio add", err, options.output);
91
+ return;
92
+ }
93
+ emitMutationResult(items, options.output, "add", { prettyHeader: "Portfolio item created." });
94
+ }
95
+ /**
96
+ * Route service errors through the envelope ABI (#128). `TtctlError`
97
+ * subclasses keep their dedicated 3-block pretty rendering on `pretty`;
98
+ * `json`/`yaml` flow through the envelope so machine consumers see the
99
+ * stable wire shape. Domain `PortfolioError` codes always flow through
100
+ * the envelope.
101
+ */
102
+ function handlePortfolioError(commandLabel, err, format = "pretty") {
103
+ if (err instanceof TtctlError) {
104
+ if (format === "pretty")
105
+ presentTtctlError(err);
106
+ const errors = [{ code: err.code, message: err.message, hint: err.recovery }];
107
+ emitErrorAndExit({
108
+ operation: commandLabel.replace(/ /g, "."),
109
+ format,
110
+ errors,
111
+ exitCode: err.code === "CF_403_CLEARANCE" || err.code === "CF_403_PERSISTENT" ? 2 : 1,
112
+ });
113
+ }
114
+ if (err instanceof profile.portfolio.PortfolioError) {
115
+ emitErrorAndExit({
116
+ operation: commandLabel.replace(/ /g, "."),
117
+ format,
118
+ errors: [{ code: err.code, message: err.message }],
119
+ prettySummary: `${commandLabel} failed (${err.code}): ${err.message}`,
120
+ });
121
+ }
122
+ const message = err instanceof Error ? err.message : String(err);
123
+ emitErrorAndExit({
124
+ operation: commandLabel.replace(/ /g, "."),
125
+ format,
126
+ errors: [{ code: "INTERNAL_ERROR", message }],
127
+ prettySummary: `${commandLabel} failed: ${message}`,
128
+ });
129
+ }
130
+ /**
131
+ * Emit the post-mutation portfolio list, wrapped in the v0.4 envelope
132
+ * ABI (#128). The portfolio core API returns the FULL post-mutation
133
+ * list rather than the single mutated entity, so the envelope's
134
+ * `created` / `updated` field carries the list (`PortfolioItem[]`)
135
+ * rather than a single `PortfolioItem`. The pretty rendering keeps the
136
+ * existing "success header + table" UX so users continue to see the
137
+ * post-state at a glance.
138
+ */
139
+ export function emitMutationResult(items, format, verb, options) {
140
+ const rows = items.map((it) => `${it.id}\t${it.title ?? ""}\t${it.highlight ? "★" : ""}\t${it.link ?? ""}`);
141
+ const tableText = ["id\ttitle\thighlight\tlink", ...rows].join("\n");
142
+ if (verb === "remove") {
143
+ const id = options.id;
144
+ if (id === undefined) {
145
+ throw new Error("emitMutationResult: `id` is required for the `remove` verb");
146
+ }
147
+ emitRemoveSuccess({
148
+ operation: "profile.portfolio.remove",
149
+ format,
150
+ id,
151
+ prettySummary: options.prettyHeader,
152
+ });
153
+ if (format === "pretty" && items.length > 0) {
154
+ process.stdout.write(`${tableText}\n`);
155
+ }
156
+ return;
157
+ }
158
+ if (verb === "add") {
159
+ emitAddSuccess({
160
+ operation: "profile.portfolio.add",
161
+ format,
162
+ created: items,
163
+ prettySummary: options.prettyHeader,
164
+ prettyEntity: () => tableText,
165
+ });
166
+ return;
167
+ }
168
+ emitUpdateSuccess({
169
+ operation: "profile.portfolio.update",
170
+ format,
171
+ updated: items,
172
+ prettySummary: options.prettyHeader,
173
+ prettyEntity: () => tableText,
174
+ });
175
+ }
176
+ /** Backward-compatible alias; new call sites use `emitMutationResult`. */
177
+ export function emitListResult(items, format, successMessage) {
178
+ emitMutationResult(items, format, "update", { prettyHeader: successMessage });
179
+ }
180
+ export { handlePortfolioError };
181
+ //# sourceMappingURL=add.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../../../src/commands/profile/portfolio/add.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { OutputFormat } from "../../../lib/output.js";
2
+ /**
3
+ * Action handler for `ttctl profile portfolio highlight <id>`. Sets the
4
+ * `highlight` flag on the named item. Pass `--off` to clear instead of
5
+ * set. Emits the v0.4 update envelope (#128).
6
+ */
7
+ export declare function runProfilePortfolioHighlight(id: string, options: {
8
+ off?: boolean;
9
+ output: OutputFormat;
10
+ }): Promise<void>;
11
+ //# sourceMappingURL=highlight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"highlight.d.ts","sourceRoot":"","sources":["../../../../src/commands/profile/portfolio/highlight.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAI3D;;;;GAIG;AACH,wBAAsB,4BAA4B,CAChD,EAAE,EAAE,MAAM,EACV,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,GAC/C,OAAO,CAAC,IAAI,CAAC,CAmBf"}
@@ -0,0 +1,31 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (C) 2026 Oleksii PELYKH
3
+ import { profile } from "@ttctl/core";
4
+ import { emitUpdateSuccess } from "../../../lib/envelopes.js";
5
+ import { handlePortfolioError } from "./add.js";
6
+ import { loadAuthTokenOrExit } from "./shared.js";
7
+ /**
8
+ * Action handler for `ttctl profile portfolio highlight <id>`. Sets the
9
+ * `highlight` flag on the named item. Pass `--off` to clear instead of
10
+ * set. Emits the v0.4 update envelope (#128).
11
+ */
12
+ export async function runProfilePortfolioHighlight(id, options) {
13
+ const flag = !(options.off ?? false);
14
+ const token = await loadAuthTokenOrExit("portfolio highlight", options.output);
15
+ let result;
16
+ try {
17
+ result = await profile.portfolio.highlight(token, id, flag);
18
+ }
19
+ catch (err) {
20
+ handlePortfolioError("portfolio highlight", err, options.output);
21
+ return;
22
+ }
23
+ emitUpdateSuccess({
24
+ operation: "profile.portfolio.highlight",
25
+ format: options.output,
26
+ updated: result,
27
+ prettySummary: `${result.id} highlight ${result.highlight ? "enabled" : "cleared"}`,
28
+ prettyEntity: (entity) => `highlight: ${entity.highlight.toString()}`,
29
+ });
30
+ }
31
+ //# sourceMappingURL=highlight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"highlight.js","sourceRoot":"","sources":["../../../../src/commands/profile/portfolio/highlight.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oCAAoC;AAEpC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,EAAU,EACV,OAAgD;IAEhD,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,qBAAqB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAE/E,IAAI,MAA0C,CAAC;IAC/C,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,oBAAoB,CAAC,qBAAqB,EAAE,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IAED,iBAAiB,CAAC;QAChB,SAAS,EAAE,6BAA6B;QACxC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO,EAAE,MAAM;QACf,aAAa,EAAE,GAAG,MAAM,CAAC,EAAE,cAAc,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE;QACnF,YAAY,EAAE,CAAC,MAA0C,EAAE,EAAE,CAAC,cAAc,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE;KAC1G,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { Command } from "commander";
2
+ /**
3
+ * Build the `ttctl profile portfolio` command tree.
4
+ *
5
+ * The canonical sub-domain name is `portfolio`; the CLI registers
6
+ * `projects` as a Commander.js alias so users can type either form. Per
7
+ * project policy (see issue #72), aliases are CLI-only — MCP tool names
8
+ * use ONLY the canonical name.
9
+ *
10
+ * The seven leaves follow the verb economy from the #68 epic:
11
+ * `add / update / remove / list / reorder / highlight / upload`. The
12
+ * `update` verb name is the user-facing CLI form; the core function is
13
+ * `update()` (no rename — verbs match between CLI and core for portfolio).
14
+ */
15
+ export declare function buildProfilePortfolioCommand(): Command;
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/profile/portfolio/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAY5C;;;;;;;;;;;;GAYG;AACH,wBAAgB,4BAA4B,IAAI,OAAO,CA0JtD"}
@@ -0,0 +1,121 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (C) 2026 Oleksii PELYKH
3
+ import { Command, Option } from "commander";
4
+ import { OUTPUT_FORMATS } from "../../../lib/output.js";
5
+ import { runProfilePortfolioAdd } from "./add.js";
6
+ import { runProfilePortfolioHighlight } from "./highlight.js";
7
+ import { runProfilePortfolioList } from "./list.js";
8
+ import { runProfilePortfolioRemove } from "./remove.js";
9
+ import { runProfilePortfolioReorder } from "./reorder.js";
10
+ import { runProfilePortfolioUpdate } from "./update.js";
11
+ import { runProfilePortfolioUpload } from "./upload.js";
12
+ /**
13
+ * Build the `ttctl profile portfolio` command tree.
14
+ *
15
+ * The canonical sub-domain name is `portfolio`; the CLI registers
16
+ * `projects` as a Commander.js alias so users can type either form. Per
17
+ * project policy (see issue #72), aliases are CLI-only — MCP tool names
18
+ * use ONLY the canonical name.
19
+ *
20
+ * The seven leaves follow the verb economy from the #68 epic:
21
+ * `add / update / remove / list / reorder / highlight / upload`. The
22
+ * `update` verb name is the user-facing CLI form; the core function is
23
+ * `update()` (no rename — verbs match between CLI and core for portfolio).
24
+ */
25
+ export function buildProfilePortfolioCommand() {
26
+ const portfolio = new Command("portfolio")
27
+ .alias("projects")
28
+ .description("View and update the portfolio section of your profile");
29
+ portfolio
30
+ .command("add")
31
+ .description("Create a new portfolio item")
32
+ .requiredOption("--title <text>", "portfolio item title")
33
+ .option("--description <text>", 'item description (inline text, "-" for stdin, or "@path" to read from file)')
34
+ .option("--edit", "open $EDITOR to compose the description interactively")
35
+ .option("--url <url>", "primary URL for the item (alias for --link)")
36
+ .option("--link <url>", "primary URL for the item (canonical flag, equivalent to --url)")
37
+ .option("--cover <file>", "path to a cover-image file to upload alongside the item")
38
+ .option("--industry-id <id>", 'catalog Industry id (repeatable; required — at least one). Discover via `ttctl profile industries autocomplete "<query>"`.', (value, prev) => (prev ? [...prev, value] : [value]))
39
+ .addOption(new Option("-o, --output <format>", "output format")
40
+ .choices(OUTPUT_FORMATS)
41
+ .default("pretty"))
42
+ .action(async (options) => {
43
+ await runProfilePortfolioAdd(options);
44
+ });
45
+ portfolio
46
+ .command("update")
47
+ .description("Update fields on a portfolio item")
48
+ .argument("<id>", "id of the portfolio item to update")
49
+ .option("--title <text>", "portfolio item title")
50
+ .option("--description <text>", 'item description (inline text, "-" for stdin, or "@path" to read from file)')
51
+ .option("--edit", "open $EDITOR to compose the description interactively")
52
+ .option("--url <url>", "primary URL for the item (alias for --link)")
53
+ .option("--link <url>", "primary URL for the item (canonical flag, equivalent to --url)")
54
+ .option("--client <name>", "client/company name")
55
+ .option("--accomplishment <text>", "accomplishment summary")
56
+ .addOption(new Option("-o, --output <format>", "output format")
57
+ .choices(OUTPUT_FORMATS)
58
+ .default("pretty"))
59
+ .action(async (id, options) => {
60
+ await runProfilePortfolioUpdate(id, options);
61
+ });
62
+ portfolio
63
+ .command("remove")
64
+ .alias("rm")
65
+ .description("Remove a portfolio item")
66
+ .argument("<id>", "id of the portfolio item to remove")
67
+ .addOption(new Option("-o, --output <format>", "output format")
68
+ .choices(OUTPUT_FORMATS)
69
+ .default("pretty"))
70
+ .action(async (id, options) => {
71
+ await runProfilePortfolioRemove(id, options.output);
72
+ });
73
+ portfolio
74
+ .command("list")
75
+ .description("List portfolio items")
76
+ .addOption(new Option("-o, --output <format>", "output format")
77
+ .choices(OUTPUT_FORMATS)
78
+ .default("pretty"))
79
+ .action(async (options) => {
80
+ await runProfilePortfolioList(options.output);
81
+ });
82
+ portfolio
83
+ .command("reorder")
84
+ .description("Reorder a portfolio item")
85
+ .argument("<id>", "id of the portfolio item to move")
86
+ .option("--before <id>", "place the item immediately before this neighbour id")
87
+ .option("--after <id>", "place the item immediately after this neighbour id")
88
+ .option("--to <position>", "place the item at this absolute 0-based position")
89
+ .addOption(new Option("-o, --output <format>", "output format")
90
+ .choices(OUTPUT_FORMATS)
91
+ .default("pretty"))
92
+ .action(async (id, options) => {
93
+ await runProfilePortfolioReorder(id, options);
94
+ });
95
+ portfolio
96
+ .command("highlight")
97
+ .description("Toggle the highlight flag on a portfolio item (default: enable)")
98
+ .argument("<id>", "id of the portfolio item to highlight")
99
+ .option("--off", "clear the highlight flag instead of setting it")
100
+ .addOption(new Option("-o, --output <format>", "output format")
101
+ .choices(OUTPUT_FORMATS)
102
+ .default("pretty"))
103
+ .action(async (id, options) => {
104
+ await runProfilePortfolioHighlight(id, options);
105
+ });
106
+ portfolio
107
+ .command("upload")
108
+ .description("Upload a cover image (--cover) or attachment file (--file) for the user's portfolio")
109
+ .argument("[id]", "(unused; reserved for future per-item upload routing)")
110
+ .option("--cover <file>", "path to a cover-image file to upload")
111
+ .option("--file <file>", "path to a portfolio-attachment file to upload")
112
+ .option("--crop <x,y,w,h>", "cover crop (px), comma-separated x,y,w,h; default: whole image (PNG) or sentinel oversize")
113
+ .addOption(new Option("-o, --output <format>", "output format")
114
+ .choices(OUTPUT_FORMATS)
115
+ .default("pretty"))
116
+ .action(async (id, options) => {
117
+ await runProfilePortfolioUpload(id, options);
118
+ });
119
+ return portfolio;
120
+ }
121
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/profile/portfolio/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ import { profile } from "@ttctl/core";
2
+ import type { OutputFormat } from "../../../lib/output.js";
3
+ /**
4
+ * Action handler for `ttctl profile portfolio list`. Reads the user's
5
+ * portfolio collection and emits it via the cross-CLI output helper
6
+ * (`packages/cli/src/lib/output.ts` from #71), wrapped in the v0.4
7
+ * list envelope (`{version, items, pageInfo?}` from #128) for
8
+ * json/yaml.
9
+ *
10
+ * Per #129, the `pretty` slot is registered with `emitResult` and
11
+ * unwraps the envelope's `items` field for the curated multi-line
12
+ * layout that surfaces `description`, `accomplishment`, `coverImage`,
13
+ * and `clientOrCompanyName` (the audit-confirmed dropped fields from
14
+ * #124). The `table` slot is also wired (also unwrapping `items`) —
15
+ * `formatResult`'s shape dispatcher prefers `table` for list-shape
16
+ * data when present, but the audit's Override Registry Decisions
17
+ * endorse routing portfolio list to multi-line because
18
+ * `description`/`accomplishment` are paragraph-length and the
19
+ * row-based table layout collapses them. {@link formatPortfolioTable}
20
+ * stays exported for direct test use and future override-dispatch
21
+ * wiring.
22
+ *
23
+ * Empty case is handled by the shared empty-state wrapper (#122) via
24
+ * `empty: { command: "profile.portfolio.list" }`. The wrapper detects
25
+ * both `[]` and `{items: []}` shapes (per #122's `isEmptyCollection`),
26
+ * so the post-#128 envelope wrapping continues to short-circuit
27
+ * BEFORE per-format dispatch — emitting `"No portfolio items found.
28
+ * Add one with: ttctl profile portfolio add"` for `pretty`, `[]` for
29
+ * `json`. The formatters keep a defensive empty-list branch for
30
+ * direct callers (tests, future programmatic use) that bypass the
31
+ * action handler.
32
+ */
33
+ export declare function runProfilePortfolioList(format: OutputFormat): Promise<void>;
34
+ /**
35
+ * Format the portfolio list as the post-#129 `pretty` summary. Pure —
36
+ * no I/O — directly unit-testable.
37
+ *
38
+ * Per-item layout, indented two spaces from the count header:
39
+ *
40
+ * <id>[ ★] <title>
41
+ * Client: <clientOrCompanyName> // skip-if-null
42
+ * URL: <link> // skip-if-null
43
+ * Cover: <coverImage> // skip-if-null
44
+ * Description: // always (renders (unset) on null)
45
+ * <body, paragraph breaks preserved>
46
+ * Accomplishment: // skip-if-null (multi-paragraph)
47
+ * <body>
48
+ *
49
+ * Items are separated by a single blank line. Field ordering for each
50
+ * item: identity (id, highlight star, title) first, then user-edited
51
+ * narrative (client, url, cover, description, accomplishment) — most
52
+ * user-edited last because they're the multi-line block fields that
53
+ * benefit from sticking to the bottom of the item.
54
+ *
55
+ * Closes the audit-confirmed formatter-root-cause defect from #124:
56
+ * `description`, `accomplishment`, `coverImage`, and
57
+ * `clientOrCompanyName` are now visible in the default output (the
58
+ * pre-#129 formatter dropped 7 of 12 entity fields).
59
+ *
60
+ * `tags` and `media` are NOT on the wire `PortfolioItem` — neither the
61
+ * mobile-gateway nor the talent-profile schema declares them. The audit
62
+ * flagged them as suspect; #127 verified absence empirically. They are
63
+ * deliberately omitted here.
64
+ *
65
+ * Pretty does NOT truncate (per the issue AC: "For long URLs / IDs:
66
+ * don't truncate (this is `pretty`, not `table`)"); the terminal wraps
67
+ * if the user's window is narrow.
68
+ */
69
+ export declare function formatPortfolioPretty(items: profile.portfolio.PortfolioItem[]): string;
70
+ /**
71
+ * Format the portfolio list as a `cli-table3`-rendered table sized to
72
+ * the current terminal width. Restores the `clientOrCompanyName` column
73
+ * dropped by the pre-#129 formatter (audit-confirmed asymmetric drop:
74
+ * `text` had it, `table` didn't).
75
+ *
76
+ * Long-form fields (`description`, `accomplishment`) are NOT in the
77
+ * table — paragraph-length text doesn't fit a row layout. The override
78
+ * registry in `lib/format-overrides.ts` flags `profile portfolio list`
79
+ * as a candidate for the `multi-line` strategy; users wanting the full
80
+ * detail land on `pretty` (the post-#126 default).
81
+ */
82
+ export declare function formatPortfolioTable(items: profile.portfolio.PortfolioItem[], terminalWidth?: number): string;
83
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/commands/profile/portfolio/list.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAKtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAI3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBjF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,aAAa,EAAE,GAAG,MAAM,CAMtF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,aAAa,EAAE,EACxC,aAAa,GAAE,MAAqC,GACnD,MAAM,CAsBR"}