// Tool implementation for traversing narratives
import { createNarrative } from "../core/rtm-builder.js";
import { RTMTreeBuilder } from "../core/rtm-builder.js";
import { createTraversal } from "../core/rtm-traversal.js";
import { createDefaultParameters } from "../core/rtm-ensemble.js";
interface TraverseNarrativeParams {
text: string;
title: string;
traversalDepth: number;
maxBranchingFactor?: number;
maxRecallDepth?: number;
}
// Tool implementation
export default async function traverseNarrative(params: TraverseNarrativeParams) {
try {
// Create narrative and build tree
const narrative = createNarrative(params.text, params.title);
const parameters = {
...createDefaultParameters(),
maxBranchingFactor: params.maxBranchingFactor || 4,
maxRecallDepth: params.maxRecallDepth || 6
};
const builder = new RTMTreeBuilder(parameters);
const tree = builder.buildTree(narrative);
// Create clause map for traversal
const clauseMap = new Map(
narrative.clauses.map(c => [c.id, c])
);
// Traverse to specified depth
const traversal = createTraversal(tree, clauseMap);
const result = traversal.traverseToDepth(params.traversalDepth);
// Get sequential recall
const recallSequence = traversal.simulateRecall(params.traversalDepth);
// Get tree statistics
const treeStats = traversal.getTreeStatistics();
return {
content: [{
type: "text",
text: JSON.stringify({
success: true,
treeId: tree.id,
traversalResult: {
depth: result.depth,
nodeCount: result.nodes.length,
totalClauses: result.totalClauses,
avgCompressionRatio: result.compressionRatio,
summaries: result.summary
},
recallSequence: recallSequence,
treeStatistics: treeStats,
message: `Traversed to depth ${result.depth}, found ${result.nodes.length} nodes covering ${result.totalClauses} clauses`
}, null, 2)
}],
};
} catch (error) {
return {
content: [{
type: "text",
text: JSON.stringify({
success: false,
error: error instanceof Error ? error.message : "Unknown error occurred"
}, null, 2)
}],
};
}
}