@aaronsb/kg-cli 0.6.6 → 0.8.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 +168 -1
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +266 -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/ontology.d.ts.map +1 -1
- package/dist/cli/ontology.js +534 -1
- package/dist/cli/ontology.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 +19 -0
- package/dist/mcp/formatters/index.d.ts.map +1 -0
- package/dist/mcp/formatters/index.js +73 -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/ontology.d.ts +93 -0
- package/dist/mcp/formatters/ontology.d.ts.map +1 -0
- package/dist/mcp/formatters/ontology.js +328 -0
- package/dist/mcp/formatters/ontology.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 +625 -37
- package/dist/mcp-server.js.map +1 -1
- package/dist/types/index.d.ts +289 -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,204 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Job formatters
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.formatJobList = formatJobList;
|
|
7
|
+
exports.formatJobStatus = formatJobStatus;
|
|
8
|
+
/**
|
|
9
|
+
* Format job list as markdown (token-efficient summary view)
|
|
10
|
+
*/
|
|
11
|
+
function formatJobList(jobs) {
|
|
12
|
+
let output = `# Ingestion Jobs\n\n`;
|
|
13
|
+
output += `Total: ${jobs.length} job(s)\n\n`;
|
|
14
|
+
if (jobs.length === 0) {
|
|
15
|
+
output += 'No jobs found.\n';
|
|
16
|
+
return output;
|
|
17
|
+
}
|
|
18
|
+
// Group by status for quick overview
|
|
19
|
+
const byStatus = {};
|
|
20
|
+
jobs.forEach(job => {
|
|
21
|
+
const status = job.status;
|
|
22
|
+
if (!byStatus[status])
|
|
23
|
+
byStatus[status] = [];
|
|
24
|
+
byStatus[status].push(job);
|
|
25
|
+
});
|
|
26
|
+
// Status summary
|
|
27
|
+
output += '## Status Summary\n\n';
|
|
28
|
+
const statusOrder = ['processing', 'awaiting_approval', 'pending', 'approved', 'queued', 'completed', 'failed', 'cancelled'];
|
|
29
|
+
statusOrder.forEach(status => {
|
|
30
|
+
if (byStatus[status] && byStatus[status].length > 0) {
|
|
31
|
+
const icon = status === 'completed' ? '✓' :
|
|
32
|
+
status === 'processing' ? '▶' :
|
|
33
|
+
status === 'awaiting_approval' ? '⏳' :
|
|
34
|
+
status === 'failed' ? '✗' :
|
|
35
|
+
status === 'cancelled' ? '⊘' : '○';
|
|
36
|
+
output += `- ${icon} **${status}**: ${byStatus[status].length}\n`;
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
output += '\n';
|
|
40
|
+
// Detailed list
|
|
41
|
+
output += '## Jobs\n\n';
|
|
42
|
+
jobs.forEach((job, idx) => {
|
|
43
|
+
const statusIcon = job.status === 'completed' ? '✓' :
|
|
44
|
+
job.status === 'processing' ? '▶' :
|
|
45
|
+
job.status === 'awaiting_approval' ? '⏳' :
|
|
46
|
+
job.status === 'failed' ? '✗' :
|
|
47
|
+
job.status === 'cancelled' ? '⊘' : '○';
|
|
48
|
+
// Header with status and filename
|
|
49
|
+
const filename = job.filename || job.analysis?.file_stats?.filename || 'Unknown';
|
|
50
|
+
output += `### ${idx + 1}. ${statusIcon} ${filename}\n\n`;
|
|
51
|
+
// Core info
|
|
52
|
+
output += `- **Job ID:** ${job.job_id}\n`;
|
|
53
|
+
output += `- **Status:** ${job.status}`;
|
|
54
|
+
if (job.progress?.stage) {
|
|
55
|
+
output += ` (${job.progress.stage})`;
|
|
56
|
+
}
|
|
57
|
+
output += '\n';
|
|
58
|
+
if (job.ontology) {
|
|
59
|
+
output += `- **Ontology:** ${job.ontology}\n`;
|
|
60
|
+
}
|
|
61
|
+
// Progress for processing jobs
|
|
62
|
+
if (job.status === 'processing' && job.progress) {
|
|
63
|
+
const p = job.progress;
|
|
64
|
+
if (p.percent !== undefined) {
|
|
65
|
+
output += `- **Progress:** ${p.percent}%`;
|
|
66
|
+
if (p.chunks_total !== undefined) {
|
|
67
|
+
output += ` (${p.chunks_processed || 0}/${p.chunks_total} chunks)`;
|
|
68
|
+
}
|
|
69
|
+
output += '\n';
|
|
70
|
+
}
|
|
71
|
+
if (p.concepts_created !== undefined) {
|
|
72
|
+
output += `- **Created:** ${p.concepts_created} concepts, ${p.sources_created || 0} sources\n`;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Cost for awaiting_approval
|
|
76
|
+
if (job.status === 'awaiting_approval' && job.analysis?.cost_estimate?.total) {
|
|
77
|
+
const cost = job.analysis.cost_estimate.total;
|
|
78
|
+
output += `- **Est. Cost:** $${cost.cost_low.toFixed(3)} - $${cost.cost_high.toFixed(3)}\n`;
|
|
79
|
+
}
|
|
80
|
+
// Results for completed jobs
|
|
81
|
+
if (job.status === 'completed' && job.result?.stats) {
|
|
82
|
+
const s = job.result.stats;
|
|
83
|
+
output += `- **Result:** ${s.concepts_created || 0} concepts, ${s.relationships_created || 0} relationships\n`;
|
|
84
|
+
if (job.result.cost?.total) {
|
|
85
|
+
output += `- **Cost:** ${job.result.cost.total}\n`;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Error for failed jobs
|
|
89
|
+
if (job.status === 'failed' && job.error) {
|
|
90
|
+
const truncatedError = job.error.length > 100 ? job.error.substring(0, 100) + '...' : job.error;
|
|
91
|
+
output += `- **Error:** ${truncatedError}\n`;
|
|
92
|
+
}
|
|
93
|
+
output += '\n';
|
|
94
|
+
});
|
|
95
|
+
// Usage hints
|
|
96
|
+
output += '## Actions\n\n';
|
|
97
|
+
output += '- Use `job` tool with action "status" and job_id for full details\n';
|
|
98
|
+
output += '- Use `job` tool with action "approve" to start awaiting jobs\n';
|
|
99
|
+
output += '- Use `job` tool with action "cancel" to cancel pending jobs\n';
|
|
100
|
+
return output;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Format job status as markdown (token-efficient)
|
|
104
|
+
*/
|
|
105
|
+
function formatJobStatus(job) {
|
|
106
|
+
let output = `# Job: ${job.job_id}\n\n`;
|
|
107
|
+
output += `Type: ${job.job_type}\n`;
|
|
108
|
+
output += `Status: ${job.status}`;
|
|
109
|
+
// Add stage info if available
|
|
110
|
+
if (job.progress?.stage) {
|
|
111
|
+
output += ` (${job.progress.stage})`;
|
|
112
|
+
}
|
|
113
|
+
output += '\n';
|
|
114
|
+
// Ontology and processing mode
|
|
115
|
+
if (job.ontology) {
|
|
116
|
+
output += `Ontology: ${job.ontology}\n`;
|
|
117
|
+
}
|
|
118
|
+
if (job.processing_mode) {
|
|
119
|
+
output += `Processing Mode: ${job.processing_mode}\n`;
|
|
120
|
+
}
|
|
121
|
+
// Progress information
|
|
122
|
+
if (job.progress) {
|
|
123
|
+
const p = job.progress;
|
|
124
|
+
output += '\n## Progress\n\n';
|
|
125
|
+
if (p.percent !== undefined) {
|
|
126
|
+
output += `Completion: ${p.percent}%\n`;
|
|
127
|
+
}
|
|
128
|
+
if (p.chunks_total !== undefined) {
|
|
129
|
+
const processed = p.chunks_processed || 0;
|
|
130
|
+
output += `Chunks: ${processed}/${p.chunks_total}\n`;
|
|
131
|
+
}
|
|
132
|
+
if (p.concepts_created !== undefined || p.concepts_linked !== undefined) {
|
|
133
|
+
if (p.concepts_created !== undefined) {
|
|
134
|
+
output += `Concepts Created: ${p.concepts_created}\n`;
|
|
135
|
+
}
|
|
136
|
+
if (p.concepts_linked !== undefined) {
|
|
137
|
+
output += `Concepts Linked: ${p.concepts_linked}\n`;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (p.sources_created !== undefined) {
|
|
141
|
+
output += `Sources Created: ${p.sources_created}\n`;
|
|
142
|
+
}
|
|
143
|
+
if (p.instances_created !== undefined) {
|
|
144
|
+
output += `Instances Created: ${p.instances_created}\n`;
|
|
145
|
+
}
|
|
146
|
+
if (p.relationships_created !== undefined) {
|
|
147
|
+
output += `Relationships Created: ${p.relationships_created}\n`;
|
|
148
|
+
}
|
|
149
|
+
if (p.message) {
|
|
150
|
+
output += `Message: ${p.message}\n`;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// Cost estimate (for awaiting_approval status)
|
|
154
|
+
if (job.status === 'awaiting_approval' && job.analysis?.cost_estimate) {
|
|
155
|
+
const cost = job.analysis.cost_estimate;
|
|
156
|
+
output += '\n## Cost Estimate\n\n';
|
|
157
|
+
if (cost.total) {
|
|
158
|
+
output += `Total: $${cost.total.cost_low.toFixed(4)} - $${cost.total.cost_high.toFixed(4)} ${cost.total.currency}\n`;
|
|
159
|
+
}
|
|
160
|
+
if (cost.extraction) {
|
|
161
|
+
output += `Extraction: $${cost.extraction.cost_low.toFixed(4)} - $${cost.extraction.cost_high.toFixed(4)}\n`;
|
|
162
|
+
}
|
|
163
|
+
if (cost.embeddings) {
|
|
164
|
+
output += `Embeddings: $${cost.embeddings.cost_low.toFixed(4)} - $${cost.embeddings.cost_high.toFixed(4)}\n`;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// Result (for completed jobs)
|
|
168
|
+
if (job.result) {
|
|
169
|
+
output += '\n## Result\n\n';
|
|
170
|
+
if (job.result.stats) {
|
|
171
|
+
output += `Concepts Created: ${job.result.stats.concepts_created || 0}\n`;
|
|
172
|
+
output += `Concepts Linked: ${job.result.stats.concepts_linked || 0}\n`;
|
|
173
|
+
output += `Sources Created: ${job.result.stats.sources_created || 0}\n`;
|
|
174
|
+
output += `Instances Created: ${job.result.stats.instances_created || 0}\n`;
|
|
175
|
+
output += `Relationships Created: ${job.result.stats.relationships_created || 0}\n`;
|
|
176
|
+
output += `Chunks Processed: ${job.result.stats.chunks_processed || 0}\n`;
|
|
177
|
+
}
|
|
178
|
+
if (job.result.cost) {
|
|
179
|
+
output += `Cost: ${job.result.cost.total}\n`;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// Error (for failed jobs)
|
|
183
|
+
if (job.error) {
|
|
184
|
+
output += '\n## Error\n\n';
|
|
185
|
+
output += `${job.error}\n`;
|
|
186
|
+
}
|
|
187
|
+
// Timestamps
|
|
188
|
+
output += '\n## Timeline\n\n';
|
|
189
|
+
output += `Created: ${job.created_at}\n`;
|
|
190
|
+
if (job.started_at) {
|
|
191
|
+
output += `Started: ${job.started_at}\n`;
|
|
192
|
+
}
|
|
193
|
+
if (job.completed_at) {
|
|
194
|
+
output += `Completed: ${job.completed_at}\n`;
|
|
195
|
+
}
|
|
196
|
+
if (job.approved_at) {
|
|
197
|
+
output += `Approved: ${job.approved_at} (by ${job.approved_by || 'unknown'})\n`;
|
|
198
|
+
}
|
|
199
|
+
if (job.expires_at) {
|
|
200
|
+
output += `Expires: ${job.expires_at}\n`;
|
|
201
|
+
}
|
|
202
|
+
return output;
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=job.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job.js","sourceRoot":"","sources":["../../../src/mcp/formatters/job.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ontology formatters (ADR-200)
|
|
3
|
+
*
|
|
4
|
+
* Formats ontology responses as markdown for AI agents.
|
|
5
|
+
* - Core: Ontology list, info, scores
|
|
6
|
+
* - Phase 3b/4: Proposal list, proposal details, proposal review
|
|
7
|
+
* - Phase 5: Ontology edges, affinity
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Format ontology list
|
|
11
|
+
*/
|
|
12
|
+
export declare function formatOntologyList(data: any): string;
|
|
13
|
+
/**
|
|
14
|
+
* Format ontology info (detail view)
|
|
15
|
+
*/
|
|
16
|
+
export declare function formatOntologyInfo(data: any): string;
|
|
17
|
+
/**
|
|
18
|
+
* Format ontology scores (single or all)
|
|
19
|
+
*/
|
|
20
|
+
export declare function formatOntologyScores(data: any): string;
|
|
21
|
+
interface OntologyEdge {
|
|
22
|
+
from_ontology: string;
|
|
23
|
+
to_ontology: string;
|
|
24
|
+
edge_type: string;
|
|
25
|
+
score: number;
|
|
26
|
+
shared_concept_count: number;
|
|
27
|
+
computed_at_epoch: number;
|
|
28
|
+
source: string;
|
|
29
|
+
direction: string;
|
|
30
|
+
}
|
|
31
|
+
interface OntologyEdgesResponse {
|
|
32
|
+
ontology: string;
|
|
33
|
+
count: number;
|
|
34
|
+
edges: OntologyEdge[];
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Format ontology-to-ontology edges
|
|
38
|
+
*/
|
|
39
|
+
export declare function formatOntologyEdges(data: OntologyEdgesResponse): string;
|
|
40
|
+
interface OntologyAffinity {
|
|
41
|
+
other_ontology: string;
|
|
42
|
+
shared_concept_count: number;
|
|
43
|
+
total_concepts: number;
|
|
44
|
+
affinity_score: number;
|
|
45
|
+
}
|
|
46
|
+
interface OntologyAffinityResponse {
|
|
47
|
+
ontology: string;
|
|
48
|
+
count: number;
|
|
49
|
+
affinities: OntologyAffinity[];
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Format ontology affinity (cross-ontology concept overlap)
|
|
53
|
+
*/
|
|
54
|
+
export declare function formatOntologyAffinity(data: OntologyAffinityResponse): string;
|
|
55
|
+
interface AnnealingProposal {
|
|
56
|
+
id: number;
|
|
57
|
+
proposal_type: string;
|
|
58
|
+
ontology_name: string;
|
|
59
|
+
anchor_concept_id?: string;
|
|
60
|
+
target_ontology?: string;
|
|
61
|
+
reasoning: string;
|
|
62
|
+
mass_score?: number;
|
|
63
|
+
coherence_score?: number;
|
|
64
|
+
protection_score?: number;
|
|
65
|
+
status: string;
|
|
66
|
+
created_at: string;
|
|
67
|
+
created_at_epoch: number;
|
|
68
|
+
reviewed_at?: string;
|
|
69
|
+
reviewed_by?: string;
|
|
70
|
+
reviewer_notes?: string;
|
|
71
|
+
executed_at?: string;
|
|
72
|
+
execution_result?: Record<string, unknown>;
|
|
73
|
+
suggested_name?: string;
|
|
74
|
+
suggested_description?: string;
|
|
75
|
+
}
|
|
76
|
+
interface ProposalListResponse {
|
|
77
|
+
proposals: AnnealingProposal[];
|
|
78
|
+
count: number;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Format a list of annealing proposals
|
|
82
|
+
*/
|
|
83
|
+
export declare function formatProposalList(data: ProposalListResponse): string;
|
|
84
|
+
/**
|
|
85
|
+
* Format a single proposal (detail view or review result)
|
|
86
|
+
*/
|
|
87
|
+
export declare function formatProposalDetail(p: AnnealingProposal): string;
|
|
88
|
+
/**
|
|
89
|
+
* Format a annealing cycle result
|
|
90
|
+
*/
|
|
91
|
+
export declare function formatAnnealingCycleResult(data: any): string;
|
|
92
|
+
export {};
|
|
93
|
+
//# sourceMappingURL=ontology.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ontology.d.ts","sourceRoot":"","sources":["../../../src/mcp/formatters/ontology.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;GAEG;AAEH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,CAmBpD;AAED;;GAEG;AAEH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,CAuCpD;AAED;;GAEG;AAEH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,CAkCtD;AAID,UAAU,YAAY;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,qBAAqB;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM,CAuCvE;AAED,UAAU,gBAAgB;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,wBAAwB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,gBAAgB,EAAE,CAAC;CAChC;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,wBAAwB,GAAG,MAAM,CAgB7E;AAID,UAAU,iBAAiB;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,UAAU,oBAAoB;IAC5B,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;CACf;AAuBD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,oBAAoB,GAAG,MAAM,CA0CrE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAgDjE;AAED;;GAEG;AAEH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,CAgC5D"}
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Ontology formatters (ADR-200)
|
|
4
|
+
*
|
|
5
|
+
* Formats ontology responses as markdown for AI agents.
|
|
6
|
+
* - Core: Ontology list, info, scores
|
|
7
|
+
* - Phase 3b/4: Proposal list, proposal details, proposal review
|
|
8
|
+
* - Phase 5: Ontology edges, affinity
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.formatOntologyList = formatOntologyList;
|
|
12
|
+
exports.formatOntologyInfo = formatOntologyInfo;
|
|
13
|
+
exports.formatOntologyScores = formatOntologyScores;
|
|
14
|
+
exports.formatOntologyEdges = formatOntologyEdges;
|
|
15
|
+
exports.formatOntologyAffinity = formatOntologyAffinity;
|
|
16
|
+
exports.formatProposalList = formatProposalList;
|
|
17
|
+
exports.formatProposalDetail = formatProposalDetail;
|
|
18
|
+
exports.formatAnnealingCycleResult = formatAnnealingCycleResult;
|
|
19
|
+
// ========== Core Ontology Formatters ==========
|
|
20
|
+
/**
|
|
21
|
+
* Format ontology list
|
|
22
|
+
*/
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
24
|
+
function formatOntologyList(data) {
|
|
25
|
+
let output = `# Ontologies\n\n`;
|
|
26
|
+
output += `**Total:** ${data.count}\n\n`;
|
|
27
|
+
if (data.count === 0) {
|
|
28
|
+
output += `No ontologies found.\n`;
|
|
29
|
+
return output;
|
|
30
|
+
}
|
|
31
|
+
output += `| Ontology | Concepts | Sources | Lifecycle | Epoch |\n`;
|
|
32
|
+
output += `|----------|----------|---------|-----------|-------|\n`;
|
|
33
|
+
for (const o of data.ontologies) {
|
|
34
|
+
const lifecycle = o.lifecycle_state || 'active';
|
|
35
|
+
const epoch = o.creation_epoch ?? '-';
|
|
36
|
+
output += `| **${o.ontology}** | ${o.concept_count} | ${o.source_count} | ${lifecycle} | ${epoch} |\n`;
|
|
37
|
+
}
|
|
38
|
+
return output;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Format ontology info (detail view)
|
|
42
|
+
*/
|
|
43
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
44
|
+
function formatOntologyInfo(data) {
|
|
45
|
+
let output = `# Ontology: ${data.ontology}\n\n`;
|
|
46
|
+
if (!data.node) {
|
|
47
|
+
output += `**Warning:** Ontology node not found in graph. Sources may exist with this document name but no Ontology node is registered.\n\n`;
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
output += `| Property | Value |\n|----------|-------|\n`;
|
|
51
|
+
output += `| ID | \`${data.node.ontology_id}\` |\n`;
|
|
52
|
+
if (data.node.description) {
|
|
53
|
+
output += `| Description | ${data.node.description} |\n`;
|
|
54
|
+
}
|
|
55
|
+
output += `| Lifecycle | ${data.node.lifecycle_state} |\n`;
|
|
56
|
+
output += `| Creation epoch | ${data.node.creation_epoch} |\n`;
|
|
57
|
+
output += `| Has embedding | ${data.node.has_embedding} |\n`;
|
|
58
|
+
if (data.node.created_by) {
|
|
59
|
+
output += `| Created by | ${data.node.created_by} |\n`;
|
|
60
|
+
}
|
|
61
|
+
if (data.node.search_terms && data.node.search_terms.length > 0) {
|
|
62
|
+
output += `| Search terms | ${data.node.search_terms.join(', ')} |\n`;
|
|
63
|
+
}
|
|
64
|
+
output += `\n`;
|
|
65
|
+
}
|
|
66
|
+
output += `## Statistics\n\n`;
|
|
67
|
+
output += `| Metric | Count |\n|--------|-------|\n`;
|
|
68
|
+
output += `| Concepts | ${data.statistics.concept_count} |\n`;
|
|
69
|
+
output += `| Sources | ${data.statistics.source_count} |\n`;
|
|
70
|
+
output += `| Files | ${data.statistics.file_count} |\n`;
|
|
71
|
+
output += `| Instances | ${data.statistics.instance_count} |\n`;
|
|
72
|
+
output += `| Relationships | ${data.statistics.relationship_count} |\n`;
|
|
73
|
+
if (data.files.length > 0) {
|
|
74
|
+
output += `\n## Files (${data.files.length})\n\n`;
|
|
75
|
+
for (const f of data.files) {
|
|
76
|
+
output += `- ${f}\n`;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return output;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Format ontology scores (single or all)
|
|
83
|
+
*/
|
|
84
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
85
|
+
function formatOntologyScores(data) {
|
|
86
|
+
// Single ontology score
|
|
87
|
+
if (data.ontology && data.mass_score !== undefined) {
|
|
88
|
+
const fmt = (v) => v != null ? v.toFixed(4) : '-';
|
|
89
|
+
let output = `# Ontology Scores: ${data.ontology}\n\n`;
|
|
90
|
+
output += `| Metric | Value |\n|--------|-------|\n`;
|
|
91
|
+
output += `| Mass | ${fmt(data.mass_score)} |\n`;
|
|
92
|
+
output += `| Coherence | ${fmt(data.coherence_score)} |\n`;
|
|
93
|
+
output += `| Raw exposure | ${fmt(data.raw_exposure)} |\n`;
|
|
94
|
+
output += `| Weighted exposure | ${fmt(data.weighted_exposure)} |\n`;
|
|
95
|
+
output += `| **Protection** | **${fmt(data.protection_score)}** |\n`;
|
|
96
|
+
output += `| Epoch | ${data.last_evaluated_epoch ?? '-'} |\n`;
|
|
97
|
+
return output;
|
|
98
|
+
}
|
|
99
|
+
// All ontology scores
|
|
100
|
+
let output = `# Ontology Scores\n\n`;
|
|
101
|
+
output += `**Epoch:** ${data.global_epoch ?? '-'} | **Count:** ${data.count ?? 0}\n\n`;
|
|
102
|
+
const scores = data.scores || [];
|
|
103
|
+
if (scores.length === 0) {
|
|
104
|
+
output += `No scores available.\n`;
|
|
105
|
+
return output;
|
|
106
|
+
}
|
|
107
|
+
output += `| Ontology | Mass | Coherence | Exposure | Protection | Epoch |\n`;
|
|
108
|
+
output += `|----------|------|-----------|----------|------------|-------|\n`;
|
|
109
|
+
const fmt3 = (v) => v != null ? v.toFixed(3) : '-';
|
|
110
|
+
for (const s of scores) {
|
|
111
|
+
output += `| **${s.ontology}** | ${fmt3(s.mass_score)} | ${fmt3(s.coherence_score)} | ${fmt3(s.weighted_exposure)} | ${fmt3(s.protection_score)} | ${s.last_evaluated_epoch ?? '-'} |\n`;
|
|
112
|
+
}
|
|
113
|
+
return output;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Format ontology-to-ontology edges
|
|
117
|
+
*/
|
|
118
|
+
function formatOntologyEdges(data) {
|
|
119
|
+
let output = `# Ontology Edges: ${data.ontology}\n\n`;
|
|
120
|
+
if (data.count === 0) {
|
|
121
|
+
output += `No edges found. Edges are derived during annealing cycles when ontologies share concepts.\n`;
|
|
122
|
+
return output;
|
|
123
|
+
}
|
|
124
|
+
output += `**Total:** ${data.count} edges\n\n`;
|
|
125
|
+
// Group by edge type
|
|
126
|
+
const byType = {};
|
|
127
|
+
for (const edge of data.edges) {
|
|
128
|
+
const type = edge.edge_type;
|
|
129
|
+
if (!byType[type])
|
|
130
|
+
byType[type] = [];
|
|
131
|
+
byType[type].push(edge);
|
|
132
|
+
}
|
|
133
|
+
for (const [type, edges] of Object.entries(byType)) {
|
|
134
|
+
output += `## ${type} (${edges.length})\n\n`;
|
|
135
|
+
for (const edge of edges) {
|
|
136
|
+
const arrow = edge.direction === 'outgoing' ? '->' : '<-';
|
|
137
|
+
const other = edge.direction === 'outgoing' ? edge.to_ontology : edge.from_ontology;
|
|
138
|
+
const scorePercent = (edge.score * 100).toFixed(1);
|
|
139
|
+
output += `- ${data.ontology} ${arrow} **${other}**`;
|
|
140
|
+
output += ` | score: ${scorePercent}%`;
|
|
141
|
+
output += ` | shared: ${edge.shared_concept_count}`;
|
|
142
|
+
output += ` | source: ${edge.source}`;
|
|
143
|
+
if (edge.computed_at_epoch > 0) {
|
|
144
|
+
output += ` | epoch: ${edge.computed_at_epoch}`;
|
|
145
|
+
}
|
|
146
|
+
output += `\n`;
|
|
147
|
+
}
|
|
148
|
+
output += `\n`;
|
|
149
|
+
}
|
|
150
|
+
return output;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Format ontology affinity (cross-ontology concept overlap)
|
|
154
|
+
*/
|
|
155
|
+
function formatOntologyAffinity(data) {
|
|
156
|
+
let output = `# Ontology Affinity: ${data.ontology}\n\n`;
|
|
157
|
+
if (data.count === 0) {
|
|
158
|
+
output += `No shared concepts with other ontologies.\n`;
|
|
159
|
+
return output;
|
|
160
|
+
}
|
|
161
|
+
output += `**Compared against:** ${data.count} ontologies\n\n`;
|
|
162
|
+
for (const aff of data.affinities) {
|
|
163
|
+
const scorePercent = (aff.affinity_score * 100).toFixed(1);
|
|
164
|
+
output += `- **${aff.other_ontology}** | ${scorePercent}% affinity | ${aff.shared_concept_count} shared of ${aff.total_concepts} total\n`;
|
|
165
|
+
}
|
|
166
|
+
return output;
|
|
167
|
+
}
|
|
168
|
+
function formatStatus(status) {
|
|
169
|
+
const icons = {
|
|
170
|
+
pending: '[PENDING]',
|
|
171
|
+
approved: '[APPROVED]',
|
|
172
|
+
executing: '[EXECUTING]',
|
|
173
|
+
executed: '[EXECUTED]',
|
|
174
|
+
rejected: '[REJECTED]',
|
|
175
|
+
failed: '[FAILED]',
|
|
176
|
+
expired: '[EXPIRED]',
|
|
177
|
+
};
|
|
178
|
+
return icons[status] || `[${status.toUpperCase()}]`;
|
|
179
|
+
}
|
|
180
|
+
function formatScores(p) {
|
|
181
|
+
const parts = [];
|
|
182
|
+
if (p.mass_score != null)
|
|
183
|
+
parts.push(`mass: ${p.mass_score.toFixed(3)}`);
|
|
184
|
+
if (p.coherence_score != null)
|
|
185
|
+
parts.push(`coherence: ${p.coherence_score.toFixed(3)}`);
|
|
186
|
+
if (p.protection_score != null)
|
|
187
|
+
parts.push(`protection: ${p.protection_score.toFixed(3)}`);
|
|
188
|
+
return parts.length > 0 ? parts.join(' | ') : '';
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Format a list of annealing proposals
|
|
192
|
+
*/
|
|
193
|
+
function formatProposalList(data) {
|
|
194
|
+
let output = `# Annealing Proposals\n\n`;
|
|
195
|
+
if (data.count === 0) {
|
|
196
|
+
output += `No proposals found.\n`;
|
|
197
|
+
return output;
|
|
198
|
+
}
|
|
199
|
+
output += `**Total:** ${data.count}\n\n`;
|
|
200
|
+
for (const p of data.proposals) {
|
|
201
|
+
const typeIcon = p.proposal_type === 'promotion' ? 'PROMOTE' : 'DEMOTE';
|
|
202
|
+
output += `### #${p.id} ${typeIcon}: ${p.ontology_name} ${formatStatus(p.status)}\n\n`;
|
|
203
|
+
output += `${p.reasoning}\n\n`;
|
|
204
|
+
if (p.proposal_type === 'promotion' && p.anchor_concept_id) {
|
|
205
|
+
output += `- **Anchor concept:** ${p.anchor_concept_id}\n`;
|
|
206
|
+
if (p.suggested_name)
|
|
207
|
+
output += `- **Suggested name:** ${p.suggested_name}\n`;
|
|
208
|
+
}
|
|
209
|
+
if (p.proposal_type === 'demotion' && p.target_ontology) {
|
|
210
|
+
output += `- **Absorption target:** ${p.target_ontology}\n`;
|
|
211
|
+
}
|
|
212
|
+
const scores = formatScores(p);
|
|
213
|
+
if (scores)
|
|
214
|
+
output += `- **Scores:** ${scores}\n`;
|
|
215
|
+
output += `- **Epoch:** ${p.created_at_epoch} | **Created:** ${p.created_at}\n`;
|
|
216
|
+
if (p.reviewed_at) {
|
|
217
|
+
output += `- **Reviewed:** ${p.reviewed_at} by ${p.reviewed_by || 'unknown'}\n`;
|
|
218
|
+
}
|
|
219
|
+
if (p.execution_result) {
|
|
220
|
+
const r = p.execution_result;
|
|
221
|
+
if (r.ontology_created)
|
|
222
|
+
output += `- **Created ontology:** ${r.ontology_created}\n`;
|
|
223
|
+
if (r.absorbed_into)
|
|
224
|
+
output += `- **Absorbed into:** ${r.absorbed_into}\n`;
|
|
225
|
+
if (r.sources_reassigned !== undefined)
|
|
226
|
+
output += `- **Sources reassigned:** ${r.sources_reassigned}\n`;
|
|
227
|
+
if (r.error)
|
|
228
|
+
output += `- **Error:** ${r.error}\n`;
|
|
229
|
+
}
|
|
230
|
+
output += `\n`;
|
|
231
|
+
}
|
|
232
|
+
return output;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Format a single proposal (detail view or review result)
|
|
236
|
+
*/
|
|
237
|
+
function formatProposalDetail(p) {
|
|
238
|
+
const typeIcon = p.proposal_type === 'promotion' ? 'PROMOTE' : 'DEMOTE';
|
|
239
|
+
let output = `# Proposal #${p.id}: ${typeIcon} ${p.ontology_name}\n\n`;
|
|
240
|
+
output += `**Status:** ${formatStatus(p.status)}\n\n`;
|
|
241
|
+
output += `## Reasoning\n\n${p.reasoning}\n\n`;
|
|
242
|
+
output += `## Details\n\n`;
|
|
243
|
+
if (p.proposal_type === 'promotion') {
|
|
244
|
+
if (p.anchor_concept_id)
|
|
245
|
+
output += `- **Anchor concept:** ${p.anchor_concept_id}\n`;
|
|
246
|
+
if (p.suggested_name)
|
|
247
|
+
output += `- **Suggested name:** ${p.suggested_name}\n`;
|
|
248
|
+
if (p.suggested_description)
|
|
249
|
+
output += `- **Suggested description:** ${p.suggested_description}\n`;
|
|
250
|
+
}
|
|
251
|
+
if (p.proposal_type === 'demotion' && p.target_ontology) {
|
|
252
|
+
output += `- **Absorption target:** ${p.target_ontology}\n`;
|
|
253
|
+
}
|
|
254
|
+
const scores = formatScores(p);
|
|
255
|
+
if (scores)
|
|
256
|
+
output += `- **Scores:** ${scores}\n`;
|
|
257
|
+
output += `- **Epoch:** ${p.created_at_epoch}\n`;
|
|
258
|
+
output += `- **Created:** ${p.created_at}\n`;
|
|
259
|
+
if (p.reviewed_at) {
|
|
260
|
+
output += `\n## Review\n\n`;
|
|
261
|
+
output += `- **Reviewed:** ${p.reviewed_at} by ${p.reviewed_by || 'unknown'}\n`;
|
|
262
|
+
if (p.reviewer_notes)
|
|
263
|
+
output += `- **Notes:** ${p.reviewer_notes}\n`;
|
|
264
|
+
}
|
|
265
|
+
if (p.executed_at || p.execution_result) {
|
|
266
|
+
output += `\n## Execution\n\n`;
|
|
267
|
+
if (p.executed_at)
|
|
268
|
+
output += `- **Executed:** ${p.executed_at}\n`;
|
|
269
|
+
if (p.execution_result) {
|
|
270
|
+
const r = p.execution_result;
|
|
271
|
+
if (r.ontology_created)
|
|
272
|
+
output += `- **Created ontology:** ${r.ontology_created}\n`;
|
|
273
|
+
if (r.ontology_id)
|
|
274
|
+
output += `- **Ontology ID:** ${r.ontology_id}\n`;
|
|
275
|
+
if (r.absorbed_into)
|
|
276
|
+
output += `- **Absorbed into:** ${r.absorbed_into}\n`;
|
|
277
|
+
if (r.sources_reassigned !== undefined)
|
|
278
|
+
output += `- **Sources reassigned:** ${r.sources_reassigned}\n`;
|
|
279
|
+
if (r.sources_found !== undefined)
|
|
280
|
+
output += `- **Sources found:** ${r.sources_found}\n`;
|
|
281
|
+
if (r.parent_ontology)
|
|
282
|
+
output += `- **Parent ontology:** ${r.parent_ontology}\n`;
|
|
283
|
+
if (r.ontology_node_deleted !== undefined)
|
|
284
|
+
output += `- **Node deleted:** ${r.ontology_node_deleted}\n`;
|
|
285
|
+
if (r.error)
|
|
286
|
+
output += `- **Error:** ${r.error}\n`;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
if (p.status === 'pending') {
|
|
290
|
+
output += `\n---\n*Use proposal_review action with status "approved" or "rejected" to review.*\n`;
|
|
291
|
+
}
|
|
292
|
+
return output;
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Format a annealing cycle result
|
|
296
|
+
*/
|
|
297
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
298
|
+
function formatAnnealingCycleResult(data) {
|
|
299
|
+
let output = `# Annealing Cycle Result\n\n`;
|
|
300
|
+
if (data.dry_run)
|
|
301
|
+
output += `**Mode:** Dry run (no proposals stored)\n\n`;
|
|
302
|
+
output += `| Metric | Value |\n|--------|-------|\n`;
|
|
303
|
+
output += `| Proposals generated | ${data.proposals_generated ?? 0} |\n`;
|
|
304
|
+
output += `| Demotion candidates | ${data.demotion_candidates ?? 0} |\n`;
|
|
305
|
+
output += `| Promotion candidates | ${data.promotion_candidates ?? 0} |\n`;
|
|
306
|
+
output += `| Ontologies scored | ${data.scores_updated ?? 0} |\n`;
|
|
307
|
+
output += `| Centroids updated | ${data.centroids_updated ?? 0} |\n`;
|
|
308
|
+
output += `| Edges created | ${data.edges_created ?? 0} |\n`;
|
|
309
|
+
output += `| Edges deleted | ${data.edges_deleted ?? 0} |\n`;
|
|
310
|
+
output += `| Cycle epoch | ${data.cycle_epoch ?? 0} |\n`;
|
|
311
|
+
if (data.candidates && typeof data.candidates === 'object') {
|
|
312
|
+
const c = data.candidates;
|
|
313
|
+
if (c.demotions && Array.isArray(c.demotions) && c.demotions.length > 0) {
|
|
314
|
+
output += `\n## Demotion Candidates\n\n`;
|
|
315
|
+
for (const d of c.demotions) {
|
|
316
|
+
output += `- **${d.ontology}** (protection: ${d.protection})\n`;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
if (c.promotions && Array.isArray(c.promotions) && c.promotions.length > 0) {
|
|
320
|
+
output += `\n## Promotion Candidates\n\n`;
|
|
321
|
+
for (const p of c.promotions) {
|
|
322
|
+
output += `- **${p.concept}** in ${p.ontology} (degree: ${p.degree})\n`;
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
return output;
|
|
327
|
+
}
|
|
328
|
+
//# sourceMappingURL=ontology.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ontology.js","sourceRoot":"","sources":["../../../src/mcp/formatters/ontology.ts"],"names":[],"mappings":"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"}
|