@sinoia/hubdoc-tools 1.3.10 → 1.5.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 (473) hide show
  1. package/README.md +147 -243
  2. package/cli.js +89268 -0
  3. package/docs/llm-usage.md +314 -0
  4. package/package.json +29 -100
  5. package/LICENSE +0 -21
  6. package/dist/__tests__/fixtures/plugins/connection-plugin/index.d.ts +0 -15
  7. package/dist/__tests__/fixtures/plugins/connection-plugin/index.d.ts.map +0 -1
  8. package/dist/__tests__/fixtures/plugins/connection-plugin/index.js +0 -37
  9. package/dist/__tests__/fixtures/plugins/connection-plugin/index.js.map +0 -1
  10. package/dist/__tests__/fixtures/plugins/scan-plugin/index.d.ts +0 -15
  11. package/dist/__tests__/fixtures/plugins/scan-plugin/index.d.ts.map +0 -1
  12. package/dist/__tests__/fixtures/plugins/scan-plugin/index.js +0 -54
  13. package/dist/__tests__/fixtures/plugins/scan-plugin/index.js.map +0 -1
  14. package/dist/__tests__/fixtures/plugins/test-plugin/index.d.ts +0 -15
  15. package/dist/__tests__/fixtures/plugins/test-plugin/index.d.ts.map +0 -1
  16. package/dist/__tests__/fixtures/plugins/test-plugin/index.js +0 -34
  17. package/dist/__tests__/fixtures/plugins/test-plugin/index.js.map +0 -1
  18. package/dist/__tests__/fixtures/plugins/workflow-plugin/index.d.ts +0 -16
  19. package/dist/__tests__/fixtures/plugins/workflow-plugin/index.d.ts.map +0 -1
  20. package/dist/__tests__/fixtures/plugins/workflow-plugin/index.js +0 -145
  21. package/dist/__tests__/fixtures/plugins/workflow-plugin/index.js.map +0 -1
  22. package/dist/api/api/authentication-api.d.ts +0 -208
  23. package/dist/api/api/authentication-api.d.ts.map +0 -1
  24. package/dist/api/api/authentication-api.js +0 -385
  25. package/dist/api/api/authentication-api.js.map +0 -1
  26. package/dist/api/api/bulk-uploads-api.d.ts +0 -101
  27. package/dist/api/api/bulk-uploads-api.d.ts.map +0 -1
  28. package/dist/api/api/bulk-uploads-api.js +0 -195
  29. package/dist/api/api/bulk-uploads-api.js.map +0 -1
  30. package/dist/api/api/chunked-uploads-api.d.ts +0 -214
  31. package/dist/api/api/chunked-uploads-api.d.ts.map +0 -1
  32. package/dist/api/api/chunked-uploads-api.js +0 -420
  33. package/dist/api/api/chunked-uploads-api.js.map +0 -1
  34. package/dist/api/api/contacts-api.d.ts +0 -246
  35. package/dist/api/api/contacts-api.d.ts.map +0 -1
  36. package/dist/api/api/contacts-api.js +0 -465
  37. package/dist/api/api/contacts-api.js.map +0 -1
  38. package/dist/api/api/documents-api.d.ts +0 -267
  39. package/dist/api/api/documents-api.d.ts.map +0 -1
  40. package/dist/api/api/documents-api.js +0 -506
  41. package/dist/api/api/documents-api.js.map +0 -1
  42. package/dist/api/api/folders-api.d.ts +0 -255
  43. package/dist/api/api/folders-api.d.ts.map +0 -1
  44. package/dist/api/api/folders-api.js +0 -479
  45. package/dist/api/api/folders-api.js.map +0 -1
  46. package/dist/api/api/groups-api.d.ts +0 -246
  47. package/dist/api/api/groups-api.d.ts.map +0 -1
  48. package/dist/api/api/groups-api.js +0 -465
  49. package/dist/api/api/groups-api.js.map +0 -1
  50. package/dist/api/api/permissions-api.d.ts +0 -246
  51. package/dist/api/api/permissions-api.d.ts.map +0 -1
  52. package/dist/api/api/permissions-api.js +0 -465
  53. package/dist/api/api/permissions-api.js.map +0 -1
  54. package/dist/api/api/users-api.d.ts +0 -246
  55. package/dist/api/api/users-api.d.ts.map +0 -1
  56. package/dist/api/api/users-api.js +0 -465
  57. package/dist/api/api/users-api.js.map +0 -1
  58. package/dist/api/api/workspaces-api.d.ts +0 -213
  59. package/dist/api/api/workspaces-api.d.ts.map +0 -1
  60. package/dist/api/api/workspaces-api.js +0 -424
  61. package/dist/api/api/workspaces-api.js.map +0 -1
  62. package/dist/api/api.d.ts +0 -22
  63. package/dist/api/api.d.ts.map +0 -1
  64. package/dist/api/api.js +0 -40
  65. package/dist/api/api.js.map +0 -1
  66. package/dist/api/base.d.ts +0 -43
  67. package/dist/api/base.d.ts.map +0 -1
  68. package/dist/api/base.js +0 -49
  69. package/dist/api/base.js.map +0 -1
  70. package/dist/api/common.d.ts +0 -29
  71. package/dist/api/common.d.ts.map +0 -1
  72. package/dist/api/common.js +0 -109
  73. package/dist/api/common.js.map +0 -1
  74. package/dist/api/configuration.d.ts +0 -99
  75. package/dist/api/configuration.d.ts.map +0 -1
  76. package/dist/api/configuration.js +0 -49
  77. package/dist/api/configuration.js.map +0 -1
  78. package/dist/api/index.d.ts +0 -15
  79. package/dist/api/index.d.ts.map +0 -1
  80. package/dist/api/index.js +0 -33
  81. package/dist/api/index.js.map +0 -1
  82. package/dist/api/models/api-v1-documents-chunked-uploads-id-cancel-delete200-response-data.d.ts +0 -19
  83. package/dist/api/models/api-v1-documents-chunked-uploads-id-cancel-delete200-response-data.d.ts.map +0 -1
  84. package/dist/api/models/api-v1-documents-chunked-uploads-id-cancel-delete200-response-data.js +0 -20
  85. package/dist/api/models/api-v1-documents-chunked-uploads-id-cancel-delete200-response-data.js.map +0 -1
  86. package/dist/api/models/api-v1-documents-chunked-uploads-id-cancel-delete200-response.d.ts +0 -17
  87. package/dist/api/models/api-v1-documents-chunked-uploads-id-cancel-delete200-response.d.ts.map +0 -1
  88. package/dist/api/models/api-v1-documents-chunked-uploads-id-cancel-delete200-response.js +0 -16
  89. package/dist/api/models/api-v1-documents-chunked-uploads-id-cancel-delete200-response.js.map +0 -1
  90. package/dist/api/models/api-v1-documents-chunked-uploads-id-cancel-delete422-response.d.ts +0 -16
  91. package/dist/api/models/api-v1-documents-chunked-uploads-id-cancel-delete422-response.d.ts.map +0 -1
  92. package/dist/api/models/api-v1-documents-chunked-uploads-id-cancel-delete422-response.js +0 -16
  93. package/dist/api/models/api-v1-documents-chunked-uploads-id-cancel-delete422-response.js.map +0 -1
  94. package/dist/api/models/api-v1-documents-chunked-uploads-id-chunks-chunk-number-patch200-response.d.ts +0 -17
  95. package/dist/api/models/api-v1-documents-chunked-uploads-id-chunks-chunk-number-patch200-response.d.ts.map +0 -1
  96. package/dist/api/models/api-v1-documents-chunked-uploads-id-chunks-chunk-number-patch200-response.js +0 -16
  97. package/dist/api/models/api-v1-documents-chunked-uploads-id-chunks-chunk-number-patch200-response.js.map +0 -1
  98. package/dist/api/models/api-v1-documents-chunked-uploads-id-chunks-chunk-number-patch400-response.d.ts +0 -16
  99. package/dist/api/models/api-v1-documents-chunked-uploads-id-chunks-chunk-number-patch400-response.d.ts.map +0 -1
  100. package/dist/api/models/api-v1-documents-chunked-uploads-id-chunks-chunk-number-patch400-response.js +0 -16
  101. package/dist/api/models/api-v1-documents-chunked-uploads-id-chunks-chunk-number-patch400-response.js.map +0 -1
  102. package/dist/api/models/api-v1-documents-chunked-uploads-id-chunks-chunk-number-patch410-response.d.ts +0 -16
  103. package/dist/api/models/api-v1-documents-chunked-uploads-id-chunks-chunk-number-patch410-response.d.ts.map +0 -1
  104. package/dist/api/models/api-v1-documents-chunked-uploads-id-chunks-chunk-number-patch410-response.js +0 -16
  105. package/dist/api/models/api-v1-documents-chunked-uploads-id-chunks-chunk-number-patch410-response.js.map +0 -1
  106. package/dist/api/models/api-v1-documents-chunked-uploads-id-chunks-chunk-number-patch422-response.d.ts +0 -16
  107. package/dist/api/models/api-v1-documents-chunked-uploads-id-chunks-chunk-number-patch422-response.d.ts.map +0 -1
  108. package/dist/api/models/api-v1-documents-chunked-uploads-id-chunks-chunk-number-patch422-response.js +0 -16
  109. package/dist/api/models/api-v1-documents-chunked-uploads-id-chunks-chunk-number-patch422-response.js.map +0 -1
  110. package/dist/api/models/api-v1-documents-chunked-uploads-id-complete-post200-response.d.ts +0 -17
  111. package/dist/api/models/api-v1-documents-chunked-uploads-id-complete-post200-response.d.ts.map +0 -1
  112. package/dist/api/models/api-v1-documents-chunked-uploads-id-complete-post200-response.js +0 -16
  113. package/dist/api/models/api-v1-documents-chunked-uploads-id-complete-post200-response.js.map +0 -1
  114. package/dist/api/models/api-v1-documents-chunked-uploads-id-complete-post422-response.d.ts +0 -16
  115. package/dist/api/models/api-v1-documents-chunked-uploads-id-complete-post422-response.d.ts.map +0 -1
  116. package/dist/api/models/api-v1-documents-chunked-uploads-id-complete-post422-response.js +0 -16
  117. package/dist/api/models/api-v1-documents-chunked-uploads-id-complete-post422-response.js.map +0 -1
  118. package/dist/api/models/api-v1-documents-chunked-uploads-id-status-get200-response.d.ts +0 -17
  119. package/dist/api/models/api-v1-documents-chunked-uploads-id-status-get200-response.d.ts.map +0 -1
  120. package/dist/api/models/api-v1-documents-chunked-uploads-id-status-get200-response.js +0 -16
  121. package/dist/api/models/api-v1-documents-chunked-uploads-id-status-get200-response.js.map +0 -1
  122. package/dist/api/models/api-v1-documents-chunked-uploads-id-status-get404-response.d.ts +0 -16
  123. package/dist/api/models/api-v1-documents-chunked-uploads-id-status-get404-response.d.ts.map +0 -1
  124. package/dist/api/models/api-v1-documents-chunked-uploads-id-status-get404-response.js +0 -16
  125. package/dist/api/models/api-v1-documents-chunked-uploads-id-status-get404-response.js.map +0 -1
  126. package/dist/api/models/api-v1-documents-chunked-uploads-post201-response.d.ts +0 -17
  127. package/dist/api/models/api-v1-documents-chunked-uploads-post201-response.d.ts.map +0 -1
  128. package/dist/api/models/api-v1-documents-chunked-uploads-post201-response.js +0 -16
  129. package/dist/api/models/api-v1-documents-chunked-uploads-post201-response.js.map +0 -1
  130. package/dist/api/models/api-v1-documents-documents-post-request1.d.ts +0 -34
  131. package/dist/api/models/api-v1-documents-documents-post-request1.d.ts.map +0 -1
  132. package/dist/api/models/api-v1-documents-documents-post-request1.js +0 -16
  133. package/dist/api/models/api-v1-documents-documents-post-request1.js.map +0 -1
  134. package/dist/api/models/api-v1-documents-documents-post201-response.d.ts +0 -17
  135. package/dist/api/models/api-v1-documents-documents-post201-response.d.ts.map +0 -1
  136. package/dist/api/models/api-v1-documents-documents-post201-response.js +0 -16
  137. package/dist/api/models/api-v1-documents-documents-post201-response.js.map +0 -1
  138. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of.d.ts +0 -17
  139. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of.d.ts.map +0 -1
  140. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of.js +0 -16
  141. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of.js.map +0 -1
  142. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of1.d.ts +0 -17
  143. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of1.d.ts.map +0 -1
  144. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of1.js +0 -16
  145. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner-one-of1.js.map +0 -1
  146. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner.d.ts +0 -18
  147. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner.d.ts.map +0 -1
  148. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner.js +0 -16
  149. package/dist/api/models/api-v1-documents-folders-id-get200-response-all-of-items-inner.js.map +0 -1
  150. package/dist/api/models/api-v1-documents-folders-id-get200-response.d.ts +0 -17
  151. package/dist/api/models/api-v1-documents-folders-id-get200-response.d.ts.map +0 -1
  152. package/dist/api/models/api-v1-documents-folders-id-get200-response.js +0 -16
  153. package/dist/api/models/api-v1-documents-folders-id-get200-response.js.map +0 -1
  154. package/dist/api/models/bulk-upload-mutation.d.ts +0 -34
  155. package/dist/api/models/bulk-upload-mutation.d.ts.map +0 -1
  156. package/dist/api/models/bulk-upload-mutation.js +0 -16
  157. package/dist/api/models/bulk-upload-mutation.js.map +0 -1
  158. package/dist/api/models/bulk-upload.d.ts +0 -91
  159. package/dist/api/models/bulk-upload.d.ts.map +0 -1
  160. package/dist/api/models/bulk-upload.js +0 -23
  161. package/dist/api/models/bulk-upload.js.map +0 -1
  162. package/dist/api/models/chunked-upload-chunk-response.d.ts +0 -46
  163. package/dist/api/models/chunked-upload-chunk-response.d.ts.map +0 -1
  164. package/dist/api/models/chunked-upload-chunk-response.js +0 -21
  165. package/dist/api/models/chunked-upload-chunk-response.js.map +0 -1
  166. package/dist/api/models/chunked-upload-complete-request.d.ts +0 -21
  167. package/dist/api/models/chunked-upload-complete-request.d.ts.map +0 -1
  168. package/dist/api/models/chunked-upload-complete-request.js +0 -16
  169. package/dist/api/models/chunked-upload-complete-request.js.map +0 -1
  170. package/dist/api/models/chunked-upload-complete-response.d.ts +0 -37
  171. package/dist/api/models/chunked-upload-complete-response.d.ts.map +0 -1
  172. package/dist/api/models/chunked-upload-complete-response.js +0 -20
  173. package/dist/api/models/chunked-upload-complete-response.js.map +0 -1
  174. package/dist/api/models/chunked-upload-mutation.d.ts +0 -47
  175. package/dist/api/models/chunked-upload-mutation.d.ts.map +0 -1
  176. package/dist/api/models/chunked-upload-mutation.js +0 -16
  177. package/dist/api/models/chunked-upload-mutation.js.map +0 -1
  178. package/dist/api/models/chunked-upload-session-response.d.ts +0 -33
  179. package/dist/api/models/chunked-upload-session-response.d.ts.map +0 -1
  180. package/dist/api/models/chunked-upload-session-response.js +0 -16
  181. package/dist/api/models/chunked-upload-session-response.js.map +0 -1
  182. package/dist/api/models/chunked-upload-status-response.d.ts +0 -54
  183. package/dist/api/models/chunked-upload-status-response.d.ts.map +0 -1
  184. package/dist/api/models/chunked-upload-status-response.js +0 -25
  185. package/dist/api/models/chunked-upload-status-response.js.map +0 -1
  186. package/dist/api/models/chunked-upload.d.ts +0 -98
  187. package/dist/api/models/chunked-upload.d.ts.map +0 -1
  188. package/dist/api/models/chunked-upload.js +0 -25
  189. package/dist/api/models/chunked-upload.js.map +0 -1
  190. package/dist/api/models/contact-mutation.d.ts +0 -30
  191. package/dist/api/models/contact-mutation.d.ts.map +0 -1
  192. package/dist/api/models/contact-mutation.js +0 -16
  193. package/dist/api/models/contact-mutation.js.map +0 -1
  194. package/dist/api/models/contact.d.ts +0 -54
  195. package/dist/api/models/contact.d.ts.map +0 -1
  196. package/dist/api/models/contact.js +0 -16
  197. package/dist/api/models/contact.js.map +0 -1
  198. package/dist/api/models/document-document-type.d.ts +0 -19
  199. package/dist/api/models/document-document-type.d.ts.map +0 -1
  200. package/dist/api/models/document-document-type.js +0 -16
  201. package/dist/api/models/document-document-type.js.map +0 -1
  202. package/dist/api/models/document-domain.d.ts +0 -19
  203. package/dist/api/models/document-domain.d.ts.map +0 -1
  204. package/dist/api/models/document-domain.js +0 -16
  205. package/dist/api/models/document-domain.js.map +0 -1
  206. package/dist/api/models/document-folder.d.ts +0 -19
  207. package/dist/api/models/document-folder.d.ts.map +0 -1
  208. package/dist/api/models/document-folder.js +0 -16
  209. package/dist/api/models/document-folder.js.map +0 -1
  210. package/dist/api/models/document-mutation.d.ts +0 -50
  211. package/dist/api/models/document-mutation.d.ts.map +0 -1
  212. package/dist/api/models/document-mutation.js +0 -16
  213. package/dist/api/models/document-mutation.js.map +0 -1
  214. package/dist/api/models/document.d.ts +0 -73
  215. package/dist/api/models/document.d.ts.map +0 -1
  216. package/dist/api/models/document.js +0 -16
  217. package/dist/api/models/document.js.map +0 -1
  218. package/dist/api/models/folder-mutation.d.ts +0 -38
  219. package/dist/api/models/folder-mutation.d.ts.map +0 -1
  220. package/dist/api/models/folder-mutation.js +0 -16
  221. package/dist/api/models/folder-mutation.js.map +0 -1
  222. package/dist/api/models/folder-parent.d.ts +0 -19
  223. package/dist/api/models/folder-parent.d.ts.map +0 -1
  224. package/dist/api/models/folder-parent.js +0 -16
  225. package/dist/api/models/folder-parent.js.map +0 -1
  226. package/dist/api/models/folder.d.ts +0 -65
  227. package/dist/api/models/folder.d.ts.map +0 -1
  228. package/dist/api/models/folder.js +0 -16
  229. package/dist/api/models/folder.js.map +0 -1
  230. package/dist/api/models/group-mutation.d.ts +0 -26
  231. package/dist/api/models/group-mutation.d.ts.map +0 -1
  232. package/dist/api/models/group-mutation.js +0 -16
  233. package/dist/api/models/group-mutation.js.map +0 -1
  234. package/dist/api/models/group.d.ts +0 -38
  235. package/dist/api/models/group.d.ts.map +0 -1
  236. package/dist/api/models/group.js +0 -16
  237. package/dist/api/models/group.js.map +0 -1
  238. package/dist/api/models/index.d.ts +0 -55
  239. package/dist/api/models/index.d.ts.map +0 -1
  240. package/dist/api/models/index.js +0 -71
  241. package/dist/api/models/index.js.map +0 -1
  242. package/dist/api/models/model-error.d.ts +0 -26
  243. package/dist/api/models/model-error.d.ts.map +0 -1
  244. package/dist/api/models/model-error.js +0 -16
  245. package/dist/api/models/model-error.js.map +0 -1
  246. package/dist/api/models/oauth-revoke-post200-response.d.ts +0 -15
  247. package/dist/api/models/oauth-revoke-post200-response.d.ts.map +0 -1
  248. package/dist/api/models/oauth-revoke-post200-response.js +0 -16
  249. package/dist/api/models/oauth-revoke-post200-response.js.map +0 -1
  250. package/dist/api/models/permission-actor.d.ts +0 -20
  251. package/dist/api/models/permission-actor.d.ts.map +0 -1
  252. package/dist/api/models/permission-actor.js +0 -16
  253. package/dist/api/models/permission-actor.js.map +0 -1
  254. package/dist/api/models/permission-mutation.d.ts +0 -44
  255. package/dist/api/models/permission-mutation.d.ts.map +0 -1
  256. package/dist/api/models/permission-mutation.js +0 -22
  257. package/dist/api/models/permission-mutation.js.map +0 -1
  258. package/dist/api/models/permission-permissible.d.ts +0 -20
  259. package/dist/api/models/permission-permissible.d.ts.map +0 -1
  260. package/dist/api/models/permission-permissible.js +0 -16
  261. package/dist/api/models/permission-permissible.js.map +0 -1
  262. package/dist/api/models/permission.d.ts +0 -60
  263. package/dist/api/models/permission.d.ts.map +0 -1
  264. package/dist/api/models/permission.js +0 -22
  265. package/dist/api/models/permission.js.map +0 -1
  266. package/dist/api/models/token-response.d.ts +0 -41
  267. package/dist/api/models/token-response.d.ts.map +0 -1
  268. package/dist/api/models/token-response.js +0 -16
  269. package/dist/api/models/token-response.js.map +0 -1
  270. package/dist/api/models/user-mutation.d.ts +0 -45
  271. package/dist/api/models/user-mutation.d.ts.map +0 -1
  272. package/dist/api/models/user-mutation.js +0 -23
  273. package/dist/api/models/user-mutation.js.map +0 -1
  274. package/dist/api/models/user.d.ts +0 -61
  275. package/dist/api/models/user.d.ts.map +0 -1
  276. package/dist/api/models/user.js +0 -23
  277. package/dist/api/models/user.js.map +0 -1
  278. package/dist/api/models/workspace-mutation-settings-validation.d.ts +0 -26
  279. package/dist/api/models/workspace-mutation-settings-validation.d.ts.map +0 -1
  280. package/dist/api/models/workspace-mutation-settings-validation.js +0 -16
  281. package/dist/api/models/workspace-mutation-settings-validation.js.map +0 -1
  282. package/dist/api/models/workspace-mutation-settings.d.ts +0 -60
  283. package/dist/api/models/workspace-mutation-settings.d.ts.map +0 -1
  284. package/dist/api/models/workspace-mutation-settings.js +0 -16
  285. package/dist/api/models/workspace-mutation-settings.js.map +0 -1
  286. package/dist/api/models/workspace-mutation.d.ts +0 -44
  287. package/dist/api/models/workspace-mutation.d.ts.map +0 -1
  288. package/dist/api/models/workspace-mutation.js +0 -16
  289. package/dist/api/models/workspace-mutation.js.map +0 -1
  290. package/dist/api/models/workspace-settings-validation.d.ts +0 -26
  291. package/dist/api/models/workspace-settings-validation.d.ts.map +0 -1
  292. package/dist/api/models/workspace-settings-validation.js +0 -16
  293. package/dist/api/models/workspace-settings-validation.js.map +0 -1
  294. package/dist/api/models/workspace-settings.d.ts +0 -60
  295. package/dist/api/models/workspace-settings.d.ts.map +0 -1
  296. package/dist/api/models/workspace-settings.js +0 -16
  297. package/dist/api/models/workspace-settings.js.map +0 -1
  298. package/dist/api/models/workspace.d.ts +0 -62
  299. package/dist/api/models/workspace.d.ts.map +0 -1
  300. package/dist/api/models/workspace.js +0 -16
  301. package/dist/api/models/workspace.js.map +0 -1
  302. package/dist/api-client.d.ts +0 -19
  303. package/dist/api-client.d.ts.map +0 -1
  304. package/dist/api-client.js +0 -43
  305. package/dist/api-client.js.map +0 -1
  306. package/dist/cli/handlers/command-handlers.d.ts +0 -29
  307. package/dist/cli/handlers/command-handlers.d.ts.map +0 -1
  308. package/dist/cli/handlers/command-handlers.js +0 -261
  309. package/dist/cli/handlers/command-handlers.js.map +0 -1
  310. package/dist/cli/handlers/engine-handlers.d.ts +0 -15
  311. package/dist/cli/handlers/engine-handlers.d.ts.map +0 -1
  312. package/dist/cli/handlers/engine-handlers.js +0 -174
  313. package/dist/cli/handlers/engine-handlers.js.map +0 -1
  314. package/dist/cli/interactive.d.ts +0 -15
  315. package/dist/cli/interactive.d.ts.map +0 -1
  316. package/dist/cli/interactive.js +0 -234
  317. package/dist/cli/interactive.js.map +0 -1
  318. package/dist/cli.d.ts +0 -3
  319. package/dist/cli.d.ts.map +0 -1
  320. package/dist/cli.js +0 -203
  321. package/dist/cli.js.map +0 -1
  322. package/dist/commands/export.d.ts +0 -15
  323. package/dist/commands/export.d.ts.map +0 -1
  324. package/dist/commands/export.js +0 -188
  325. package/dist/commands/export.js.map +0 -1
  326. package/dist/commands/import.d.ts +0 -32
  327. package/dist/commands/import.d.ts.map +0 -1
  328. package/dist/commands/import.js +0 -315
  329. package/dist/commands/import.js.map +0 -1
  330. package/dist/index.d.ts +0 -31
  331. package/dist/index.d.ts.map +0 -1
  332. package/dist/index.js +0 -72
  333. package/dist/index.js.map +0 -1
  334. package/dist/plugins/alfresco/index.d.ts +0 -26
  335. package/dist/plugins/alfresco/index.d.ts.map +0 -1
  336. package/dist/plugins/alfresco/index.js +0 -405
  337. package/dist/plugins/alfresco/index.js.map +0 -1
  338. package/dist/plugins/alfresco/plugin.json +0 -12
  339. package/dist/plugins/aws-s3/index.d.ts +0 -23
  340. package/dist/plugins/aws-s3/index.d.ts.map +0 -1
  341. package/dist/plugins/aws-s3/index.js +0 -383
  342. package/dist/plugins/aws-s3/index.js.map +0 -1
  343. package/dist/plugins/aws-s3/plugin.json +0 -12
  344. package/dist/plugins/azure-blob/index.d.ts +0 -23
  345. package/dist/plugins/azure-blob/index.d.ts.map +0 -1
  346. package/dist/plugins/azure-blob/index.js +0 -340
  347. package/dist/plugins/azure-blob/index.js.map +0 -1
  348. package/dist/plugins/azure-blob/plugin.json +0 -12
  349. package/dist/plugins/box/index.d.ts +0 -26
  350. package/dist/plugins/box/index.d.ts.map +0 -1
  351. package/dist/plugins/box/index.js +0 -387
  352. package/dist/plugins/box/index.js.map +0 -1
  353. package/dist/plugins/box/plugin.json +0 -12
  354. package/dist/plugins/core/index.d.ts +0 -25
  355. package/dist/plugins/core/index.d.ts.map +0 -1
  356. package/dist/plugins/core/index.js +0 -400
  357. package/dist/plugins/core/index.js.map +0 -1
  358. package/dist/plugins/core/plugin.json +0 -26
  359. package/dist/plugins/dropbox/index.d.ts +0 -27
  360. package/dist/plugins/dropbox/index.d.ts.map +0 -1
  361. package/dist/plugins/dropbox/index.js +0 -375
  362. package/dist/plugins/dropbox/index.js.map +0 -1
  363. package/dist/plugins/dropbox/plugin.json +0 -12
  364. package/dist/plugins/filesystem/index.d.ts +0 -22
  365. package/dist/plugins/filesystem/index.d.ts.map +0 -1
  366. package/dist/plugins/filesystem/index.js +0 -306
  367. package/dist/plugins/filesystem/index.js.map +0 -1
  368. package/dist/plugins/filesystem/plugin.json +0 -12
  369. package/dist/plugins/googledrive/index.d.ts +0 -27
  370. package/dist/plugins/googledrive/index.d.ts.map +0 -1
  371. package/dist/plugins/googledrive/index.js +0 -383
  372. package/dist/plugins/googledrive/index.js.map +0 -1
  373. package/dist/plugins/googledrive/plugin.json +0 -12
  374. package/dist/plugins/nuxeo/index.d.ts +0 -24
  375. package/dist/plugins/nuxeo/index.d.ts.map +0 -1
  376. package/dist/plugins/nuxeo/index.js +0 -405
  377. package/dist/plugins/nuxeo/index.js.map +0 -1
  378. package/dist/plugins/nuxeo/plugin.json +0 -12
  379. package/dist/plugins/onedrive/index.d.ts +0 -25
  380. package/dist/plugins/onedrive/index.d.ts.map +0 -1
  381. package/dist/plugins/onedrive/index.js +0 -362
  382. package/dist/plugins/onedrive/index.js.map +0 -1
  383. package/dist/plugins/onedrive/plugin.json +0 -12
  384. package/dist/plugins/opentext/index.d.ts +0 -26
  385. package/dist/plugins/opentext/index.d.ts.map +0 -1
  386. package/dist/plugins/opentext/index.js +0 -440
  387. package/dist/plugins/opentext/index.js.map +0 -1
  388. package/dist/plugins/opentext/plugin.json +0 -12
  389. package/dist/plugins/sharepoint/index.d.ts +0 -27
  390. package/dist/plugins/sharepoint/index.d.ts.map +0 -1
  391. package/dist/plugins/sharepoint/index.js +0 -397
  392. package/dist/plugins/sharepoint/index.js.map +0 -1
  393. package/dist/plugins/sharepoint/plugin.json +0 -12
  394. package/dist/services/chunked-uploader.d.ts +0 -83
  395. package/dist/services/chunked-uploader.d.ts.map +0 -1
  396. package/dist/services/chunked-uploader.js +0 -321
  397. package/dist/services/chunked-uploader.js.map +0 -1
  398. package/dist/services/hubdoc-api.d.ts +0 -43
  399. package/dist/services/hubdoc-api.d.ts.map +0 -1
  400. package/dist/services/hubdoc-api.js +0 -382
  401. package/dist/services/hubdoc-api.js.map +0 -1
  402. package/dist/services/hubdoc-export.d.ts +0 -17
  403. package/dist/services/hubdoc-export.d.ts.map +0 -1
  404. package/dist/services/hubdoc-export.js +0 -196
  405. package/dist/services/hubdoc-export.js.map +0 -1
  406. package/dist/services/oauth-token-service.d.ts +0 -74
  407. package/dist/services/oauth-token-service.d.ts.map +0 -1
  408. package/dist/services/oauth-token-service.js +0 -344
  409. package/dist/services/oauth-token-service.js.map +0 -1
  410. package/dist/services/permission-manager.d.ts +0 -42
  411. package/dist/services/permission-manager.d.ts.map +0 -1
  412. package/dist/services/permission-manager.js +0 -187
  413. package/dist/services/permission-manager.js.map +0 -1
  414. package/dist/services/plugin-import.d.ts +0 -64
  415. package/dist/services/plugin-import.d.ts.map +0 -1
  416. package/dist/services/plugin-import.js +0 -284
  417. package/dist/services/plugin-import.js.map +0 -1
  418. package/dist/services/plugin-manager.d.ts +0 -73
  419. package/dist/services/plugin-manager.d.ts.map +0 -1
  420. package/dist/services/plugin-manager.js +0 -306
  421. package/dist/services/plugin-manager.js.map +0 -1
  422. package/dist/src/types/plugins.d.ts +0 -111
  423. package/dist/src/types/plugins.d.ts.map +0 -1
  424. package/dist/src/types/plugins.js +0 -3
  425. package/dist/src/types/plugins.js.map +0 -1
  426. package/dist/src/utils/concurrent-processor.d.ts +0 -63
  427. package/dist/src/utils/concurrent-processor.d.ts.map +0 -1
  428. package/dist/src/utils/concurrent-processor.js +0 -240
  429. package/dist/src/utils/concurrent-processor.js.map +0 -1
  430. package/dist/src/utils/xml-metadata.d.ts +0 -47
  431. package/dist/src/utils/xml-metadata.d.ts.map +0 -1
  432. package/dist/src/utils/xml-metadata.js +0 -200
  433. package/dist/src/utils/xml-metadata.js.map +0 -1
  434. package/dist/types/export.d.ts +0 -44
  435. package/dist/types/export.d.ts.map +0 -1
  436. package/dist/types/export.js +0 -3
  437. package/dist/types/export.js.map +0 -1
  438. package/dist/types/index.d.ts +0 -77
  439. package/dist/types/index.d.ts.map +0 -1
  440. package/dist/types/index.js +0 -3
  441. package/dist/types/index.js.map +0 -1
  442. package/dist/types/plugins.d.ts +0 -111
  443. package/dist/types/plugins.d.ts.map +0 -1
  444. package/dist/types/plugins.js +0 -3
  445. package/dist/types/plugins.js.map +0 -1
  446. package/dist/utils/concurrent-processor.d.ts +0 -63
  447. package/dist/utils/concurrent-processor.d.ts.map +0 -1
  448. package/dist/utils/concurrent-processor.js +0 -240
  449. package/dist/utils/concurrent-processor.js.map +0 -1
  450. package/dist/utils/config.d.ts +0 -40
  451. package/dist/utils/config.d.ts.map +0 -1
  452. package/dist/utils/config.js +0 -249
  453. package/dist/utils/config.js.map +0 -1
  454. package/dist/utils/csv.d.ts +0 -90
  455. package/dist/utils/csv.d.ts.map +0 -1
  456. package/dist/utils/csv.js +0 -564
  457. package/dist/utils/csv.js.map +0 -1
  458. package/dist/utils/export-csv.d.ts +0 -14
  459. package/dist/utils/export-csv.d.ts.map +0 -1
  460. package/dist/utils/export-csv.js +0 -129
  461. package/dist/utils/export-csv.js.map +0 -1
  462. package/dist/utils/operation-logger.d.ts +0 -110
  463. package/dist/utils/operation-logger.d.ts.map +0 -1
  464. package/dist/utils/operation-logger.js +0 -226
  465. package/dist/utils/operation-logger.js.map +0 -1
  466. package/dist/utils/xml-metadata-generator.d.ts +0 -50
  467. package/dist/utils/xml-metadata-generator.d.ts.map +0 -1
  468. package/dist/utils/xml-metadata-generator.js +0 -162
  469. package/dist/utils/xml-metadata-generator.js.map +0 -1
  470. package/dist/utils/xml-metadata.d.ts +0 -47
  471. package/dist/utils/xml-metadata.d.ts.map +0 -1
  472. package/dist/utils/xml-metadata.js +0 -200
  473. package/dist/utils/xml-metadata.js.map +0 -1
@@ -0,0 +1,314 @@
1
+ # `hubdoc` — LLM / Headless usage guide
2
+
3
+ This guide is written for autonomous agents (Claude, Corex IA agents, CI
4
+ scripts) that need to drive HubDoc from a shell without human assistance.
5
+
6
+ The MVP-A surface (workspaces, folders, files), plus search (MVP-B) and
7
+ the Markdown/Typst editorial pipeline (composed-documents/parts/templates,
8
+ MVP-D), are fully non-interactive when you pass `--json` and (for
9
+ destructive ops) `--yes`.
10
+
11
+ > The `hubdoc` and `hubdoc-tool` binaries are aliases of the same program.
12
+ > Use `hubdoc` in agent scripts — it is shorter and easier on tokens.
13
+
14
+ ## Contract
15
+
16
+ Every LLM-friendly subcommand obeys the same rules. An agent can rely on
17
+ these without reading the per-command documentation:
18
+
19
+ | Concern | Behavior |
20
+ | ---------------------- | ------------------------------------------------------------------------- |
21
+ | Stdout in `--json` mode| One parseable JSON value (object, array, or `{ ok, message, data }`) |
22
+ | Stderr | Reserved for errors and progress notes |
23
+ | Exit code | `0` on success, `1` on any failure |
24
+ | Error shape (`--json`) | `{ "error": "...", "code": "unauthorized\|forbidden\|not_found\|...", "details": {...} }` |
25
+ | Destructive ops | Refuse to run in `--json` mode unless `--yes` is passed (no prompts) |
26
+ | Informational notes | Suppressed in `--json` mode so stdout stays parseable |
27
+
28
+ Error `code` values currently emitted:
29
+
30
+ - `unauthorized` (HTTP 401)
31
+ - `forbidden` (HTTP 403)
32
+ - `not_found` (HTTP 404)
33
+ - `unprocessable_entity` (HTTP 422)
34
+ - `http_<status>` for any other HTTP error
35
+ - Node error codes (e.g. `ECONNREFUSED`) when the request never reached HubDoc
36
+
37
+ ## Authentication
38
+
39
+ The bearer token is a Doorkeeper access token. Two ways to obtain one:
40
+
41
+ - **Personal Access Token (recommended)** — long-lived, manage from
42
+ HubDoc UI → *Profile › Personal Access Tokens*. Create, copy the
43
+ one-time plaintext value, revoke from the same page. Shipped in
44
+ corex#416. Shortcut: `hubdoc token open` launches the page in your
45
+ default browser.
46
+ - **OAuth Authorization Code flow** — the legacy interactive wizard
47
+ (`hubdoc-tool` without args) still works.
48
+
49
+ Three places the CLI looks for the token, in priority order:
50
+
51
+ ```bash
52
+ # 1) Environment variable — highest priority. Best for ephemeral / CI use.
53
+ export HUBDOC_API_TOKEN=hubdoc_pat_xxx...
54
+ export HUBDOC_API_URL=https://rec.hubdoc.sinoia.cloud
55
+
56
+ # 2) OS keychain (Keychain.app / libsecret / Windows Credential Vault).
57
+ # --keychain stores via keytar (optional dep; Linux needs libsecret-1-dev).
58
+ hubdoc token set hubdoc_pat_xxx... --keychain --api-url=https://rec.hubdoc.sinoia.cloud
59
+
60
+ # 3) Plaintext config file. `token set` writes to ~/.hubdoc-config.json
61
+ # by default so the token is reachable from any cwd.
62
+ hubdoc token set hubdoc_pat_xxx... --api-url=https://rec.hubdoc.sinoia.cloud
63
+ ```
64
+
65
+ Resolution chain (per request): **env → keychain → config**. `hubdoc whoami`
66
+ reports which source served the current token via the `tokenSource` field
67
+ (`env` / `keychain` / `config`).
68
+
69
+ Config file resolution: `~/.hubdoc-config.json` is read by default
70
+ (works from any cwd). If a `<cwd>/.hubdoc-config.json` also exists, it
71
+ overrides the global one — useful for project-specific overrides.
72
+
73
+ On Linux, `keytar` requires `libsecret-1-dev` (Debian/Ubuntu) or
74
+ `libsecret-devel` (Fedora). Headless CI containers usually lack it — that's
75
+ fine, just use the env var path there. If keytar fails to load, the CLI
76
+ still works for env / config tokens; only `--keychain` becomes unavailable
77
+ (with a clear error pointing this out).
78
+
79
+ ### Verifying auth
80
+
81
+ ```bash
82
+ hubdoc whoami --json
83
+ # → { "email": "...", "scopes": "read write", "tokenSource": "keychain", ... }
84
+ # (when /api/v1/me ships, augmented with the resolved tokenSource)
85
+ # → { "authenticated": true, "tokenSource": "env", "subject": "...", ... }
86
+ # (fallback: token verified by listing workspaces + JWT decode)
87
+ ```
88
+
89
+ A non-zero exit + `code: "unauthorized"` means the token is bad. Always run
90
+ `whoami` once at the start of an agent session — it's the cheapest check and
91
+ gives you the auth identity for logs/audits.
92
+
93
+ ## Command reference (MVP-A)
94
+
95
+ ### Workspaces
96
+
97
+ ```bash
98
+ hubdoc workspaces ls --json
99
+ hubdoc workspaces show <id> --json
100
+ hubdoc workspaces create --name="Projet X" [--description="..."] [--icon=...] [--color=...] [--metadata='{"k":"v"}'] --json
101
+ hubdoc workspaces update <id> [--name=...] [--description=...] [--icon=...] [--color=...] [--metadata='...'] --json
102
+ hubdoc workspaces delete <id> --yes --json
103
+ ```
104
+
105
+ Note: the API field is `label`. The CLI accepts `--name` for ergonomic
106
+ consistency with folders/files and maps it to `label` on the wire.
107
+
108
+ ### Folders
109
+
110
+ ```bash
111
+ hubdoc folders ls [--workspace=ID] [--parent=ID] [--page=N] [--per-page=N] [--sort=...] --json
112
+ hubdoc folders show <id> --json
113
+ hubdoc folders create --workspace=ID --name="..." [--parent=ID] [--description=...] [--icon=...] [--color=...] --json
114
+ hubdoc folders rename <id> --name="..." --json # alias for: update <id> --name=
115
+ hubdoc folders move <id> --to=PARENT_ID --json # alias for: update <id> --parent=
116
+ hubdoc folders update <id> [--name=...] [--description=...] [--icon=...] [--color=...] [--parent=...] [--workspace=...] --json
117
+ hubdoc folders delete <id> --yes --json
118
+ ```
119
+
120
+ ### Files (documents)
121
+
122
+ ```bash
123
+ hubdoc files ls [--folder=ID] [--workspace=ID] [--limit=N] [--page=N] --json
124
+ hubdoc files show <id> --json
125
+ hubdoc files upload <local-path> [--folder=ID | --workspace=ID] [--name="..."] [--metadata='{...}'] [--auto-classify] [--chunked] --json
126
+ hubdoc files download <id> [--to=PATH] --json
127
+ hubdoc files rename <id> --name="..." --json
128
+ hubdoc files move <id> --to=FOLDER_ID --json
129
+ hubdoc files update <id> [--name=...] [--description=...] [--folder=...] [--workspace=...] [--metadata='...'] --json
130
+ hubdoc files delete <id> --yes --json
131
+ ```
132
+
133
+ Upload routing: files ≥ 50 MB (or `--chunked`) go through the
134
+ `ChunkedUploadsApi` (init session → upload chunks → complete + finalize).
135
+ Smaller files use a single `multipart/form-data` POST.
136
+
137
+ ## Example agent session
138
+
139
+ A worked example: find all PDFs in a workspace, download the first one,
140
+ rename it, then move it to an "archive" folder.
141
+
142
+ ```bash
143
+ # 0) Verify auth.
144
+ hubdoc whoami --json | jq -e '.authenticated // .email' >/dev/null
145
+
146
+ # 1) Pick the target workspace by name.
147
+ WS_ID=$(hubdoc workspaces ls --json | jq -r '.[] | select(.label=="Projet X") | .id')
148
+
149
+ # 2) Find PDF documents under that workspace.
150
+ PDFS=$(hubdoc files ls --workspace="$WS_ID" --limit=200 --json \
151
+ | jq '[.[] | select(.name | endswith(".pdf"))]')
152
+ COUNT=$(echo "$PDFS" | jq 'length')
153
+ echo "Found $COUNT PDFs"
154
+
155
+ # 3) Download the first one.
156
+ DOC_ID=$(echo "$PDFS" | jq -r '.[0].id')
157
+ hubdoc files download "$DOC_ID" --to=./out.pdf --json
158
+
159
+ # 4) Rename it server-side.
160
+ hubdoc files rename "$DOC_ID" --name="archive-$(date +%Y%m%d).pdf" --json
161
+
162
+ # 5) Make sure the archive folder exists, then move the file under it.
163
+ ARCHIVE_ID=$(hubdoc folders ls --workspace="$WS_ID" --json \
164
+ | jq -r '.[] | select(.name=="Archive") | .id')
165
+ if [ -z "$ARCHIVE_ID" ]; then
166
+ ARCHIVE_ID=$(hubdoc folders create --workspace="$WS_ID" --name="Archive" --json \
167
+ | jq -r '.data.id')
168
+ fi
169
+ hubdoc files move "$DOC_ID" --to="$ARCHIVE_ID" --json
170
+ ```
171
+
172
+ Notice the pattern an agent should follow:
173
+
174
+ 1. `--json` on every command so output is parseable.
175
+ 2. Use `jq -e` to fail fast (non-zero exit on jq predicate failure).
176
+ 3. Capture IDs to variables; never re-list when you already know an ID.
177
+ 4. Always pass `--yes` for any `delete` in non-interactive mode.
178
+
179
+ ## Error handling
180
+
181
+ When a command fails with `--json`, stderr contains a JSON object and the
182
+ process exits non-zero. A robust agent pattern:
183
+
184
+ ```bash
185
+ if ! out=$(hubdoc files show "$ID" --json 2>err.json); then
186
+ case "$(jq -r .code < err.json)" in
187
+ not_found) echo "Doc $ID does not exist, recreating…" ;;
188
+ unauthorized) echo "Token expired, refreshing…"; exit 2 ;;
189
+ *) echo "Unexpected error:"; cat err.json; exit 1 ;;
190
+ esac
191
+ fi
192
+ ```
193
+
194
+ ### Composed documents (MVP-D)
195
+
196
+ The Markdown/Typst editorial pipeline. A composed document is built from a
197
+ template, has zero-or-more editable parts, and produces a PDF on `export`.
198
+
199
+ ```bash
200
+ hubdoc templates ls --json # discover available templates
201
+ hubdoc templates show <key> --json # see default_parts + page_settings
202
+
203
+ hubdoc composed-documents ls [--workspace=ID] [--folder=ID] [--status=STATUS] --json
204
+ hubdoc composed-documents show <id> --json
205
+ hubdoc composed-documents create --template=KEY --name="..." \
206
+ [--description=...] [--variables='{"k":"v"}'] [--workspace=ID] [--folder=ID] --json
207
+ hubdoc composed-documents update <id> [--name=...] [--description=...] \
208
+ [--variables='...'] [--page-settings='...'] [--metadata='...'] --json
209
+ hubdoc composed-documents delete <id> --yes --json
210
+ hubdoc composed-documents export <id> --json # compile → attaches PDF, returns file_id
211
+ ```
212
+
213
+ Short alias: `hubdoc composed ...`.
214
+
215
+ ### Parts (MVP-D)
216
+
217
+ Parts live under one composed document — every part subcommand requires
218
+ `--composed-document=ID`.
219
+
220
+ ```bash
221
+ hubdoc parts ls --composed-document=CD --json
222
+ hubdoc parts show <id> --composed-document=CD --json
223
+ hubdoc parts update <id> --composed-document=CD \
224
+ [--content="markdown..." | --content-file=part.md] \
225
+ [--status=...] [--title=...] [--part-type=...] [--bsize=...] [--page-break] [--alignment=...] --json
226
+ hubdoc parts delete <id> --composed-document=CD --yes --json
227
+ hubdoc parts reorder --composed-document=CD --order=ID1,ID2,ID3 --json
228
+ ```
229
+
230
+ For long Markdown/Typst blobs, `--content-file=path.md` reads the file
231
+ from disk — much friendlier than escaping a multi-paragraph string on
232
+ the command line.
233
+
234
+ #### End-to-end edition example
235
+
236
+ ```bash
237
+ # 1) Discover what's editable.
238
+ TPL=$(hubdoc templates ls --json | jq -r '.[] | select(.key=="invoice") | .key')
239
+
240
+ # 2) Spawn a composed document from the template.
241
+ CD=$(hubdoc composed-documents create \
242
+ --template="$TPL" --name="Invoice 042" \
243
+ --variables='{"client":"Acme","amount":1500}' \
244
+ --workspace="$WS" --json | jq -r '.data.id')
245
+
246
+ # 3) Edit one of its parts from a local Markdown file.
247
+ PART=$(hubdoc parts ls --composed-document="$CD" --json | jq -r '.[0].id')
248
+ hubdoc parts update "$PART" --composed-document="$CD" --content-file=./intro.md --status=ready --json
249
+
250
+ # 4) Reorder a couple of parts.
251
+ hubdoc parts reorder --composed-document="$CD" --order="$PART_INTRO,$PART_BODY,$PART_CONCLUSION" --json
252
+
253
+ # 5) Compile and grab the resulting PDF.
254
+ FILE_ID=$(hubdoc composed-documents export "$CD" --json | jq -r '.data.file_id')
255
+ hubdoc files download "$FILE_ID" --to=./invoice-042.pdf --json
256
+ ```
257
+
258
+ ### Search (MVP-B)
259
+
260
+ ```bash
261
+ hubdoc search "<query>" [--entity-type=files|folders|workspaces] [--workspace=ID] [--limit=N] --json
262
+ ```
263
+
264
+ Wraps the same hybrid search (FTS + semantic + RRF fusion) as the
265
+ advanced search UI, scoped to entities the user can access. Server caps
266
+ `--limit` at 100; default is 25.
267
+
268
+ Response shape (passed through unchanged in `--json` mode):
269
+
270
+ ```json
271
+ {
272
+ "results": [
273
+ {
274
+ "entity_type": "Documents::File",
275
+ "entity_id": "...",
276
+ "name": "facture-edf.pdf",
277
+ "page_number": 2,
278
+ "excerpt": "first 300 chars of matching content",
279
+ "score": 0.852,
280
+ "source": "text|semantic|hybrid",
281
+ "updated_at": "2026-05-18T15:00:00Z",
282
+ "workspace_id": "...",
283
+ "folder_id": "..."
284
+ }
285
+ ],
286
+ "total": 7,
287
+ "limit": 25
288
+ }
289
+ ```
290
+
291
+ Errors: `{"error": "q is required", "code": "http_400"}` if the query is
292
+ empty (caught client-side too, before any HTTP call).
293
+
294
+ ## Out of scope (planned)
295
+
296
+ - `hubdoc templates create|update|delete` — depends on corex#417 backend
297
+ extension (the controller is read-only today). The CLI will follow once
298
+ the API is in place.
299
+ - `hubdoc permissions ...` — to be scoped if/when demand confirms.
300
+ - JSON-API for PAT management (`hubdoc auth tokens ls/revoke`) — the
301
+ Corex PAT controller is Inertia/web-only today.
302
+ - `/api/v1/me` — not yet shipped; `whoami` falls back to JWT decode.
303
+ - `/api/v1/documents/documents/:id/blob` — not yet shipped; `files
304
+ download` falls back to `download_url` if the document carries one.
305
+
306
+ ## Output mode selection
307
+
308
+ | Flag | Stdout | Stderr | Confirmation prompts |
309
+ | -------------- | ---------------------------- | ----------------- | -------------------- |
310
+ | (none) | Pretty tables, color, hints | Errors (`❌ ...`) | Yes (inquirer) |
311
+ | `--json` | Single JSON value | JSON error object | **Refused**: pass `--yes` |
312
+
313
+ Mix and match safely: `--json` can sit on a single command or be promoted
314
+ to a global default via `hubdoc --json <subcommand> ...`.
package/package.json CHANGED
@@ -1,119 +1,48 @@
1
1
  {
2
2
  "name": "@sinoia/hubdoc-tools",
3
- "version": "1.3.10",
3
+ "version": "1.5.1",
4
4
  "description": "Professional command-line tool for HubDoc document management and bulk import/export",
5
- "main": "dist/index.js",
6
- "types": "dist/index.d.ts",
5
+ "main": "cli.js",
7
6
  "bin": {
8
- "hubdoc-tool": "./dist/cli.js"
7
+ "hubdoc": "./cli.js",
8
+ "hubdoc-tool": "./cli.js"
9
9
  },
10
10
  "files": [
11
- "dist",
11
+ "cli.js",
12
12
  "README.md",
13
- "LICENSE"
13
+ "docs/"
14
14
  ],
15
- "exports": {
16
- ".": {
17
- "types": "./dist/index.d.ts",
18
- "require": "./dist/index.js",
19
- "import": "./dist/index.js"
20
- },
21
- "./plugins/*": {
22
- "types": "./dist/plugins/*/index.d.ts",
23
- "require": "./dist/plugins/*/index.js",
24
- "import": "./dist/plugins/*/index.js"
25
- },
26
- "./api/*": {
27
- "types": "./dist/api/*.d.ts",
28
- "require": "./dist/api/*.js",
29
- "import": "./dist/api/*.js"
30
- },
31
- "./package.json": "./package.json"
32
- },
33
- "scripts": {
34
- "build": "npm run build:main && npm run build:plugins && npm run fix:aliases",
35
- "fix:aliases": "node scripts/fix-aliases.js",
36
- "build:main": "tsc --project tsconfig.main.json && tsc-alias -p tsconfig.main.json",
37
- "build:plugins": "tsc --project tsconfig.plugins.json && tsc-alias -p tsconfig.plugins.json && npm run copy:plugin-manifests",
38
- "copy:plugin-manifests": "for dir in plugins/*/; do name=$(basename \"$dir\"); [ -f \"$dir/plugin.json\" ] && mkdir -p \"dist/plugins/$name\" && cp \"$dir/plugin.json\" \"dist/plugins/$name/\" || true; done",
39
- "dev": "ts-node -r tsconfig-paths/register src/cli.ts",
40
- "start": "node dist/cli.js",
41
- "test": "jest",
42
- "test:watch": "jest --watch",
43
- "test:coverage": "jest --coverage",
44
- "typecheck": "tsc --noEmit",
45
- "test-api": "ts-node -r tsconfig-paths/register src/test/hubdoc-api-test.ts",
46
- "test-connectors": "node test-engine-integration.js",
47
- "test-box": "node test-box.js",
48
- "test-s3": "node test-s3.js",
49
- "test-azure": "node test-azure-blob.js",
50
- "test-all": "node test-all-connectors.js",
51
- "pkg": "pkg dist/cli.js --targets node18-win-x64 --output build/hubdoc-tool-windows.exe",
52
- "pkg:all": "pkg dist/cli.js --targets node18-win-x64,node18-macos-x64,node18-linux-x64 --out-path build/",
53
- "installer:win": "npm run build && npm run pkg",
54
- "package:quick": "npm run build && npm run pkg",
55
- "package:full": "./scripts/build-windows-installer.sh",
56
- "distribute": "npm run package:quick && echo 'Ready for distribution: build/hubdoc-tool-windows.exe'",
57
- "prepare:publish": "node scripts/prepare-publish.js",
58
- "restore:package": "node scripts/restore-package.js",
59
- "publish:test": "npm run prepare:publish && npm publish --dry-run && npm run restore:package",
60
- "lint": "echo 'No linting configured yet'",
61
- "prepublishOnly": "npm run build",
62
- "generate:api": "./scripts/generate-api-client.sh"
63
- },
64
- "publishConfig": {
65
- "access": "public"
66
- },
67
15
  "keywords": [
68
16
  "hubdoc",
17
+ "sinoia",
18
+ "corex",
19
+ "cli",
69
20
  "import",
70
21
  "export",
71
22
  "documents",
72
- "bulk"
23
+ "bulk",
24
+ "llm",
25
+ "agent",
26
+ "document-management"
73
27
  ],
74
- "author": "",
28
+ "author": "Sinoia",
75
29
  "license": "MIT",
76
- "dependencies": {
77
- "@aws-sdk/client-s3": "^3.0.0",
78
- "@aws-sdk/lib-storage": "^3.0.0",
79
- "@azure/storage-blob": "^12.0.0",
80
- "@types/xml2js": "^0.4.14",
81
- "axios": "^1.5.0",
82
- "chalk": "^4.1.2",
83
- "commander": "^11.0.0",
84
- "csv-parser": "^3.0.0",
85
- "csv-writer": "^1.6.0",
86
- "dotenv": "^16.3.0",
87
- "form-data": "^4.0.0",
88
- "fs-extra": "^11.1.0",
89
- "glob": "^10.3.0",
90
- "googleapis": "^128.0.0",
91
- "inquirer": "^9.2.0",
92
- "ora": "^5.4.1",
93
- "xml2js": "^0.6.2"
30
+ "homepage": "https://code.plugandwork.net/sinoia/hubdoc-tools#readme",
31
+ "repository": {
32
+ "type": "git",
33
+ "url": "https://code.plugandwork.net/sinoia/hubdoc-tools.git"
94
34
  },
95
- "devDependencies": {
96
- "@types/fs-extra": "^11.0.0",
97
- "@types/inquirer": "^9.0.0",
98
- "@types/jest": "^29.5.14",
99
- "@types/node": "^20.5.0",
100
- "axios-mock-adapter": "^2.1.0",
101
- "jest": "^29.7.0",
102
- "pkg": "^5.8.1",
103
- "ts-jest": "^29.4.1",
104
- "ts-node": "^10.9.0",
105
- "tsc-alias": "^1.8.16",
106
- "tsconfig-paths": "^4.2.0",
107
- "typescript": "^5.9.2"
35
+ "bugs": {
36
+ "url": "https://code.plugandwork.net/sinoia/hubdoc-tools/-/issues"
108
37
  },
109
- "pkg": {
110
- "assets": [
111
- "plugins/**/*",
112
- "docs/**/*",
113
- "config-examples/**/*"
114
- ],
115
- "scripts": [
116
- "dist/**/*.js"
117
- ]
38
+ "engines": {
39
+ "node": ">=22"
40
+ },
41
+ "optionalDependencies": {
42
+ "keytar": "^7.9.0"
43
+ },
44
+ "publishConfig": {
45
+ "access": "public",
46
+ "registry": "https://registry.npmjs.org/"
118
47
  }
119
48
  }
package/LICENSE DELETED
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2024 Sinoia
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
@@ -1,15 +0,0 @@
1
- import { DocumentSourcePlugin, PluginConfig, ScanResult, ImportResult, DocumentSource } from '../../../../types/plugins';
2
- declare class ConnectionPlugin implements DocumentSourcePlugin {
3
- readonly name = "connection-plugin";
4
- readonly version = "1.0.0";
5
- readonly description = "Plugin for testing connections";
6
- readonly supportedOperations: readonly ["import"];
7
- testConnection(config: PluginConfig): Promise<boolean>;
8
- scan(config: PluginConfig): Promise<ScanResult>;
9
- import(config: PluginConfig, sources: DocumentSource[], targetDir: string): Promise<ImportResult[]>;
10
- getConfigSchema(): Record<string, any>;
11
- initialize(config: PluginConfig): Promise<void>;
12
- destroy(): Promise<void>;
13
- }
14
- export default ConnectionPlugin;
15
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/__tests__/fixtures/plugins/connection-plugin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEzH,cAAM,gBAAiB,YAAW,oBAAoB;IACpD,QAAQ,CAAC,IAAI,uBAAuB;IACpC,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,WAAW,oCAAoC;IACxD,QAAQ,CAAC,mBAAmB,sBAAuB;IAE7C,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IAKtD,IAAI,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC;IAS/C,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAIzG,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAShC,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAC/C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAC/B;AAED,eAAe,gBAAgB,CAAC"}
@@ -1,37 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- class ConnectionPlugin {
4
- constructor() {
5
- this.name = 'connection-plugin';
6
- this.version = '1.0.0';
7
- this.description = 'Plugin for testing connections';
8
- this.supportedOperations = ['import'];
9
- }
10
- async testConnection(config) {
11
- // Return true if config.valid is true, false otherwise
12
- return config.valid === true;
13
- }
14
- async scan(config) {
15
- return {
16
- sources: [],
17
- totalCount: 0,
18
- totalSize: 0,
19
- errors: []
20
- };
21
- }
22
- async import(config, sources, targetDir) {
23
- return [];
24
- }
25
- getConfigSchema() {
26
- return {
27
- type: 'object',
28
- properties: {
29
- valid: { type: 'boolean' }
30
- }
31
- };
32
- }
33
- async initialize(config) { }
34
- async destroy() { }
35
- }
36
- exports.default = ConnectionPlugin;
37
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/__tests__/fixtures/plugins/connection-plugin/index.ts"],"names":[],"mappings":";;AAEA,MAAM,gBAAgB;IAAtB;QACW,SAAI,GAAG,mBAAmB,CAAC;QAC3B,YAAO,GAAG,OAAO,CAAC;QAClB,gBAAW,GAAG,gCAAgC,CAAC;QAC/C,wBAAmB,GAAG,CAAC,QAAQ,CAAU,CAAC;IA+BrD,CAAC;IA7BC,KAAK,CAAC,cAAc,CAAC,MAAoB;QACvC,uDAAuD;QACvD,OAAQ,MAAc,CAAC,KAAK,KAAK,IAAI,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAoB;QAC7B,OAAO;YACL,OAAO,EAAE,EAAE;YACX,UAAU,EAAE,CAAC;YACb,SAAS,EAAE,CAAC;YACZ,MAAM,EAAE,EAAE;SACX,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAoB,EAAE,OAAyB,EAAE,SAAiB;QAC7E,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,eAAe;QACb,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;aAC3B;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAoB,IAAkB,CAAC;IACxD,KAAK,CAAC,OAAO,KAAmB,CAAC;CAClC;AAED,kBAAe,gBAAgB,CAAC"}
@@ -1,15 +0,0 @@
1
- import { DocumentSourcePlugin, PluginConfig, ScanResult, ImportResult, DocumentSource, PluginImportOptions } from '../../../../types/plugins';
2
- declare class ScanPlugin implements DocumentSourcePlugin {
3
- readonly name = "scan-plugin";
4
- readonly version = "1.0.0";
5
- readonly description = "Plugin for testing scan functionality";
6
- readonly supportedOperations: readonly ["import"];
7
- testConnection(config: PluginConfig): Promise<boolean>;
8
- scan(config: PluginConfig, options?: PluginImportOptions): Promise<ScanResult>;
9
- import(config: PluginConfig, sources: DocumentSource[], targetDir: string): Promise<ImportResult[]>;
10
- getConfigSchema(): Record<string, any>;
11
- initialize(config: PluginConfig): Promise<void>;
12
- destroy(): Promise<void>;
13
- }
14
- export default ScanPlugin;
15
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/__tests__/fixtures/plugins/scan-plugin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAE9I,cAAM,UAAW,YAAW,oBAAoB;IAC9C,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,WAAW,2CAA2C;IAC/D,QAAQ,CAAC,mBAAmB,sBAAuB;IAE7C,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IAItD,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC;IA8B9E,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAIzG,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAOhC,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAC/C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAC/B;AAED,eAAe,UAAU,CAAC"}
@@ -1,54 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- class ScanPlugin {
4
- constructor() {
5
- this.name = 'scan-plugin';
6
- this.version = '1.0.0';
7
- this.description = 'Plugin for testing scan functionality';
8
- this.supportedOperations = ['import'];
9
- }
10
- async testConnection(config) {
11
- return true;
12
- }
13
- async scan(config, options) {
14
- const sources = [
15
- {
16
- id: 'doc-1',
17
- name: 'document1.pdf',
18
- path: '/folder/document1.pdf',
19
- size: 1024,
20
- mimeType: 'application/pdf',
21
- lastModified: new Date('2024-01-01'),
22
- metadata: { source: 'test' }
23
- },
24
- {
25
- id: 'doc-2',
26
- name: 'document2.docx',
27
- path: '/folder/document2.docx',
28
- size: 2048,
29
- mimeType: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
30
- lastModified: new Date('2024-01-02'),
31
- metadata: { source: 'test' }
32
- }
33
- ];
34
- return {
35
- sources,
36
- totalCount: sources.length,
37
- totalSize: sources.reduce((sum, s) => sum + s.size, 0),
38
- errors: []
39
- };
40
- }
41
- async import(config, sources, targetDir) {
42
- return [];
43
- }
44
- getConfigSchema() {
45
- return {
46
- type: 'object',
47
- properties: {}
48
- };
49
- }
50
- async initialize(config) { }
51
- async destroy() { }
52
- }
53
- exports.default = ScanPlugin;
54
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/__tests__/fixtures/plugins/scan-plugin/index.ts"],"names":[],"mappings":";;AAEA,MAAM,UAAU;IAAhB;QACW,SAAI,GAAG,aAAa,CAAC;QACrB,YAAO,GAAG,OAAO,CAAC;QAClB,gBAAW,GAAG,uCAAuC,CAAC;QACtD,wBAAmB,GAAG,CAAC,QAAQ,CAAU,CAAC;IAiDrD,CAAC;IA/CC,KAAK,CAAC,cAAc,CAAC,MAAoB;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAoB,EAAE,OAA6B;QAC5D,MAAM,OAAO,GAAqB;YAChC;gBACE,EAAE,EAAE,OAAO;gBACX,IAAI,EAAE,eAAe;gBACrB,IAAI,EAAE,uBAAuB;gBAC7B,IAAI,EAAE,IAAI;gBACV,QAAQ,EAAE,iBAAiB;gBAC3B,YAAY,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;gBACpC,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;aAC7B;YACD;gBACE,EAAE,EAAE,OAAO;gBACX,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,wBAAwB;gBAC9B,IAAI,EAAE,IAAI;gBACV,QAAQ,EAAE,yEAAyE;gBACnF,YAAY,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;gBACpC,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;aAC7B;SACF,CAAC;QAEF,OAAO;YACL,OAAO;YACP,UAAU,EAAE,OAAO,CAAC,MAAM;YAC1B,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACtD,MAAM,EAAE,EAAE;SACX,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAoB,EAAE,OAAyB,EAAE,SAAiB;QAC7E,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,eAAe;QACb,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;SACf,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAoB,IAAkB,CAAC;IACxD,KAAK,CAAC,OAAO,KAAmB,CAAC;CAClC;AAED,kBAAe,UAAU,CAAC"}
@@ -1,15 +0,0 @@
1
- import { DocumentSourcePlugin, PluginConfig, ScanResult, ImportResult, DocumentSource } from '../../../../types/plugins';
2
- declare class TestPlugin implements DocumentSourcePlugin {
3
- readonly name = "test-plugin";
4
- readonly version = "1.0.0";
5
- readonly description = "Test plugin for unit tests";
6
- readonly supportedOperations: readonly ["import"];
7
- testConnection(config: PluginConfig): Promise<boolean>;
8
- scan(config: PluginConfig): Promise<ScanResult>;
9
- import(config: PluginConfig, sources: DocumentSource[], targetDir: string): Promise<ImportResult[]>;
10
- getConfigSchema(): Record<string, any>;
11
- initialize(config: PluginConfig): Promise<void>;
12
- destroy(): Promise<void>;
13
- }
14
- export default TestPlugin;
15
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/__tests__/fixtures/plugins/test-plugin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEzH,cAAM,UAAW,YAAW,oBAAoB;IAC9C,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,WAAW,gCAAgC;IACpD,QAAQ,CAAC,mBAAmB,sBAAuB;IAE7C,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IAItD,IAAI,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC;IAS/C,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAIzG,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAOhC,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAC/C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAC/B;AAED,eAAe,UAAU,CAAC"}