@aaronsb/kg-cli 0.6.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 (266) hide show
  1. package/README.md +112 -0
  2. package/dist/api/client.d.ts +867 -0
  3. package/dist/api/client.d.ts.map +1 -0
  4. package/dist/api/client.js +1362 -0
  5. package/dist/api/client.js.map +1 -0
  6. package/dist/cli/admin/backup.d.ts +9 -0
  7. package/dist/cli/admin/backup.d.ts.map +1 -0
  8. package/dist/cli/admin/backup.js +363 -0
  9. package/dist/cli/admin/backup.js.map +1 -0
  10. package/dist/cli/admin/index.d.ts +7 -0
  11. package/dist/cli/admin/index.d.ts.map +1 -0
  12. package/dist/cli/admin/index.js +52 -0
  13. package/dist/cli/admin/index.js.map +1 -0
  14. package/dist/cli/admin/scheduler.d.ts +7 -0
  15. package/dist/cli/admin/scheduler.d.ts.map +1 -0
  16. package/dist/cli/admin/scheduler.js +125 -0
  17. package/dist/cli/admin/scheduler.js.map +1 -0
  18. package/dist/cli/admin/status.d.ts +7 -0
  19. package/dist/cli/admin/status.d.ts.map +1 -0
  20. package/dist/cli/admin/status.js +134 -0
  21. package/dist/cli/admin/status.js.map +1 -0
  22. package/dist/cli/admin/utils.d.ts +34 -0
  23. package/dist/cli/admin/utils.d.ts.map +1 -0
  24. package/dist/cli/admin/utils.js +441 -0
  25. package/dist/cli/admin/utils.js.map +1 -0
  26. package/dist/cli/ai-config/embedding.d.ts +11 -0
  27. package/dist/cli/ai-config/embedding.d.ts.map +1 -0
  28. package/dist/cli/ai-config/embedding.js +598 -0
  29. package/dist/cli/ai-config/embedding.js.map +1 -0
  30. package/dist/cli/ai-config/extraction.d.ts +11 -0
  31. package/dist/cli/ai-config/extraction.d.ts.map +1 -0
  32. package/dist/cli/ai-config/extraction.js +206 -0
  33. package/dist/cli/ai-config/extraction.js.map +1 -0
  34. package/dist/cli/ai-config/index.d.ts +21 -0
  35. package/dist/cli/ai-config/index.d.ts.map +1 -0
  36. package/dist/cli/ai-config/index.js +27 -0
  37. package/dist/cli/ai-config/index.js.map +1 -0
  38. package/dist/cli/ai-config/keys.d.ts +11 -0
  39. package/dist/cli/ai-config/keys.d.ts.map +1 -0
  40. package/dist/cli/ai-config/keys.js +182 -0
  41. package/dist/cli/ai-config/keys.js.map +1 -0
  42. package/dist/cli/ai-config/utils.d.ts +13 -0
  43. package/dist/cli/ai-config/utils.d.ts.map +1 -0
  44. package/dist/cli/ai-config/utils.js +84 -0
  45. package/dist/cli/ai-config/utils.js.map +1 -0
  46. package/dist/cli/artifact.d.ts +8 -0
  47. package/dist/cli/artifact.d.ts.map +1 -0
  48. package/dist/cli/artifact.js +296 -0
  49. package/dist/cli/artifact.js.map +1 -0
  50. package/dist/cli/auth-admin.d.ts +11 -0
  51. package/dist/cli/auth-admin.d.ts.map +1 -0
  52. package/dist/cli/auth-admin.js +415 -0
  53. package/dist/cli/auth-admin.js.map +1 -0
  54. package/dist/cli/colors.d.ts +105 -0
  55. package/dist/cli/colors.d.ts.map +1 -0
  56. package/dist/cli/colors.js +164 -0
  57. package/dist/cli/colors.js.map +1 -0
  58. package/dist/cli/commands.d.ts +6 -0
  59. package/dist/cli/commands.d.ts.map +1 -0
  60. package/dist/cli/commands.js +164 -0
  61. package/dist/cli/commands.js.map +1 -0
  62. package/dist/cli/config.d.ts +6 -0
  63. package/dist/cli/config.d.ts.map +1 -0
  64. package/dist/cli/config.js +694 -0
  65. package/dist/cli/config.js.map +1 -0
  66. package/dist/cli/curve-viz.d.ts +89 -0
  67. package/dist/cli/curve-viz.d.ts.map +1 -0
  68. package/dist/cli/curve-viz.js +228 -0
  69. package/dist/cli/curve-viz.js.map +1 -0
  70. package/dist/cli/database.d.ts +6 -0
  71. package/dist/cli/database.d.ts.map +1 -0
  72. package/dist/cli/database.js +324 -0
  73. package/dist/cli/database.js.map +1 -0
  74. package/dist/cli/document.d.ts +6 -0
  75. package/dist/cli/document.d.ts.map +1 -0
  76. package/dist/cli/document.js +458 -0
  77. package/dist/cli/document.js.map +1 -0
  78. package/dist/cli/group.d.ts +8 -0
  79. package/dist/cli/group.d.ts.map +1 -0
  80. package/dist/cli/group.js +174 -0
  81. package/dist/cli/group.js.map +1 -0
  82. package/dist/cli/health.d.ts +6 -0
  83. package/dist/cli/health.d.ts.map +1 -0
  84. package/dist/cli/health.js +34 -0
  85. package/dist/cli/health.js.map +1 -0
  86. package/dist/cli/help-formatter.d.ts +16 -0
  87. package/dist/cli/help-formatter.d.ts.map +1 -0
  88. package/dist/cli/help-formatter.js +248 -0
  89. package/dist/cli/help-formatter.js.map +1 -0
  90. package/dist/cli/help.d.ts +9 -0
  91. package/dist/cli/help.d.ts.map +1 -0
  92. package/dist/cli/help.js +227 -0
  93. package/dist/cli/help.js.map +1 -0
  94. package/dist/cli/ingest.d.ts +6 -0
  95. package/dist/cli/ingest.d.ts.map +1 -0
  96. package/dist/cli/ingest.js +722 -0
  97. package/dist/cli/ingest.js.map +1 -0
  98. package/dist/cli/jobs.d.ts +6 -0
  99. package/dist/cli/jobs.d.ts.map +1 -0
  100. package/dist/cli/jobs.js +663 -0
  101. package/dist/cli/jobs.js.map +1 -0
  102. package/dist/cli/login.d.ts +21 -0
  103. package/dist/cli/login.d.ts.map +1 -0
  104. package/dist/cli/login.js +221 -0
  105. package/dist/cli/login.js.map +1 -0
  106. package/dist/cli/logout.d.ts +16 -0
  107. package/dist/cli/logout.d.ts.map +1 -0
  108. package/dist/cli/logout.js +141 -0
  109. package/dist/cli/logout.js.map +1 -0
  110. package/dist/cli/mcp-config.d.ts +10 -0
  111. package/dist/cli/mcp-config.d.ts.map +1 -0
  112. package/dist/cli/mcp-config.js +358 -0
  113. package/dist/cli/mcp-config.js.map +1 -0
  114. package/dist/cli/oauth.d.ts +15 -0
  115. package/dist/cli/oauth.d.ts.map +1 -0
  116. package/dist/cli/oauth.js +296 -0
  117. package/dist/cli/oauth.js.map +1 -0
  118. package/dist/cli/ontology.d.ts +6 -0
  119. package/dist/cli/ontology.d.ts.map +1 -0
  120. package/dist/cli/ontology.js +231 -0
  121. package/dist/cli/ontology.js.map +1 -0
  122. package/dist/cli/polarity.d.ts +6 -0
  123. package/dist/cli/polarity.d.ts.map +1 -0
  124. package/dist/cli/polarity.js +295 -0
  125. package/dist/cli/polarity.js.map +1 -0
  126. package/dist/cli/projection.d.ts +8 -0
  127. package/dist/cli/projection.d.ts.map +1 -0
  128. package/dist/cli/projection.js +297 -0
  129. package/dist/cli/projection.js.map +1 -0
  130. package/dist/cli/query-def.d.ts +8 -0
  131. package/dist/cli/query-def.d.ts.map +1 -0
  132. package/dist/cli/query-def.js +163 -0
  133. package/dist/cli/query-def.js.map +1 -0
  134. package/dist/cli/rbac.d.ts +12 -0
  135. package/dist/cli/rbac.d.ts.map +1 -0
  136. package/dist/cli/rbac.js +615 -0
  137. package/dist/cli/rbac.js.map +1 -0
  138. package/dist/cli/search.d.ts +6 -0
  139. package/dist/cli/search.d.ts.map +1 -0
  140. package/dist/cli/search.js +829 -0
  141. package/dist/cli/search.js.map +1 -0
  142. package/dist/cli/source.d.ts +6 -0
  143. package/dist/cli/source.d.ts.map +1 -0
  144. package/dist/cli/source.js +202 -0
  145. package/dist/cli/source.js.map +1 -0
  146. package/dist/cli/verb-router.d.ts +25 -0
  147. package/dist/cli/verb-router.d.ts.map +1 -0
  148. package/dist/cli/verb-router.js +415 -0
  149. package/dist/cli/verb-router.js.map +1 -0
  150. package/dist/cli/vocabulary/config.d.ts +7 -0
  151. package/dist/cli/vocabulary/config.d.ts.map +1 -0
  152. package/dist/cli/vocabulary/config.js +201 -0
  153. package/dist/cli/vocabulary/config.js.map +1 -0
  154. package/dist/cli/vocabulary/consolidate.d.ts +8 -0
  155. package/dist/cli/vocabulary/consolidate.d.ts.map +1 -0
  156. package/dist/cli/vocabulary/consolidate.js +192 -0
  157. package/dist/cli/vocabulary/consolidate.js.map +1 -0
  158. package/dist/cli/vocabulary/embeddings.d.ts +9 -0
  159. package/dist/cli/vocabulary/embeddings.d.ts.map +1 -0
  160. package/dist/cli/vocabulary/embeddings.js +205 -0
  161. package/dist/cli/vocabulary/embeddings.js.map +1 -0
  162. package/dist/cli/vocabulary/epistemic.d.ts +7 -0
  163. package/dist/cli/vocabulary/epistemic.d.ts.map +1 -0
  164. package/dist/cli/vocabulary/epistemic.js +315 -0
  165. package/dist/cli/vocabulary/epistemic.js.map +1 -0
  166. package/dist/cli/vocabulary/index.d.ts +7 -0
  167. package/dist/cli/vocabulary/index.d.ts.map +1 -0
  168. package/dist/cli/vocabulary/index.js +45 -0
  169. package/dist/cli/vocabulary/index.js.map +1 -0
  170. package/dist/cli/vocabulary/profiles.d.ts +7 -0
  171. package/dist/cli/vocabulary/profiles.d.ts.map +1 -0
  172. package/dist/cli/vocabulary/profiles.js +171 -0
  173. package/dist/cli/vocabulary/profiles.js.map +1 -0
  174. package/dist/cli/vocabulary/similarity.d.ts +9 -0
  175. package/dist/cli/vocabulary/similarity.d.ts.map +1 -0
  176. package/dist/cli/vocabulary/similarity.js +199 -0
  177. package/dist/cli/vocabulary/similarity.js.map +1 -0
  178. package/dist/cli/vocabulary/status.d.ts +8 -0
  179. package/dist/cli/vocabulary/status.d.ts.map +1 -0
  180. package/dist/cli/vocabulary/status.js +280 -0
  181. package/dist/cli/vocabulary/status.js.map +1 -0
  182. package/dist/cli/vocabulary/sync.d.ts +7 -0
  183. package/dist/cli/vocabulary/sync.d.ts.map +1 -0
  184. package/dist/cli/vocabulary/sync.js +111 -0
  185. package/dist/cli/vocabulary/sync.js.map +1 -0
  186. package/dist/index.d.ts +9 -0
  187. package/dist/index.d.ts.map +1 -0
  188. package/dist/index.js +16 -0
  189. package/dist/index.js.map +1 -0
  190. package/dist/lib/auth/auth-client.d.ts +247 -0
  191. package/dist/lib/auth/auth-client.d.ts.map +1 -0
  192. package/dist/lib/auth/auth-client.js +305 -0
  193. package/dist/lib/auth/auth-client.js.map +1 -0
  194. package/dist/lib/auth/challenge.d.ts +39 -0
  195. package/dist/lib/auth/challenge.d.ts.map +1 -0
  196. package/dist/lib/auth/challenge.js +125 -0
  197. package/dist/lib/auth/challenge.js.map +1 -0
  198. package/dist/lib/auth/client-credentials-flow.d.ts +58 -0
  199. package/dist/lib/auth/client-credentials-flow.d.ts.map +1 -0
  200. package/dist/lib/auth/client-credentials-flow.js +118 -0
  201. package/dist/lib/auth/client-credentials-flow.js.map +1 -0
  202. package/dist/lib/auth/device-flow.d.ts +75 -0
  203. package/dist/lib/auth/device-flow.d.ts.map +1 -0
  204. package/dist/lib/auth/device-flow.js +177 -0
  205. package/dist/lib/auth/device-flow.js.map +1 -0
  206. package/dist/lib/auth/index.d.ts +14 -0
  207. package/dist/lib/auth/index.d.ts.map +1 -0
  208. package/dist/lib/auth/index.js +34 -0
  209. package/dist/lib/auth/index.js.map +1 -0
  210. package/dist/lib/auth/oauth-types.d.ts +69 -0
  211. package/dist/lib/auth/oauth-types.d.ts.map +1 -0
  212. package/dist/lib/auth/oauth-types.js +10 -0
  213. package/dist/lib/auth/oauth-types.js.map +1 -0
  214. package/dist/lib/auth/oauth-utils.d.ts +51 -0
  215. package/dist/lib/auth/oauth-utils.d.ts.map +1 -0
  216. package/dist/lib/auth/oauth-utils.js +110 -0
  217. package/dist/lib/auth/oauth-utils.js.map +1 -0
  218. package/dist/lib/auth/token-manager.d.ts +87 -0
  219. package/dist/lib/auth/token-manager.d.ts.map +1 -0
  220. package/dist/lib/auth/token-manager.js +139 -0
  221. package/dist/lib/auth/token-manager.js.map +1 -0
  222. package/dist/lib/auth/token-refresh.d.ts +63 -0
  223. package/dist/lib/auth/token-refresh.d.ts.map +1 -0
  224. package/dist/lib/auth/token-refresh.js +141 -0
  225. package/dist/lib/auth/token-refresh.js.map +1 -0
  226. package/dist/lib/config.d.ts +286 -0
  227. package/dist/lib/config.d.ts.map +1 -0
  228. package/dist/lib/config.js +537 -0
  229. package/dist/lib/config.js.map +1 -0
  230. package/dist/lib/job-stream.d.ts +53 -0
  231. package/dist/lib/job-stream.d.ts.map +1 -0
  232. package/dist/lib/job-stream.js +153 -0
  233. package/dist/lib/job-stream.js.map +1 -0
  234. package/dist/lib/mcp-allowlist.d.ts +101 -0
  235. package/dist/lib/mcp-allowlist.d.ts.map +1 -0
  236. package/dist/lib/mcp-allowlist.js +340 -0
  237. package/dist/lib/mcp-allowlist.js.map +1 -0
  238. package/dist/lib/table-example.d.ts +7 -0
  239. package/dist/lib/table-example.d.ts.map +1 -0
  240. package/dist/lib/table-example.js +105 -0
  241. package/dist/lib/table-example.js.map +1 -0
  242. package/dist/lib/table.d.ts +95 -0
  243. package/dist/lib/table.d.ts.map +1 -0
  244. package/dist/lib/table.js +263 -0
  245. package/dist/lib/table.js.map +1 -0
  246. package/dist/lib/terminal-images.d.ts +66 -0
  247. package/dist/lib/terminal-images.d.ts.map +1 -0
  248. package/dist/lib/terminal-images.js +268 -0
  249. package/dist/lib/terminal-images.js.map +1 -0
  250. package/dist/mcp/formatters.d.ts +100 -0
  251. package/dist/mcp/formatters.d.ts.map +1 -0
  252. package/dist/mcp/formatters.js +1411 -0
  253. package/dist/mcp/formatters.js.map +1 -0
  254. package/dist/mcp-server.d.ts +9 -0
  255. package/dist/mcp-server.d.ts.map +1 -0
  256. package/dist/mcp-server.js +1810 -0
  257. package/dist/mcp-server.js.map +1 -0
  258. package/dist/types/index.d.ts +742 -0
  259. package/dist/types/index.d.ts.map +1 -0
  260. package/dist/types/index.js +6 -0
  261. package/dist/types/index.js.map +1 -0
  262. package/dist/version.d.ts +10 -0
  263. package/dist/version.d.ts.map +1 -0
  264. package/dist/version.js +13 -0
  265. package/dist/version.js.map +1 -0
  266. package/package.json +84 -0
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ /**
3
+ * Example: Refactored Jobs List using Table utility with type-based formatting
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createJobsTable = createJobsTable;
7
+ const table_1 = require("./table");
8
+ // Define the jobs table configuration once
9
+ function createJobsTable(fullId = false) {
10
+ return new table_1.Table({
11
+ columns: [
12
+ {
13
+ header: 'Job ID',
14
+ field: 'job_id',
15
+ type: 'job_id',
16
+ width: 'flex',
17
+ priority: 2,
18
+ maxWidth: fullId ? 40 : 30,
19
+ minWidth: fullId ? 38 : 20
20
+ },
21
+ {
22
+ header: 'Client',
23
+ field: 'client_id',
24
+ type: 'user',
25
+ width: 12,
26
+ customFormat: (id) => id || 'anonymous',
27
+ truncate: true
28
+ },
29
+ {
30
+ header: 'Status',
31
+ field: 'status',
32
+ type: 'status',
33
+ width: 18
34
+ },
35
+ {
36
+ header: 'Ontology',
37
+ field: 'ontology',
38
+ type: 'heading',
39
+ width: 'flex',
40
+ priority: 1,
41
+ customFormat: (name) => name || '-',
42
+ truncate: true
43
+ },
44
+ {
45
+ header: 'Created',
46
+ field: 'created_at',
47
+ type: 'timestamp',
48
+ width: 18
49
+ },
50
+ {
51
+ header: 'Progress',
52
+ field: (job) => job.progress?.percent,
53
+ type: 'progress',
54
+ width: 10,
55
+ customFormat: (percent, job) => {
56
+ if (job.status === 'completed')
57
+ return '✓';
58
+ if (job.status === 'failed')
59
+ return '✗';
60
+ if (job.status === 'cancelled')
61
+ return '⊗';
62
+ return percent !== undefined ? String(percent) : '-';
63
+ }
64
+ }
65
+ ],
66
+ spacing: 2,
67
+ showHeader: true,
68
+ showSeparator: true
69
+ });
70
+ }
71
+ // Usage:
72
+ // const table = createJobsTable(fullId);
73
+ // table.print(jobs);
74
+ // Or for other tables:
75
+ /*
76
+ // Ontology list table
77
+ const ontologyTable = new Table({
78
+ columns: [
79
+ { header: 'Ontology', field: 'ontology', type: 'heading', width: 'flex' },
80
+ { header: 'Files', field: 'file_count', type: 'count', width: 10, align: 'right' },
81
+ { header: 'Concepts', field: 'concept_count', type: 'count', width: 10, align: 'right' },
82
+ { header: 'Sources', field: 'source_count', type: 'count', width: 10, align: 'right' }
83
+ ]
84
+ });
85
+
86
+ // Search results table
87
+ const searchTable = new Table({
88
+ columns: [
89
+ { header: 'Concept', field: 'label', type: 'value', width: 'flex', priority: 2 },
90
+ { header: 'ID', field: 'concept_id', type: 'concept_id', width: 25 },
91
+ { header: 'Similarity', field: 'score', width: 12, align: 'right', customFormat: (s) => `${(s * 100).toFixed(1)}%` },
92
+ { header: 'Evidence', field: 'evidence_count', type: 'count', width: 10, align: 'right' }
93
+ ]
94
+ });
95
+
96
+ // Backup files table
97
+ const backupTable = new Table({
98
+ columns: [
99
+ { header: 'Filename', field: 'filename', type: 'value', width: 'flex', priority: 2 },
100
+ { header: 'Size', field: 'size_mb', width: 12, align: 'right', customFormat: (mb) => `${mb.toFixed(2)} MB` },
101
+ { header: 'Created', field: 'created', type: 'timestamp', width: 20 }
102
+ ]
103
+ });
104
+ */
105
+ //# sourceMappingURL=table-example.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-example.js","sourceRoot":"","sources":["../../src/lib/table-example.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAMH,0CA0DC;AA9DD,mCAAgC;AAGhC,2CAA2C;AAC3C,SAAgB,eAAe,CAAC,SAAkB,KAAK;IACrD,OAAO,IAAI,aAAK,CAAY;QAC1B,OAAO,EAAE;YACP;gBACE,MAAM,EAAE,QAAQ;gBAChB,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,MAAM;gBACb,QAAQ,EAAE,CAAC;gBACX,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;gBAC1B,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;aAC3B;YACD;gBACE,MAAM,EAAE,QAAQ;gBAChB,KAAK,EAAE,WAAW;gBAClB,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,EAAE;gBACT,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,WAAW;gBACvC,QAAQ,EAAE,IAAI;aACf;YACD;gBACE,MAAM,EAAE,QAAQ;gBAChB,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,EAAE;aACV;YACD;gBACE,MAAM,EAAE,UAAU;gBAClB,KAAK,EAAE,UAAU;gBACjB,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,MAAM;gBACb,QAAQ,EAAE,CAAC;gBACX,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,GAAG;gBACnC,QAAQ,EAAE,IAAI;aACf;YACD;gBACE,MAAM,EAAE,SAAS;gBACjB,KAAK,EAAE,YAAY;gBACnB,IAAI,EAAE,WAAW;gBACjB,KAAK,EAAE,EAAE;aACV;YACD;gBACE,MAAM,EAAE,UAAU;gBAClB,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO;gBACrC,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,EAAE;gBACT,YAAY,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;oBAC7B,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW;wBAAE,OAAO,GAAG,CAAC;oBAC3C,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ;wBAAE,OAAO,GAAG,CAAC;oBACxC,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW;wBAAE,OAAO,GAAG,CAAC;oBAC3C,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBACvD,CAAC;aACF;SACF;QACD,OAAO,EAAE,CAAC;QACV,UAAU,EAAE,IAAI;QAChB,aAAa,EAAE,IAAI;KACpB,CAAC,CAAC;AACL,CAAC;AAED,SAAS;AACT,yCAAyC;AACzC,qBAAqB;AAErB,uBAAuB;AAEvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6BE"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Reusable Table Utility for CLI Output
3
+ *
4
+ * Provides a flexible, responsive table formatter with:
5
+ * - Dynamic column width distribution
6
+ * - Unicode-aware text padding
7
+ * - Priority-based column sizing
8
+ * - Semantic type-based formatting
9
+ * - Integrated color theming
10
+ */
11
+ /**
12
+ * Column width strategy
13
+ * - number: fixed width in characters
14
+ * - 'auto': fit to content
15
+ * - 'flex': flexible, shares remaining space
16
+ */
17
+ export type ColumnWidth = number | 'auto' | 'flex';
18
+ /**
19
+ * Column alignment
20
+ */
21
+ export type ColumnAlign = 'left' | 'right' | 'center';
22
+ /**
23
+ * Semantic column types for consistent formatting
24
+ */
25
+ export type ColumnType = 'text' | 'job_id' | 'concept_id' | 'user' | 'heading' | 'status' | 'timestamp' | 'count' | 'progress' | 'value';
26
+ /**
27
+ * Column definition
28
+ */
29
+ export interface TableColumn<T = any> {
30
+ /** Column header text */
31
+ header: string;
32
+ /** Field accessor - can be key name or function */
33
+ field: keyof T | ((row: T) => any);
34
+ /** Semantic type for formatting (applied after truncation) */
35
+ type?: ColumnType;
36
+ /** Column width strategy (default: 'auto') */
37
+ width?: ColumnWidth;
38
+ /** Minimum column width */
39
+ minWidth?: number;
40
+ /** Maximum column width (for flex columns) */
41
+ maxWidth?: number;
42
+ /** Priority for flex space distribution (higher = more space, default: 1) */
43
+ priority?: number;
44
+ /** Text alignment (default: 'left') */
45
+ align?: ColumnAlign;
46
+ /** Custom formatter for complex cases (receives raw value, returns RAW string - formatting applied after) */
47
+ customFormat?: (value: any, row: T) => string;
48
+ /** Truncate with ellipsis if exceeds width (default: true) */
49
+ truncate?: boolean;
50
+ }
51
+ /**
52
+ * Table configuration
53
+ */
54
+ export interface TableConfig<T = any> {
55
+ /** Column definitions */
56
+ columns: TableColumn<T>[];
57
+ /** Spacing between columns (default: 2) */
58
+ spacing?: number;
59
+ /** Show header row (default: true) */
60
+ showHeader?: boolean;
61
+ /** Show separator lines (default: true) */
62
+ showSeparator?: boolean;
63
+ /** Terminal width (auto-detected if not provided) */
64
+ terminalWidth?: number;
65
+ /** Empty message when no data (default: 'No data') */
66
+ emptyMessage?: string;
67
+ }
68
+ /**
69
+ * Reusable Table Builder
70
+ */
71
+ export declare class Table<T = any> {
72
+ private config;
73
+ constructor(config: TableConfig<T>);
74
+ /**
75
+ * Render table to string array (one line per array element)
76
+ */
77
+ render(data: T[]): string[];
78
+ /**
79
+ * Print table directly to console
80
+ */
81
+ print(data: T[]): void;
82
+ /**
83
+ * Get cell value from row
84
+ */
85
+ private getCellValue;
86
+ /**
87
+ * Calculate optimal column widths based on data and terminal size
88
+ */
89
+ private calculateColumnWidths;
90
+ /**
91
+ * Pad cell text to width with alignment
92
+ */
93
+ private padCell;
94
+ }
95
+ //# sourceMappingURL=table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../src/lib/table.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAEnD;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEtD;;GAEG;AACH,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,QAAQ,GACR,YAAY,GACZ,MAAM,GACN,SAAS,GACT,QAAQ,GACR,WAAW,GACX,OAAO,GACP,UAAU,GACV,OAAO,CAAC;AAEZ;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,GAAG;IAClC,yBAAyB;IACzB,MAAM,EAAE,MAAM,CAAC;IAEf,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC;IAEnC,8DAA8D;IAC9D,IAAI,CAAC,EAAE,UAAU,CAAC;IAElB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,WAAW,CAAC;IAEpB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,uCAAuC;IACvC,KAAK,CAAC,EAAE,WAAW,CAAC;IAEpB,6GAA6G;IAC7G,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC;IAE9C,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,GAAG;IAClC,yBAAyB;IACzB,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAE1B,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,sCAAsC;IACtC,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,2CAA2C;IAC3C,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,qDAAqD;IACrD,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAsDD;;GAEG;AACH,qBAAa,KAAK,CAAC,CAAC,GAAG,GAAG;IACxB,OAAO,CAAC,MAAM,CAA2B;gBAE7B,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;IAWlC;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE;IA+D3B;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI;IAKtB;;OAEG;IACH,OAAO,CAAC,YAAY;IAOpB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA4E7B;;OAEG;IACH,OAAO,CAAC,OAAO;CAgBhB"}
@@ -0,0 +1,263 @@
1
+ "use strict";
2
+ /**
3
+ * Reusable Table Utility for CLI Output
4
+ *
5
+ * Provides a flexible, responsive table formatter with:
6
+ * - Dynamic column width distribution
7
+ * - Unicode-aware text padding
8
+ * - Priority-based column sizing
9
+ * - Semantic type-based formatting
10
+ * - Integrated color theming
11
+ */
12
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ var desc = Object.getOwnPropertyDescriptor(m, k);
15
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
16
+ desc = { enumerable: true, get: function() { return m[k]; } };
17
+ }
18
+ Object.defineProperty(o, k2, desc);
19
+ }) : (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ o[k2] = m[k];
22
+ }));
23
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
24
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
25
+ }) : function(o, v) {
26
+ o["default"] = v;
27
+ });
28
+ var __importStar = (this && this.__importStar) || (function () {
29
+ var ownKeys = function(o) {
30
+ ownKeys = Object.getOwnPropertyNames || function (o) {
31
+ var ar = [];
32
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
33
+ return ar;
34
+ };
35
+ return ownKeys(o);
36
+ };
37
+ return function (mod) {
38
+ if (mod && mod.__esModule) return mod;
39
+ var result = {};
40
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
41
+ __setModuleDefault(result, mod);
42
+ return result;
43
+ };
44
+ })();
45
+ var __importDefault = (this && this.__importDefault) || function (mod) {
46
+ return (mod && mod.__esModule) ? mod : { "default": mod };
47
+ };
48
+ Object.defineProperty(exports, "__esModule", { value: true });
49
+ exports.Table = void 0;
50
+ const string_width_1 = __importDefault(require("string-width"));
51
+ const colors = __importStar(require("../cli/colors"));
52
+ const colors_1 = require("../cli/colors");
53
+ /**
54
+ * Type formatters - apply color/style to raw truncated strings
55
+ */
56
+ const typeFormatters = {
57
+ text: (v) => v,
58
+ job_id: (v) => colors.concept.id(v),
59
+ concept_id: (v) => colors.concept.id(v),
60
+ user: (v) => colors.ui.value(v),
61
+ heading: (v) => colors.ui.value(v),
62
+ status: (v, raw) => {
63
+ // Format job status with icons
64
+ switch (raw) {
65
+ case 'completed': return colors.status.success('✓ completed');
66
+ case 'failed': return colors.status.error('✗ failed');
67
+ case 'processing': return colors.status.info('⚙ processing');
68
+ case 'approved': return colors.status.success('✓ approved');
69
+ case 'awaiting_approval': return colors.status.warning('⏸ awaiting');
70
+ case 'pending': return colors.status.dim('○ pending');
71
+ case 'queued': return colors.status.info('⋯ queued');
72
+ case 'cancelled': return colors.status.dim('⊗ cancelled');
73
+ default: return colors.status.dim(v);
74
+ }
75
+ },
76
+ timestamp: (v, raw) => {
77
+ // Use rawValue (not truncated string) for date parsing
78
+ const d = new Date(raw || v);
79
+ if (isNaN(d.getTime())) {
80
+ return colors.status.dim('Invalid Date');
81
+ }
82
+ return colors.status.dim(d.toLocaleString('en-US', {
83
+ month: 'short',
84
+ day: 'numeric',
85
+ hour: '2-digit',
86
+ minute: '2-digit'
87
+ }));
88
+ },
89
+ count: (v) => colors.coloredCount(parseInt(v)),
90
+ progress: (v, raw) => {
91
+ // Handle empty/undefined
92
+ if (raw === undefined || raw === null || raw === '') {
93
+ return colors.status.dim('-');
94
+ }
95
+ // Handle special icons for terminal states (passed as string)
96
+ if (v === '✓')
97
+ return colors.status.success('✓');
98
+ if (v === '✗')
99
+ return colors.status.error('✗');
100
+ if (v === '⊗')
101
+ return colors.status.warning('⊗');
102
+ // Handle numeric progress
103
+ return colors.status.info(`${v}%`);
104
+ },
105
+ value: (v) => colors.ui.value(v)
106
+ };
107
+ /**
108
+ * Reusable Table Builder
109
+ */
110
+ class Table {
111
+ constructor(config) {
112
+ this.config = {
113
+ spacing: 2,
114
+ showHeader: true,
115
+ showSeparator: true,
116
+ terminalWidth: process.stdout.columns || 120,
117
+ emptyMessage: 'No data',
118
+ ...config
119
+ };
120
+ }
121
+ /**
122
+ * Render table to string array (one line per array element)
123
+ */
124
+ render(data) {
125
+ if (data.length === 0) {
126
+ return [colors.status.dim(`\n${this.config.emptyMessage}\n`)];
127
+ }
128
+ const lines = [];
129
+ const columnWidths = this.calculateColumnWidths(data);
130
+ const columnSpacing = ' '.repeat(this.config.spacing);
131
+ const sepWidth = this.config.terminalWidth - 4;
132
+ // Header
133
+ if (this.config.showHeader) {
134
+ if (this.config.showSeparator) {
135
+ lines.push('\n' + (0, colors_1.separator)(sepWidth));
136
+ }
137
+ const headerRow = this.config.columns.map((col, i) => this.padCell(colors.ui.header(col.header), columnWidths[i], col.align || 'left')).join(columnSpacing);
138
+ lines.push(headerRow);
139
+ if (this.config.showSeparator) {
140
+ lines.push((0, colors_1.separator)(sepWidth));
141
+ }
142
+ }
143
+ // Data rows
144
+ for (const row of data) {
145
+ const cells = this.config.columns.map((col, i) => {
146
+ const rawValue = this.getCellValue(row, col);
147
+ // Step 1: Convert to string (custom format or default)
148
+ let stringValue = col.customFormat
149
+ ? col.customFormat(rawValue, row)
150
+ : String(rawValue ?? '');
151
+ // Step 2: Truncate if needed (working with plain strings)
152
+ if (col.truncate !== false && stringValue.length > columnWidths[i]) {
153
+ stringValue = stringValue.substring(0, columnWidths[i] - 3) + '...';
154
+ }
155
+ // Step 3: Apply type-based formatting (adds color/style)
156
+ const formatted = col.type
157
+ ? typeFormatters[col.type](stringValue, rawValue)
158
+ : stringValue;
159
+ // Step 4: Pad to column width (handles ANSI codes properly)
160
+ return this.padCell(formatted, columnWidths[i], col.align || 'left');
161
+ });
162
+ lines.push(cells.join(columnSpacing));
163
+ }
164
+ // Footer separator
165
+ if (this.config.showSeparator) {
166
+ lines.push((0, colors_1.separator)(sepWidth));
167
+ lines.push(colors.status.dim(`\nShowing ${data.length} row(s)\n`));
168
+ }
169
+ return lines;
170
+ }
171
+ /**
172
+ * Print table directly to console
173
+ */
174
+ print(data) {
175
+ const lines = this.render(data);
176
+ console.log(lines.join('\n'));
177
+ }
178
+ /**
179
+ * Get cell value from row
180
+ */
181
+ getCellValue(row, col) {
182
+ if (typeof col.field === 'function') {
183
+ return col.field(row);
184
+ }
185
+ return row[col.field];
186
+ }
187
+ /**
188
+ * Calculate optimal column widths based on data and terminal size
189
+ */
190
+ calculateColumnWidths(data) {
191
+ const { columns, spacing, terminalWidth } = this.config;
192
+ // Step 1: Determine fixed-width columns
193
+ const fixedWidths = columns.map(col => {
194
+ if (typeof col.width === 'number') {
195
+ return col.width;
196
+ }
197
+ return null;
198
+ });
199
+ // Step 2: Calculate auto-fit columns (fit to content)
200
+ const autoWidths = columns.map((col, i) => {
201
+ if (col.width === 'auto') {
202
+ // Find max content width for this column (using raw strings before formatting)
203
+ const headerWidth = (0, string_width_1.default)(col.header);
204
+ const maxContentWidth = Math.max(headerWidth, ...data.map(row => {
205
+ const rawValue = this.getCellValue(row, col);
206
+ const stringValue = col.customFormat
207
+ ? col.customFormat(rawValue, row)
208
+ : String(rawValue ?? '');
209
+ return stringValue.length;
210
+ }));
211
+ const constrainedWidth = Math.min(col.maxWidth || Infinity, Math.max(col.minWidth || 0, maxContentWidth));
212
+ return constrainedWidth;
213
+ }
214
+ return null;
215
+ });
216
+ // Step 3: Calculate total fixed space used
217
+ const totalSpacing = spacing * (columns.length - 1);
218
+ const usedWidth = fixedWidths.reduce((sum, w) => sum + (w || 0), 0) +
219
+ autoWidths.reduce((sum, w) => sum + (w || 0), 0) +
220
+ totalSpacing + 4; // 4 for margins
221
+ const remainingWidth = Math.max(0, terminalWidth - usedWidth);
222
+ // Step 4: Distribute remaining width to flex columns
223
+ const flexColumns = columns
224
+ .map((col, i) => ({ col, i }))
225
+ .filter(({ col }) => col.width === 'flex' || col.width === undefined);
226
+ if (flexColumns.length === 0) {
227
+ // No flex columns, use fixed + auto widths
228
+ return columns.map((col, i) => fixedWidths[i] ?? autoWidths[i] ?? 10);
229
+ }
230
+ // Calculate total priority
231
+ const totalPriority = flexColumns.reduce((sum, { col }) => sum + (col.priority || 1), 0);
232
+ // Distribute remaining width by priority
233
+ const flexWidths = columns.map(() => 0);
234
+ flexColumns.forEach(({ col, i }) => {
235
+ const priority = col.priority || 1;
236
+ const share = Math.floor((remainingWidth * priority) / totalPriority);
237
+ const constrainedShare = Math.min(col.maxWidth || Infinity, Math.max(col.minWidth || 0, share));
238
+ flexWidths[i] = constrainedShare;
239
+ });
240
+ // Combine all widths
241
+ return columns.map((col, i) => fixedWidths[i] ?? autoWidths[i] ?? flexWidths[i] ?? 10);
242
+ }
243
+ /**
244
+ * Pad cell text to width with alignment
245
+ */
246
+ padCell(text, width, align) {
247
+ const visualWidth = (0, string_width_1.default)(text);
248
+ const padding = Math.max(0, width - visualWidth);
249
+ switch (align) {
250
+ case 'right':
251
+ return ' '.repeat(padding) + text;
252
+ case 'center':
253
+ const leftPad = Math.floor(padding / 2);
254
+ const rightPad = padding - leftPad;
255
+ return ' '.repeat(leftPad) + text + ' '.repeat(rightPad);
256
+ case 'left':
257
+ default:
258
+ return text + ' '.repeat(padding);
259
+ }
260
+ }
261
+ }
262
+ exports.Table = Table;
263
+ //# sourceMappingURL=table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/lib/table.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Terminal Image Display Utilities (ADR-057)
3
+ *
4
+ * Provides utilities for displaying images in the terminal using chafa,
5
+ * with fallback options and configuration support.
6
+ */
7
+ /**
8
+ * Check if chafa is available on the system
9
+ * @returns true if chafa command is available
10
+ */
11
+ export declare function isChafaAvailable(): boolean;
12
+ /**
13
+ * Get chafa version information
14
+ * @returns Version string or null if not available
15
+ */
16
+ export declare function getChafaVersion(): string | null;
17
+ export interface ChafaOptions {
18
+ /** Width in characters (default: terminal width) */
19
+ width?: number;
20
+ /** Height in characters (default: auto) */
21
+ height?: number;
22
+ /** Scale factor (0.0-1.0, e.g., 0.3 for 1/3 width) */
23
+ scale?: number;
24
+ /** Alignment: left, center, right (default: left) */
25
+ align?: 'left' | 'center' | 'right';
26
+ /** Color mode: 256 (default), 16, 2, or full (truecolor) */
27
+ colors?: '256' | '16' | '2' | 'full';
28
+ /** Symbol map: block, border, space, vhalf, etc. */
29
+ symbols?: string;
30
+ /** Enable animations for GIFs (default: false) */
31
+ animate?: boolean;
32
+ }
33
+ /**
34
+ * Display image in terminal using chafa
35
+ * @param imagePath - Path to image file
36
+ * @param options - Chafa display options
37
+ * @returns true if successfully displayed, false otherwise
38
+ */
39
+ export declare function displayImageWithChafa(imagePath: string, options?: ChafaOptions): boolean;
40
+ /**
41
+ * Display image from Buffer using chafa
42
+ * Writes to temp file, displays, then cleans up
43
+ * @param imageBuffer - Image binary data
44
+ * @param extension - File extension (e.g., '.jpg', '.png')
45
+ * @param options - Chafa display options
46
+ * @returns true if successfully displayed
47
+ */
48
+ export declare function displayImageBufferWithChafa(imageBuffer: Buffer, extension?: string, options?: ChafaOptions): Promise<boolean>;
49
+ /**
50
+ * Save image buffer to file
51
+ * @param imageBuffer - Image binary data
52
+ * @param outputPath - Path to save image
53
+ * @returns true if successfully saved
54
+ */
55
+ export declare function saveImageToFile(imageBuffer: Buffer, outputPath: string): boolean;
56
+ /**
57
+ * Get image format from buffer by checking magic bytes
58
+ * @param buffer - Image binary data
59
+ * @returns File extension (with dot) or '.jpg' as fallback
60
+ */
61
+ export declare function detectImageFormat(buffer: Buffer): string;
62
+ /**
63
+ * Print chafa installation instructions
64
+ */
65
+ export declare function printChafaInstallInstructions(): void;
66
+ //# sourceMappingURL=terminal-images.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-images.d.ts","sourceRoot":"","sources":["../../src/lib/terminal-images.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAO1C;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAQ/C;AAED,MAAM,WAAW,YAAY;IAC3B,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,4DAA4D;IAC5D,MAAM,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,GAAG,GAAG,MAAM,CAAC;IACrC,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAwE5F;AAED;;;;;;;GAOG;AACH,wBAAsB,2BAA2B,CAC/C,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,MAAe,EAC1B,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,OAAO,CAAC,CA8BlB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAehF;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAiCxD;AAED;;GAEG;AACH,wBAAgB,6BAA6B,IAAI,IAAI,CAYpD"}