MCPcopy
hub / github.com/Fission-AI/OpenSpec / showDirect

Method showDirect

src/commands/show.ts:104–188  ·  view source on GitHub ↗
(
    itemName: string,
    params: { typeOverride?: ItemType; options: ShowExecuteOptions; root: ResolvedOpenSpecRoot }
  )

Source from the content-addressed store, hash-verified

102 }
103
104 private async showDirect(
105 itemName: string,
106 params: { typeOverride?: ItemType; options: ShowExecuteOptions; root: ResolvedOpenSpecRoot }
107 ): Promise<void> {
108 const root = params.root;
109 // Optimize lookups when type is pre-specified
110 let isChange = false;
111 let isSpec = false;
112 let changes: string[] = [];
113 let specs: string[] = [];
114 if (params.typeOverride === 'change') {
115 changes = await getActiveChangeIds(root.path);
116 isChange = changes.includes(itemName);
117 } else if (params.typeOverride === 'spec') {
118 specs = await getSpecIds(root.path);
119 isSpec = specs.includes(itemName);
120 } else {
121 [changes, specs] = await Promise.all([getActiveChangeIds(root.path), getSpecIds(root.path)]);
122 isChange = changes.includes(itemName);
123 isSpec = specs.includes(itemName);
124 }
125
126 const resolvedType = params.typeOverride ?? (isChange ? 'change' : isSpec ? 'spec' : undefined);
127
128 if (!resolvedType) {
129 const suggestions = nearestMatches(itemName, [...changes, ...specs]);
130 const message = suggestions.length
131 ? `Unknown item '${itemName}'. Did you mean: ${suggestions.join(', ')}?`
132 : `Unknown item '${itemName}'.`;
133 if (params.options.json) {
134 console.log(
135 JSON.stringify(
136 { status: [{ severity: 'error', code: 'unknown_item', message }] },
137 null,
138 2
139 )
140 );
141 } else {
142 console.error(message);
143 }
144 process.exitCode = 1;
145 return;
146 }
147
148 if (!params.typeOverride && isChange && isSpec) {
149 if (params.options.json) {
150 console.log(
151 JSON.stringify(
152 {
153 status: [
154 {
155 severity: 'error',
156 code: 'ambiguous_item',
157 message: `Ambiguous item '${itemName}' matches both a change and a spec.`,
158 fix: 'Pass --type change|spec.',
159 },
160 ],
161 },

Callers 1

executeMethod · 0.95

Calls 7

warnIrrelevantFlagsMethod · 0.95
showMethod · 0.95
delegateOptionsMethod · 0.95
getActiveChangeIdsFunction · 0.85
getSpecIdsFunction · 0.85
nearestMatchesFunction · 0.85
isStoreSelectedRootFunction · 0.85

Tested by

no test coverage detected