@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,598 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Embedding Commands (ADR-039)
|
|
4
|
+
* Manages embedding model configuration
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.createEmbeddingCommand = createEmbeddingCommand;
|
|
41
|
+
const commander_1 = require("commander");
|
|
42
|
+
const colors = __importStar(require("../colors"));
|
|
43
|
+
const colors_1 = require("../colors");
|
|
44
|
+
const utils_1 = require("./utils");
|
|
45
|
+
/**
|
|
46
|
+
* Create a new embedding configuration
|
|
47
|
+
*/
|
|
48
|
+
function createEmbeddingCreateCommand(client) {
|
|
49
|
+
return new commander_1.Command('create')
|
|
50
|
+
.description('Create a new embedding configuration (inactive)')
|
|
51
|
+
.option('--provider <provider>', 'Provider: local or openai')
|
|
52
|
+
.option('--model <model>', 'Model name')
|
|
53
|
+
.option('--dimensions <dims>', 'Embedding dimensions', parseInt)
|
|
54
|
+
.option('--precision <precision>', 'Precision: float16, float32, int8')
|
|
55
|
+
.option('--device <device>', 'Device: cpu, cuda, mps')
|
|
56
|
+
.option('--memory <mb>', 'Max memory in MB', parseInt)
|
|
57
|
+
.option('--threads <n>', 'Number of threads', parseInt)
|
|
58
|
+
.option('--batch-size <n>', 'Batch size', parseInt)
|
|
59
|
+
.action(async (options) => {
|
|
60
|
+
try {
|
|
61
|
+
console.log('\n' + (0, colors_1.separator)());
|
|
62
|
+
console.log(colors.ui.title('➕ Create Embedding Configuration'));
|
|
63
|
+
console.log((0, colors_1.separator)());
|
|
64
|
+
const config = {};
|
|
65
|
+
if (options.provider)
|
|
66
|
+
config.provider = options.provider;
|
|
67
|
+
if (options.model)
|
|
68
|
+
config.model_name = options.model;
|
|
69
|
+
if (options.dimensions)
|
|
70
|
+
config.embedding_dimensions = options.dimensions;
|
|
71
|
+
if (options.precision)
|
|
72
|
+
config.precision = options.precision;
|
|
73
|
+
if (options.device)
|
|
74
|
+
config.device = options.device;
|
|
75
|
+
if (options.memory)
|
|
76
|
+
config.max_memory_mb = options.memory;
|
|
77
|
+
if (options.threads)
|
|
78
|
+
config.num_threads = options.threads;
|
|
79
|
+
if (options.batchSize)
|
|
80
|
+
config.batch_size = options.batchSize;
|
|
81
|
+
if (Object.keys(config).length === 0) {
|
|
82
|
+
console.error(colors.status.error('\n✗ No configuration options provided'));
|
|
83
|
+
console.log(colors.status.dim(' Use --help to see available options\n'));
|
|
84
|
+
process.exit(1);
|
|
85
|
+
}
|
|
86
|
+
const result = await client.updateEmbeddingConfig(config);
|
|
87
|
+
console.log('\n' + colors.status.success('✓ Configuration created successfully'));
|
|
88
|
+
console.log(`\n ${colors.ui.key('Config ID:')} ${colors.ui.value(result.config_id)}`);
|
|
89
|
+
console.log(` ${colors.ui.key('Status:')} ${colors.status.dim('Inactive')}`);
|
|
90
|
+
console.log('\n' + colors.status.warning('⚠️ Next steps:'));
|
|
91
|
+
console.log(colors.status.dim(` 1. Review: kg admin embedding list`));
|
|
92
|
+
console.log(colors.status.dim(` 2. Activate: kg admin embedding activate ${result.config_id}`));
|
|
93
|
+
console.log(colors.status.dim(` 3. Apply: kg admin embedding reload\n`));
|
|
94
|
+
console.log((0, colors_1.separator)() + '\n');
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
console.error(colors.status.error('✗ Failed to create embedding configuration'));
|
|
98
|
+
console.error(colors.status.error(error.response?.data?.detail || error.message));
|
|
99
|
+
process.exit(1);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Hot reload embedding model
|
|
105
|
+
*/
|
|
106
|
+
function createEmbeddingReloadCommand(client) {
|
|
107
|
+
return new commander_1.Command('reload')
|
|
108
|
+
.description('Hot reload embedding model (zero-downtime)')
|
|
109
|
+
.action(async () => {
|
|
110
|
+
try {
|
|
111
|
+
console.log('\n' + (0, colors_1.separator)());
|
|
112
|
+
console.log(colors.ui.title('🔄 Hot Reload Embedding Model'));
|
|
113
|
+
console.log((0, colors_1.separator)());
|
|
114
|
+
console.log(colors.status.info('\nReloading model from database configuration...'));
|
|
115
|
+
const result = await client.reloadEmbeddingModel();
|
|
116
|
+
console.log('\n' + colors.status.success('✓ Hot reload successful'));
|
|
117
|
+
console.log(`\n ${colors.ui.key('Provider:')} ${colors.ui.value(result.provider)}`);
|
|
118
|
+
if (result.model) {
|
|
119
|
+
console.log(` ${colors.ui.key('Model:')} ${colors.ui.value(result.model)}`);
|
|
120
|
+
}
|
|
121
|
+
if (result.dimensions) {
|
|
122
|
+
console.log(` ${colors.ui.key('Dimensions:')} ${colors.ui.value(result.dimensions)}`);
|
|
123
|
+
}
|
|
124
|
+
console.log(`\n ${colors.status.dim('Next embedding request will use new configuration')}`);
|
|
125
|
+
console.log('\n' + (0, colors_1.separator)() + '\n');
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
console.error(colors.status.error('✗ Hot reload failed'));
|
|
129
|
+
console.error(colors.status.error(error.response?.data?.detail || error.message));
|
|
130
|
+
process.exit(1);
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* List all embedding configurations
|
|
136
|
+
*/
|
|
137
|
+
function createEmbeddingListCommand(client) {
|
|
138
|
+
return new commander_1.Command('list')
|
|
139
|
+
.description('List all embedding configurations')
|
|
140
|
+
.action(async () => {
|
|
141
|
+
try {
|
|
142
|
+
console.log('\n' + (0, colors_1.separator)());
|
|
143
|
+
console.log(colors.ui.title('📋 Embedding Configurations'));
|
|
144
|
+
console.log((0, colors_1.separator)());
|
|
145
|
+
const configs = await client.listEmbeddingConfigs();
|
|
146
|
+
if (configs.length === 0) {
|
|
147
|
+
console.log(colors.status.dim('\n No configurations found\n'));
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
console.log('');
|
|
151
|
+
for (const config of configs) {
|
|
152
|
+
const activeMarker = config.active ? colors.status.success('✓ ACTIVE') : colors.status.dim('○ Inactive');
|
|
153
|
+
const deleteProtected = config.delete_protected ? '🔒' : '';
|
|
154
|
+
const changeProtected = config.change_protected ? '🔐' : '';
|
|
155
|
+
const protection = [deleteProtected, changeProtected].filter(p => p).join(' ');
|
|
156
|
+
console.log(` ${activeMarker} ${colors.ui.header(`Config ${config.id}`)} ${protection}`);
|
|
157
|
+
console.log(` ${colors.ui.key('Provider:')} ${colors.ui.value(config.provider)}`);
|
|
158
|
+
if (config.model_name) {
|
|
159
|
+
console.log(` ${colors.ui.key('Model:')} ${colors.ui.value(config.model_name)}`);
|
|
160
|
+
}
|
|
161
|
+
if (config.embedding_dimensions) {
|
|
162
|
+
console.log(` ${colors.ui.key('Dimensions:')} ${colors.ui.value(config.embedding_dimensions)}`);
|
|
163
|
+
}
|
|
164
|
+
if (config.delete_protected || config.change_protected) {
|
|
165
|
+
const flags = [];
|
|
166
|
+
if (config.delete_protected)
|
|
167
|
+
flags.push('delete-protected');
|
|
168
|
+
if (config.change_protected)
|
|
169
|
+
flags.push('change-protected');
|
|
170
|
+
console.log(` ${colors.ui.key('Protection:')} ${colors.status.warning(flags.join(', '))}`);
|
|
171
|
+
}
|
|
172
|
+
console.log(` ${colors.status.dim('Updated: ' + new Date(config.updated_at).toLocaleString())}`);
|
|
173
|
+
console.log(` ${colors.status.dim('By: ' + config.updated_by)}`);
|
|
174
|
+
console.log('');
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
console.log((0, colors_1.separator)() + '\n');
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
console.error(colors.status.error('✗ Failed to list embedding configurations'));
|
|
181
|
+
console.error(colors.status.error(error.response?.data?.detail || error.message));
|
|
182
|
+
process.exit(1);
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Protect an embedding configuration
|
|
188
|
+
*/
|
|
189
|
+
function createEmbeddingProtectCommand(client) {
|
|
190
|
+
return new commander_1.Command('protect')
|
|
191
|
+
.description('Enable protection flags on an embedding configuration')
|
|
192
|
+
.argument('<config-id>', 'Configuration ID', parseInt)
|
|
193
|
+
.option('--delete', 'Enable delete protection')
|
|
194
|
+
.option('--change', 'Enable change protection')
|
|
195
|
+
.action(async (configId, options) => {
|
|
196
|
+
try {
|
|
197
|
+
console.log('\n' + (0, colors_1.separator)());
|
|
198
|
+
console.log(colors.ui.title(`🔒 Protect Config ${configId}`));
|
|
199
|
+
console.log((0, colors_1.separator)());
|
|
200
|
+
if (!options.delete && !options.change) {
|
|
201
|
+
console.error(colors.status.error('\n✗ Must specify at least one protection flag'));
|
|
202
|
+
console.log(colors.status.dim(' Use --delete and/or --change\n'));
|
|
203
|
+
process.exit(1);
|
|
204
|
+
}
|
|
205
|
+
const result = await client.protectEmbeddingConfig(configId, options.delete ? true : undefined, options.change ? true : undefined);
|
|
206
|
+
console.log('\n' + colors.status.success('✓ Protection enabled'));
|
|
207
|
+
const flags = [];
|
|
208
|
+
if (options.delete)
|
|
209
|
+
flags.push('delete-protected');
|
|
210
|
+
if (options.change)
|
|
211
|
+
flags.push('change-protected');
|
|
212
|
+
console.log(`\n ${colors.ui.key('Config ID:')} ${colors.ui.value(configId)}`);
|
|
213
|
+
console.log(` ${colors.ui.key('Flags:')} ${colors.status.warning(flags.join(', '))}`);
|
|
214
|
+
console.log('\n' + (0, colors_1.separator)() + '\n');
|
|
215
|
+
}
|
|
216
|
+
catch (error) {
|
|
217
|
+
console.error(colors.status.error('✗ Failed to set protection'));
|
|
218
|
+
console.error(colors.status.error(error.response?.data?.detail || error.message));
|
|
219
|
+
process.exit(1);
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Unprotect an embedding configuration
|
|
225
|
+
*/
|
|
226
|
+
function createEmbeddingUnprotectCommand(client) {
|
|
227
|
+
return new commander_1.Command('unprotect')
|
|
228
|
+
.description('Disable protection flags on an embedding configuration')
|
|
229
|
+
.argument('<config-id>', 'Configuration ID', parseInt)
|
|
230
|
+
.option('--delete', 'Disable delete protection')
|
|
231
|
+
.option('--change', 'Disable change protection')
|
|
232
|
+
.action(async (configId, options) => {
|
|
233
|
+
try {
|
|
234
|
+
console.log('\n' + (0, colors_1.separator)());
|
|
235
|
+
console.log(colors.ui.title(`🔓 Unprotect Config ${configId}`));
|
|
236
|
+
console.log((0, colors_1.separator)());
|
|
237
|
+
if (!options.delete && !options.change) {
|
|
238
|
+
console.error(colors.status.error('\n✗ Must specify at least one protection flag'));
|
|
239
|
+
console.log(colors.status.dim(' Use --delete and/or --change\n'));
|
|
240
|
+
process.exit(1);
|
|
241
|
+
}
|
|
242
|
+
const result = await client.protectEmbeddingConfig(configId, options.delete ? false : undefined, options.change ? false : undefined);
|
|
243
|
+
console.log('\n' + colors.status.success('✓ Protection disabled'));
|
|
244
|
+
const flags = [];
|
|
245
|
+
if (options.delete)
|
|
246
|
+
flags.push('delete-protection');
|
|
247
|
+
if (options.change)
|
|
248
|
+
flags.push('change-protection');
|
|
249
|
+
console.log(`\n ${colors.ui.key('Config ID:')} ${colors.ui.value(configId)}`);
|
|
250
|
+
console.log(` ${colors.ui.key('Removed:')} ${colors.status.dim(flags.join(', '))}`);
|
|
251
|
+
console.log('\n' + (0, colors_1.separator)() + '\n');
|
|
252
|
+
}
|
|
253
|
+
catch (error) {
|
|
254
|
+
console.error(colors.status.error('✗ Failed to remove protection'));
|
|
255
|
+
console.error(colors.status.error(error.response?.data?.detail || error.message));
|
|
256
|
+
process.exit(1);
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Activate an embedding configuration
|
|
262
|
+
*/
|
|
263
|
+
function createEmbeddingActivateCommand(client) {
|
|
264
|
+
return new commander_1.Command('activate')
|
|
265
|
+
.description('Activate an embedding configuration (with automatic protection)')
|
|
266
|
+
.argument('<config-id>', 'Configuration ID', parseInt)
|
|
267
|
+
.option('--force', 'Force activation even with dimension mismatch (dangerous!)')
|
|
268
|
+
.action(async (configId, options) => {
|
|
269
|
+
try {
|
|
270
|
+
console.log('\n' + (0, colors_1.separator)());
|
|
271
|
+
console.log(colors.ui.title(`🔄 Activate Config ${configId}`));
|
|
272
|
+
console.log((0, colors_1.separator)());
|
|
273
|
+
if (options.force) {
|
|
274
|
+
console.log(colors.status.warning('\n⚠️ FORCE MODE: Bypassing dimension safety check'));
|
|
275
|
+
console.log(colors.status.dim(' This may break vector search if dimensions change!\n'));
|
|
276
|
+
}
|
|
277
|
+
console.log(colors.status.info('\nActivating configuration...'));
|
|
278
|
+
console.log(colors.status.dim(' • Unlocking current config (change protection)'));
|
|
279
|
+
console.log(colors.status.dim(' • Switching to new config'));
|
|
280
|
+
console.log(colors.status.dim(' • Locking new config (delete + change protection)'));
|
|
281
|
+
const result = await client.activateEmbeddingConfig(configId, options.force);
|
|
282
|
+
console.log('\n' + colors.status.success('✓ Configuration activated successfully'));
|
|
283
|
+
console.log(`\n ${colors.ui.key('Config ID:')} ${colors.ui.value(result.config_id)}`);
|
|
284
|
+
console.log(` ${colors.ui.key('Provider:')} ${colors.ui.value(result.provider)}`);
|
|
285
|
+
if (result.model) {
|
|
286
|
+
console.log(` ${colors.ui.key('Model:')} ${colors.ui.value(result.model)}`);
|
|
287
|
+
}
|
|
288
|
+
if (result.dimensions) {
|
|
289
|
+
console.log(` ${colors.ui.key('Dimensions:')} ${colors.ui.value(result.dimensions)}`);
|
|
290
|
+
}
|
|
291
|
+
console.log('\n' + colors.status.warning('⚠️ Next step: Hot reload to apply changes'));
|
|
292
|
+
console.log(colors.status.dim(' Run: kg admin embedding reload\n'));
|
|
293
|
+
console.log((0, colors_1.separator)() + '\n');
|
|
294
|
+
}
|
|
295
|
+
catch (error) {
|
|
296
|
+
console.error(colors.status.error('✗ Failed to activate configuration'));
|
|
297
|
+
console.error(colors.status.error(error.response?.data?.detail || error.message));
|
|
298
|
+
process.exit(1);
|
|
299
|
+
}
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Delete an embedding configuration
|
|
304
|
+
*/
|
|
305
|
+
function createEmbeddingDeleteCommand(client) {
|
|
306
|
+
return new commander_1.Command('delete')
|
|
307
|
+
.description('Delete an embedding configuration')
|
|
308
|
+
.argument('<config-id>', 'Configuration ID', parseInt)
|
|
309
|
+
.action(async (configId) => {
|
|
310
|
+
try {
|
|
311
|
+
console.log('\n' + (0, colors_1.separator)());
|
|
312
|
+
console.log(colors.ui.title(`🗑️ Delete Config ${configId}`));
|
|
313
|
+
console.log((0, colors_1.separator)());
|
|
314
|
+
// Confirm deletion
|
|
315
|
+
const confirm = await (0, utils_1.prompt)(`\nDelete embedding config ${configId}? (yes/no): `);
|
|
316
|
+
if (confirm.toLowerCase() !== 'yes') {
|
|
317
|
+
console.log(colors.status.dim('Cancelled\n'));
|
|
318
|
+
process.exit(0);
|
|
319
|
+
}
|
|
320
|
+
const result = await client.deleteEmbeddingConfig(configId);
|
|
321
|
+
console.log('\n' + colors.status.success('✓ Configuration deleted'));
|
|
322
|
+
console.log(`\n ${colors.ui.key('Config ID:')} ${colors.ui.value(configId)}`);
|
|
323
|
+
console.log('\n' + (0, colors_1.separator)() + '\n');
|
|
324
|
+
}
|
|
325
|
+
catch (error) {
|
|
326
|
+
console.error(colors.status.error('✗ Failed to delete configuration'));
|
|
327
|
+
console.error(colors.status.error(error.response?.data?.detail || error.message));
|
|
328
|
+
process.exit(1);
|
|
329
|
+
}
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Show comprehensive embedding status (ADR-068 Phase 4)
|
|
334
|
+
*/
|
|
335
|
+
function createEmbeddingStatusCommand(client) {
|
|
336
|
+
return new commander_1.Command('status')
|
|
337
|
+
.description('Show comprehensive embedding coverage across all graph text entities with hash verification')
|
|
338
|
+
.option('--ontology <name>', 'Limit status to specific ontology namespace')
|
|
339
|
+
.action(async (options) => {
|
|
340
|
+
try {
|
|
341
|
+
console.log((0, colors_1.separator)());
|
|
342
|
+
console.log(colors.ui.title('📊 Embedding Coverage Status'));
|
|
343
|
+
if (options.ontology) {
|
|
344
|
+
console.log(colors.status.dim(` Ontology: ${options.ontology}`));
|
|
345
|
+
}
|
|
346
|
+
console.log((0, colors_1.separator)());
|
|
347
|
+
const status = await client.getEmbeddingStatus(options.ontology);
|
|
348
|
+
// Active Config
|
|
349
|
+
if (status.active_config) {
|
|
350
|
+
console.log();
|
|
351
|
+
console.log(colors.ui.header('Active Embedding Configuration:'));
|
|
352
|
+
console.log(` ${colors.ui.key('Provider:')} ${colors.ui.value(status.active_config.provider)}`);
|
|
353
|
+
console.log(` ${colors.ui.key('Model:')} ${colors.ui.value(status.active_config.model_name)}`);
|
|
354
|
+
console.log(` ${colors.ui.key('Dimensions:')} ${colors.ui.value(status.active_config.embedding_dimensions.toString())}`);
|
|
355
|
+
}
|
|
356
|
+
// Concepts
|
|
357
|
+
console.log();
|
|
358
|
+
console.log(colors.ui.header('Concepts (AGE Graph Nodes):'));
|
|
359
|
+
console.log(` ${colors.ui.key('Total:')} ${colors.ui.value(status.concepts.total.toString())}`);
|
|
360
|
+
console.log(` ${colors.status.success('✓ With embeddings:')} ${colors.ui.value(status.concepts.with_embeddings.toString())} (${status.concepts.percentage}%)`);
|
|
361
|
+
if (status.concepts.without_embeddings > 0) {
|
|
362
|
+
console.log(` ${colors.status.warning('✗ Without embeddings:')} ${colors.ui.value(status.concepts.without_embeddings.toString())}`);
|
|
363
|
+
}
|
|
364
|
+
if (status.concepts.incompatible_embeddings > 0) {
|
|
365
|
+
console.log(` ${colors.status.error('⚠ Incompatible:')} ${colors.ui.value(status.concepts.incompatible_embeddings.toString())} (model/dimension mismatch)`);
|
|
366
|
+
}
|
|
367
|
+
// Sources
|
|
368
|
+
console.log();
|
|
369
|
+
console.log(colors.ui.header('Sources (Text Chunks):'));
|
|
370
|
+
console.log(` ${colors.ui.key('Total:')} ${colors.ui.value(status.sources.total.toString())}`);
|
|
371
|
+
console.log(` ${colors.status.success('✓ With embeddings:')} ${colors.ui.value(status.sources.with_embeddings.toString())} (${status.sources.percentage}%)`);
|
|
372
|
+
if (status.sources.without_embeddings > 0) {
|
|
373
|
+
console.log(` ${colors.status.warning('✗ Without embeddings:')} ${colors.ui.value(status.sources.without_embeddings.toString())}`);
|
|
374
|
+
}
|
|
375
|
+
if (status.sources.stale_embeddings > 0) {
|
|
376
|
+
console.log(` ${colors.status.error('⚠ Stale embeddings:')} ${colors.ui.value(status.sources.stale_embeddings.toString())} (hash mismatch - source changed)`);
|
|
377
|
+
}
|
|
378
|
+
if (status.sources.incompatible_embeddings > 0) {
|
|
379
|
+
console.log(` ${colors.status.error('⚠ Incompatible:')} ${colors.ui.value(status.sources.incompatible_embeddings.toString())} (model/dimension mismatch)`);
|
|
380
|
+
}
|
|
381
|
+
// Vocabulary
|
|
382
|
+
console.log();
|
|
383
|
+
console.log(colors.ui.header('Vocabulary (Relationship Types):'));
|
|
384
|
+
console.log(` ${colors.ui.key('Total:')} ${colors.ui.value(status.vocabulary.total.toString())}`);
|
|
385
|
+
console.log(` ${colors.status.success('✓ With embeddings:')} ${colors.ui.value(status.vocabulary.with_embeddings.toString())} (${status.vocabulary.percentage}%)`);
|
|
386
|
+
if (status.vocabulary.without_embeddings > 0) {
|
|
387
|
+
console.log(` ${colors.status.warning('✗ Without embeddings:')} ${colors.ui.value(status.vocabulary.without_embeddings.toString())}`);
|
|
388
|
+
}
|
|
389
|
+
if (status.vocabulary.incompatible_embeddings > 0) {
|
|
390
|
+
console.log(` ${colors.status.error('⚠ Incompatible:')} ${colors.ui.value(status.vocabulary.incompatible_embeddings.toString())} (model/dimension mismatch)`);
|
|
391
|
+
}
|
|
392
|
+
// Images (future)
|
|
393
|
+
if (status.images && status.images.total > 0) {
|
|
394
|
+
console.log();
|
|
395
|
+
console.log(colors.ui.header('Images:'));
|
|
396
|
+
console.log(` ${colors.ui.key('Total:')} ${colors.ui.value(status.images.total.toString())}`);
|
|
397
|
+
console.log(` ${colors.status.success('✓ With embeddings:')} ${colors.ui.value(status.images.with_embeddings.toString())} (${status.images.percentage}%)`);
|
|
398
|
+
}
|
|
399
|
+
else if (status.images && status.images.note) {
|
|
400
|
+
console.log();
|
|
401
|
+
console.log(colors.ui.header('Images:'));
|
|
402
|
+
console.log(` ${colors.status.dim(status.images.note)}`);
|
|
403
|
+
}
|
|
404
|
+
// Summary
|
|
405
|
+
console.log();
|
|
406
|
+
console.log((0, colors_1.separator)());
|
|
407
|
+
console.log(colors.ui.header('Overall Summary:'));
|
|
408
|
+
console.log(` ${colors.ui.key('Total Entities:')} ${colors.ui.value(status.summary.total_entities.toString())}`);
|
|
409
|
+
console.log(` ${colors.status.success('✓ With Embeddings:')} ${colors.ui.value(status.summary.total_with_embeddings.toString())} (${status.summary.overall_percentage}%)`);
|
|
410
|
+
if (status.summary.total_without_embeddings > 0) {
|
|
411
|
+
console.log(` ${colors.status.warning('✗ Without Embeddings:')} ${colors.ui.value(status.summary.total_without_embeddings.toString())}`);
|
|
412
|
+
}
|
|
413
|
+
if (status.summary.total_incompatible > 0) {
|
|
414
|
+
console.log(` ${colors.status.error('⚠ Incompatible:')} ${colors.ui.value(status.summary.total_incompatible.toString())} (requires regeneration)`);
|
|
415
|
+
}
|
|
416
|
+
console.log((0, colors_1.separator)());
|
|
417
|
+
console.log();
|
|
418
|
+
}
|
|
419
|
+
catch (error) {
|
|
420
|
+
console.error();
|
|
421
|
+
console.error(colors.status.error('✗ Failed to get embedding status'));
|
|
422
|
+
console.error(colors.status.dim(` ${error.message || error}`));
|
|
423
|
+
console.error();
|
|
424
|
+
process.exit(1);
|
|
425
|
+
}
|
|
426
|
+
});
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* Regenerate embeddings (ADR-068 Phase 4)
|
|
430
|
+
*/
|
|
431
|
+
function createEmbeddingRegenerateCommand(client) {
|
|
432
|
+
const cmd = new commander_1.Command('regenerate')
|
|
433
|
+
.description('Regenerate vector embeddings for all graph text entities: concepts, sources, vocabulary (ADR-068 Phase 4) - useful after changing embedding model or repairing missing embeddings')
|
|
434
|
+
.option('--type <type>', 'Type of embeddings to regenerate: concept, source, vocabulary, all')
|
|
435
|
+
.option('--only-missing', 'Only generate for entities without embeddings (skip existing) - applies to concept and source types', false)
|
|
436
|
+
.option('--only-incompatible', 'Only regenerate embeddings with mismatched model/dimensions (for model migrations)', false)
|
|
437
|
+
.option('--ontology <name>', 'Limit regeneration to specific ontology namespace - applies to concept and source types')
|
|
438
|
+
.option('--limit <n>', 'Maximum number of entities to process (useful for testing/batching)', parseInt)
|
|
439
|
+
.option('--status', 'Show embedding status before regeneration (diagnostic mode)', false)
|
|
440
|
+
.action(async (options) => {
|
|
441
|
+
// If --status flag is set, show status and exit (reuse status command logic)
|
|
442
|
+
if (options.status) {
|
|
443
|
+
const statusCommand = createEmbeddingStatusCommand(client);
|
|
444
|
+
await statusCommand.parseAsync(['status', ...(options.ontology ? ['--ontology', options.ontology] : [])], { from: 'user' });
|
|
445
|
+
return;
|
|
446
|
+
}
|
|
447
|
+
// If no --type provided, show help and exit
|
|
448
|
+
if (!options.type) {
|
|
449
|
+
console.log();
|
|
450
|
+
console.log(colors.status.warning('⚠ No --type specified'));
|
|
451
|
+
console.log();
|
|
452
|
+
console.log(colors.ui.header('Usage:'));
|
|
453
|
+
console.log(' kg admin embedding regenerate --type <type> [options]');
|
|
454
|
+
console.log();
|
|
455
|
+
console.log(colors.ui.header('Required:'));
|
|
456
|
+
console.log(' --type <type> Type: concept, source, vocabulary, all');
|
|
457
|
+
console.log();
|
|
458
|
+
console.log(colors.ui.header('Options:'));
|
|
459
|
+
console.log(' --only-missing Only generate for entities without embeddings');
|
|
460
|
+
console.log(' --only-incompatible Only regenerate embeddings with model/dimension mismatch');
|
|
461
|
+
console.log(' --ontology <name> Limit to specific ontology (concept/source only)');
|
|
462
|
+
console.log(' --limit <n> Maximum number of entities to process');
|
|
463
|
+
console.log(' --status Show embedding status first (diagnostic mode)');
|
|
464
|
+
console.log();
|
|
465
|
+
console.log(colors.ui.header('Examples:'));
|
|
466
|
+
console.log(' kg admin embedding regenerate --type concept --only-missing');
|
|
467
|
+
console.log(' kg admin embedding regenerate --type source --only-incompatible');
|
|
468
|
+
console.log(' kg admin embedding regenerate --type all');
|
|
469
|
+
console.log(' kg admin embedding regenerate --status # Show status first');
|
|
470
|
+
console.log();
|
|
471
|
+
console.log(colors.status.dim('Tip: Run "kg admin embedding status" to check current coverage'));
|
|
472
|
+
console.log();
|
|
473
|
+
process.exit(0);
|
|
474
|
+
}
|
|
475
|
+
// Normal regeneration flow
|
|
476
|
+
try {
|
|
477
|
+
// Validate embedding type
|
|
478
|
+
const validTypes = ['concept', 'source', 'vocabulary', 'all'];
|
|
479
|
+
const embeddingType = options.type;
|
|
480
|
+
if (!validTypes.includes(embeddingType)) {
|
|
481
|
+
console.error();
|
|
482
|
+
console.error(colors.status.error(`✗ Invalid --type: ${embeddingType}`));
|
|
483
|
+
console.error(colors.status.dim(` Valid types: ${validTypes.join(', ')}`));
|
|
484
|
+
console.error();
|
|
485
|
+
process.exit(1);
|
|
486
|
+
}
|
|
487
|
+
// Validate flag combination
|
|
488
|
+
if (options.onlyMissing && options.onlyIncompatible) {
|
|
489
|
+
console.error();
|
|
490
|
+
console.error(colors.status.error('✗ Cannot use both --only-missing and --only-incompatible'));
|
|
491
|
+
console.error(colors.status.dim(' Choose one: missing (no embeddings) or incompatible (wrong model/dimensions)'));
|
|
492
|
+
console.error();
|
|
493
|
+
process.exit(1);
|
|
494
|
+
}
|
|
495
|
+
console.log((0, colors_1.separator)());
|
|
496
|
+
console.log(colors.ui.title(`🔄 Regenerating ${embeddingType.charAt(0).toUpperCase() + embeddingType.slice(1)} Embeddings`));
|
|
497
|
+
console.log((0, colors_1.separator)());
|
|
498
|
+
const params = {
|
|
499
|
+
embedding_type: embeddingType,
|
|
500
|
+
only_missing: options.onlyMissing || false,
|
|
501
|
+
only_incompatible: options.onlyIncompatible || false
|
|
502
|
+
};
|
|
503
|
+
if (options.ontology) {
|
|
504
|
+
params.ontology = options.ontology;
|
|
505
|
+
}
|
|
506
|
+
if (options.limit) {
|
|
507
|
+
params.limit = options.limit;
|
|
508
|
+
}
|
|
509
|
+
console.log();
|
|
510
|
+
console.log(colors.status.info('Starting regeneration...'));
|
|
511
|
+
console.log(colors.status.dim(` Type: ${embeddingType}`));
|
|
512
|
+
if (options.ontology) {
|
|
513
|
+
console.log(colors.status.dim(` Ontology: ${options.ontology}`));
|
|
514
|
+
}
|
|
515
|
+
if (options.onlyMissing) {
|
|
516
|
+
console.log(colors.status.dim(' Mode: Only missing embeddings'));
|
|
517
|
+
}
|
|
518
|
+
if (options.onlyIncompatible) {
|
|
519
|
+
console.log(colors.status.dim(' Mode: Only incompatible embeddings (model migration)'));
|
|
520
|
+
}
|
|
521
|
+
if (options.limit) {
|
|
522
|
+
console.log(colors.status.dim(` Limit: ${options.limit} entities`));
|
|
523
|
+
}
|
|
524
|
+
console.log();
|
|
525
|
+
const result = await client.regenerateEmbeddings(params);
|
|
526
|
+
console.log((0, colors_1.separator)());
|
|
527
|
+
console.log(colors.status.success('✓ Regeneration completed'));
|
|
528
|
+
// Handle 'all' type response (has totals and per-type results)
|
|
529
|
+
if (embeddingType === 'all' && result.totals) {
|
|
530
|
+
console.log(` ${colors.stats.label('Total Processed:')} ${colors.stats.value(result.totals.processed_count.toString())} / ${result.totals.target_count}`);
|
|
531
|
+
if (result.totals.failed_count > 0) {
|
|
532
|
+
console.log(` ${colors.status.error('Total Failed:')} ${result.totals.failed_count}`);
|
|
533
|
+
}
|
|
534
|
+
console.log(` ${colors.status.dim('Total Duration:')} ${result.totals.duration_ms}ms`);
|
|
535
|
+
console.log();
|
|
536
|
+
console.log(colors.ui.header('Breakdown:'));
|
|
537
|
+
if (result.results.concepts) {
|
|
538
|
+
console.log(` ${colors.ui.key('Concepts:')} ${colors.stats.value(result.results.concepts.processed_count.toString())} / ${result.results.concepts.target_count} (${result.results.concepts.duration_ms}ms)`);
|
|
539
|
+
}
|
|
540
|
+
if (result.results.sources) {
|
|
541
|
+
console.log(` ${colors.ui.key('Sources:')} ${colors.stats.value(result.results.sources.processed_count.toString())} / ${result.results.sources.target_count} (${result.results.sources.duration_ms}ms)`);
|
|
542
|
+
}
|
|
543
|
+
if (result.results.vocabulary) {
|
|
544
|
+
console.log(` ${colors.ui.key('Vocabulary:')} ${colors.stats.value(result.results.vocabulary.processed_count.toString())} / ${result.results.vocabulary.target_count} (${result.results.vocabulary.duration_ms}ms)`);
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
else {
|
|
548
|
+
// Single type response
|
|
549
|
+
console.log(` ${colors.stats.label('Processed:')} ${colors.stats.value(result.processed_count.toString())} / ${result.target_count}`);
|
|
550
|
+
if (result.failed_count > 0) {
|
|
551
|
+
console.log(` ${colors.status.error('Failed:')} ${result.failed_count}`);
|
|
552
|
+
}
|
|
553
|
+
console.log(` ${colors.status.dim('Duration:')} ${result.duration_ms}ms`);
|
|
554
|
+
if (result.embedding_model && result.embedding_provider) {
|
|
555
|
+
console.log(` ${colors.status.dim('Model:')} ${result.embedding_provider}/${result.embedding_model}`);
|
|
556
|
+
}
|
|
557
|
+
if (result.errors && result.errors.length > 0) {
|
|
558
|
+
console.log();
|
|
559
|
+
console.log(colors.status.error('Errors:'));
|
|
560
|
+
result.errors.slice(0, 5).forEach((err) => {
|
|
561
|
+
console.log(colors.status.dim(` ${err}`));
|
|
562
|
+
});
|
|
563
|
+
if (result.errors.length > 5) {
|
|
564
|
+
console.log(colors.status.dim(` ... and ${result.errors.length - 5} more`));
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
console.log((0, colors_1.separator)());
|
|
569
|
+
console.log();
|
|
570
|
+
}
|
|
571
|
+
catch (error) {
|
|
572
|
+
console.error();
|
|
573
|
+
console.error(colors.status.error('✗ Failed to regenerate embeddings'));
|
|
574
|
+
console.error(colors.status.dim(` ${error.message || error}`));
|
|
575
|
+
console.error();
|
|
576
|
+
process.exit(1);
|
|
577
|
+
}
|
|
578
|
+
});
|
|
579
|
+
return cmd;
|
|
580
|
+
}
|
|
581
|
+
/**
|
|
582
|
+
* Embedding command group
|
|
583
|
+
*/
|
|
584
|
+
function createEmbeddingCommand(client) {
|
|
585
|
+
const embeddingCommand = new commander_1.Command('embedding')
|
|
586
|
+
.description('Manage embedding model configuration (ADR-039)');
|
|
587
|
+
embeddingCommand.addCommand(createEmbeddingListCommand(client));
|
|
588
|
+
embeddingCommand.addCommand(createEmbeddingCreateCommand(client));
|
|
589
|
+
embeddingCommand.addCommand(createEmbeddingActivateCommand(client));
|
|
590
|
+
embeddingCommand.addCommand(createEmbeddingReloadCommand(client));
|
|
591
|
+
embeddingCommand.addCommand(createEmbeddingProtectCommand(client));
|
|
592
|
+
embeddingCommand.addCommand(createEmbeddingUnprotectCommand(client));
|
|
593
|
+
embeddingCommand.addCommand(createEmbeddingDeleteCommand(client));
|
|
594
|
+
embeddingCommand.addCommand(createEmbeddingStatusCommand(client));
|
|
595
|
+
embeddingCommand.addCommand(createEmbeddingRegenerateCommand(client));
|
|
596
|
+
return embeddingCommand;
|
|
597
|
+
}
|
|
598
|
+
//# sourceMappingURL=embedding.js.map
|