(
name: string | undefined,
options: WorksetCreateOptions = {}
)
| 200 | |
| 201 | class WorksetCommand { |
| 202 | async create( |
| 203 | name: string | undefined, |
| 204 | options: WorksetCreateOptions = {} |
| 205 | ): Promise<void> { |
| 206 | try { |
| 207 | const interactive = !options.json && isInteractive(); |
| 208 | |
| 209 | let workset: Workset; |
| 210 | let table: OpenerDefinition[] | undefined; |
| 211 | if (interactive) { |
| 212 | table = readOpenerTable(); |
| 213 | workset = await composeInteractively( |
| 214 | name, |
| 215 | { memberFlags: options.member ?? [], tool: options.tool }, |
| 216 | table |
| 217 | ); |
| 218 | } else { |
| 219 | workset = await this.composeFromFlags(name, options); |
| 220 | } |
| 221 | |
| 222 | await updateWorksetsState((state) => withWorkset(state, workset)); |
| 223 | |
| 224 | if (options.json) { |
| 225 | printJson({ workset, status: [] }); |
| 226 | return; |
| 227 | } |
| 228 | |
| 229 | console.log(''); |
| 230 | console.log( |
| 231 | `Saved workset '${workset.name}' (${workset.members.length} member${workset.members.length === 1 ? '' : 's'}) to your machine.` |
| 232 | ); |
| 233 | |
| 234 | if (interactive && workset.tool !== undefined && table !== undefined) { |
| 235 | const label = findOpener(table, workset.tool)?.label ?? workset.tool; |
| 236 | let openNow = false; |
| 237 | try { |
| 238 | openNow = await promptOpenNow(label); |
| 239 | } catch (error) { |
| 240 | // The workset is already durably saved: Ctrl-C here declines |
| 241 | // the offer, it does not cancel the create. |
| 242 | if (!isPromptCancellationError(error)) { |
| 243 | throw error; |
| 244 | } |
| 245 | } |
| 246 | |
| 247 | if (openNow) { |
| 248 | console.log(''); |
| 249 | await this.open(workset.name, {}); |
| 250 | return; |
| 251 | } |
| 252 | } |
| 253 | |
| 254 | console.log( |
| 255 | `Open it any time with: openspec workset open ${workset.name}` |
| 256 | ); |
| 257 | } catch (error) { |
| 258 | emitFailure(options.json, { workset: null, status: [] }, error, 'workset_error'); |
| 259 | } |
no test coverage detected