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

Method composeFromFlags

src/commands/workset.ts:262–298  ·  view source on GitHub ↗
(
    name: string | undefined,
    options: WorksetCreateOptions
  )

Source from the content-addressed store, hash-verified

260 }
261
262 private async composeFromFlags(
263 name: string | undefined,
264 options: WorksetCreateOptions
265 ): Promise<Workset> {
266 if (!name) {
267 throw new StoreError('Pass a workset name.', 'workset_name_required', {
268 target: 'workset.name',
269 fix: 'openspec workset create <name> --member <path>',
270 });
271 }
272
273 validateWorksetName(name);
274
275 const memberFlags = options.member ?? [];
276 if (memberFlags.length === 0) {
277 throw new StoreError(
278 'Pass at least one member folder.',
279 'workset_members_required',
280 {
281 target: 'workset.member',
282 fix: `openspec workset create ${name} --member <path> --member <name>=<path>`,
283 }
284 );
285 }
286
287 const members = await resolveMemberFlags(memberFlags);
288 // The opener table is read only when a tool is actually named - a
289 // tool-less scripted create must not fail on unrelated config rows.
290 const table = options.tool !== undefined ? readOpenerTable() : [];
291 if (options.tool !== undefined) {
292 const chosen = findOpener(table, options.tool);
293 if (chosen !== null && !isOpenerEnabled(chosen)) {
294 throw worksetCliOpenerDisabledError(chosen, name);
295 }
296 }
297 return finalizeWorkset(name, members, options.tool, table);
298 }
299
300 async list(options: { json?: boolean } = {}): Promise<void> {
301 try {

Callers 1

createMethod · 0.95

Calls 7

validateWorksetNameFunction · 0.85
resolveMemberFlagsFunction · 0.85
readOpenerTableFunction · 0.85
findOpenerFunction · 0.85
isOpenerEnabledFunction · 0.85
finalizeWorksetFunction · 0.85

Tested by

no test coverage detected