MCPcopy Create free account
hub / github.com/UsefulSoftwareCo/executor / inspectToolPath

Function inspectToolPath

apps/cli/src/tooling.ts:49–105  ·  view source on GitHub ↗
(input: {
  toolPaths: ReadonlyArray<string>;
  rawPrefixParts: ReadonlyArray<string>;
})

Source from the content-addressed store, hash-verified

47}
48
49export const inspectToolPath = (input: {
50 toolPaths: ReadonlyArray<string>;
51 rawPrefixParts: ReadonlyArray<string>;
52}): ToolPathInspection => {
53 const prefixSegments =
54 input.rawPrefixParts.length === 0 ? [] : buildToolPath(input.rawPrefixParts).split(".");
55 const children = new Map<
56 string,
57 { invokable: boolean; hasChildren: boolean; toolCount: number }
58 >();
59 let exactPath: string | undefined = undefined;
60 let matchingToolCount = 0;
61
62 for (const path of input.toolPaths) {
63 const segments = toToolPathSegments([path]);
64 if (segments.length === 0 || !isPrefixOf(prefixSegments, segments)) {
65 continue;
66 }
67
68 matchingToolCount += 1;
69
70 if (segments.length === prefixSegments.length) {
71 exactPath = exactPath ?? segments.join(".");
72 continue;
73 }
74
75 const childSegment = segments[prefixSegments.length];
76 if (!childSegment) continue;
77
78 const existing = children.get(childSegment) ?? {
79 invokable: false,
80 hasChildren: false,
81 toolCount: 0,
82 };
83 children.set(childSegment, {
84 invokable: existing.invokable || segments.length === prefixSegments.length + 1,
85 hasChildren: existing.hasChildren || segments.length > prefixSegments.length + 1,
86 toolCount: existing.toolCount + 1,
87 });
88 }
89
90 const sortedChildren: ReadonlyArray<ToolPathChildEntry> = [...children.entries()]
91 .sort(([a], [b]) => a.localeCompare(b))
92 .map(([segment, value]) => ({
93 segment,
94 invokable: value.invokable,
95 hasChildren: value.hasChildren,
96 toolCount: value.toolCount,
97 }));
98
99 return {
100 prefixSegments,
101 exactPath,
102 matchingToolCount,
103 children: sortedChildren,
104 };
105};
106

Callers 2

runCallHelpFunction · 0.90
tools-cli.test.tsFile · 0.90

Calls 5

buildToolPathFunction · 0.85
toToolPathSegmentsFunction · 0.85
isPrefixOfFunction · 0.85
setMethod · 0.80
getMethod · 0.65

Tested by

no test coverage detected