@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.
- package/README.md +112 -0
- package/dist/api/client.d.ts +867 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +1362 -0
- package/dist/api/client.js.map +1 -0
- package/dist/cli/admin/backup.d.ts +9 -0
- package/dist/cli/admin/backup.d.ts.map +1 -0
- package/dist/cli/admin/backup.js +363 -0
- package/dist/cli/admin/backup.js.map +1 -0
- package/dist/cli/admin/index.d.ts +7 -0
- package/dist/cli/admin/index.d.ts.map +1 -0
- package/dist/cli/admin/index.js +52 -0
- package/dist/cli/admin/index.js.map +1 -0
- package/dist/cli/admin/scheduler.d.ts +7 -0
- package/dist/cli/admin/scheduler.d.ts.map +1 -0
- package/dist/cli/admin/scheduler.js +125 -0
- package/dist/cli/admin/scheduler.js.map +1 -0
- package/dist/cli/admin/status.d.ts +7 -0
- package/dist/cli/admin/status.d.ts.map +1 -0
- package/dist/cli/admin/status.js +134 -0
- package/dist/cli/admin/status.js.map +1 -0
- package/dist/cli/admin/utils.d.ts +34 -0
- package/dist/cli/admin/utils.d.ts.map +1 -0
- package/dist/cli/admin/utils.js +441 -0
- package/dist/cli/admin/utils.js.map +1 -0
- package/dist/cli/ai-config/embedding.d.ts +11 -0
- package/dist/cli/ai-config/embedding.d.ts.map +1 -0
- package/dist/cli/ai-config/embedding.js +598 -0
- package/dist/cli/ai-config/embedding.js.map +1 -0
- package/dist/cli/ai-config/extraction.d.ts +11 -0
- package/dist/cli/ai-config/extraction.d.ts.map +1 -0
- package/dist/cli/ai-config/extraction.js +206 -0
- package/dist/cli/ai-config/extraction.js.map +1 -0
- package/dist/cli/ai-config/index.d.ts +21 -0
- package/dist/cli/ai-config/index.d.ts.map +1 -0
- package/dist/cli/ai-config/index.js +27 -0
- package/dist/cli/ai-config/index.js.map +1 -0
- package/dist/cli/ai-config/keys.d.ts +11 -0
- package/dist/cli/ai-config/keys.d.ts.map +1 -0
- package/dist/cli/ai-config/keys.js +182 -0
- package/dist/cli/ai-config/keys.js.map +1 -0
- package/dist/cli/ai-config/utils.d.ts +13 -0
- package/dist/cli/ai-config/utils.d.ts.map +1 -0
- package/dist/cli/ai-config/utils.js +84 -0
- package/dist/cli/ai-config/utils.js.map +1 -0
- package/dist/cli/artifact.d.ts +8 -0
- package/dist/cli/artifact.d.ts.map +1 -0
- package/dist/cli/artifact.js +296 -0
- package/dist/cli/artifact.js.map +1 -0
- package/dist/cli/auth-admin.d.ts +11 -0
- package/dist/cli/auth-admin.d.ts.map +1 -0
- package/dist/cli/auth-admin.js +415 -0
- package/dist/cli/auth-admin.js.map +1 -0
- package/dist/cli/colors.d.ts +105 -0
- package/dist/cli/colors.d.ts.map +1 -0
- package/dist/cli/colors.js +164 -0
- package/dist/cli/colors.js.map +1 -0
- package/dist/cli/commands.d.ts +6 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +164 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/config.d.ts +6 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +694 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/curve-viz.d.ts +89 -0
- package/dist/cli/curve-viz.d.ts.map +1 -0
- package/dist/cli/curve-viz.js +228 -0
- package/dist/cli/curve-viz.js.map +1 -0
- package/dist/cli/database.d.ts +6 -0
- package/dist/cli/database.d.ts.map +1 -0
- package/dist/cli/database.js +324 -0
- package/dist/cli/database.js.map +1 -0
- package/dist/cli/document.d.ts +6 -0
- package/dist/cli/document.d.ts.map +1 -0
- package/dist/cli/document.js +458 -0
- package/dist/cli/document.js.map +1 -0
- package/dist/cli/group.d.ts +8 -0
- package/dist/cli/group.d.ts.map +1 -0
- package/dist/cli/group.js +174 -0
- package/dist/cli/group.js.map +1 -0
- package/dist/cli/health.d.ts +6 -0
- package/dist/cli/health.d.ts.map +1 -0
- package/dist/cli/health.js +34 -0
- package/dist/cli/health.js.map +1 -0
- package/dist/cli/help-formatter.d.ts +16 -0
- package/dist/cli/help-formatter.d.ts.map +1 -0
- package/dist/cli/help-formatter.js +248 -0
- package/dist/cli/help-formatter.js.map +1 -0
- package/dist/cli/help.d.ts +9 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +227 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/ingest.d.ts +6 -0
- package/dist/cli/ingest.d.ts.map +1 -0
- package/dist/cli/ingest.js +722 -0
- package/dist/cli/ingest.js.map +1 -0
- package/dist/cli/jobs.d.ts +6 -0
- package/dist/cli/jobs.d.ts.map +1 -0
- package/dist/cli/jobs.js +663 -0
- package/dist/cli/jobs.js.map +1 -0
- package/dist/cli/login.d.ts +21 -0
- package/dist/cli/login.d.ts.map +1 -0
- package/dist/cli/login.js +221 -0
- package/dist/cli/login.js.map +1 -0
- package/dist/cli/logout.d.ts +16 -0
- package/dist/cli/logout.d.ts.map +1 -0
- package/dist/cli/logout.js +141 -0
- package/dist/cli/logout.js.map +1 -0
- package/dist/cli/mcp-config.d.ts +10 -0
- package/dist/cli/mcp-config.d.ts.map +1 -0
- package/dist/cli/mcp-config.js +358 -0
- package/dist/cli/mcp-config.js.map +1 -0
- package/dist/cli/oauth.d.ts +15 -0
- package/dist/cli/oauth.d.ts.map +1 -0
- package/dist/cli/oauth.js +296 -0
- package/dist/cli/oauth.js.map +1 -0
- package/dist/cli/ontology.d.ts +6 -0
- package/dist/cli/ontology.d.ts.map +1 -0
- package/dist/cli/ontology.js +231 -0
- package/dist/cli/ontology.js.map +1 -0
- package/dist/cli/polarity.d.ts +6 -0
- package/dist/cli/polarity.d.ts.map +1 -0
- package/dist/cli/polarity.js +295 -0
- package/dist/cli/polarity.js.map +1 -0
- package/dist/cli/projection.d.ts +8 -0
- package/dist/cli/projection.d.ts.map +1 -0
- package/dist/cli/projection.js +297 -0
- package/dist/cli/projection.js.map +1 -0
- package/dist/cli/query-def.d.ts +8 -0
- package/dist/cli/query-def.d.ts.map +1 -0
- package/dist/cli/query-def.js +163 -0
- package/dist/cli/query-def.js.map +1 -0
- package/dist/cli/rbac.d.ts +12 -0
- package/dist/cli/rbac.d.ts.map +1 -0
- package/dist/cli/rbac.js +615 -0
- package/dist/cli/rbac.js.map +1 -0
- package/dist/cli/search.d.ts +6 -0
- package/dist/cli/search.d.ts.map +1 -0
- package/dist/cli/search.js +829 -0
- package/dist/cli/search.js.map +1 -0
- package/dist/cli/source.d.ts +6 -0
- package/dist/cli/source.d.ts.map +1 -0
- package/dist/cli/source.js +202 -0
- package/dist/cli/source.js.map +1 -0
- package/dist/cli/verb-router.d.ts +25 -0
- package/dist/cli/verb-router.d.ts.map +1 -0
- package/dist/cli/verb-router.js +415 -0
- package/dist/cli/verb-router.js.map +1 -0
- package/dist/cli/vocabulary/config.d.ts +7 -0
- package/dist/cli/vocabulary/config.d.ts.map +1 -0
- package/dist/cli/vocabulary/config.js +201 -0
- package/dist/cli/vocabulary/config.js.map +1 -0
- package/dist/cli/vocabulary/consolidate.d.ts +8 -0
- package/dist/cli/vocabulary/consolidate.d.ts.map +1 -0
- package/dist/cli/vocabulary/consolidate.js +192 -0
- package/dist/cli/vocabulary/consolidate.js.map +1 -0
- package/dist/cli/vocabulary/embeddings.d.ts +9 -0
- package/dist/cli/vocabulary/embeddings.d.ts.map +1 -0
- package/dist/cli/vocabulary/embeddings.js +205 -0
- package/dist/cli/vocabulary/embeddings.js.map +1 -0
- package/dist/cli/vocabulary/epistemic.d.ts +7 -0
- package/dist/cli/vocabulary/epistemic.d.ts.map +1 -0
- package/dist/cli/vocabulary/epistemic.js +315 -0
- package/dist/cli/vocabulary/epistemic.js.map +1 -0
- package/dist/cli/vocabulary/index.d.ts +7 -0
- package/dist/cli/vocabulary/index.d.ts.map +1 -0
- package/dist/cli/vocabulary/index.js +45 -0
- package/dist/cli/vocabulary/index.js.map +1 -0
- package/dist/cli/vocabulary/profiles.d.ts +7 -0
- package/dist/cli/vocabulary/profiles.d.ts.map +1 -0
- package/dist/cli/vocabulary/profiles.js +171 -0
- package/dist/cli/vocabulary/profiles.js.map +1 -0
- package/dist/cli/vocabulary/similarity.d.ts +9 -0
- package/dist/cli/vocabulary/similarity.d.ts.map +1 -0
- package/dist/cli/vocabulary/similarity.js +199 -0
- package/dist/cli/vocabulary/similarity.js.map +1 -0
- package/dist/cli/vocabulary/status.d.ts +8 -0
- package/dist/cli/vocabulary/status.d.ts.map +1 -0
- package/dist/cli/vocabulary/status.js +280 -0
- package/dist/cli/vocabulary/status.js.map +1 -0
- package/dist/cli/vocabulary/sync.d.ts +7 -0
- package/dist/cli/vocabulary/sync.d.ts.map +1 -0
- package/dist/cli/vocabulary/sync.js +111 -0
- package/dist/cli/vocabulary/sync.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/auth/auth-client.d.ts +247 -0
- package/dist/lib/auth/auth-client.d.ts.map +1 -0
- package/dist/lib/auth/auth-client.js +305 -0
- package/dist/lib/auth/auth-client.js.map +1 -0
- package/dist/lib/auth/challenge.d.ts +39 -0
- package/dist/lib/auth/challenge.d.ts.map +1 -0
- package/dist/lib/auth/challenge.js +125 -0
- package/dist/lib/auth/challenge.js.map +1 -0
- package/dist/lib/auth/client-credentials-flow.d.ts +58 -0
- package/dist/lib/auth/client-credentials-flow.d.ts.map +1 -0
- package/dist/lib/auth/client-credentials-flow.js +118 -0
- package/dist/lib/auth/client-credentials-flow.js.map +1 -0
- package/dist/lib/auth/device-flow.d.ts +75 -0
- package/dist/lib/auth/device-flow.d.ts.map +1 -0
- package/dist/lib/auth/device-flow.js +177 -0
- package/dist/lib/auth/device-flow.js.map +1 -0
- package/dist/lib/auth/index.d.ts +14 -0
- package/dist/lib/auth/index.d.ts.map +1 -0
- package/dist/lib/auth/index.js +34 -0
- package/dist/lib/auth/index.js.map +1 -0
- package/dist/lib/auth/oauth-types.d.ts +69 -0
- package/dist/lib/auth/oauth-types.d.ts.map +1 -0
- package/dist/lib/auth/oauth-types.js +10 -0
- package/dist/lib/auth/oauth-types.js.map +1 -0
- package/dist/lib/auth/oauth-utils.d.ts +51 -0
- package/dist/lib/auth/oauth-utils.d.ts.map +1 -0
- package/dist/lib/auth/oauth-utils.js +110 -0
- package/dist/lib/auth/oauth-utils.js.map +1 -0
- package/dist/lib/auth/token-manager.d.ts +87 -0
- package/dist/lib/auth/token-manager.d.ts.map +1 -0
- package/dist/lib/auth/token-manager.js +139 -0
- package/dist/lib/auth/token-manager.js.map +1 -0
- package/dist/lib/auth/token-refresh.d.ts +63 -0
- package/dist/lib/auth/token-refresh.d.ts.map +1 -0
- package/dist/lib/auth/token-refresh.js +141 -0
- package/dist/lib/auth/token-refresh.js.map +1 -0
- package/dist/lib/config.d.ts +286 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +537 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/job-stream.d.ts +53 -0
- package/dist/lib/job-stream.d.ts.map +1 -0
- package/dist/lib/job-stream.js +153 -0
- package/dist/lib/job-stream.js.map +1 -0
- package/dist/lib/mcp-allowlist.d.ts +101 -0
- package/dist/lib/mcp-allowlist.d.ts.map +1 -0
- package/dist/lib/mcp-allowlist.js +340 -0
- package/dist/lib/mcp-allowlist.js.map +1 -0
- package/dist/lib/table-example.d.ts +7 -0
- package/dist/lib/table-example.d.ts.map +1 -0
- package/dist/lib/table-example.js +105 -0
- package/dist/lib/table-example.js.map +1 -0
- package/dist/lib/table.d.ts +95 -0
- package/dist/lib/table.d.ts.map +1 -0
- package/dist/lib/table.js +263 -0
- package/dist/lib/table.js.map +1 -0
- package/dist/lib/terminal-images.d.ts +66 -0
- package/dist/lib/terminal-images.d.ts.map +1 -0
- package/dist/lib/terminal-images.js +268 -0
- package/dist/lib/terminal-images.js.map +1 -0
- package/dist/mcp/formatters.d.ts +100 -0
- package/dist/mcp/formatters.d.ts.map +1 -0
- package/dist/mcp/formatters.js +1411 -0
- package/dist/mcp/formatters.js.map +1 -0
- package/dist/mcp-server.d.ts +9 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +1810 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/types/index.d.ts +742 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/dist/version.d.ts +10 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +13 -0
- package/dist/version.js.map +1 -0
- 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"}
|