@ai-outfitter/outfitter 0.3.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/README.md +48 -9
  2. package/dist/agents/AdapterProfileControls.d.ts +1 -0
  3. package/dist/agents/AdapterProfileControls.js +6 -0
  4. package/dist/agents/AdapterProfileControls.js.map +1 -1
  5. package/dist/agents/claude/ClaudeAdapter.js +2 -2
  6. package/dist/agents/claude/ClaudeAdapter.js.map +1 -1
  7. package/dist/agents/pi/PiAdapter.js +21 -13
  8. package/dist/agents/pi/PiAdapter.js.map +1 -1
  9. package/dist/cli/OutfitterCli.js +7 -2
  10. package/dist/cli/OutfitterCli.js.map +1 -1
  11. package/dist/cli/commands/FirstRunWelcomeProfile.js +8 -5
  12. package/dist/cli/commands/FirstRunWelcomeProfile.js.map +1 -1
  13. package/dist/cli/commands/PiLoginLaunch.js +67 -9
  14. package/dist/cli/commands/PiLoginLaunch.js.map +1 -1
  15. package/dist/cli/commands/RunCommand.js +4 -1
  16. package/dist/cli/commands/RunCommand.js.map +1 -1
  17. package/dist/cli/commands/SetupCommand.d.ts +16 -0
  18. package/dist/cli/commands/SetupCommand.js +340 -34
  19. package/dist/cli/commands/SetupCommand.js.map +1 -1
  20. package/dist/cli/commands/WelcomeCommand.d.ts +3 -1
  21. package/dist/cli/commands/WelcomeCommand.js +87 -77
  22. package/dist/cli/commands/WelcomeCommand.js.map +1 -1
  23. package/dist/cli/commands/profile/ListCommand.d.ts +2 -0
  24. package/dist/cli/commands/profile/ListCommand.js +9 -3
  25. package/dist/cli/commands/profile/ListCommand.js.map +1 -1
  26. package/dist/compositeProfile/StatePersistence.js +3 -0
  27. package/dist/compositeProfile/StatePersistence.js.map +1 -1
  28. package/dist/merge/ArrayMergePolicy.d.ts +2 -1
  29. package/dist/merge/ArrayMergePolicy.js +14 -11
  30. package/dist/merge/ArrayMergePolicy.js.map +1 -1
  31. package/dist/merge/SettingsValueMerger.js +27 -2
  32. package/dist/merge/SettingsValueMerger.js.map +1 -1
  33. package/dist/profiles/Profile.d.ts +4 -1
  34. package/dist/profiles/Profile.js.map +1 -1
  35. package/dist/profiles/ProfileLoader.js +16 -2
  36. package/dist/profiles/ProfileLoader.js.map +1 -1
  37. package/dist/profiles/ProfileMerger.d.ts +0 -1
  38. package/dist/profiles/ProfileMerger.js +20 -9
  39. package/dist/profiles/ProfileMerger.js.map +1 -1
  40. package/dist/schemas/profile.schema.json +17 -4
  41. package/doc/architecture.md +29 -7
  42. package/doc/file_structure.md +9 -1
  43. package/doc/state_writeback_strategy.md +8 -0
  44. package/package.json +16 -1
  45. package/requirements/OFTR-001-project-foundation.md +1 -1
  46. package/requirements/OFTR-003-profiles.md +14 -5
  47. package/requirements/OFTR-004-sync-and-setup.md +11 -1
  48. package/requirements/OFTR-006-agent-adapters.md +2 -0
  49. package/requirements/OFTR-009-release-publishing.md +13 -3
  50. package/requirements/OFTR-010-onboarding-welcome.md +27 -17
  51. package/skills/outfitter/SKILL.md +68 -0
  52. package/src/schemas/profile.schema.json +17 -4
@@ -1 +1 @@
1
- {"version":3,"file":"RunCommand.js","sourceRoot":"","sources":["../../../src/cli/commands/RunCommand.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RunCommand.js","sourceRoot":"","sources":["../../../src/cli/commands/RunCommand.ts"],"names":[],"mappings":"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"}
@@ -20,14 +20,30 @@ export interface SetupCommandResult {
20
20
  export interface SetupSourceSynchronizer {
21
21
  sync(uri: string, cachePath: string): void;
22
22
  }
23
+ export interface SetupSourceLaunchInput {
24
+ readonly homeDirectory: string;
25
+ readonly projectDirectory: string;
26
+ readonly profileId: string;
27
+ }
28
+ export type SetupSourcePostImportAction = 'start' | 'exit';
23
29
  export type SetupCommandDependencies = SyncCommandDependencies & WelcomeCommandDependencies & {
24
30
  readonly setupSourceSynchronizer?: SetupSourceSynchronizer;
25
31
  readonly selectDefaultProfile?: (profiles: readonly SetupProfileChoice[], currentDefault: string) => Promise<string>;
32
+ readonly selectSetupSourceImportTarget?: (choices: readonly SetupSourceImportTargetChoice[], defaultTarget: SetupSourceImportTarget) => Promise<SetupSourceImportTarget>;
33
+ readonly selectSetupSourceLaunchAction?: (profileId: string) => Promise<SetupSourcePostImportAction>;
34
+ readonly launchSetupSourceProfile?: (input: SetupSourceLaunchInput) => Promise<void>;
26
35
  readonly runWelcome?: (input: SetupCommandInput, dependencies: SetupCommandDependencies) => Promise<WelcomeCommandResult | undefined>;
27
36
  };
28
37
  export interface SetupProfileChoice {
29
38
  readonly id: string;
30
39
  readonly label?: string;
40
+ readonly description?: string;
41
+ }
42
+ export type SetupSourceImportTarget = 'home' | 'project';
43
+ export interface SetupSourceImportTargetChoice {
44
+ readonly target: SetupSourceImportTarget;
45
+ readonly label: string;
46
+ readonly description: string;
31
47
  }
32
48
  export declare const executeSetupCommand: (input: SetupCommandInput, dependencies?: SetupCommandDependencies) => Promise<SetupCommandResult>;
33
49
  export declare const createSetupCommand: (dependencies?: SetupCommandDependencies) => CommandObject;
@@ -5,15 +5,36 @@ import { createInterface } from 'node:readline/promises';
5
5
  import { homedir } from 'node:os';
6
6
  import { dirname, join } from 'node:path';
7
7
  import spawn from 'cross-spawn';
8
+ import { parse, stringify } from 'yaml';
8
9
  import { createProfileSourceCachePath, createRemoteRepositoryCachePath, normalizeGitUri, redactProfileSourceUriCredentials, resolveRemoteRepositorySubpath, } from '../../profiles/ProfileCache.js';
9
10
  import { isValidProfileId, loadLocalProfileSource } from '../../profiles/ProfileLoader.js';
10
11
  import { createSettingsLoadPlan, discoverSettingsLoadPlan, loadSettings, loadSettingsFiles, loadSettingsWithCachedRemoteSettings, } from '../../settings/SettingsLoader.js';
11
12
  import { persistFirstRunWelcomeProfile, updateSettingsDefaultProfile, } from './FirstRunWelcomeProfile.js';
12
13
  import { executeSyncCommand } from './SyncCommand.js';
13
- import { executeWelcomeCommand } from './WelcomeCommand.js';
14
+ import { executeWelcomeCommand, writeWelcomeIntro } from './WelcomeCommand.js';
15
+ const setupSourceImportTargetChoices = [
16
+ {
17
+ target: 'home',
18
+ label: 'User home',
19
+ description: 'install profiles into ~/.outfitter for all repositories on this machine',
20
+ },
21
+ {
22
+ target: 'project',
23
+ label: 'Current project',
24
+ description: 'install profiles into this project .outfitter folder only',
25
+ },
26
+ ];
14
27
  const builtInSetupProfileChoices = [
15
- { id: 'engineer', label: 'Engineer' },
16
- { id: 'data_analyst', label: 'Data Analyst' },
28
+ {
29
+ id: 'engineer',
30
+ label: 'Engineer',
31
+ description: 'Engineering setup for repository navigation, maintainable code changes, tests, and reviews.',
32
+ },
33
+ {
34
+ id: 'data_analyst',
35
+ label: 'Data Analyst',
36
+ description: 'Data analysis setup for careful inspection, reproducible methods, assumptions, and summaries.',
37
+ },
17
38
  ];
18
39
  /* eslint-disable complexity -- setup orchestration coordinates settings, sync, prompts, and welcome persistence. */
19
40
  export const executeSetupCommand = async (input, dependencies = {}) => {
@@ -31,6 +52,16 @@ export const executeSetupCommand = async (input, dependencies = {}) => {
31
52
  ? readStarterDefaultProfileId(starterLayout?.settingsPath)
32
53
  : readUserDefaultProfileId(loadedSettings.files);
33
54
  assertValidDefaultProfileId(defaultProfileId);
55
+ if (input.setupSourceUri !== undefined && dependencies.interactive === true && starterLayout !== undefined) {
56
+ return executeInteractiveSetupSourceCommand({
57
+ input: { ...input, setupSourceUri: input.setupSourceUri },
58
+ dependencies,
59
+ homeSettingsPath: settingsPath,
60
+ initialSettingsMissing,
61
+ starterLayout,
62
+ currentDefaultProfileId: defaultProfileId,
63
+ });
64
+ }
34
65
  const createdSettings = createInitialSettingsIfMissing(settingsPath, starterLayout?.settingsPath);
35
66
  ensureExistingUserSettingsDefaultProfile(settingsPath, loadedSettings.files, defaultProfileId);
36
67
  const copiedStarterProfileFiles = copyStarterProfileFilesIfPresent(starterLayout?.profilesPath, join(input.homeDirectory, '.outfitter', 'profiles'));
@@ -39,7 +70,7 @@ export const executeSetupCommand = async (input, dependencies = {}) => {
39
70
  failOnInitialDefaultProfileSyncFailure(initialSettingsMissing, rollbackCreatedSettings, syncResult);
40
71
  const selectedDefaultProfileId = shouldSkipInitialDefaultProfilePrompt(initialSettingsMissing, dependencies)
41
72
  ? defaultProfileId
42
- : await selectDefaultProfileIfInteractive(input, settingsPath, defaultProfileId, dependencies);
73
+ : await selectDefaultProfileIfInteractive(input, settingsPath, defaultProfileId, dependencies, starterLayout);
43
74
  const welcomeResult = await runWelcomeAfterInteractiveSetup(input, dependencies);
44
75
  const welcomeProfile = persistWelcomeProfileForSetup(input, settingsPath, welcomeResult);
45
76
  const finalDefaultProfile = prepareFinalDefaultProfile(input.homeDirectory, selectedDefaultProfileId, welcomeProfile);
@@ -62,6 +93,7 @@ export const executeSetupCommand = async (input, dependencies = {}) => {
62
93
  createdDefaultProfile: finalDefaultProfile.created,
63
94
  syncResult,
64
95
  welcomeProfileMessages: welcomeProfile?.messages ?? [],
96
+ runExampleMessages: input.setupSourceUri === undefined ? [] : [formatRunProfileExample(finalDefaultProfile.id)],
65
97
  }),
66
98
  };
67
99
  };
@@ -79,6 +111,42 @@ const failOnInitialDefaultProfileSyncFailure = (initialSettingsMissing, rollback
79
111
  throw new Error(`Cannot complete first-run setup because the default profiles source failed to sync: ${failedDefaultProfilesSource.message}. ` +
80
112
  'Fix the network/git issue and rerun `outfitter setup` once the source is reachable.');
81
113
  };
114
+ const executeInteractiveSetupSourceCommand = async ({ input, dependencies, homeSettingsPath, initialSettingsMissing, starterLayout, currentDefaultProfileId, }) => {
115
+ const onboarding = await runSetupSourceOnboarding(input, dependencies, starterLayout, currentDefaultProfileId);
116
+ const appliedImport = applySetupSourceImport(input, starterLayout, onboarding);
117
+ /* v8 ignore next -- setup-source rollback only runs when a home import creates settings and default-profile sync fails. */
118
+ const rollbackCreatedSettings = appliedImport.createdSettings
119
+ ? () => rmSync(appliedImport.settingsPath, { force: true })
120
+ : () => undefined;
121
+ const syncResult = executeSyncCommand(input, dependencies);
122
+ failOnInitialDefaultProfileSyncFailure(initialSettingsMissing && appliedImport.settingsPath === homeSettingsPath, rollbackCreatedSettings, syncResult);
123
+ const defaultProfilePath = join(appliedImport.profilesPath, onboarding.selectedProfileId, 'profile.yml');
124
+ const createdDefaultProfile = createDefaultProfileIfMissing(defaultProfilePath, onboarding.selectedProfileId);
125
+ const postImportAction = await runSetupSourcePostImportAction(input, dependencies, onboarding.selectedProfileId);
126
+ return {
127
+ settingsPath: appliedImport.settingsPath,
128
+ defaultProfilePath,
129
+ createdSettings: appliedImport.createdSettings,
130
+ copiedStarterProfileFiles: appliedImport.copiedStarterProfileFiles,
131
+ createdDefaultProfile,
132
+ syncResult,
133
+ messages: buildSetupMessages({
134
+ input,
135
+ starterLayout,
136
+ settingsPath: appliedImport.settingsPath,
137
+ settingsDescription: appliedImport.settingsDescription,
138
+ profileTargetPath: appliedImport.profilesPath,
139
+ createdSettings: appliedImport.createdSettings,
140
+ copiedStarterProfileFiles: appliedImport.copiedStarterProfileFiles,
141
+ defaultProfileId: onboarding.selectedProfileId,
142
+ defaultProfilePath,
143
+ createdDefaultProfile,
144
+ syncResult,
145
+ welcomeProfileMessages: [],
146
+ runExampleMessages: postImportAction === 'exit' ? [formatRunProfileExample(onboarding.selectedProfileId)] : [],
147
+ }),
148
+ };
149
+ };
82
150
  const prepareFinalDefaultProfile = (homeDirectory, selectedDefaultProfileId, welcomeProfile) => {
83
151
  const finalDefaultProfileId = welcomeProfile?.profileId ?? selectedDefaultProfileId;
84
152
  const finalDefaultProfilePath = join(homeDirectory, '.outfitter', 'profiles', finalDefaultProfileId, 'profile.yml');
@@ -90,17 +158,51 @@ const buildSetupMessages = (input) => {
90
158
  if (input.input.setupSourceUri !== undefined && input.starterLayout !== undefined) {
91
159
  messages.push(`Prepared setup source ${redactProfileSourceUriCredentials(input.input.setupSourceUri)} at ${input.starterLayout.cachePath}.`);
92
160
  }
161
+ const settingsDescription = input.settingsDescription ?? 'user';
162
+ const profileTargetPath = input.profileTargetPath ?? join(input.input.homeDirectory, '.outfitter', 'profiles');
93
163
  messages.push(input.createdSettings
94
- ? `Created user settings at ${input.settingsPath}.`
95
- : `User settings already exist at ${input.settingsPath}; left unchanged.`);
164
+ ? `Created ${settingsDescription} settings at ${input.settingsPath}.`
165
+ : `${capitalize(settingsDescription)} settings already exist at ${input.settingsPath}; left unchanged.`);
96
166
  if (input.starterLayout?.profilesPath !== undefined) {
97
- messages.push(`Copied ${input.copiedStarterProfileFiles} starter profile file(s) into ${join(input.input.homeDirectory, '.outfitter', 'profiles')}.`);
167
+ messages.push(`Copied ${input.copiedStarterProfileFiles} starter profile file(s) into ${profileTargetPath}.`);
98
168
  }
99
- messages.push(input.createdDefaultProfile
100
- ? `Created default user profile at ${input.defaultProfilePath}.`
101
- : `Default user profile at ${input.defaultProfilePath} already exists; left unchanged.`, `Selected default profile '${input.defaultProfileId}'.`, ...input.welcomeProfileMessages, ...input.syncResult.messages);
169
+ if (shouldReportDefaultProfileStatus(input)) {
170
+ messages.push(input.createdDefaultProfile
171
+ ? `Created default user profile at ${input.defaultProfilePath}.`
172
+ : `Default user profile at ${input.defaultProfilePath} already exists; left unchanged.`);
173
+ }
174
+ messages.push(`Selected default profile '${input.defaultProfileId}'.`, ...input.welcomeProfileMessages, ...input.runExampleMessages, ...input.syncResult.messages);
102
175
  return messages;
103
176
  };
177
+ const shouldReportDefaultProfileStatus = (input) => {
178
+ if (input.createdDefaultProfile) {
179
+ return true;
180
+ }
181
+ return input.input.setupSourceUri === undefined || input.starterLayout?.profilesPath === undefined;
182
+ };
183
+ const formatRunProfileExample = (profileId) => `Start the selected default profile either way:\n outfitter\n outfitter --profile ${profileId}`;
184
+ const runSetupSourcePostImportAction = async (input, dependencies, profileId) => {
185
+ if (dependencies.interactive !== true ||
186
+ (dependencies.launchSetupSourceProfile === undefined && dependencies.selectSetupSourceLaunchAction === undefined)) {
187
+ return 'exit';
188
+ }
189
+ const action = await selectSetupSourceLaunchAction(profileId, dependencies);
190
+ if (action === 'start') {
191
+ await dependencies.launchSetupSourceProfile?.({
192
+ homeDirectory: input.homeDirectory,
193
+ projectDirectory: input.projectDirectory,
194
+ profileId,
195
+ });
196
+ }
197
+ return action;
198
+ };
199
+ const selectSetupSourceLaunchAction = async (profileId, dependencies) => {
200
+ if (dependencies.selectSetupSourceLaunchAction !== undefined) {
201
+ return dependencies.selectSetupSourceLaunchAction(profileId);
202
+ }
203
+ return promptForSetupSourceLaunchAction(profileId, dependencies);
204
+ };
205
+ const capitalize = (value) => `${value.slice(0, 1).toUpperCase()}${value.slice(1)}`;
104
206
  export const createSetupCommand = (dependencies = {}) => {
105
207
  const command = {
106
208
  name: 'setup',
@@ -177,6 +279,13 @@ const readStarterDefaultProfileId = (settingsPath) => {
177
279
  const loaded = loadSettingsFiles(createSettingsLoadPlan([{ scope: 'user', path: settingsPath }]));
178
280
  return loaded.files[0]?.settings.defaultProfile ?? 'engineer';
179
281
  };
282
+ const readStarterExplicitDefaultProfileId = (settingsPath) => {
283
+ if (settingsPath === undefined) {
284
+ return undefined;
285
+ }
286
+ const loaded = loadSettingsFiles(createSettingsLoadPlan([{ scope: 'user', path: settingsPath }]));
287
+ return loaded.files[0]?.settings.defaultProfile;
288
+ };
180
289
  const readUserDefaultProfileId = (files) => files.find((file) => file.location.scope === 'user')?.settings.defaultProfile ?? 'engineer';
181
290
  const ensureExistingUserSettingsDefaultProfile = (settingsPath, files, defaultProfileId) => {
182
291
  const userSettings = files.find((file) => file.location.scope === 'user');
@@ -217,6 +326,62 @@ const readStarterSettingsContent = (starterSettingsPath) => {
217
326
  }
218
327
  return `default_profile: engineer\n${content}`;
219
328
  };
329
+ const applySetupSourceImport = (input, starterLayout, onboarding) => {
330
+ const target = createSetupSourceImportTargetLayout(input, onboarding.importTarget);
331
+ const createdSettings = createImportSettingsIfMissing(target.settingsPath, starterLayout.settingsPath, onboarding.selectedProfileId);
332
+ ensureLocalProfileSource(target.settingsPath, target.profilesPath);
333
+ updateSettingsDefaultProfile(target.settingsPath, onboarding.selectedProfileId);
334
+ return {
335
+ ...target,
336
+ createdSettings,
337
+ copiedStarterProfileFiles: copyStarterProfileFilesIfPresent(starterLayout.profilesPath, target.profilesPath),
338
+ };
339
+ };
340
+ const createSetupSourceImportTargetLayout = (input, target) => {
341
+ if (target === 'project') {
342
+ return {
343
+ settingsPath: join(input.projectDirectory, '.outfitter', 'settings.yml'),
344
+ settingsDescription: 'project',
345
+ profilesPath: join(input.projectDirectory, '.outfitter', 'profiles'),
346
+ };
347
+ }
348
+ return {
349
+ settingsPath: join(input.homeDirectory, '.outfitter', 'settings.yml'),
350
+ settingsDescription: 'user',
351
+ profilesPath: join(input.homeDirectory, '.outfitter', 'profiles'),
352
+ };
353
+ };
354
+ const createImportSettingsIfMissing = (settingsPath, starterSettingsPath, selectedProfileId) => {
355
+ if (existsSync(settingsPath)) {
356
+ return false;
357
+ }
358
+ mkdirSync(dirname(settingsPath), { recursive: true });
359
+ writeFileSync(settingsPath,
360
+ /* v8 ignore next -- setup-source tests exercise starter settings; missing starter settings is defensive fallback. */
361
+ starterSettingsPath === undefined
362
+ ? createLocalProfileSettingsContent(selectedProfileId)
363
+ : readStarterSettingsContent(starterSettingsPath));
364
+ return true;
365
+ };
366
+ const createLocalProfileSettingsContent = (defaultProfileId) => ['default_profile: ' + defaultProfileId, 'profile_sources:', ' - path: ./profiles', ''].join('\n');
367
+ const ensureLocalProfileSource = (settingsPath, profilesPath) => {
368
+ const loaded = loadSettingsFiles(createSettingsLoadPlan([{ scope: 'user', path: settingsPath }]));
369
+ const sources = loaded.files[0]?.settings.profileSources ?? [];
370
+ if (sources.some((source) => source.path === profilesPath)) {
371
+ return;
372
+ }
373
+ const document = readYamlRecord(settingsPath);
374
+ /* v8 ignore next -- appending to existing non-local source lists is equivalent to the covered empty-source case. */
375
+ const existingSources = Array.isArray(document.profile_sources) ? document.profile_sources : [];
376
+ writeFileSync(settingsPath, stringify({ ...document, profile_sources: [...existingSources, { path: './profiles' }] }));
377
+ };
378
+ const readYamlRecord = (path) => {
379
+ const parsed = parse(readFileSync(path, 'utf8'));
380
+ /* v8 ignore next -- settings schema validation guarantees object documents before this helper mutates them. */
381
+ return parsed !== null && typeof parsed === 'object' && !Array.isArray(parsed)
382
+ ? { ...parsed }
383
+ : {};
384
+ };
220
385
  const copyStarterProfileFilesIfPresent = (sourceProfilesPath, targetProfilesPath) => {
221
386
  if (sourceProfilesPath === undefined) {
222
387
  return 0;
@@ -293,18 +458,115 @@ const requireInteractiveTerminalIfNeeded = (dependencies) => {
293
458
  }
294
459
  };
295
460
  const shouldSkipInitialDefaultProfilePrompt = (initialSettingsMissing, dependencies) => initialSettingsMissing && dependencies.interactive === true;
296
- const selectDefaultProfileIfInteractive = async (input, settingsPath, currentDefault, dependencies) => {
461
+ /* v8 ignore next -- default process stdout is direct terminal behavior; tests inject writable streams. */
462
+ const resolveReadlineOutput = (dependencies) => typeof dependencies.output?.write === 'function' ? dependencies.output : process.stdout;
463
+ const resolvePromptOutput = (dependencies) => {
464
+ if (typeof dependencies.output?.write === 'function') {
465
+ return dependencies.output;
466
+ }
467
+ if (dependencies.writeLine !== undefined) {
468
+ return {
469
+ write(message) {
470
+ dependencies.writeLine?.(message.replace(/\n$/u, ''));
471
+ return true;
472
+ },
473
+ };
474
+ }
475
+ /* v8 ignore next 7 -- defensive non-writable injected output fallback; normal tests inject writeLine or writable output. */
476
+ if (dependencies.output !== undefined) {
477
+ return {
478
+ write() {
479
+ return true;
480
+ },
481
+ };
482
+ }
483
+ return process.stdout;
484
+ };
485
+ const runSetupSourceOnboarding = async (input, dependencies, starterLayout, currentDefault) => {
486
+ const discoveredProfiles = discoverSetupProfileChoices(input, starterLayout);
487
+ const sourceDefault = discoverSetupSourcePromptDefault(input, starterLayout, discoveredProfiles);
488
+ const promptDefault = sourceDefault ?? currentDefault;
489
+ const profiles = selectSetupPromptProfiles(input, discoveredProfiles, currentDefault, sourceDefault);
490
+ if (dependencies.selectSetupSourceImportTarget === undefined && dependencies.selectDefaultProfile === undefined) {
491
+ return promptForSetupSourceOnboarding(input, profiles, promptDefault, dependencies);
492
+ }
493
+ writeSetupSourceWelcome(input, profiles, resolvePromptOutput(dependencies));
494
+ const importTarget = await selectSetupSourceImportTarget(dependencies);
495
+ const selectedProfileId = await selectSetupProfile(profiles, promptDefault, dependencies);
496
+ assertValidSelectedDefaultProfile(selectedProfileId, profiles);
497
+ return { importTarget, selectedProfileId };
498
+ };
499
+ const promptForSetupSourceOnboarding = async (input, profiles, currentDefault, dependencies) => {
500
+ const output = resolvePromptOutput(dependencies);
501
+ /* v8 ignore next -- default process streams are direct terminal behavior; tests inject streams. */
502
+ const readline = createInterface({
503
+ input: dependencies.input ?? process.stdin,
504
+ output: resolveReadlineOutput(dependencies),
505
+ });
506
+ try {
507
+ writeSetupSourceWelcome(input, profiles, output);
508
+ const importTarget = 'home';
509
+ const selectedProfileId = await promptForSetupProfileWithReadline(readline, output, profiles, currentDefault, 'Choose the default profile from this setup source:');
510
+ assertValidSelectedDefaultProfile(selectedProfileId, profiles);
511
+ return { importTarget, selectedProfileId };
512
+ }
513
+ finally {
514
+ readline.close();
515
+ }
516
+ };
517
+ const writeSetupSourceWelcome = (input, profiles, output) => {
518
+ writeWelcomeIntro(output);
519
+ output.write(`\nYou're importing Outfitter profiles from ${redactProfileSourceUriCredentials(input.setupSourceUri)}.\n`);
520
+ output.write(`Found ${profiles.length} profile(s)${formatSetupSourceProfileList(profiles)}.\n`);
521
+ };
522
+ const formatSetupSourceProfileList = (profiles) => {
523
+ /* v8 ignore next -- setup-source profile prompts normally require discovered source profiles. */
524
+ if (profiles.length === 0) {
525
+ return '';
526
+ }
527
+ return `: ${profiles.map((profile) => profile.id).join(', ')}`;
528
+ };
529
+ const selectSetupSourceImportTarget = async (dependencies) => {
530
+ /* v8 ignore else -- mixed dependency injection path; the full readline path prompts with one shared readline. */
531
+ if (dependencies.selectSetupSourceImportTarget !== undefined) {
532
+ const selectedTarget = await dependencies.selectSetupSourceImportTarget(setupSourceImportTargetChoices, 'home');
533
+ assertValidSetupSourceImportTarget(selectedTarget);
534
+ return selectedTarget;
535
+ }
536
+ return 'home';
537
+ };
538
+ const assertValidSetupSourceImportTarget = (target) => {
539
+ /* v8 ignore next -- defensive validation for custom dependency injection. */
540
+ if (setupSourceImportTargetChoices.every((choice) => choice.target !== target)) {
541
+ throw new Error(`Selected setup-source import target '${target}' is not available.`);
542
+ }
543
+ };
544
+ /* v8 ignore next -- covered by interactive CLI smoke tests; unit tests inject the launch choice. */
545
+ const promptForSetupSourceLaunchAction = async (profileId, dependencies) => {
546
+ const readline = createInterface({
547
+ input: dependencies.input ?? process.stdin,
548
+ output: resolveReadlineOutput(dependencies),
549
+ });
550
+ try {
551
+ const answer = await readline.question(`Start Outfitter with profile '${profileId}' now? [Y/n]: `);
552
+ return answer.trim().toLowerCase().startsWith('n') ? 'exit' : 'start';
553
+ }
554
+ finally {
555
+ readline.close();
556
+ }
557
+ };
558
+ const selectDefaultProfileIfInteractive = async (input, settingsPath, currentDefault, dependencies, starterLayout) => {
297
559
  if (dependencies.interactive !== true) {
298
560
  return currentDefault;
299
561
  }
300
- const discoveredProfiles = discoverSetupProfileChoices(input);
301
- const profiles = discoveredProfiles.length > 0 || builtInSetupProfileChoices.every((profile) => profile.id !== currentDefault)
302
- ? discoveredProfiles
303
- : builtInSetupProfileChoices;
562
+ const discoveredProfiles = discoverSetupProfileChoices(input, starterLayout);
563
+ const sourceDefault = discoverSetupSourcePromptDefault(input, starterLayout, discoveredProfiles);
564
+ const promptDefault = sourceDefault ?? currentDefault;
565
+ const profiles = selectSetupPromptProfiles(input, discoveredProfiles, currentDefault, sourceDefault);
304
566
  const writer = dependencies.writeLine ?? console.log;
305
567
  writer('Welcome to Outfitter. Outfitter is the easiest way to run Pi.');
306
568
  writer('Outfitter manages full pi configurations for you, so you can use different profiles in different situations.');
307
- const selectedProfile = await selectSetupProfile(profiles, currentDefault, dependencies);
569
+ const selectedProfile = await selectSetupProfile(profiles, promptDefault, dependencies);
308
570
  assertValidSelectedDefaultProfile(selectedProfile, profiles);
309
571
  updateSettingsDefaultProfile(settingsPath, selectedProfile);
310
572
  return selectedProfile;
@@ -315,7 +577,42 @@ const assertValidSelectedDefaultProfile = (selectedProfile, profiles) => {
315
577
  throw new Error(`Selected default profile '${selectedProfile}' was not one of the available setup profiles.`);
316
578
  }
317
579
  };
318
- const discoverSetupProfileChoices = (input) => {
580
+ const discoverSetupSourcePromptDefault = (input, starterLayout, profiles) => {
581
+ if (input.setupSourceUri === undefined) {
582
+ return undefined;
583
+ }
584
+ const sourceDefault = readStarterExplicitDefaultProfileId(starterLayout?.settingsPath);
585
+ return profiles.some((profile) => profile.id === sourceDefault) ? sourceDefault : undefined;
586
+ };
587
+ const selectSetupPromptProfiles = (input, discoveredProfiles, currentDefault, sourceDefault) => {
588
+ const profiles = discoveredProfiles.length > 0 ||
589
+ input.setupSourceUri !== undefined ||
590
+ builtInSetupProfileChoices.every((profile) => profile.id !== currentDefault)
591
+ ? discoveredProfiles
592
+ : builtInSetupProfileChoices;
593
+ return sourceDefault === undefined ? profiles : prioritizeSetupProfileChoice(profiles, sourceDefault);
594
+ };
595
+ const prioritizeSetupProfileChoice = (profiles, profileId) => [
596
+ ...profiles.filter((profile) => profile.id === profileId),
597
+ ...profiles.filter((profile) => profile.id !== profileId),
598
+ ];
599
+ const discoverSetupProfileChoices = (input, starterLayout) => {
600
+ if (input.setupSourceUri !== undefined && starterLayout?.profilesPath !== undefined) {
601
+ return discoverSetupProfileChoicesFromLocalSource(starterLayout.profilesPath);
602
+ }
603
+ return discoverSetupProfileChoicesFromEffectiveSettings(input);
604
+ };
605
+ const discoverSetupProfileChoicesFromLocalSource = (path) => {
606
+ const loadedProfiles = loadLocalProfileSource({ path });
607
+ return loadedProfiles.profiles
608
+ .map((profile) => ({
609
+ id: profile.profile.id,
610
+ label: profile.profile.label,
611
+ description: profile.profile.description,
612
+ }))
613
+ .sort((left, right) => left.id.localeCompare(right.id));
614
+ };
615
+ const discoverSetupProfileChoicesFromEffectiveSettings = (input) => {
319
616
  const loadedSettings = loadSettingsWithCachedRemoteSettings(input);
320
617
  const choices = new Map();
321
618
  for (const source of loadedSettings.settings.profileSources) {
@@ -326,6 +623,7 @@ const discoverSetupProfileChoices = (input) => {
326
623
  choices.set(profile.profile.id, {
327
624
  id: profile.profile.id,
328
625
  label: profile.profile.label ?? existingChoice?.label,
626
+ description: profile.profile.description ?? existingChoice?.description,
329
627
  });
330
628
  }
331
629
  }
@@ -350,30 +648,38 @@ const selectSetupProfile = async (profiles, currentDefault, dependencies) => {
350
648
  return promptForSetupProfile(profiles, currentDefault, dependencies);
351
649
  };
352
650
  const promptForSetupProfile = async (profiles, currentDefault, dependencies) => {
353
- const candidates = profiles.length > 0 ? profiles : [{ id: currentDefault }];
354
- /* v8 ignore next -- default process streams are direct terminal behavior; tests inject streams. */
355
- const output = dependencies.output ?? process.stdout;
651
+ const output = resolvePromptOutput(dependencies);
356
652
  /* v8 ignore next -- default process streams are direct terminal behavior; tests inject streams. */
357
- const readline = createInterface({ input: dependencies.input ?? process.stdin, output });
653
+ const readline = createInterface({
654
+ input: dependencies.input ?? process.stdin,
655
+ output: resolveReadlineOutput(dependencies),
656
+ });
358
657
  try {
359
- output.write('\nChoose the default profile for your sessions:\n');
360
- candidates.forEach((profile, index) => {
361
- const label = profile.label === undefined ? '' : ` - ${profile.label}`;
362
- output.write(`${index + 1}. ${profile.id}${label}\n`);
363
- });
364
- const currentIndex = Math.max(candidates.findIndex((profile) => profile.id === currentDefault), 0);
365
- const answer = await readline.question(`Default profile [${currentIndex + 1}]: `);
366
- const selectedIndex = Number.parseInt(answer.trim() || String(currentIndex + 1), 10) - 1;
367
- const selectedProfile = candidates[selectedIndex];
368
- if (selectedProfile === undefined) {
369
- throw new Error('Selected default profile number is out of range.');
370
- }
371
- return selectedProfile.id;
658
+ return await promptForSetupProfileWithReadline(readline, output, profiles, currentDefault, 'Choose the default profile for your sessions:');
372
659
  }
373
660
  finally {
374
661
  readline.close();
375
662
  }
376
663
  };
664
+ const promptForSetupProfileWithReadline = async (readline, output, profiles, currentDefault, heading) => {
665
+ const candidates = profiles.length > 0 ? profiles : [{ id: currentDefault }];
666
+ output.write(`\n${heading}\n`);
667
+ candidates.forEach((profile, index) => {
668
+ const label = profile.label === undefined ? '' : ` - ${profile.label}`;
669
+ output.write(`${index + 1}. ${profile.id}${label}\n`);
670
+ if (profile.description !== undefined) {
671
+ output.write(` ${profile.description}\n`);
672
+ }
673
+ });
674
+ const currentIndex = Math.max(candidates.findIndex((profile) => profile.id === currentDefault), 0);
675
+ const answer = await readline.question(`Default profile [${currentIndex + 1}]: `);
676
+ const selectedIndex = Number.parseInt(answer.trim() || String(currentIndex + 1), 10) - 1;
677
+ const selectedProfile = candidates[selectedIndex];
678
+ if (selectedProfile === undefined) {
679
+ throw new Error('Selected default profile number is out of range.');
680
+ }
681
+ return selectedProfile.id;
682
+ };
377
683
  export { updateSettingsDefaultProfile };
378
684
  const formatSettingsIssue = (issue) => `${issue.filePath}#${issue.path} ${issue.message}`;
379
685
  //# sourceMappingURL=SetupCommand.js.map