@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,537 @@
1
+ "use strict";
2
+ /**
3
+ * Configuration Manager for kg CLI
4
+ *
5
+ * Manages user configuration stored at ~/.config/kg/config.json
6
+ *
7
+ * ADR-054: OAuth 2.0 Authentication
8
+ * - All authentication uses personal OAuth clients (GitHub CLI-style)
9
+ * - Client credentials (client_id + client_secret) are long-lived
10
+ * - Fresh access tokens obtained on-demand via client credentials grant
11
+ * - JWT support removed (OAuth-only)
12
+ */
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || (function () {
30
+ var ownKeys = function(o) {
31
+ ownKeys = Object.getOwnPropertyNames || function (o) {
32
+ var ar = [];
33
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
34
+ return ar;
35
+ };
36
+ return ownKeys(o);
37
+ };
38
+ return function (mod) {
39
+ if (mod && mod.__esModule) return mod;
40
+ var result = {};
41
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
42
+ __setModuleDefault(result, mod);
43
+ return result;
44
+ };
45
+ })();
46
+ Object.defineProperty(exports, "__esModule", { value: true });
47
+ exports.ConfigManager = void 0;
48
+ exports.getConfig = getConfig;
49
+ const fs = __importStar(require("fs"));
50
+ const path = __importStar(require("path"));
51
+ const os = __importStar(require("os"));
52
+ class ConfigManager {
53
+ constructor() {
54
+ // Use XDG config directory (~/.config/kg/)
55
+ const xdgConfig = process.env.XDG_CONFIG_HOME || path.join(os.homedir(), '.config');
56
+ this.configDir = path.join(xdgConfig, 'kg');
57
+ this.configPath = path.join(this.configDir, 'config.json');
58
+ this.config = this.load();
59
+ }
60
+ /**
61
+ * Get configuration directory path
62
+ */
63
+ getConfigDir() {
64
+ return this.configDir;
65
+ }
66
+ /**
67
+ * Get configuration file path
68
+ */
69
+ getConfigPath() {
70
+ return this.configPath;
71
+ }
72
+ /**
73
+ * Load configuration from disk
74
+ */
75
+ load() {
76
+ try {
77
+ if (fs.existsSync(this.configPath)) {
78
+ const data = fs.readFileSync(this.configPath, 'utf-8');
79
+ return JSON.parse(data);
80
+ }
81
+ }
82
+ catch (error) {
83
+ console.warn(`Warning: Failed to load config from ${this.configPath}:`, error);
84
+ }
85
+ // Return default config
86
+ return this.getDefaultConfig();
87
+ }
88
+ /**
89
+ * Get default configuration
90
+ */
91
+ getDefaultConfig() {
92
+ return {
93
+ api_url: 'http://localhost:8000',
94
+ backup_dir: path.join(os.homedir(), '.local', 'share', 'kg', 'backups'),
95
+ auto_approve: false, // ADR-014: Require manual approval by default
96
+ // ADR-029: Command aliases for shell compatibility
97
+ // Example: zsh users with 'alias cat=bat' can use this to prevent expansion conflicts
98
+ aliases: {
99
+ cat: ['bat'] // Allow 'kg bat' as alias for 'kg cat' (handles zsh cat→bat expansion)
100
+ },
101
+ // ADR-057: Display and search defaults
102
+ display: {
103
+ enableChafa: true, // Enable chafa if available
104
+ chafaScale: 0.3, // Default to 1/3 terminal width
105
+ chafaAlign: 'left', // Default to left alignment
106
+ chafaColors: '256' // Default to 256 colors for best compatibility
107
+ },
108
+ search: {
109
+ showEvidence: true, // Show evidence quotes by default
110
+ showImages: true // Display images inline by default
111
+ }
112
+ };
113
+ }
114
+ /**
115
+ * Save configuration to disk
116
+ */
117
+ save() {
118
+ try {
119
+ // Ensure config directory exists
120
+ if (!fs.existsSync(this.configDir)) {
121
+ fs.mkdirSync(this.configDir, { recursive: true });
122
+ }
123
+ // Write config file
124
+ fs.writeFileSync(this.configPath, JSON.stringify(this.config, null, 2), 'utf-8');
125
+ }
126
+ catch (error) {
127
+ throw new Error(`Failed to save config to ${this.configPath}: ${error}`);
128
+ }
129
+ }
130
+ /**
131
+ * Get entire configuration
132
+ */
133
+ getAll() {
134
+ return { ...this.config };
135
+ }
136
+ /**
137
+ * Get a configuration value by key (supports nested keys with dot notation)
138
+ */
139
+ get(key) {
140
+ const keys = key.split('.');
141
+ let value = this.config;
142
+ for (const k of keys) {
143
+ if (value && typeof value === 'object' && k in value) {
144
+ value = value[k];
145
+ }
146
+ else {
147
+ return undefined;
148
+ }
149
+ }
150
+ return value;
151
+ }
152
+ /**
153
+ * Set a configuration value by key (supports nested keys with dot notation)
154
+ */
155
+ set(key, value) {
156
+ const keys = key.split('.');
157
+ const lastKey = keys.pop();
158
+ let obj = this.config;
159
+ // Navigate to the nested object
160
+ for (const k of keys) {
161
+ if (!(k in obj) || typeof obj[k] !== 'object') {
162
+ obj[k] = {};
163
+ }
164
+ obj = obj[k];
165
+ }
166
+ obj[lastKey] = value;
167
+ this.save();
168
+ }
169
+ /**
170
+ * Delete a configuration key
171
+ */
172
+ delete(key) {
173
+ const keys = key.split('.');
174
+ const lastKey = keys.pop();
175
+ let obj = this.config;
176
+ // Navigate to the nested object
177
+ for (const k of keys) {
178
+ if (!(k in obj) || typeof obj[k] !== 'object') {
179
+ return; // Key doesn't exist
180
+ }
181
+ obj = obj[k];
182
+ }
183
+ delete obj[lastKey];
184
+ this.save();
185
+ }
186
+ /**
187
+ * Check if config file exists
188
+ */
189
+ exists() {
190
+ return fs.existsSync(this.configPath);
191
+ }
192
+ /**
193
+ * Initialize config with defaults and save
194
+ */
195
+ init() {
196
+ if (!this.exists()) {
197
+ this.config = this.getDefaultConfig();
198
+ this.save();
199
+ }
200
+ }
201
+ /**
202
+ * Reset configuration to defaults
203
+ */
204
+ reset() {
205
+ this.config = this.getDefaultConfig();
206
+ this.save();
207
+ }
208
+ /**
209
+ * Get API URL (from config or environment variable)
210
+ */
211
+ getApiUrl() {
212
+ return process.env.KG_API_URL || this.config.api_url || 'http://localhost:8000';
213
+ }
214
+ /**
215
+ * Get client ID (from config or environment variable)
216
+ */
217
+ getClientId() {
218
+ return process.env.KG_CLIENT_ID || this.config.username;
219
+ }
220
+ /**
221
+ * Get API key/secret (from config or environment variable)
222
+ */
223
+ getApiKey() {
224
+ return process.env.KG_API_KEY || this.config.secret;
225
+ }
226
+ /**
227
+ * Get backup directory (expands ~ to home directory)
228
+ */
229
+ getBackupDir() {
230
+ const dir = this.config.backup_dir || path.join(os.homedir(), '.local', 'share', 'kg', 'backups');
231
+ return dir.replace(/^~/, os.homedir());
232
+ }
233
+ /**
234
+ * Ensure backup directory exists
235
+ */
236
+ ensureBackupDir() {
237
+ const dir = this.getBackupDir();
238
+ if (!fs.existsSync(dir)) {
239
+ fs.mkdirSync(dir, { recursive: true });
240
+ }
241
+ return dir;
242
+ }
243
+ /**
244
+ * Get auto-approve setting (ADR-014)
245
+ */
246
+ getAutoApprove() {
247
+ return this.config.auto_approve ?? false;
248
+ }
249
+ /**
250
+ * Set auto-approve setting (ADR-014)
251
+ */
252
+ setAutoApprove(value) {
253
+ this.config.auto_approve = value;
254
+ this.save();
255
+ }
256
+ // ========== Authentication Methods (ADR-027, updated by ADR-054) ==========
257
+ /**
258
+ * Store OAuth client credentials (ADR-054 - personal OAuth clients)
259
+ *
260
+ * Stores long-lived client_id + client_secret for client credentials grant.
261
+ * This is the preferred authentication method for CLI tools.
262
+ *
263
+ * @param credentials OAuth client credentials
264
+ */
265
+ storeOAuthCredentials(credentials) {
266
+ this.set('auth.oauth_client_id', credentials.client_id);
267
+ this.set('auth.oauth_client_secret', credentials.client_secret);
268
+ this.set('auth.oauth_client_name', credentials.client_name);
269
+ this.set('auth.oauth_scopes', credentials.scopes);
270
+ this.set('auth.oauth_created_at', credentials.created_at);
271
+ this.set('auth.token_type', 'bearer');
272
+ if (credentials.username) {
273
+ this.set('auth.username', credentials.username);
274
+ this.set('username', credentials.username); // Backwards compatibility
275
+ }
276
+ // Clear any legacy fields
277
+ this.delete('auth.token');
278
+ this.delete('auth.access_token');
279
+ this.delete('auth.refresh_token');
280
+ this.delete('auth.expires_at');
281
+ this.delete('auth.client_id');
282
+ this.delete('auth.scope');
283
+ }
284
+ /**
285
+ * Get OAuth client credentials (ADR-054)
286
+ *
287
+ * @returns OAuth client credentials or null if not stored
288
+ */
289
+ getOAuthCredentials() {
290
+ const clientId = this.get('auth.oauth_client_id');
291
+ const clientSecret = this.get('auth.oauth_client_secret');
292
+ if (!clientId || !clientSecret) {
293
+ return null;
294
+ }
295
+ return {
296
+ client_id: clientId,
297
+ client_secret: clientSecret,
298
+ client_name: this.get('auth.oauth_client_name') || 'kg-cli',
299
+ scopes: this.get('auth.oauth_scopes') || [],
300
+ created_at: this.get('auth.oauth_created_at') || new Date().toISOString(),
301
+ username: this.get('auth.username')
302
+ };
303
+ }
304
+ /**
305
+ * Clear authentication token
306
+ */
307
+ clearAuthToken() {
308
+ this.delete('auth');
309
+ }
310
+ /**
311
+ * Check if user is authenticated (has OAuth client credentials)
312
+ *
313
+ * OAuth client credentials are long-lived and do not expire.
314
+ * Fresh access tokens are obtained on-demand via client credentials grant.
315
+ *
316
+ * @returns true if user has OAuth client credentials
317
+ */
318
+ isAuthenticated() {
319
+ return this.getOAuthCredentials() !== null;
320
+ }
321
+ // ========== Alias Methods (ADR-029) ==========
322
+ /**
323
+ * Get command aliases from config
324
+ *
325
+ * @returns Record mapping command names to their aliases
326
+ */
327
+ getAliases() {
328
+ return this.config.aliases ?? {};
329
+ }
330
+ /**
331
+ * Get aliases for a specific command
332
+ *
333
+ * @param commandName Name of the command
334
+ * @returns Array of aliases for this command
335
+ */
336
+ getCommandAliases(commandName) {
337
+ return this.config.aliases?.[commandName] ?? [];
338
+ }
339
+ /**
340
+ * Add an alias for a command
341
+ *
342
+ * @param commandName Name of the command
343
+ * @param alias Alias to add
344
+ */
345
+ addAlias(commandName, alias) {
346
+ if (!this.config.aliases) {
347
+ this.config.aliases = {};
348
+ }
349
+ if (!this.config.aliases[commandName]) {
350
+ this.config.aliases[commandName] = [];
351
+ }
352
+ if (!this.config.aliases[commandName].includes(alias)) {
353
+ this.config.aliases[commandName].push(alias);
354
+ this.save();
355
+ }
356
+ }
357
+ /**
358
+ * Remove an alias for a command
359
+ *
360
+ * @param commandName Name of the command
361
+ * @param alias Alias to remove
362
+ */
363
+ removeAlias(commandName, alias) {
364
+ if (!this.config.aliases?.[commandName]) {
365
+ return;
366
+ }
367
+ const index = this.config.aliases[commandName].indexOf(alias);
368
+ if (index !== -1) {
369
+ this.config.aliases[commandName].splice(index, 1);
370
+ // Clean up empty arrays
371
+ if (this.config.aliases[commandName].length === 0) {
372
+ delete this.config.aliases[commandName];
373
+ }
374
+ this.save();
375
+ }
376
+ }
377
+ // ========== Display Methods (ADR-057) ==========
378
+ /**
379
+ * Check if chafa terminal image display is enabled
380
+ * If not explicitly set, defaults to true (will check for chafa availability at runtime)
381
+ *
382
+ * @returns true if chafa display is enabled in config
383
+ */
384
+ isChafaEnabled() {
385
+ return this.config.display?.enableChafa ?? true;
386
+ }
387
+ /**
388
+ * Enable or disable chafa terminal image display
389
+ *
390
+ * @param enabled Whether to enable chafa
391
+ */
392
+ setChafaEnabled(enabled) {
393
+ if (!this.config.display) {
394
+ this.config.display = {};
395
+ }
396
+ this.config.display.enableChafa = enabled;
397
+ this.save();
398
+ }
399
+ /**
400
+ * Get chafa display width
401
+ *
402
+ * @returns Width in characters, or undefined for auto-sizing
403
+ */
404
+ getChafaWidth() {
405
+ return this.config.display?.chafaWidth;
406
+ }
407
+ /**
408
+ * Set chafa display width
409
+ *
410
+ * @param width Width in characters (undefined for auto)
411
+ */
412
+ setChafaWidth(width) {
413
+ if (!this.config.display) {
414
+ this.config.display = {};
415
+ }
416
+ this.config.display.chafaWidth = width;
417
+ this.save();
418
+ }
419
+ /**
420
+ * Get chafa color mode
421
+ *
422
+ * @returns Color mode ('256', '16', '2', or 'full')
423
+ */
424
+ getChafaColors() {
425
+ return this.config.display?.chafaColors ?? '256';
426
+ }
427
+ /**
428
+ * Set chafa color mode
429
+ *
430
+ * @param colors Color mode
431
+ */
432
+ setChafaColors(colors) {
433
+ if (!this.config.display) {
434
+ this.config.display = {};
435
+ }
436
+ this.config.display.chafaColors = colors;
437
+ this.save();
438
+ }
439
+ /**
440
+ * Get chafa scale factor
441
+ *
442
+ * @returns Scale factor (0.0-1.0, e.g., 0.3 for 1/3 width)
443
+ */
444
+ getChafaScale() {
445
+ return this.config.display?.chafaScale ?? 0.3;
446
+ }
447
+ /**
448
+ * Set chafa scale factor
449
+ *
450
+ * @param scale Scale factor (0.0-1.0)
451
+ */
452
+ setChafaScale(scale) {
453
+ if (!this.config.display) {
454
+ this.config.display = {};
455
+ }
456
+ this.config.display.chafaScale = scale;
457
+ this.save();
458
+ }
459
+ /**
460
+ * Get chafa alignment
461
+ *
462
+ * @returns Alignment ('left', 'center', or 'right')
463
+ */
464
+ getChafaAlign() {
465
+ return this.config.display?.chafaAlign ?? 'left';
466
+ }
467
+ /**
468
+ * Set chafa alignment
469
+ *
470
+ * @param align Alignment
471
+ */
472
+ setChafaAlign(align) {
473
+ if (!this.config.display) {
474
+ this.config.display = {};
475
+ }
476
+ this.config.display.chafaAlign = align;
477
+ this.save();
478
+ }
479
+ // ========== Search Methods (ADR-057) ==========
480
+ /**
481
+ * Check if search should show evidence by default
482
+ * Defaults to true for rich terminal experience
483
+ *
484
+ * @returns true if evidence should be shown by default
485
+ */
486
+ getSearchShowEvidence() {
487
+ return this.config.search?.showEvidence ?? true;
488
+ }
489
+ /**
490
+ * Set whether search should show evidence by default
491
+ *
492
+ * @param enabled Whether to show evidence by default
493
+ */
494
+ setSearchShowEvidence(enabled) {
495
+ if (!this.config.search) {
496
+ this.config.search = {};
497
+ }
498
+ this.config.search.showEvidence = enabled;
499
+ this.save();
500
+ }
501
+ /**
502
+ * Check if search should show images by default
503
+ * Defaults to true for rich terminal experience
504
+ *
505
+ * @returns true if images should be shown by default
506
+ */
507
+ getSearchShowImages() {
508
+ return this.config.search?.showImages ?? true;
509
+ }
510
+ /**
511
+ * Set whether search should show images by default
512
+ *
513
+ * @param enabled Whether to show images by default
514
+ */
515
+ setSearchShowImages(enabled) {
516
+ if (!this.config.search) {
517
+ this.config.search = {};
518
+ }
519
+ this.config.search.showImages = enabled;
520
+ this.save();
521
+ }
522
+ }
523
+ exports.ConfigManager = ConfigManager;
524
+ /**
525
+ * Global config instance
526
+ */
527
+ let globalConfig = null;
528
+ /**
529
+ * Get or create global config instance
530
+ */
531
+ function getConfig() {
532
+ if (!globalConfig) {
533
+ globalConfig = new ConfigManager();
534
+ }
535
+ return globalConfig;
536
+ }
537
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Server-Sent Events (SSE) job progress streaming (ADR-018 Phase 1)
3
+ *
4
+ * Provides real-time job progress updates via EventSource API.
5
+ * Gracefully falls back to polling if SSE fails.
6
+ */
7
+ import type { JobProgress, JobResult } from '../types';
8
+ export interface JobProgressCallbacks {
9
+ onProgress?: (progress: JobProgress) => void;
10
+ onCompleted?: (result: JobResult) => void;
11
+ onFailed?: (error: string) => void;
12
+ onCancelled?: (message: string) => void;
13
+ onError?: (error: Error) => void;
14
+ }
15
+ export declare class JobProgressStream {
16
+ private baseUrl;
17
+ private jobId;
18
+ private callbacks;
19
+ private eventSource;
20
+ private closed;
21
+ constructor(baseUrl: string, jobId: string, callbacks: JobProgressCallbacks);
22
+ /**
23
+ * Start streaming job progress events.
24
+ *
25
+ * Opens SSE connection to /jobs/{job_id}/stream endpoint.
26
+ * Auto-closes on terminal events (completed/failed/cancelled).
27
+ */
28
+ start(): void;
29
+ /**
30
+ * Close the SSE connection.
31
+ *
32
+ * Safe to call multiple times.
33
+ */
34
+ close(): void;
35
+ /**
36
+ * Check if stream is currently active.
37
+ */
38
+ isActive(): boolean;
39
+ }
40
+ /**
41
+ * Track job progress with automatic SSE fallback to polling.
42
+ *
43
+ * Tries SSE first for real-time updates. If SSE fails or is unavailable,
44
+ * gracefully falls back to polling-based tracking.
45
+ *
46
+ * @param baseUrl - API base URL (e.g., http://localhost:8000)
47
+ * @param jobId - Job ID to track
48
+ * @param callbacks - Progress callbacks
49
+ * @param useSSE - Whether to try SSE (default: true)
50
+ * @returns JobProgressStream instance or null if using polling
51
+ */
52
+ export declare function trackJobProgress(baseUrl: string, jobId: string, callbacks: JobProgressCallbacks, useSSE?: boolean): Promise<JobProgressStream | null>;
53
+ //# sourceMappingURL=job-stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job-stream.d.ts","sourceRoot":"","sources":["../../src/lib/job-stream.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAMvD,MAAM,WAAW,oBAAoB;IACnC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,KAAK,IAAI,CAAC;IAC7C,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI,CAAC;IAC1C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED,qBAAa,iBAAiB;IAK1B,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,SAAS;IANnB,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,MAAM,CAAS;gBAGb,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,oBAAoB;IAGzC;;;;;OAKG;IACH,KAAK,IAAI,IAAI;IA8Eb;;;;OAIG;IACH,KAAK,IAAI,IAAI;IAQb;;OAEG;IACH,QAAQ,IAAI,OAAO;CAGpB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,oBAAoB,EAC/B,MAAM,GAAE,OAAc,GACrB,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAgBnC"}