@ai-outfitter/outfitter 0.11.0 → 1.0.2

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 (308) hide show
  1. package/.outfitter/skills/outfitter/SKILL.md +67 -37
  2. package/README.md +63 -35
  3. package/code/enterprise/cli/privateCatalogSettings.cjs +2 -2
  4. package/code/enterprise/pi-extension/privateCatalogOnboarding.js +5 -8
  5. package/code/enterprise/shared/privateCatalogPolicy.cjs +5 -5
  6. package/code/pi-extension/src/outfitter-extension.js +353 -553
  7. package/code/pi-extension/src/outfitter-runtime-extension.js +160 -0
  8. package/dist/agents/AgentLaunch.d.ts +9 -1
  9. package/dist/agents/AgentLaunch.js +19 -0
  10. package/dist/agents/AgentLaunch.js.map +1 -1
  11. package/dist/agents/PiCredentialPersistence.d.ts +6 -0
  12. package/dist/agents/PiCredentialPersistence.js +33 -0
  13. package/dist/agents/PiCredentialPersistence.js.map +1 -0
  14. package/dist/cli/OutfitterCli.js +10 -18
  15. package/dist/cli/OutfitterCli.js.map +1 -1
  16. package/dist/cli/commands/CommandObject.d.ts +0 -5
  17. package/dist/cli/commands/CommandObject.js +1 -4
  18. package/dist/cli/commands/CommandObject.js.map +1 -1
  19. package/dist/cli/commands/DumpCommand.d.ts +19 -0
  20. package/dist/cli/commands/DumpCommand.js +54 -0
  21. package/dist/cli/commands/DumpCommand.js.map +1 -0
  22. package/dist/cli/commands/ListCommand.d.ts +17 -0
  23. package/dist/cli/commands/ListCommand.js +77 -0
  24. package/dist/cli/commands/ListCommand.js.map +1 -0
  25. package/dist/cli/commands/PiRuntimeLaunch.d.ts +8 -0
  26. package/dist/cli/commands/PiRuntimeLaunch.js +47 -0
  27. package/dist/cli/commands/PiRuntimeLaunch.js.map +1 -0
  28. package/dist/cli/commands/ProcessDefaults.d.ts +2 -0
  29. package/dist/cli/commands/ProcessDefaults.js +5 -0
  30. package/dist/cli/commands/ProcessDefaults.js.map +1 -0
  31. package/dist/cli/commands/RunAgentCommand.d.ts +46 -0
  32. package/dist/cli/commands/RunAgentCommand.js +176 -0
  33. package/dist/cli/commands/RunAgentCommand.js.map +1 -0
  34. package/dist/cli/commands/SetupCommand.d.ts +38 -6
  35. package/dist/cli/commands/SetupCommand.js +194 -232
  36. package/dist/cli/commands/SetupCommand.js.map +1 -1
  37. package/dist/cli/commands/ValidateCommand.d.ts +20 -0
  38. package/dist/cli/commands/ValidateCommand.js +54 -0
  39. package/dist/cli/commands/ValidateCommand.js.map +1 -0
  40. package/dist/composer/Composer.d.ts +11 -0
  41. package/dist/composer/Composer.js +72 -0
  42. package/dist/composer/Composer.js.map +1 -0
  43. package/dist/composer/Composition.d.ts +33 -0
  44. package/dist/composer/Composition.js +2 -0
  45. package/dist/composer/Composition.js.map +1 -0
  46. package/dist/dump/Containment.d.ts +8 -0
  47. package/dist/dump/Containment.js +22 -0
  48. package/dist/dump/Containment.js.map +1 -0
  49. package/dist/dump/Dump.d.ts +8 -0
  50. package/dist/dump/Dump.js +182 -0
  51. package/dist/dump/Dump.js.map +1 -0
  52. package/dist/extensions/PiExtensionCache.d.ts +30 -0
  53. package/dist/extensions/PiExtensionCache.js +92 -0
  54. package/dist/extensions/PiExtensionCache.js.map +1 -0
  55. package/dist/fs/TypeConflict.d.ts +6 -0
  56. package/dist/fs/TypeConflict.js +21 -0
  57. package/dist/fs/TypeConflict.js.map +1 -0
  58. package/dist/paths/OutfitterCache.d.ts +6 -0
  59. package/dist/paths/OutfitterCache.js +17 -0
  60. package/dist/paths/OutfitterCache.js.map +1 -0
  61. package/dist/projection/Materialize.d.ts +24 -0
  62. package/dist/projection/Materialize.js +83 -0
  63. package/dist/projection/Materialize.js.map +1 -0
  64. package/dist/projection/ProjectHarness.d.ts +5 -0
  65. package/dist/projection/ProjectHarness.js +77 -0
  66. package/dist/projection/ProjectHarness.js.map +1 -0
  67. package/dist/projection/Projection.d.ts +23 -0
  68. package/dist/projection/Projection.js +2 -0
  69. package/dist/projection/Projection.js.map +1 -0
  70. package/dist/resolver/AgentDefinition.d.ts +30 -0
  71. package/dist/resolver/AgentDefinition.js +123 -0
  72. package/dist/resolver/AgentDefinition.js.map +1 -0
  73. package/dist/resolver/Layer.d.ts +12 -0
  74. package/dist/resolver/Layer.js +30 -0
  75. package/dist/resolver/Layer.js.map +1 -0
  76. package/dist/resolver/Resolver.d.ts +3 -0
  77. package/dist/resolver/Resolver.js +163 -0
  78. package/dist/resolver/Resolver.js.map +1 -0
  79. package/dist/resolver/ResolverContext.d.ts +15 -0
  80. package/dist/resolver/ResolverContext.js +11 -0
  81. package/dist/resolver/ResolverContext.js.map +1 -0
  82. package/dist/resolver/ResolverValidation.d.ts +11 -0
  83. package/dist/resolver/ResolverValidation.js +112 -0
  84. package/dist/resolver/ResolverValidation.js.map +1 -0
  85. package/dist/resolver/Resource.d.ts +88 -0
  86. package/dist/resolver/Resource.js +34 -0
  87. package/dist/resolver/Resource.js.map +1 -0
  88. package/dist/schemas/agent.schema.json +48 -0
  89. package/dist/schemas/settings.schema.json +32 -9
  90. package/dist/settings/Settings.d.ts +34 -5
  91. package/dist/settings/Settings.js +3 -1
  92. package/dist/settings/Settings.js.map +1 -1
  93. package/dist/settings/SettingsLoader.d.ts +1 -1
  94. package/dist/settings/SettingsLoader.js +23 -22
  95. package/dist/settings/SettingsLoader.js.map +1 -1
  96. package/dist/settings/SettingsMerger.js +12 -10
  97. package/dist/settings/SettingsMerger.js.map +1 -1
  98. package/dist/setup/DefaultCatalog.d.ts +20 -0
  99. package/dist/setup/DefaultCatalog.js +89 -0
  100. package/dist/setup/DefaultCatalog.js.map +1 -0
  101. package/dist/setup/Setup.d.ts +43 -0
  102. package/dist/setup/Setup.js +261 -0
  103. package/dist/setup/Setup.js.map +1 -0
  104. package/dist/skills/SkillDocument.d.ts +6 -1
  105. package/dist/skills/SkillDocument.js.map +1 -1
  106. package/dist/sources/SourceCache.d.ts +19 -0
  107. package/dist/{profiles/ProfileCache.js → sources/SourceCache.js} +22 -18
  108. package/dist/sources/SourceCache.js.map +1 -0
  109. package/dist/validation/SchemaValidator.d.ts +1 -1
  110. package/dist/validation/SchemaValidator.js +4 -13
  111. package/dist/validation/SchemaValidator.js.map +1 -1
  112. package/docs/architecture/state_writeback_strategy.md +54 -122
  113. package/docs/documentation/README.md +33 -12
  114. package/docs/documentation/actions.md +35 -52
  115. package/docs/documentation/agents.md +109 -0
  116. package/docs/documentation/best-practices.md +25 -63
  117. package/docs/documentation/catalogs.md +126 -0
  118. package/docs/documentation/cli.md +39 -41
  119. package/docs/documentation/concepts.md +66 -23
  120. package/docs/documentation/dump-and-bake.md +30 -0
  121. package/docs/documentation/first-time-cli-agent-users.md +8 -8
  122. package/docs/documentation/getting-started.md +28 -8
  123. package/docs/documentation/hooks.md +20 -0
  124. package/docs/documentation/iterating-on-profiles.md +56 -70
  125. package/docs/documentation/local-development.md +84 -0
  126. package/docs/documentation/migration.md +39 -0
  127. package/docs/documentation/personas.md +41 -0
  128. package/docs/documentation/porting-claude.md +54 -0
  129. package/docs/documentation/profiles.md +16 -169
  130. package/docs/documentation/settings.md +61 -0
  131. package/docs/documentation/skills.md +93 -334
  132. package/docs/documentation/state.md +24 -62
  133. package/docs/documentation/subagents.md +37 -0
  134. package/docs/documentation/support-matrix.md +40 -35
  135. package/docs/documentation/switching-to-outfitter.md +75 -81
  136. package/docs/documentation/tasks.md +13 -0
  137. package/docs/documentation/usecases/engineering.md +67 -84
  138. package/docs/documentation/usecases/organization-profile-catalog.md +83 -111
  139. package/docs/documentation/usecases/persona-reviews.md +133 -139
  140. package/docs/philosophy.md +2 -2
  141. package/package.json +3 -3
  142. package/src/schemas/agent.schema.json +48 -0
  143. package/src/schemas/settings.schema.json +32 -9
  144. package/dist/agents/AdapterProfileControls.d.ts +0 -21
  145. package/dist/agents/AdapterProfileControls.js +0 -76
  146. package/dist/agents/AdapterProfileControls.js.map +0 -1
  147. package/dist/agents/AdapterStatePaths.d.ts +0 -12
  148. package/dist/agents/AdapterStatePaths.js +0 -46
  149. package/dist/agents/AdapterStatePaths.js.map +0 -1
  150. package/dist/agents/AgentAdapter.d.ts +0 -44
  151. package/dist/agents/AgentAdapter.js +0 -2
  152. package/dist/agents/AgentAdapter.js.map +0 -1
  153. package/dist/agents/AgentRegistry.d.ts +0 -6
  154. package/dist/agents/AgentRegistry.js +0 -17
  155. package/dist/agents/AgentRegistry.js.map +0 -1
  156. package/dist/agents/LaunchResources.d.ts +0 -17
  157. package/dist/agents/LaunchResources.js +0 -61
  158. package/dist/agents/LaunchResources.js.map +0 -1
  159. package/dist/agents/OutfitterSkill.d.ts +0 -11
  160. package/dist/agents/OutfitterSkill.js +0 -128
  161. package/dist/agents/OutfitterSkill.js.map +0 -1
  162. package/dist/agents/ResourceIdentity.d.ts +0 -2
  163. package/dist/agents/ResourceIdentity.js +0 -51
  164. package/dist/agents/ResourceIdentity.js.map +0 -1
  165. package/dist/agents/claude/ClaudeAdapter.d.ts +0 -2
  166. package/dist/agents/claude/ClaudeAdapter.js +0 -148
  167. package/dist/agents/claude/ClaudeAdapter.js.map +0 -1
  168. package/dist/agents/claude/ClaudeCompositeProfileWriter.d.ts +0 -5
  169. package/dist/agents/claude/ClaudeCompositeProfileWriter.js +0 -7
  170. package/dist/agents/claude/ClaudeCompositeProfileWriter.js.map +0 -1
  171. package/dist/agents/pi/PiAdapter.d.ts +0 -2
  172. package/dist/agents/pi/PiAdapter.js +0 -363
  173. package/dist/agents/pi/PiAdapter.js.map +0 -1
  174. package/dist/agents/pi/PiArgs.d.ts +0 -2
  175. package/dist/agents/pi/PiArgs.js +0 -15
  176. package/dist/agents/pi/PiArgs.js.map +0 -1
  177. package/dist/agents/pi/PiCompositeProfileWriter.d.ts +0 -5
  178. package/dist/agents/pi/PiCompositeProfileWriter.js +0 -7
  179. package/dist/agents/pi/PiCompositeProfileWriter.js.map +0 -1
  180. package/dist/agents/pi/PiExtensionCache.d.ts +0 -12
  181. package/dist/agents/pi/PiExtensionCache.js +0 -195
  182. package/dist/agents/pi/PiExtensionCache.js.map +0 -1
  183. package/dist/agents/pi/PiMcpConfig.d.ts +0 -2
  184. package/dist/agents/pi/PiMcpConfig.js +0 -114
  185. package/dist/agents/pi/PiMcpConfig.js.map +0 -1
  186. package/dist/agents/pi/PiSettingsMergePolicy.d.ts +0 -17
  187. package/dist/agents/pi/PiSettingsMergePolicy.js +0 -59
  188. package/dist/agents/pi/PiSettingsMergePolicy.js.map +0 -1
  189. package/dist/agents/pi/PiSkillSources.d.ts +0 -8
  190. package/dist/agents/pi/PiSkillSources.js +0 -73
  191. package/dist/agents/pi/PiSkillSources.js.map +0 -1
  192. package/dist/cli/commands/FirstRunWelcomeProfile.d.ts +0 -11
  193. package/dist/cli/commands/FirstRunWelcomeProfile.js +0 -110
  194. package/dist/cli/commands/FirstRunWelcomeProfile.js.map +0 -1
  195. package/dist/cli/commands/PiLoginLaunch.d.ts +0 -22
  196. package/dist/cli/commands/PiLoginLaunch.js +0 -170
  197. package/dist/cli/commands/PiLoginLaunch.js.map +0 -1
  198. package/dist/cli/commands/RunCommand.d.ts +0 -36
  199. package/dist/cli/commands/RunCommand.js +0 -345
  200. package/dist/cli/commands/RunCommand.js.map +0 -1
  201. package/dist/cli/commands/SyncCommand.d.ts +0 -46
  202. package/dist/cli/commands/SyncCommand.js +0 -244
  203. package/dist/cli/commands/SyncCommand.js.map +0 -1
  204. package/dist/cli/commands/WelcomeCommand.d.ts +0 -56
  205. package/dist/cli/commands/WelcomeCommand.js +0 -224
  206. package/dist/cli/commands/WelcomeCommand.js.map +0 -1
  207. package/dist/cli/commands/assets/outfitter-ascii.txt +0 -5
  208. package/dist/cli/commands/profile/Command.d.ts +0 -7
  209. package/dist/cli/commands/profile/Command.js +0 -24
  210. package/dist/cli/commands/profile/Command.js.map +0 -1
  211. package/dist/cli/commands/profile/CreateCommand.d.ts +0 -19
  212. package/dist/cli/commands/profile/CreateCommand.js +0 -115
  213. package/dist/cli/commands/profile/CreateCommand.js.map +0 -1
  214. package/dist/cli/commands/profile/LintCommand.d.ts +0 -19
  215. package/dist/cli/commands/profile/LintCommand.js +0 -155
  216. package/dist/cli/commands/profile/LintCommand.js.map +0 -1
  217. package/dist/cli/commands/profile/ListCommand.d.ts +0 -19
  218. package/dist/cli/commands/profile/ListCommand.js +0 -91
  219. package/dist/cli/commands/profile/ListCommand.js.map +0 -1
  220. package/dist/cli/commands/profile/Shared.d.ts +0 -9
  221. package/dist/cli/commands/profile/Shared.js +0 -10
  222. package/dist/cli/commands/profile/Shared.js.map +0 -1
  223. package/dist/cli/commands/run/RunFirstRunOnboarding.d.ts +0 -7
  224. package/dist/cli/commands/run/RunFirstRunOnboarding.js +0 -52
  225. package/dist/cli/commands/run/RunFirstRunOnboarding.js.map +0 -1
  226. package/dist/cli/commands/run/RunLaunchSummary.d.ts +0 -2
  227. package/dist/cli/commands/run/RunLaunchSummary.js +0 -35
  228. package/dist/cli/commands/run/RunLaunchSummary.js.map +0 -1
  229. package/dist/cli/commands/run/RunProfileResolution.d.ts +0 -39
  230. package/dist/cli/commands/run/RunProfileResolution.js +0 -128
  231. package/dist/cli/commands/run/RunProfileResolution.js.map +0 -1
  232. package/dist/cli/commands/run/RunStateWritePrompt.d.ts +0 -2
  233. package/dist/cli/commands/run/RunStateWritePrompt.js +0 -29
  234. package/dist/cli/commands/run/RunStateWritePrompt.js.map +0 -1
  235. package/dist/cli/commands/setup/SetupPrompts.d.ts +0 -14
  236. package/dist/cli/commands/setup/SetupPrompts.js +0 -296
  237. package/dist/cli/commands/setup/SetupPrompts.js.map +0 -1
  238. package/dist/cli/commands/setup/SetupSourceImport.d.ts +0 -5
  239. package/dist/cli/commands/setup/SetupSourceImport.js +0 -177
  240. package/dist/cli/commands/setup/SetupSourceImport.js.map +0 -1
  241. package/dist/cli/commands/setup/SetupSourceLaunch.d.ts +0 -4
  242. package/dist/cli/commands/setup/SetupSourceLaunch.js +0 -65
  243. package/dist/cli/commands/setup/SetupSourceLaunch.js.map +0 -1
  244. package/dist/cli/commands/setup/SetupStarterSource.d.ts +0 -21
  245. package/dist/cli/commands/setup/SetupStarterSource.js +0 -133
  246. package/dist/cli/commands/setup/SetupStarterSource.js.map +0 -1
  247. package/dist/cli/commands/setup/SetupTypes.d.ts +0 -91
  248. package/dist/cli/commands/setup/SetupTypes.js +0 -26
  249. package/dist/cli/commands/setup/SetupTypes.js.map +0 -1
  250. package/dist/compositeProfile/CompositeProfile.d.ts +0 -8
  251. package/dist/compositeProfile/CompositeProfile.js +0 -6
  252. package/dist/compositeProfile/CompositeProfile.js.map +0 -1
  253. package/dist/compositeProfile/CompositeProfileAssembler.d.ts +0 -12
  254. package/dist/compositeProfile/CompositeProfileAssembler.js +0 -32
  255. package/dist/compositeProfile/CompositeProfileAssembler.js.map +0 -1
  256. package/dist/compositeProfile/CompositeProfileCleanup.d.ts +0 -9
  257. package/dist/compositeProfile/CompositeProfileCleanup.js +0 -87
  258. package/dist/compositeProfile/CompositeProfileCleanup.js.map +0 -1
  259. package/dist/compositeProfile/CompositeProfileFile.d.ts +0 -16
  260. package/dist/compositeProfile/CompositeProfileFile.js +0 -16
  261. package/dist/compositeProfile/CompositeProfileFile.js.map +0 -1
  262. package/dist/compositeProfile/CompositeProfileTemplate.d.ts +0 -15
  263. package/dist/compositeProfile/CompositeProfileTemplate.js +0 -65
  264. package/dist/compositeProfile/CompositeProfileTemplate.js.map +0 -1
  265. package/dist/compositeProfile/CompositeProfileWatcher.d.ts +0 -18
  266. package/dist/compositeProfile/CompositeProfileWatcher.js +0 -46
  267. package/dist/compositeProfile/CompositeProfileWatcher.js.map +0 -1
  268. package/dist/compositeProfile/StatePersistence.d.ts +0 -39
  269. package/dist/compositeProfile/StatePersistence.js +0 -249
  270. package/dist/compositeProfile/StatePersistence.js.map +0 -1
  271. package/dist/fs/SafeSymlink.d.ts +0 -13
  272. package/dist/fs/SafeSymlink.js +0 -50
  273. package/dist/fs/SafeSymlink.js.map +0 -1
  274. package/dist/profiles/Profile.d.ts +0 -60
  275. package/dist/profiles/Profile.js +0 -7
  276. package/dist/profiles/Profile.js.map +0 -1
  277. package/dist/profiles/ProfileCache.d.ts +0 -8
  278. package/dist/profiles/ProfileCache.js.map +0 -1
  279. package/dist/profiles/ProfileLoader.d.ts +0 -28
  280. package/dist/profiles/ProfileLoader.js +0 -299
  281. package/dist/profiles/ProfileLoader.js.map +0 -1
  282. package/dist/profiles/ProfileMerger.d.ts +0 -19
  283. package/dist/profiles/ProfileMerger.js +0 -112
  284. package/dist/profiles/ProfileMerger.js.map +0 -1
  285. package/dist/profiles/ProfileSource.d.ts +0 -35
  286. package/dist/profiles/ProfileSource.js +0 -13
  287. package/dist/profiles/ProfileSource.js.map +0 -1
  288. package/dist/profiles/PromptIncludes.d.ts +0 -32
  289. package/dist/profiles/PromptIncludes.js +0 -147
  290. package/dist/profiles/PromptIncludes.js.map +0 -1
  291. package/dist/prompts/SystemPromptExport.d.ts +0 -16
  292. package/dist/prompts/SystemPromptExport.js +0 -81
  293. package/dist/prompts/SystemPromptExport.js.map +0 -1
  294. package/dist/schemas/profile-source.schema.json +0 -29
  295. package/dist/schemas/profile.schema.json +0 -200
  296. package/dist/skills/ProfileSkillResolution.d.ts +0 -21
  297. package/dist/skills/ProfileSkillResolution.js +0 -88
  298. package/dist/skills/ProfileSkillResolution.js.map +0 -1
  299. package/dist/skills/SkillCatalog.d.ts +0 -41
  300. package/dist/skills/SkillCatalog.js +0 -119
  301. package/dist/skills/SkillCatalog.js.map +0 -1
  302. package/dist/skills/SkillResolution.d.ts +0 -34
  303. package/dist/skills/SkillResolution.js +0 -369
  304. package/dist/skills/SkillResolution.js.map +0 -1
  305. package/docs/documentation/profile-repository.md +0 -179
  306. package/src/schemas/SchemaDocument.ts +0 -20
  307. package/src/schemas/profile-source.schema.json +0 -29
  308. package/src/schemas/profile.schema.json +0 -200
@@ -1,249 +1,211 @@
1
- // Provides the command object for first-run Outfitter setup.
2
- import { existsSync, rmSync } from 'node:fs';
3
- import { homedir } from 'node:os';
4
- import { join } from 'node:path';
5
- import { redactProfileSourceUriCredentials } from '../../profiles/ProfileCache.js';
6
- import { loadLocalProfileSource } from '../../profiles/ProfileLoader.js';
7
- import { discoverSettingsLoadPlan, loadSettings, loadSettingsWithCachedRemoteSettings, } from '../../settings/SettingsLoader.js';
8
- import { persistFirstRunWelcomeProfile, updateSettingsDefaultProfile, } from './FirstRunWelcomeProfile.js';
9
- import { executeSyncCommand } from './SyncCommand.js';
10
- import { executeWelcomeCommand } from './WelcomeCommand.js';
11
- import { materializeSetupProfileSource, runSetupSourceOnboarding, selectDefaultProfileIfInteractive, } from './setup/SetupPrompts.js';
12
- import { applySetupSourceImport, copyStarterProfileFilesIfPresent, createDefaultProfileIfMissing, findSetupProfilePath, } from './setup/SetupSourceImport.js';
13
- import { formatRunProfileExample, formatSetupSourceExitMessages, runSetupSourcePostImportAction, } from './setup/SetupSourceLaunch.js';
14
- import { assertValidDefaultProfileId, createInitialSettingsIfMissing, ensureExistingUserSettingsDefaultProfile, prepareStarterLayout, readStarterDefaultProfileId, readUserDefaultProfileId, } from './setup/SetupStarterSource.js';
15
- import { formatSettingsIssue } from './setup/SetupTypes.js';
16
- export { createDefaultSettingsContent } from './setup/SetupStarterSource.js';
17
- export { updateSettingsDefaultProfile };
18
- /* eslint-disable complexity -- setup orchestration coordinates settings, sync, prompts, and welcome persistence. */
19
- export const executeSetupCommand = async (input, dependencies = {}) => {
20
- requireInteractiveTerminalIfNeeded(dependencies);
21
- const settingsPath = join(input.homeDirectory, '.outfitter', 'settings.yml');
22
- const initialSettingsMissing = !existsSync(settingsPath);
23
- const starterLayout = input.setupSourceUri
24
- ? prepareStarterLayout(input.homeDirectory, input.projectDirectory, input.setupSourceUri, dependencies.setupSourceSynchronizer)
25
- : undefined;
26
- const loadedSettings = loadSettings(discoverSettingsLoadPlan(input));
27
- if (loadedSettings.issues.length > 0) {
28
- throw new Error(`Cannot setup with invalid settings: ${loadedSettings.issues.map(formatSettingsIssue).join('; ')}`);
29
- }
30
- const defaultProfileId = initialSettingsMissing
31
- ? readStarterDefaultProfileId(starterLayout?.settingsPath)
32
- : readUserDefaultProfileId(loadedSettings.files);
33
- assertValidDefaultProfileId(defaultProfileId);
34
- if (input.setupSourceUri !== undefined && dependencies.interactive === true && starterLayout !== undefined) {
35
- return executeInteractiveSetupSourceCommand({
36
- input: { ...input, setupSourceUri: input.setupSourceUri },
37
- dependencies,
38
- homeSettingsPath: settingsPath,
39
- initialSettingsMissing,
40
- starterLayout,
41
- currentDefaultProfileId: defaultProfileId,
42
- });
43
- }
44
- const createdSettings = createInitialSettingsIfMissing(settingsPath, starterLayout?.settingsPath);
45
- ensureExistingUserSettingsDefaultProfile(settingsPath, loadedSettings.files, defaultProfileId);
46
- const copiedStarterProfileFiles = copyStarterProfileFilesIfPresent(starterLayout?.profilesPath, join(input.homeDirectory, '.outfitter', 'profiles'));
47
- const rollbackCreatedSettings = createdSettings ? () => rmSync(settingsPath, { force: true }) : () => undefined;
48
- const syncResult = executeSyncCommand(input, dependencies);
49
- failOnInitialDefaultProfileSyncFailure(initialSettingsMissing, rollbackCreatedSettings, syncResult);
50
- const selectedDefaultProfileId = shouldSkipInitialDefaultProfilePrompt(initialSettingsMissing, dependencies)
51
- ? defaultProfileId
52
- : await selectDefaultProfileIfInteractive(input, settingsPath, defaultProfileId, dependencies, starterLayout);
53
- const welcomeResult = await runWelcomeAfterInteractiveSetup(input, dependencies);
54
- const welcomeProfile = persistWelcomeProfileForSetup(input, settingsPath, welcomeResult);
55
- const finalDefaultProfile = prepareFinalDefaultProfile(input.homeDirectory, selectedDefaultProfileId, welcomeProfile);
56
- return {
57
- settingsPath,
58
- defaultProfilePath: finalDefaultProfile.path,
59
- createdSettings,
60
- copiedStarterProfileFiles,
61
- createdDefaultProfile: finalDefaultProfile.created,
62
- syncResult,
63
- welcomeResult,
64
- messages: buildSetupMessages({
65
- input,
66
- starterLayout,
67
- settingsPath,
68
- createdSettings,
69
- copiedStarterProfileFiles,
70
- defaultProfileId: finalDefaultProfile.id,
71
- defaultProfilePath: finalDefaultProfile.path,
72
- createdDefaultProfile: finalDefaultProfile.created,
73
- syncResult,
74
- welcomeProfileMessages: welcomeProfile?.messages ?? [],
75
- runExampleMessages: input.setupSourceUri === undefined ? [] : [formatRunProfileExample(finalDefaultProfile.id)],
76
- }),
77
- };
1
+ /* eslint-disable complexity */
2
+ // Provides the universal Pi-hosted `/outfitter` setup walkthrough.
3
+ import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
4
+ import { tmpdir } from 'node:os';
5
+ import { join, resolve } from 'node:path';
6
+ import { fileURLToPath } from 'node:url';
7
+ import { Command } from 'commander';
8
+ import { launchThroughSpawn, spawnLauncher } from '../../agents/AgentLaunch.js';
9
+ import { HARNESSES } from '../../settings/Settings.js';
10
+ import { applySetupSelection, discoverSetupAgentChoices } from '../../setup/Setup.js';
11
+ import { bootstrapDefaultCatalog } from '../../setup/DefaultCatalog.js';
12
+ import { resolveHomeDirectory, resolveProjectDirectory } from './ProcessDefaults.js';
13
+ import { executeRunAgentCommand } from './RunAgentCommand.js';
14
+ const readRepositoryCodeAsset = (relativePath) => {
15
+ const sourcePath = fileURLToPath(new URL(`../../../../${relativePath}`, import.meta.url));
16
+ const packagePath = fileURLToPath(new URL(`../../../code/${relativePath}`, import.meta.url));
17
+ /* v8 ignore else -- packaged layout is exercised by the npm package smoke test. */
18
+ if (existsSync(sourcePath))
19
+ return readFileSync(sourcePath, 'utf8');
20
+ /* v8 ignore next 3 -- packaged layout is covered by the package smoke test. */
21
+ if (existsSync(packagePath))
22
+ return readFileSync(packagePath, 'utf8');
23
+ throw new Error(`Outfitter support file '${relativePath}' was not found.`);
78
24
  };
79
- /* eslint-enable complexity */
80
- const defaultProfilesSourceUri = 'git+https://github.com/ai-outfitter/default-profiles.git:profiles';
81
- const failOnInitialDefaultProfileSyncFailure = (initialSettingsMissing, rollbackCreatedSettings, syncResult) => {
82
- if (!initialSettingsMissing) {
83
- return;
84
- }
85
- const failedDefaultProfilesSource = syncResult.sources.find((source) => source.uri === defaultProfilesSourceUri && source.status === 'failed');
86
- if (failedDefaultProfilesSource === undefined) {
87
- return;
88
- }
89
- rollbackCreatedSettings();
90
- throw new Error(`Cannot complete first-run setup because the default profiles source failed to sync: ${failedDefaultProfilesSource.message}. ` +
91
- 'Fix the network/git issue and rerun `outfitter setup` once the source is reachable.');
92
- };
93
- const executeInteractiveSetupSourceCommand = async ({ input, dependencies, homeSettingsPath, initialSettingsMissing, starterLayout, currentDefaultProfileId, }) => {
94
- const onboarding = await runSetupSourceOnboarding(input, dependencies, starterLayout, currentDefaultProfileId);
95
- const appliedImport = applySetupSourceImport(input, starterLayout, onboarding);
96
- /* v8 ignore next -- setup-source rollback only runs when a home import creates settings and default-profile sync fails. */
97
- const rollbackCreatedSettings = appliedImport.createdSettings
98
- ? () => rmSync(appliedImport.settingsPath, { force: true })
99
- : () => undefined;
100
- const syncResult = executeSyncCommand(input, dependencies);
101
- failOnInitialDefaultProfileSyncFailure(initialSettingsMissing && appliedImport.settingsPath === homeSettingsPath, rollbackCreatedSettings, syncResult);
102
- const defaultProfilePath = findSetupProfilePath(appliedImport.profilesPath, onboarding.selectedProfileId);
103
- const createdDefaultProfile = appliedImport.symlinkedOutfitter
104
- ? false
105
- : createDefaultProfileIfMissing(defaultProfilePath, onboarding.selectedProfileId);
106
- const postImportLaunchTarget = appliedImport.selectedProfileAlreadyExists ? 'default' : 'selected';
107
- const postImportAction = await runSetupSourcePostImportAction(input, dependencies, onboarding.importTarget, onboarding.selectedProfileId, postImportLaunchTarget);
108
- return {
109
- settingsPath: appliedImport.settingsPath,
110
- defaultProfilePath,
111
- createdSettings: appliedImport.createdSettings,
112
- copiedStarterProfileFiles: appliedImport.copiedStarterProfileFiles,
113
- createdDefaultProfile,
114
- syncResult,
115
- messages: buildSetupMessages({
116
- input,
117
- starterLayout,
118
- settingsPath: appliedImport.settingsPath,
119
- settingsDescription: appliedImport.settingsDescription,
120
- profileTargetPath: appliedImport.profilesPath,
121
- createdSettings: appliedImport.createdSettings,
122
- copiedStarterProfileFiles: appliedImport.copiedStarterProfileFiles,
123
- defaultProfileId: onboarding.selectedProfileId,
124
- defaultProfilePath,
125
- createdDefaultProfile,
126
- syncResult,
127
- welcomeProfileMessages: appliedImport.selectedProfileConflictMessage === undefined
128
- ? []
129
- : [appliedImport.selectedProfileConflictMessage],
130
- runExampleMessages: postImportAction === 'exit'
131
- ? formatSetupSourceExitMessages(input, onboarding.importTarget, onboarding.selectedProfileId, postImportLaunchTarget)
132
- : [],
133
- }),
25
+ export const createPiSetupExtensionContent = (input) => {
26
+ const values = {
27
+ OUTFITTER_HOME: input.homeDirectory,
28
+ OUTFITTER_PROJECT: input.projectDirectory,
29
+ OUTFITTER_SETUP_RESULT_PATH: input.resultPath,
30
+ OUTFITTER_AGENT_CHOICES: input.availableAgents,
31
+ OUTFITTER_CURRENT_DEFAULT: input.currentDefault,
32
+ OUTFITTER_SETUP_SOURCE_URI: input.setupSourceUri,
33
+ OUTFITTER_AUTO_OPEN: true,
134
34
  };
35
+ // One pass over the asset: every `'__OUTFITTER_X__'` placeholder is replaced with its stamped
36
+ // JSON value; unknown placeholders are left intact.
37
+ return readRepositoryCodeAsset('pi-extension/src/outfitter-extension.js').replace(/["']__(OUTFITTER_[A-Z_]+)__["']/gu, (match, name) => Object.hasOwn(values, name) ? JSON.stringify(values[name]) : match);
135
38
  };
136
- const prepareFinalDefaultProfile = (homeDirectory, selectedDefaultProfileId, welcomeProfile) => {
137
- const finalDefaultProfileId = welcomeProfile?.profileId ?? selectedDefaultProfileId;
138
- const finalDefaultProfilePath = join(homeDirectory, '.outfitter', 'profiles', finalDefaultProfileId, 'profile.yml');
139
- const createdDefaultProfile = welcomeProfile?.createdProfile ?? createDefaultProfileIfMissing(finalDefaultProfilePath, finalDefaultProfileId);
140
- return { id: finalDefaultProfileId, path: finalDefaultProfilePath, created: createdDefaultProfile };
141
- };
142
- const buildSetupMessages = (input) => {
143
- const messages = [];
144
- if (input.input.setupSourceUri !== undefined && input.starterLayout !== undefined) {
145
- messages.push(`Prepared setup source ${redactProfileSourceUriCredentials(input.input.setupSourceUri)} at ${input.starterLayout.cachePath}.`);
146
- }
147
- const settingsDescription = input.settingsDescription ?? 'user';
148
- const profileTargetPath = input.profileTargetPath ?? join(input.input.homeDirectory, '.outfitter', 'profiles');
149
- messages.push(input.createdSettings
150
- ? `Created ${settingsDescription} settings at ${input.settingsPath}.`
151
- : `${capitalize(settingsDescription)} settings already exist at ${input.settingsPath}; left unchanged.`);
152
- if (input.starterLayout?.profilesPath !== undefined) {
153
- messages.push(`Copied ${input.copiedStarterProfileFiles} starter profile file(s) into ${profileTargetPath}.`);
154
- }
155
- if (shouldReportDefaultProfileStatus(input)) {
156
- messages.push(input.createdDefaultProfile
157
- ? `Created default user profile at ${input.defaultProfilePath}.`
158
- : `Default user profile at ${input.defaultProfilePath} already exists; left unchanged.`);
159
- }
160
- messages.push(`Selected default profile '${input.defaultProfileId}'.`, ...input.welcomeProfileMessages, ...input.runExampleMessages, ...input.syncResult.messages);
161
- return messages;
162
- };
163
- const shouldReportDefaultProfileStatus = (input) => {
164
- if (input.createdDefaultProfile) {
165
- return true;
39
+ /** Creates an isolated, model-free Pi setup launch using the bundled extension. */
40
+ export const preparePiSetupLaunch = (input) => {
41
+ const piConfigDirectory = join(input.setupDirectory, 'pi');
42
+ const extensionPath = join(piConfigDirectory, 'outfitter-extension.js');
43
+ const resultPath = join(input.setupDirectory, 'selection.json');
44
+ mkdirSync(piConfigDirectory, { recursive: true });
45
+ writeFileSync(extensionPath, createPiSetupExtensionContent({
46
+ homeDirectory: input.homeDirectory,
47
+ projectDirectory: input.projectDirectory,
48
+ resultPath,
49
+ availableAgents: input.availableAgents,
50
+ currentDefault: readCurrentDefaultAgent(input.homeDirectory),
51
+ setupSourceUri: input.setupSourceUri,
52
+ }));
53
+ for (const [source, destination] of [
54
+ ['enterprise/pi-extension/privateCatalogOnboarding.js', 'pi-extension/privateCatalogOnboarding.js'],
55
+ ['enterprise/shared/privateCatalogPolicy.cjs', 'shared/privateCatalogPolicy.cjs'],
56
+ ]) {
57
+ const destinationPath = join(piConfigDirectory, destination);
58
+ mkdirSync(join(destinationPath, '..'), { recursive: true });
59
+ writeFileSync(destinationPath, readRepositoryCodeAsset(source));
166
60
  }
167
- return input.input.setupSourceUri === undefined || input.starterLayout?.profilesPath === undefined;
168
- };
169
- const capitalize = (value) => `${value.slice(0, 1).toUpperCase()}${value.slice(1)}`;
170
- export const createSetupCommand = (dependencies = {}) => {
171
- const command = {
172
- name: 'setup',
173
- description: 'Create initial Outfitter settings and a default profile.',
174
- register(program) {
175
- program
176
- .command(`${command.name} [source]`)
177
- .description(command.description)
178
- .action(async (source) => {
179
- const input = {
180
- /* v8 ignore next -- default process home is exercised by the direct CLI entrypoint, not unit tests. */
181
- homeDirectory: dependencies.homeDirectory ?? homedir(),
182
- /* v8 ignore next -- default process cwd is exercised by the direct CLI entrypoint, not unit tests. */
183
- projectDirectory: dependencies.projectDirectory ?? process.cwd(),
184
- setupSourceUri: source,
185
- };
186
- const result = dependencies.launchPiOnboarding === undefined
187
- ? await launchPiOnboardingWithRunCommand(input, dependencies)
188
- : await dependencies.launchPiOnboarding(input);
189
- if (result.exitCode !== 0) {
190
- process.exitCode = result.exitCode;
191
- }
192
- });
61
+ // Pi currently renders a provider-login warning before extensions can open their UI when its
62
+ // registry is empty. This isolated, offline-only placeholder is never called; it simply gives
63
+ // the setup shell a selected model so the walkthrough can start cleanly without user credentials.
64
+ writeFileSync(join(piConfigDirectory, 'models.json'), `${JSON.stringify({
65
+ providers: {
66
+ 'outfitter-setup': {
67
+ baseUrl: 'http://127.0.0.1:9/v1',
68
+ api: 'openai-completions',
69
+ apiKey: 'outfitter-setup-no-network',
70
+ models: [{ id: 'walkthrough', name: 'Outfitter setup UI' }],
71
+ },
72
+ },
73
+ }, null, 2)}\n`);
74
+ writeFileSync(join(piConfigDirectory, 'settings.json'), `${JSON.stringify({ quietStartup: true, defaultProvider: 'outfitter-setup', defaultModel: 'walkthrough' }, null, 2)}\n`);
75
+ return {
76
+ resultPath,
77
+ plan: {
78
+ command: 'pi',
79
+ args: [
80
+ '--no-session',
81
+ '--offline',
82
+ '--no-tools',
83
+ '--no-skills',
84
+ '--no-prompt-templates',
85
+ '--extension',
86
+ extensionPath,
87
+ ],
88
+ env: { PI_CODING_AGENT_DIR: piConfigDirectory },
193
89
  },
194
90
  };
195
- return command;
196
- };
197
- const launchPiOnboardingWithRunCommand = async (input, dependencies) => {
198
- const { executeRunCommand } = await import('./RunCommand.js');
199
- return executeRunCommand({
200
- ...input,
201
- agentId: 'pi',
202
- forceRuntimeOnboarding: true,
203
- }, { ...dependencies, interactive: true });
204
91
  };
205
- const persistWelcomeProfileForSetup = (input, settingsPath, welcomeResult) => persistFirstRunWelcomeProfile(input.homeDirectory, settingsPath, welcomeResult, {
206
- sourceProfileDirectory: findWelcomeSourceProfileDirectory(input, welcomeResult?.selectedRole?.id),
207
- });
208
- const findWelcomeSourceProfileDirectory = (input, profileId) => {
209
- if (profileId === undefined) {
92
+ const readCurrentDefaultAgent = (homeDirectory) => {
93
+ const settingsPath = join(homeDirectory, '.agents', 'settings.yml');
94
+ if (!existsSync(settingsPath))
210
95
  return undefined;
211
- }
212
- const loadedSettings = loadSettingsWithCachedRemoteSettings(input);
213
- /* v8 ignore next -- setup already rejected invalid settings; this fallback handles cache mutation during welcome. */
214
- if (loadedSettings.issues.length > 0) {
96
+ const match = /^default_agent:\s*([^\n#]+)/mu.exec(readFileSync(settingsPath, 'utf8'));
97
+ return match?.[1]?.trim().replace(/^['"]|['"]$/gu, '');
98
+ };
99
+ const parseSetupSelection = (path) => {
100
+ if (!existsSync(path))
215
101
  return undefined;
216
- }
217
- for (const source of loadedSettings.settings.profileSources) {
218
- const materializedPath = materializeSetupProfileSource(input.homeDirectory, source);
219
- const loadedProfiles = loadLocalProfileSource({ path: materializedPath, only: source.only, except: source.except });
220
- const loadedProfile = loadedProfiles.profiles.find((profile) => profile.profile.id === profileId);
221
- if (loadedProfile !== undefined) {
222
- return loadedProfile.folderPath;
223
- }
224
- }
225
- return undefined;
102
+ const value = JSON.parse(readFileSync(path, 'utf8'));
103
+ const invalid = () => {
104
+ throw new Error('Pi setup returned an invalid selection.');
105
+ };
106
+ if (value === null || typeof value !== 'object')
107
+ return invalid();
108
+ const selection = value;
109
+ if (!['default', 'create', 'catalog', 'source'].includes(String(selection.setupMode)))
110
+ return invalid();
111
+ if (!HARNESSES.includes(String(selection.harness)))
112
+ return invalid();
113
+ if (!['catalog', 'source'].includes(String(selection.setupMode)) && typeof selection.agentId !== 'string')
114
+ return invalid();
115
+ if (selection.setupMode === 'catalog' &&
116
+ (typeof selection.github !== 'string' ||
117
+ typeof selection.ref !== 'string' ||
118
+ typeof selection.settingsPath !== 'string'))
119
+ return invalid();
120
+ if (selection.setupMode === 'source' && typeof selection.sourceUri !== 'string')
121
+ return invalid();
122
+ if (!['home', 'project'].includes(String(selection.target)))
123
+ return invalid();
124
+ return selection;
226
125
  };
227
- const runWelcomeAfterInteractiveSetup = async (input, dependencies) => {
228
- if (dependencies.interactive !== true) {
126
+ /* v8 ignore next -- wiring to the shared spawn boundary; launchThroughSpawn itself is unit-tested. */
127
+ const defaultLauncher = (plan) => launchThroughSpawn(spawnLauncher, plan);
128
+ /** Launches the walkthrough, then applies its result through the shared setup state machine. */
129
+ export const runSetup = async (dependencies = {}) => {
130
+ /* v8 ignore next -- the process TTY default is exercised through outfitter-dev. */
131
+ const interactive = dependencies.interactive ?? Boolean(process.stdin.isTTY && process.stdout.isTTY);
132
+ if (!interactive)
229
133
  return undefined;
134
+ const homeDirectory = resolveHomeDirectory(dependencies.homeDirectory);
135
+ const projectDirectory = resolve(resolveProjectDirectory(dependencies.projectDirectory));
136
+ const defaultCatalogRoot = dependencies.setupSourceUri === undefined
137
+ ? (dependencies.defaultCatalogBootstrap ?? ((home) => bootstrapDefaultCatalog(home).root))(homeDirectory)
138
+ : undefined;
139
+ const availableAgents = discoverSetupAgentChoices({ defaultCatalogRoot });
140
+ const setupDirectory = mkdtempSync(join(tmpdir(), 'outfitter-setup-'));
141
+ try {
142
+ const launch = preparePiSetupLaunch({
143
+ homeDirectory,
144
+ projectDirectory,
145
+ setupDirectory,
146
+ availableAgents,
147
+ setupSourceUri: dependencies.setupSourceUri,
148
+ });
149
+ /* v8 ignore next -- the bundled default launcher is exercised through outfitter-dev. */
150
+ const exitCode = await (dependencies.launcher ?? defaultLauncher)(launch.plan);
151
+ if (exitCode !== 0)
152
+ throw new Error(`The Outfitter setup walkthrough exited with code ${exitCode}.`);
153
+ const selection = parseSetupSelection(launch.resultPath);
154
+ if (selection === undefined)
155
+ return undefined;
156
+ return applySetupSelection({
157
+ homeDirectory,
158
+ projectDirectory,
159
+ selection,
160
+ availableAgents,
161
+ defaultCatalogRoot,
162
+ });
230
163
  }
231
- if (dependencies.runWelcome !== undefined) {
232
- return dependencies.runWelcome(input, dependencies);
164
+ finally {
165
+ rmSync(setupDirectory, { recursive: true, force: true });
233
166
  }
234
- return executeWelcomeCommand(input, dependencies);
235
167
  };
236
- const requireInteractiveTerminalIfNeeded = (dependencies) => {
237
- if (dependencies.interactive !== true) {
168
+ /* v8 ignore next -- wiring to the shared spawn boundary; launchThroughSpawn itself is unit-tested. */
169
+ const defaultRunLauncher = (plan) => launchThroughSpawn(spawnLauncher, plan);
170
+ // After an explicit `outfitter setup`, start the just-selected profile in pi so the user lands in a
171
+ // working session instead of being told to restart. Only a concrete agent choice (default/create
172
+ // modes set `defaultAgent`) launches immediately; catalog/source setups still need a sync, so they
173
+ // keep their "run outfitter sync / restart" guidance and are skipped here.
174
+ const autoLaunchSelectedProfile = async (dependencies, result, writeLine) => {
175
+ if (result.defaultAgent === undefined)
238
176
  return;
239
- }
240
- /* v8 ignore next -- default process streams are direct terminal behavior; tests inject streams. */
241
- const inputIsTty = (dependencies.input ?? process.stdin).isTTY === true;
242
- /* v8 ignore next -- default process streams are direct terminal behavior; tests inject streams. */
243
- const outputIsTty = (dependencies.output ?? process.stdout).isTTY === true;
244
- if (!inputIsTty || !outputIsTty) {
245
- throw new Error('`outfitter setup` requires an interactive TTY on both stdin and stdout.');
246
- }
177
+ writeLine(`Starting '${result.defaultAgent}' in ${result.defaultHarness}…`);
178
+ const runResult = await executeRunAgentCommand({
179
+ homeDirectory: resolveHomeDirectory(dependencies.homeDirectory),
180
+ projectDirectory: resolve(resolveProjectDirectory(dependencies.projectDirectory)),
181
+ harness: result.defaultHarness,
182
+ launcher: dependencies.runLauncher ?? defaultRunLauncher,
183
+ });
184
+ for (const message of runResult.messages)
185
+ writeLine(message);
186
+ /* v8 ignore next -- surfaces a nonzero profile-launch exit to the shell; happy path returns 0. */
187
+ if (runResult.exitCode !== 0)
188
+ process.exitCode = runResult.exitCode;
247
189
  };
248
- const shouldSkipInitialDefaultProfilePrompt = (initialSettingsMissing, dependencies) => initialSettingsMissing && dependencies.interactive === true;
190
+ export const createSetupCommand = (dependencies = {}) => ({
191
+ name: 'setup',
192
+ description: 'Configure .agents through the bundled Pi walkthrough.',
193
+ register(program) {
194
+ program.addCommand(new Command('setup')
195
+ .description('Configure .agents through the bundled Pi walkthrough.')
196
+ .argument('[source]', 'Optional setup source URI or path.')
197
+ .action(async (source) => {
198
+ const result = await runSetup({ ...dependencies, setupSourceUri: source ?? dependencies.setupSourceUri });
199
+ /* v8 ignore next -- console fallback is direct CLI behavior. */
200
+ const writeLine = dependencies.writeLine ?? console.log;
201
+ if (result === undefined) {
202
+ writeLine('Outfitter setup made no changes. Run it from an interactive terminal to configure .agents.');
203
+ return;
204
+ }
205
+ for (const message of result.messages)
206
+ writeLine(message);
207
+ await autoLaunchSelectedProfile(dependencies, result, writeLine);
208
+ }));
209
+ },
210
+ });
249
211
  //# sourceMappingURL=SetupCommand.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SetupCommand.js","sourceRoot":"","sources":["../../../src/cli/commands/SetupCommand.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SetupCommand.js","sourceRoot":"","sources":["../../../src/cli/commands/SetupCommand.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,mEAAmE;AACnE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClG,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAGhF,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAExE,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AA6B9D,MAAM,uBAAuB,GAAG,CAAC,YAAoB,EAAU,EAAE;IAC/D,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,eAAe,YAAY,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1F,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,iBAAiB,YAAY,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAE7F,mFAAmF;IACnF,IAAI,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACpE,+EAA+E;IAC/E,IAAI,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACtE,MAAM,IAAI,KAAK,CAAC,2BAA2B,YAAY,kBAAkB,CAAC,CAAC;AAC7E,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,KAO7C,EAAU,EAAE;IACX,MAAM,MAAM,GAAG;QACb,cAAc,EAAE,KAAK,CAAC,aAAa;QACnC,iBAAiB,EAAE,KAAK,CAAC,gBAAgB;QACzC,2BAA2B,EAAE,KAAK,CAAC,UAAU;QAC7C,uBAAuB,EAAE,KAAK,CAAC,eAAe;QAC9C,yBAAyB,EAAE,KAAK,CAAC,cAAc;QAC/C,0BAA0B,EAAE,KAAK,CAAC,cAAc;QAChD,mBAAmB,EAAE,IAAI;KACjB,CAAC;IAEX,8FAA8F;IAC9F,oDAAoD;IACpD,OAAO,uBAAuB,CAAC,yCAAyC,CAAC,CAAC,OAAO,CAC/E,mCAAmC,EACnC,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE,CACtB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAE,MAAkC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAClG,CAAC;AACJ,CAAC,CAAC;AAEF,mFAAmF;AACnF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAgC,EAAiB,EAAE;IACtF,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IAC3D,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,EAAE,wBAAwB,CAAC,CAAC;IACxE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;IAChE,SAAS,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,aAAa,CACX,aAAa,EACb,6BAA6B,CAAC;QAC5B,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,UAAU;QACV,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,cAAc,EAAE,uBAAuB,CAAC,KAAK,CAAC,aAAa,CAAC;QAC5D,cAAc,EAAE,KAAK,CAAC,cAAc;KACrC,CAAC,CACH,CAAC;IACF,KAAK,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI;QAClC,CAAC,qDAAqD,EAAE,0CAA0C,CAAC;QACnG,CAAC,4CAA4C,EAAE,iCAAiC,CAAC;KACzE,EAAE,CAAC;QACX,MAAM,eAAe,GAAG,IAAI,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;QAC7D,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,aAAa,CAAC,eAAe,EAAE,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC;IAClE,CAAC;IACD,6FAA6F;IAC7F,8FAA8F;IAC9F,kGAAkG;IAClG,aAAa,CACX,IAAI,CAAC,iBAAiB,EAAE,aAAa,CAAC,EACtC,GAAG,IAAI,CAAC,SAAS,CACf;QACE,SAAS,EAAE;YACT,iBAAiB,EAAE;gBACjB,OAAO,EAAE,uBAAuB;gBAChC,GAAG,EAAE,oBAAoB;gBACzB,MAAM,EAAE,4BAA4B;gBACpC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC;aAC5D;SACF;KACF,EACD,IAAI,EACJ,CAAC,CACF,IAAI,CACN,CAAC;IACF,aAAa,CACX,IAAI,CAAC,iBAAiB,EAAE,eAAe,CAAC,EACxC,GAAG,IAAI,CAAC,SAAS,CACf,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,iBAAiB,EAAE,YAAY,EAAE,aAAa,EAAE,EACvF,IAAI,EACJ,CAAC,CACF,IAAI,CACN,CAAC;IAEF,OAAO;QACL,UAAU;QACV,IAAI,EAAE;YACJ,OAAO,EAAE,IAAI;YACb,IAAI,EAAE;gBACJ,cAAc;gBACd,WAAW;gBACX,YAAY;gBACZ,aAAa;gBACb,uBAAuB;gBACvB,aAAa;gBACb,aAAa;aACd;YACD,GAAG,EAAE,EAAE,mBAAmB,EAAE,iBAAiB,EAAE;SAChD;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,aAAqB,EAAsB,EAAE;IAC5E,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;IACpE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,SAAS,CAAC;IAChD,MAAM,KAAK,GAAG,+BAA+B,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;IACvF,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;AACzD,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAA8B,EAAE;IACvE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACxC,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,GAAU,EAAE;QAC1B,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC,CAAC;IACF,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,OAAO,EAAE,CAAC;IAClE,MAAM,SAAS,GAAG,KAAgC,CAAC;IACnD,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAAE,OAAO,OAAO,EAAE,CAAC;IACxG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAY,CAAC;QAAE,OAAO,OAAO,EAAE,CAAC;IAChF,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,OAAO,SAAS,CAAC,OAAO,KAAK,QAAQ;QACvG,OAAO,OAAO,EAAE,CAAC;IACnB,IACE,SAAS,CAAC,SAAS,KAAK,SAAS;QACjC,CAAC,OAAO,SAAS,CAAC,MAAM,KAAK,QAAQ;YACnC,OAAO,SAAS,CAAC,GAAG,KAAK,QAAQ;YACjC,OAAO,SAAS,CAAC,YAAY,KAAK,QAAQ,CAAC;QAE7C,OAAO,OAAO,EAAE,CAAC;IACnB,IAAI,SAAS,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,SAAS,CAAC,SAAS,KAAK,QAAQ;QAAE,OAAO,OAAO,EAAE,CAAC;IAClG,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAAE,OAAO,OAAO,EAAE,CAAC;IAC9E,OAAO,SAA2B,CAAC;AACrC,CAAC,CAAC;AAEF,sGAAsG;AACtG,MAAM,eAAe,GAAyB,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;AAEhG,gGAAgG;AAChG,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAAE,eAAyC,EAAE,EAAoC,EAAE;IAC9G,mFAAmF;IACnF,MAAM,WAAW,GAAG,YAAY,CAAC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrG,IAAI,CAAC,WAAW;QAAE,OAAO,SAAS,CAAC;IAEnC,MAAM,aAAa,GAAG,oBAAoB,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;IACvE,MAAM,gBAAgB,GAAG,OAAO,CAAC,uBAAuB,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACzF,MAAM,kBAAkB,GACtB,YAAY,CAAC,cAAc,KAAK,SAAS;QACvC,CAAC,CAAC,CAAC,YAAY,CAAC,uBAAuB,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC;QACzG,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,eAAe,GAAG,yBAAyB,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC1E,MAAM,cAAc,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAEvE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,oBAAoB,CAAC;YAClC,aAAa;YACb,gBAAgB;YAChB,cAAc;YACd,eAAe;YACf,cAAc,EAAE,YAAY,CAAC,cAAc;SAC5C,CAAC,CAAC;QACH,wFAAwF;QACxF,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,QAAQ,IAAI,eAAe,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC/E,IAAI,QAAQ,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,oDAAoD,QAAQ,GAAG,CAAC,CAAC;QACrG,MAAM,SAAS,GAAG,mBAAmB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACzD,IAAI,SAAS,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAC9C,OAAO,mBAAmB,CAAC;YACzB,aAAa;YACb,gBAAgB;YAChB,SAAS;YACT,eAAe;YACf,kBAAkB;SACnB,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC,CAAC;AAEF,sGAAsG;AACtG,MAAM,kBAAkB,GAAyB,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;AAEnG,oGAAoG;AACpG,iGAAiG;AACjG,mGAAmG;AACnG,2EAA2E;AAC3E,MAAM,yBAAyB,GAAG,KAAK,EACrC,YAAsC,EACtC,MAAmB,EACnB,SAAoC,EACrB,EAAE;IACjB,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS;QAAE,OAAO;IAE9C,SAAS,CAAC,aAAa,MAAM,CAAC,YAAY,QAAQ,MAAM,CAAC,cAAc,GAAG,CAAC,CAAC;IAC5E,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAAC;QAC7C,aAAa,EAAE,oBAAoB,CAAC,YAAY,CAAC,aAAa,CAAC;QAC/D,gBAAgB,EAAE,OAAO,CAAC,uBAAuB,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;QACjF,OAAO,EAAE,MAAM,CAAC,cAAc;QAC9B,QAAQ,EAAE,YAAY,CAAC,WAAW,IAAI,kBAAkB;KACzD,CAAC,CAAC;IACH,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,QAAQ;QAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAC7D,kGAAkG;IAClG,IAAI,SAAS,CAAC,QAAQ,KAAK,CAAC;QAAE,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;AACtE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,eAAyC,EAAE,EAAiB,EAAE,CAAC,CAAC;IACjG,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,uDAAuD;IACpE,QAAQ,CAAC,OAAgB;QACvB,OAAO,CAAC,UAAU,CAChB,IAAI,OAAO,CAAC,OAAO,CAAC;aACjB,WAAW,CAAC,uDAAuD,CAAC;aACpE,QAAQ,CAAC,UAAU,EAAE,oCAAoC,CAAC;aAC1D,MAAM,CAAC,KAAK,EAAE,MAAe,EAAE,EAAE;YAChC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,EAAE,GAAG,YAAY,EAAE,cAAc,EAAE,MAAM,IAAI,YAAY,CAAC,cAAc,EAAE,CAAC,CAAC;YAC1G,gEAAgE;YAChE,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC;YACxD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,SAAS,CAAC,4FAA4F,CAAC,CAAC;gBACxG,OAAO;YACT,CAAC;YACD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ;gBAAE,SAAS,CAAC,OAAO,CAAC,CAAC;YAC1D,MAAM,yBAAyB,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QACnE,CAAC,CAAC,CACL,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { ValidationFinding } from '../../resolver/ResolverValidation.js';
2
+ import type { CommandObject } from './CommandObject.js';
3
+ export interface ValidateInput {
4
+ readonly homeDirectory: string;
5
+ readonly projectDirectory: string;
6
+ readonly strict?: boolean;
7
+ readonly json?: boolean;
8
+ }
9
+ export interface ValidateResult {
10
+ readonly findings: readonly ValidationFinding[];
11
+ readonly ok: boolean;
12
+ readonly messages: readonly string[];
13
+ }
14
+ export interface ValidateCommandDependencies {
15
+ readonly homeDirectory?: string;
16
+ readonly projectDirectory?: string;
17
+ readonly writeLine?: (message: string) => void;
18
+ }
19
+ export declare const executeValidateCommand: (input: ValidateInput) => ValidateResult;
20
+ export declare const createValidateCommand: (dependencies?: ValidateCommandDependencies) => CommandObject;
@@ -0,0 +1,54 @@
1
+ // Provides `outfitter validate [--strict] [--json]` over the effective resource set.
2
+ import { Command } from 'commander';
3
+ import { resolveEffectiveSet } from '../../resolver/ResolverContext.js';
4
+ import { validateEffectiveSet } from '../../resolver/ResolverValidation.js';
5
+ import { resolveHomeDirectory, resolveProjectDirectory } from './ProcessDefaults.js';
6
+ const settingsFindings = (messages) => messages.map((message) => ({ severity: 'error', resource: 'settings', message }));
7
+ export const executeValidateCommand = (input) => {
8
+ const { set, settingsIssues } = resolveEffectiveSet(input);
9
+ const findings = [
10
+ ...settingsFindings(settingsIssues.map((issue) => `${issue.filePath}#${issue.path} ${issue.message}`)),
11
+ ...validateEffectiveSet(set),
12
+ ];
13
+ const hasErrors = findings.some((finding) => finding.severity === 'error');
14
+ const hasWarnings = findings.some((finding) => finding.severity === 'warning');
15
+ const ok = !hasErrors && !(input.strict === true && hasWarnings);
16
+ const messages = input.json === true ? [JSON.stringify({ ok, findings }, null, 2)] : formatFindings(findings, ok);
17
+ return { findings, ok, messages };
18
+ };
19
+ const formatFindings = (findings, ok) => {
20
+ if (findings.length === 0) {
21
+ return ['✓ No issues found.'];
22
+ }
23
+ const lines = findings.map((finding) => `${finding.severity === 'error' ? '✗' : '⚠'} ${finding.resource}: ${finding.message}`);
24
+ return [...lines, ok ? '✓ Passed (warnings only).' : '✗ Validation failed.'];
25
+ };
26
+ export const createValidateCommand = (dependencies = {}) => ({
27
+ name: 'validate',
28
+ description: 'Validate the resolved .agents tree: schemas, loadout slugs, and shadowing.',
29
+ register(program) {
30
+ program.addCommand(new Command('validate')
31
+ .description('Validate the resolved .agents tree: schemas, loadout slugs, and shadowing.')
32
+ .option('--strict', 'Treat warnings (such as shadowed definitions) as failures.')
33
+ .option('--json', 'Emit findings as JSON.')
34
+ .action((options) => {
35
+ /* v8 ignore next 2 -- process defaults are exercised by the CLI entrypoint, not unit tests. */
36
+ const homeDirectory = resolveHomeDirectory(dependencies.homeDirectory);
37
+ const projectDirectory = resolveProjectDirectory(dependencies.projectDirectory);
38
+ const result = executeValidateCommand({
39
+ homeDirectory,
40
+ projectDirectory,
41
+ strict: options.strict,
42
+ json: options.json,
43
+ });
44
+ for (const message of result.messages) {
45
+ /* v8 ignore next -- console fallback is direct CLI behavior; tests inject a writer. */
46
+ (dependencies.writeLine ?? console.log)(message);
47
+ }
48
+ if (!result.ok) {
49
+ process.exitCode = 1;
50
+ }
51
+ }));
52
+ },
53
+ });
54
+ //# sourceMappingURL=ValidateCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValidateCommand.js","sourceRoot":"","sources":["../../../src/cli/commands/ValidateCommand.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { EffectiveResourceSet } from '../resolver/Resource.js';
2
+ import type { CompositionPlan } from './Composition.js';
3
+ export interface ComposeResult {
4
+ readonly plan?: CompositionPlan;
5
+ readonly errors: readonly string[];
6
+ }
7
+ /**
8
+ * Composes the selected agent into a CompositionPlan. Returns an error when the agent slug does not
9
+ * resolve or its definition is invalid; loadout slugs that do not resolve are non-fatal warnings.
10
+ */
11
+ export declare const compose: (set: EffectiveResourceSet, agentSlug: string) => ComposeResult;