@aaronsb/kg-cli 0.6.6 → 0.7.0
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/dist/api/client.d.ts +127 -1
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +147 -0
- package/dist/api/client.js.map +1 -1
- package/dist/cli/batch.d.ts +8 -0
- package/dist/cli/batch.d.ts.map +1 -0
- package/dist/cli/batch.js +225 -0
- package/dist/cli/batch.js.map +1 -0
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +8 -0
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/concept.d.ts +9 -0
- package/dist/cli/concept.d.ts.map +1 -0
- package/dist/cli/concept.js +336 -0
- package/dist/cli/concept.js.map +1 -0
- package/dist/cli/edge.d.ts +9 -0
- package/dist/cli/edge.d.ts.map +1 -0
- package/dist/cli/edge.js +364 -0
- package/dist/cli/edge.js.map +1 -0
- package/dist/cli/jobs.js +111 -3
- package/dist/cli/jobs.js.map +1 -1
- package/dist/cli/storage.d.ts +10 -0
- package/dist/cli/storage.d.ts.map +1 -0
- package/dist/cli/storage.js +260 -0
- package/dist/cli/storage.js.map +1 -0
- package/dist/cli/vocabulary/index.d.ts.map +1 -1
- package/dist/cli/vocabulary/index.js +1 -0
- package/dist/cli/vocabulary/index.js.map +1 -1
- package/dist/cli/vocabulary/similarity.d.ts +1 -0
- package/dist/cli/vocabulary/similarity.d.ts.map +1 -1
- package/dist/cli/vocabulary/similarity.js +60 -9
- package/dist/cli/vocabulary/similarity.js.map +1 -1
- package/dist/lib/interactive.d.ts +84 -0
- package/dist/lib/interactive.d.ts.map +1 -0
- package/dist/lib/interactive.js +296 -0
- package/dist/lib/interactive.js.map +1 -0
- package/dist/lib/validation.d.ts +106 -0
- package/dist/lib/validation.d.ts.map +1 -0
- package/dist/lib/validation.js +354 -0
- package/dist/lib/validation.js.map +1 -0
- package/dist/mcp/formatters/concept.d.ts +24 -0
- package/dist/mcp/formatters/concept.d.ts.map +1 -0
- package/dist/mcp/formatters/concept.js +243 -0
- package/dist/mcp/formatters/concept.js.map +1 -0
- package/dist/mcp/formatters/document.d.ts +25 -0
- package/dist/mcp/formatters/document.d.ts.map +1 -0
- package/dist/mcp/formatters/document.js +178 -0
- package/dist/mcp/formatters/document.js.map +1 -0
- package/dist/mcp/formatters/epistemic.d.ts +16 -0
- package/dist/mcp/formatters/epistemic.d.ts.map +1 -0
- package/dist/mcp/formatters/epistemic.js +269 -0
- package/dist/mcp/formatters/epistemic.js.map +1 -0
- package/dist/mcp/formatters/graph.d.ts +63 -0
- package/dist/mcp/formatters/graph.d.ts.map +1 -0
- package/dist/mcp/formatters/graph.js +220 -0
- package/dist/mcp/formatters/graph.js.map +1 -0
- package/dist/mcp/formatters/index.d.ts +18 -0
- package/dist/mcp/formatters/index.d.ts.map +1 -0
- package/dist/mcp/formatters/index.js +63 -0
- package/dist/mcp/formatters/index.js.map +1 -0
- package/dist/mcp/formatters/ingest.d.ts +16 -0
- package/dist/mcp/formatters/ingest.d.ts.map +1 -0
- package/dist/mcp/formatters/ingest.js +169 -0
- package/dist/mcp/formatters/ingest.js.map +1 -0
- package/dist/mcp/formatters/job.d.ts +13 -0
- package/dist/mcp/formatters/job.d.ts.map +1 -0
- package/dist/mcp/formatters/job.js +204 -0
- package/dist/mcp/formatters/job.js.map +1 -0
- package/dist/mcp/formatters/source.d.ts +19 -0
- package/dist/mcp/formatters/source.d.ts.map +1 -0
- package/dist/mcp/formatters/source.js +182 -0
- package/dist/mcp/formatters/source.js.map +1 -0
- package/dist/mcp/formatters/system.d.ts +10 -0
- package/dist/mcp/formatters/system.d.ts.map +1 -0
- package/dist/mcp/formatters/system.js +152 -0
- package/dist/mcp/formatters/system.js.map +1 -0
- package/dist/mcp/formatters/utils.d.ts +17 -0
- package/dist/mcp/formatters/utils.d.ts.map +1 -0
- package/dist/mcp/formatters/utils.js +55 -0
- package/dist/mcp/formatters/utils.js.map +1 -0
- package/dist/mcp/graph-operations.d.ts +242 -0
- package/dist/mcp/graph-operations.d.ts.map +1 -0
- package/dist/mcp/graph-operations.js +532 -0
- package/dist/mcp/graph-operations.js.map +1 -0
- package/dist/mcp-server.js +460 -32
- package/dist/mcp-server.js.map +1 -1
- package/dist/types/index.d.ts +153 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/version.d.ts +3 -3
- package/dist/version.js +3 -3
- package/dist/version.js.map +1 -1
- package/package.json +1 -1
- package/dist/mcp/formatters.d.ts +0 -100
- package/dist/mcp/formatters.d.ts.map +0 -1
- package/dist/mcp/formatters.js +0 -1411
- package/dist/mcp/formatters.js.map +0 -1
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive utilities for CLI wizard mode (ADR-089 Phase 2).
|
|
3
|
+
*
|
|
4
|
+
* Provides Tab-to-select input, multi-line editing, and confirmation prompts.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Option for selection menus.
|
|
8
|
+
*/
|
|
9
|
+
export interface SelectOption {
|
|
10
|
+
label: string;
|
|
11
|
+
value: string;
|
|
12
|
+
description?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Result from field input.
|
|
16
|
+
*/
|
|
17
|
+
export interface FieldInputResult {
|
|
18
|
+
value: string;
|
|
19
|
+
cancelled: boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Configuration for FieldInput.
|
|
23
|
+
*/
|
|
24
|
+
export interface FieldInputConfig {
|
|
25
|
+
prompt: string;
|
|
26
|
+
defaultValue?: string;
|
|
27
|
+
required?: boolean;
|
|
28
|
+
validator?: (value: string) => string | null;
|
|
29
|
+
selectorProvider?: () => Promise<SelectOption[]>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Simple text input with optional default value.
|
|
33
|
+
*/
|
|
34
|
+
export declare function textInput(prompt: string, defaultValue?: string): Promise<FieldInputResult>;
|
|
35
|
+
/**
|
|
36
|
+
* Multi-line text input (for evidence/description).
|
|
37
|
+
* Ctrl+D to finish, Ctrl+C to cancel.
|
|
38
|
+
*/
|
|
39
|
+
export declare function multiLineInput(prompt: string): Promise<FieldInputResult>;
|
|
40
|
+
/**
|
|
41
|
+
* Select from a list of options.
|
|
42
|
+
*/
|
|
43
|
+
export declare function selectOption(prompt: string, options: SelectOption[], allowCancel?: boolean): Promise<{
|
|
44
|
+
selected: SelectOption | null;
|
|
45
|
+
cancelled: boolean;
|
|
46
|
+
}>;
|
|
47
|
+
/**
|
|
48
|
+
* Confirmation prompt with Accept/Reject/JSON options.
|
|
49
|
+
*/
|
|
50
|
+
export declare function confirmAction(message: string, options?: {
|
|
51
|
+
allowJson?: boolean;
|
|
52
|
+
acceptLabel?: string;
|
|
53
|
+
rejectLabel?: string;
|
|
54
|
+
}): Promise<'accept' | 'reject' | 'json' | 'cancelled'>;
|
|
55
|
+
/**
|
|
56
|
+
* Simple yes/no confirmation.
|
|
57
|
+
*/
|
|
58
|
+
export declare function confirmYesNo(prompt: string, defaultYes?: boolean): Promise<boolean>;
|
|
59
|
+
/**
|
|
60
|
+
* Build ASCII diagram for concept creation confirmation.
|
|
61
|
+
*/
|
|
62
|
+
export declare function buildConceptDiagram(concept: {
|
|
63
|
+
label: string;
|
|
64
|
+
isNew: boolean;
|
|
65
|
+
}, connections: Array<{
|
|
66
|
+
label: string;
|
|
67
|
+
conceptId: string;
|
|
68
|
+
relationshipType: string;
|
|
69
|
+
}>): string;
|
|
70
|
+
/**
|
|
71
|
+
* Display a spinner while an async operation runs.
|
|
72
|
+
*/
|
|
73
|
+
export declare function withSpinner<T>(message: string, operation: () => Promise<T>): Promise<T>;
|
|
74
|
+
/**
|
|
75
|
+
* Standardized CLI error handler.
|
|
76
|
+
*
|
|
77
|
+
* Extracts error message from API responses or Error objects,
|
|
78
|
+
* displays formatted error, and exits with code 1.
|
|
79
|
+
*/
|
|
80
|
+
export declare function handleCliError(error: any, context: string, options?: {
|
|
81
|
+
notFoundMessage?: string;
|
|
82
|
+
exitOnError?: boolean;
|
|
83
|
+
}): void;
|
|
84
|
+
//# sourceMappingURL=interactive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../src/lib/interactive.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC7C,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;CAClD;AAYD;;GAEG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAmBhG;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAqB9E;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,YAAY,EAAE,EACvB,WAAW,GAAE,OAAc,GAC1B,OAAO,CAAC;IAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC,CAyChE;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IACP,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACjB,GACL,OAAO,CAAC,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC,CA0DrD;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,GAAE,OAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAqBhG;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,EAC1C,WAAW,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,CAAC,GACjF,MAAM,CAsBR;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,CAAC,EACjC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,CAAC,CAAC,CAyBZ;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,GAAG,EACV,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IACR,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,GACA,IAAI,CAqBN"}
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Interactive utilities for CLI wizard mode (ADR-089 Phase 2).
|
|
4
|
+
*
|
|
5
|
+
* Provides Tab-to-select input, multi-line editing, and confirmation prompts.
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.textInput = textInput;
|
|
42
|
+
exports.multiLineInput = multiLineInput;
|
|
43
|
+
exports.selectOption = selectOption;
|
|
44
|
+
exports.confirmAction = confirmAction;
|
|
45
|
+
exports.confirmYesNo = confirmYesNo;
|
|
46
|
+
exports.buildConceptDiagram = buildConceptDiagram;
|
|
47
|
+
exports.withSpinner = withSpinner;
|
|
48
|
+
exports.handleCliError = handleCliError;
|
|
49
|
+
const readline = __importStar(require("readline"));
|
|
50
|
+
const colors = __importStar(require("../cli/colors"));
|
|
51
|
+
/**
|
|
52
|
+
* Create a readline interface for terminal input.
|
|
53
|
+
*/
|
|
54
|
+
function createReadline() {
|
|
55
|
+
return readline.createInterface({
|
|
56
|
+
input: process.stdin,
|
|
57
|
+
output: process.stdout,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Simple text input with optional default value.
|
|
62
|
+
*/
|
|
63
|
+
async function textInput(prompt, defaultValue) {
|
|
64
|
+
return new Promise((resolve) => {
|
|
65
|
+
const rl = createReadline();
|
|
66
|
+
const displayPrompt = defaultValue
|
|
67
|
+
? `${prompt} [${colors.status.dim(defaultValue)}]: `
|
|
68
|
+
: `${prompt}: `;
|
|
69
|
+
rl.question(displayPrompt, (answer) => {
|
|
70
|
+
rl.close();
|
|
71
|
+
const value = answer.trim() || defaultValue || '';
|
|
72
|
+
resolve({ value, cancelled: false });
|
|
73
|
+
});
|
|
74
|
+
// Handle Ctrl+C
|
|
75
|
+
rl.on('SIGINT', () => {
|
|
76
|
+
rl.close();
|
|
77
|
+
resolve({ value: '', cancelled: true });
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Multi-line text input (for evidence/description).
|
|
83
|
+
* Ctrl+D to finish, Ctrl+C to cancel.
|
|
84
|
+
*/
|
|
85
|
+
async function multiLineInput(prompt) {
|
|
86
|
+
console.log(`${prompt} (Ctrl+D to finish, Ctrl+C to cancel):`);
|
|
87
|
+
console.log(colors.status.dim('─'.repeat(40)));
|
|
88
|
+
return new Promise((resolve) => {
|
|
89
|
+
const lines = [];
|
|
90
|
+
const rl = createReadline();
|
|
91
|
+
rl.on('line', (line) => {
|
|
92
|
+
lines.push(line);
|
|
93
|
+
});
|
|
94
|
+
rl.on('close', () => {
|
|
95
|
+
resolve({ value: lines.join('\n'), cancelled: false });
|
|
96
|
+
});
|
|
97
|
+
rl.on('SIGINT', () => {
|
|
98
|
+
rl.close();
|
|
99
|
+
resolve({ value: '', cancelled: true });
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Select from a list of options.
|
|
105
|
+
*/
|
|
106
|
+
async function selectOption(prompt, options, allowCancel = true) {
|
|
107
|
+
console.log(`\n${prompt}`);
|
|
108
|
+
console.log(colors.status.dim('─'.repeat(40)));
|
|
109
|
+
for (let i = 0; i < options.length; i++) {
|
|
110
|
+
const opt = options[i];
|
|
111
|
+
console.log(` ${colors.status.info((i + 1).toString() + '.')} ${opt.label}`);
|
|
112
|
+
if (opt.description) {
|
|
113
|
+
console.log(` ${colors.status.dim(opt.description)}`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
if (allowCancel) {
|
|
117
|
+
console.log(` ${colors.status.dim('0. Cancel')}`);
|
|
118
|
+
}
|
|
119
|
+
return new Promise((resolve) => {
|
|
120
|
+
const rl = createReadline();
|
|
121
|
+
rl.question(`\nSelect [1-${options.length}]: `, (answer) => {
|
|
122
|
+
rl.close();
|
|
123
|
+
const num = parseInt(answer.trim(), 10);
|
|
124
|
+
if (num === 0 && allowCancel) {
|
|
125
|
+
resolve({ selected: null, cancelled: true });
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
if (isNaN(num) || num < 1 || num > options.length) {
|
|
129
|
+
console.log(colors.status.error('Invalid selection'));
|
|
130
|
+
resolve({ selected: null, cancelled: false });
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
resolve({ selected: options[num - 1], cancelled: false });
|
|
134
|
+
});
|
|
135
|
+
rl.on('SIGINT', () => {
|
|
136
|
+
rl.close();
|
|
137
|
+
resolve({ selected: null, cancelled: true });
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Confirmation prompt with Accept/Reject/JSON options.
|
|
143
|
+
*/
|
|
144
|
+
async function confirmAction(message, options = {}) {
|
|
145
|
+
const acceptKey = options.acceptLabel || 'Accept';
|
|
146
|
+
const rejectKey = options.rejectLabel || 'Reject';
|
|
147
|
+
console.log();
|
|
148
|
+
console.log(message);
|
|
149
|
+
console.log();
|
|
150
|
+
let promptText = `[${colors.status.success('A')}]${acceptKey} [${colors.status.error('R')}]${rejectKey}`;
|
|
151
|
+
if (options.allowJson) {
|
|
152
|
+
promptText += ` [${colors.status.info('J')}]SON export`;
|
|
153
|
+
}
|
|
154
|
+
console.log(promptText);
|
|
155
|
+
return new Promise((resolve) => {
|
|
156
|
+
const rl = createReadline();
|
|
157
|
+
// Read single character
|
|
158
|
+
if (process.stdin.isTTY) {
|
|
159
|
+
process.stdin.setRawMode(true);
|
|
160
|
+
}
|
|
161
|
+
process.stdin.resume();
|
|
162
|
+
process.stdin.once('data', (key) => {
|
|
163
|
+
if (process.stdin.isTTY) {
|
|
164
|
+
process.stdin.setRawMode(false);
|
|
165
|
+
}
|
|
166
|
+
rl.close();
|
|
167
|
+
const char = key.toString().toLowerCase();
|
|
168
|
+
if (char === '\u0003') { // Ctrl+C
|
|
169
|
+
resolve('cancelled');
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
if (char === 'a' || char === 'y') {
|
|
173
|
+
console.log(colors.status.success('Accepted'));
|
|
174
|
+
resolve('accept');
|
|
175
|
+
}
|
|
176
|
+
else if (char === 'r' || char === 'n') {
|
|
177
|
+
console.log(colors.status.error('Rejected'));
|
|
178
|
+
resolve('reject');
|
|
179
|
+
}
|
|
180
|
+
else if (char === 'j' && options.allowJson) {
|
|
181
|
+
console.log(colors.status.info('JSON export'));
|
|
182
|
+
resolve('json');
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
console.log(colors.status.warning('Invalid input'));
|
|
186
|
+
resolve('reject');
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
rl.on('SIGINT', () => {
|
|
190
|
+
if (process.stdin.isTTY) {
|
|
191
|
+
process.stdin.setRawMode(false);
|
|
192
|
+
}
|
|
193
|
+
rl.close();
|
|
194
|
+
resolve('cancelled');
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Simple yes/no confirmation.
|
|
200
|
+
*/
|
|
201
|
+
async function confirmYesNo(prompt, defaultYes = false) {
|
|
202
|
+
return new Promise((resolve) => {
|
|
203
|
+
const rl = createReadline();
|
|
204
|
+
const hint = defaultYes ? '[Y/n]' : '[y/N]';
|
|
205
|
+
rl.question(`${prompt} ${hint}: `, (answer) => {
|
|
206
|
+
rl.close();
|
|
207
|
+
const normalized = answer.trim().toLowerCase();
|
|
208
|
+
if (normalized === '') {
|
|
209
|
+
resolve(defaultYes);
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
resolve(normalized === 'y' || normalized === 'yes');
|
|
213
|
+
});
|
|
214
|
+
rl.on('SIGINT', () => {
|
|
215
|
+
rl.close();
|
|
216
|
+
resolve(false);
|
|
217
|
+
});
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Build ASCII diagram for concept creation confirmation.
|
|
222
|
+
*/
|
|
223
|
+
function buildConceptDiagram(concept, connections) {
|
|
224
|
+
const lines = [];
|
|
225
|
+
const boxWidth = Math.max(concept.label.length + 4, 24);
|
|
226
|
+
// Main concept box
|
|
227
|
+
lines.push('┌' + '─'.repeat(boxWidth) + '┐');
|
|
228
|
+
lines.push('│' + concept.label.padStart((boxWidth + concept.label.length) / 2).padEnd(boxWidth) + '│');
|
|
229
|
+
lines.push('│' + (concept.isNew ? '(new concept)' : '(existing)').padStart((boxWidth + 13) / 2).padEnd(boxWidth) + '│');
|
|
230
|
+
lines.push('└' + '─'.repeat(boxWidth / 2) + '┬' + '─'.repeat(boxWidth - boxWidth / 2 - 1) + '┘');
|
|
231
|
+
// Connections
|
|
232
|
+
for (const conn of connections) {
|
|
233
|
+
lines.push(' '.repeat(boxWidth / 2 + 1) + '│');
|
|
234
|
+
lines.push(' '.repeat(boxWidth / 2 + 1) + '│ ' + conn.relationshipType);
|
|
235
|
+
lines.push(' '.repeat(boxWidth / 2 + 1) + '▼');
|
|
236
|
+
lines.push('┌' + '─'.repeat(boxWidth) + '┐');
|
|
237
|
+
lines.push('│' + conn.label.padStart((boxWidth + conn.label.length) / 2).padEnd(boxWidth) + '│');
|
|
238
|
+
lines.push('│' + `(${conn.conceptId})`.padStart((boxWidth + conn.conceptId.length + 2) / 2).padEnd(boxWidth) + '│');
|
|
239
|
+
lines.push('└' + '─'.repeat(boxWidth) + '┘');
|
|
240
|
+
}
|
|
241
|
+
return lines.join('\n');
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Display a spinner while an async operation runs.
|
|
245
|
+
*/
|
|
246
|
+
async function withSpinner(message, operation) {
|
|
247
|
+
const frames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
|
|
248
|
+
let frameIndex = 0;
|
|
249
|
+
let running = true;
|
|
250
|
+
// Start spinner
|
|
251
|
+
const interval = setInterval(() => {
|
|
252
|
+
if (running) {
|
|
253
|
+
process.stdout.write(`\r${colors.status.info(frames[frameIndex])} ${message}`);
|
|
254
|
+
frameIndex = (frameIndex + 1) % frames.length;
|
|
255
|
+
}
|
|
256
|
+
}, 80);
|
|
257
|
+
try {
|
|
258
|
+
const result = await operation();
|
|
259
|
+
running = false;
|
|
260
|
+
clearInterval(interval);
|
|
261
|
+
process.stdout.write(`\r${colors.status.success('✓')} ${message}\n`);
|
|
262
|
+
return result;
|
|
263
|
+
}
|
|
264
|
+
catch (error) {
|
|
265
|
+
running = false;
|
|
266
|
+
clearInterval(interval);
|
|
267
|
+
process.stdout.write(`\r${colors.status.error('✗')} ${message}\n`);
|
|
268
|
+
throw error;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Standardized CLI error handler.
|
|
273
|
+
*
|
|
274
|
+
* Extracts error message from API responses or Error objects,
|
|
275
|
+
* displays formatted error, and exits with code 1.
|
|
276
|
+
*/
|
|
277
|
+
function handleCliError(error, context, options) {
|
|
278
|
+
const { notFoundMessage, exitOnError = true } = options || {};
|
|
279
|
+
// Handle 404 specifically if custom message provided
|
|
280
|
+
if (error.response?.status === 404 && notFoundMessage) {
|
|
281
|
+
console.error(colors.status.error(`✗ ${notFoundMessage}`));
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
// Extract error message from various formats
|
|
285
|
+
const message = error.response?.data?.detail ||
|
|
286
|
+
error.response?.data?.message ||
|
|
287
|
+
error.message ||
|
|
288
|
+
'Unknown error';
|
|
289
|
+
console.error(colors.status.error(`✗ ${context}`));
|
|
290
|
+
console.error(colors.status.error(message));
|
|
291
|
+
}
|
|
292
|
+
if (exitOnError) {
|
|
293
|
+
process.exit(1);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
//# sourceMappingURL=interactive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../src/lib/interactive.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared validation module for concept/edge CRUD (ADR-089 Phase 2).
|
|
3
|
+
*
|
|
4
|
+
* These validators are used by both interactive wizard and non-interactive
|
|
5
|
+
* flag-based creation. They ensure graph integrity at all control levels
|
|
6
|
+
* (envelope protection).
|
|
7
|
+
*/
|
|
8
|
+
import { KnowledgeGraphClient } from '../api/client';
|
|
9
|
+
/**
|
|
10
|
+
* Validation result structure.
|
|
11
|
+
*/
|
|
12
|
+
export interface ValidationResult<T = any> {
|
|
13
|
+
valid: boolean;
|
|
14
|
+
error?: string;
|
|
15
|
+
warning?: string;
|
|
16
|
+
data?: T;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Concept match result from similarity search.
|
|
20
|
+
*/
|
|
21
|
+
export interface ConceptMatchResult {
|
|
22
|
+
matched: boolean;
|
|
23
|
+
concept_id?: string;
|
|
24
|
+
label?: string;
|
|
25
|
+
similarity?: number;
|
|
26
|
+
created?: boolean;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Vocabulary term validation result.
|
|
30
|
+
*/
|
|
31
|
+
export interface VocabTermResult {
|
|
32
|
+
exists: boolean;
|
|
33
|
+
created?: boolean;
|
|
34
|
+
term: string;
|
|
35
|
+
similar_terms?: Array<{
|
|
36
|
+
term: string;
|
|
37
|
+
similarity: number;
|
|
38
|
+
}>;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Validate that an ontology exists.
|
|
42
|
+
*/
|
|
43
|
+
export declare function validateOntology(client: KnowledgeGraphClient, ontologyName: string): Promise<ValidationResult<{
|
|
44
|
+
ontology: string;
|
|
45
|
+
}>>;
|
|
46
|
+
/**
|
|
47
|
+
* Validate that a concept ID exists.
|
|
48
|
+
*/
|
|
49
|
+
export declare function validateConceptId(client: KnowledgeGraphClient, conceptId: string): Promise<ValidationResult<{
|
|
50
|
+
concept_id: string;
|
|
51
|
+
label: string;
|
|
52
|
+
}>>;
|
|
53
|
+
/**
|
|
54
|
+
* Validate a vocabulary term exists, optionally creating it.
|
|
55
|
+
*/
|
|
56
|
+
export declare function validateVocabTerm(client: KnowledgeGraphClient, term: string, createIfMissing?: boolean): Promise<ValidationResult<VocabTermResult>>;
|
|
57
|
+
/**
|
|
58
|
+
* Search for vocabulary terms by similarity.
|
|
59
|
+
*/
|
|
60
|
+
export declare function searchVocabTerms(client: KnowledgeGraphClient, query: string, limit?: number): Promise<ValidationResult<Array<{
|
|
61
|
+
term: string;
|
|
62
|
+
similarity: number;
|
|
63
|
+
}>>>;
|
|
64
|
+
/**
|
|
65
|
+
* Search for concepts by label similarity.
|
|
66
|
+
*/
|
|
67
|
+
export declare function searchConceptsByLabel(client: KnowledgeGraphClient, query: string, ontology?: string, limit?: number): Promise<ValidationResult<Array<{
|
|
68
|
+
concept_id: string;
|
|
69
|
+
label: string;
|
|
70
|
+
similarity: number;
|
|
71
|
+
}>>>;
|
|
72
|
+
/**
|
|
73
|
+
* Match a concept description against existing concepts.
|
|
74
|
+
* Uses the same similarity matching as automatic ingestion.
|
|
75
|
+
*
|
|
76
|
+
* @param description Description to match
|
|
77
|
+
* @param ontology Target ontology
|
|
78
|
+
* @param matchingMode How to handle matches: auto, force_create, match_only
|
|
79
|
+
*/
|
|
80
|
+
export declare function matchConceptByDescription(client: KnowledgeGraphClient, description: string, ontology: string, matchingMode?: 'auto' | 'force_create' | 'match_only'): Promise<ValidationResult<ConceptMatchResult>>;
|
|
81
|
+
/**
|
|
82
|
+
* Validate all components of an edge creation request.
|
|
83
|
+
*/
|
|
84
|
+
export declare function validateEdgeCreation(client: KnowledgeGraphClient, fromConceptId: string, toConceptId: string, relationshipType: string, options?: {
|
|
85
|
+
createVocab?: boolean;
|
|
86
|
+
}): Promise<ValidationResult<{
|
|
87
|
+
from: {
|
|
88
|
+
concept_id: string;
|
|
89
|
+
label: string;
|
|
90
|
+
};
|
|
91
|
+
to: {
|
|
92
|
+
concept_id: string;
|
|
93
|
+
label: string;
|
|
94
|
+
};
|
|
95
|
+
type: string;
|
|
96
|
+
}>>;
|
|
97
|
+
/**
|
|
98
|
+
* Resolve a concept by label (semantic lookup).
|
|
99
|
+
* Searches for the best matching concept by label.
|
|
100
|
+
*/
|
|
101
|
+
export declare function resolveConceptByLabel(client: KnowledgeGraphClient, label: string, ontology?: string): Promise<ValidationResult<{
|
|
102
|
+
concept_id: string;
|
|
103
|
+
label: string;
|
|
104
|
+
similarity: number;
|
|
105
|
+
}>>;
|
|
106
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/lib/validation.ts"],"names":[],"mappings":"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"}
|