@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,115 +0,0 @@
1
- // Provides the profile create subcommand and profile skeleton creation behavior.
2
- import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
3
- import { homedir } from 'node:os';
4
- import { join } from 'node:path';
5
- import { Command } from 'commander';
6
- import { isValidProfileId } from '../../../profiles/ProfileLoader.js';
7
- import { getOrCreateProfileCommander } from './Shared.js';
8
- export const createProfileCreateCommand = (dependencies) => {
9
- const command = {
10
- name: 'profile create',
11
- description: 'Create a new Outfitter profile skeleton.',
12
- register(program) {
13
- getOrCreateProfileCommander(program).addCommand(createProfileCreateCommander(dependencies));
14
- },
15
- };
16
- return command;
17
- };
18
- const createProfileCreateCommander = (dependencies) => new Command('create')
19
- .description('Create a new Outfitter profile skeleton.')
20
- .argument('<name>', 'filesystem-safe profile name')
21
- .option('--scope <scope>', 'destination scope: user, project, or project-local')
22
- .option('--path <path>', 'destination profile source directory')
23
- .action((name, options) => {
24
- const result = executeCreateProfileCommand({
25
- name,
26
- scope: readCreateProfileScope(options.scope),
27
- path: options.path,
28
- /* v8 ignore next -- default process home is exercised by the direct CLI entrypoint, not unit tests. */
29
- homeDirectory: dependencies.homeDirectory ?? homedir(),
30
- /* v8 ignore next -- default process cwd is exercised by the direct CLI entrypoint, not unit tests. */
31
- projectDirectory: dependencies.projectDirectory ?? process.cwd(),
32
- });
33
- emitMessages(result.messages, dependencies.writeLine);
34
- });
35
- export const executeCreateProfileCommand = (input) => {
36
- assertValidCreateProfileInput(input);
37
- const profileRoot = resolveProfileRoot(input);
38
- const profileDirectory = join(profileRoot, input.name);
39
- const profilePath = join(profileDirectory, 'profile.yml');
40
- const resourceDirectories = [
41
- 'prompts',
42
- 'skills',
43
- 'extensions',
44
- join('cli_specific', 'pi'),
45
- join('cli_specific', 'claude'),
46
- ].map((resourcePath) => join(profileDirectory, resourcePath));
47
- const createdDirectories = [];
48
- if (!existsSync(profileDirectory)) {
49
- mkdirSync(profileDirectory, { recursive: true });
50
- createdDirectories.push(profileDirectory);
51
- }
52
- for (const resourceDirectory of resourceDirectories) {
53
- if (!existsSync(resourceDirectory)) {
54
- mkdirSync(resourceDirectory, { recursive: true });
55
- createdDirectories.push(resourceDirectory);
56
- }
57
- }
58
- const createdProfile = !existsSync(profilePath);
59
- if (createdProfile) {
60
- writeFileSync(profilePath, createPlaceholderProfileYaml(input.name));
61
- }
62
- return {
63
- profileDirectory,
64
- profilePath,
65
- createdDirectories,
66
- createdProfile,
67
- messages: [
68
- createdProfile
69
- ? `Created profile '${input.name}' at ${profileDirectory}.`
70
- : `Profile '${input.name}' already exists at ${profileDirectory}; left profile.yml unchanged.`,
71
- ],
72
- };
73
- };
74
- const emitMessages = (messages, writeLine) => {
75
- for (const message of messages) {
76
- /* v8 ignore next -- console fallback is direct CLI behavior; tests inject a writer. */
77
- (writeLine ?? console.log)(message);
78
- }
79
- };
80
- const assertValidCreateProfileInput = (input) => {
81
- if (!isValidProfileId(input.name)) {
82
- throw new Error(`Profile name '${input.name}' is not a filesystem-safe Outfitter profile id.`);
83
- }
84
- if ((input.scope === undefined && input.path === undefined) ||
85
- (input.scope !== undefined && input.path !== undefined)) {
86
- throw new Error('Create profile requires exactly one destination: --scope or --path.');
87
- }
88
- };
89
- const resolveProfileRoot = (input) => {
90
- if (input.path !== undefined) {
91
- return input.path;
92
- }
93
- switch (input.scope) {
94
- case 'user':
95
- return join(input.homeDirectory, '.outfitter', 'profiles');
96
- case 'project':
97
- return join(input.projectDirectory, '.outfitter', 'profiles');
98
- case 'project-local':
99
- return join(input.projectDirectory, '.outfitter', 'local', 'profiles');
100
- /* v8 ignore next 2 -- assertValidCreateProfileInput rejects missing scopes before this exhaustive guard. */
101
- default:
102
- throw new Error('Create profile requires exactly one destination: --scope or --path.');
103
- }
104
- };
105
- const createPlaceholderProfileYaml = (profileId) => `id: ${profileId}\nlabel: ${profileId}\ncontrols: {}\n`;
106
- const readCreateProfileScope = (scope) => {
107
- if (scope === undefined) {
108
- return undefined;
109
- }
110
- if (scope === 'user' || scope === 'project' || scope === 'project-local') {
111
- return scope;
112
- }
113
- throw new Error(`Unknown profile scope '${scope}'. Expected user, project, or project-local.`);
114
- };
115
- //# sourceMappingURL=CreateCommand.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CreateCommand.js","sourceRoot":"","sources":["../../../../src/cli/commands/profile/CreateCommand.ts"],"names":[],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- import type { CommandObject } from '../CommandObject.js';
2
- import type { ProfileCommandDependencies } from './Shared.js';
3
- export interface ProfileLintCommandInput {
4
- readonly homeDirectory: string;
5
- readonly projectDirectory: string;
6
- readonly strict?: boolean;
7
- readonly json?: boolean;
8
- }
9
- export interface ProfileLintDiagnostic {
10
- readonly severity: 'error' | 'warning';
11
- readonly path: string;
12
- readonly message: string;
13
- }
14
- export interface ProfileLintCommandResult {
15
- readonly diagnostics: readonly ProfileLintDiagnostic[];
16
- readonly exitCode: number;
17
- }
18
- export declare const executeProfileLintCommand: (input: ProfileLintCommandInput) => ProfileLintCommandResult;
19
- export declare const createProfileLintCommand: (dependencies?: ProfileCommandDependencies) => CommandObject;
@@ -1,155 +0,0 @@
1
- // Implements `outfitter profile lint` diagnostics for profile resolution and prompt includes.
2
- import { homedir } from 'node:os';
3
- import { createAgentAdapter } from '../../../agents/AgentRegistry.js';
4
- import { createCompositeProfileRootDirectory } from '../../../compositeProfile/CompositeProfileAssembler.js';
5
- import { createPromptIncludeDiagnostics } from '../../../profiles/PromptIncludes.js';
6
- import { resolveProfile } from '../../../profiles/ProfileMerger.js';
7
- import { loadSettingsWithCachedRemoteSettings } from '../../../settings/SettingsLoader.js';
8
- import { resolveProfileSkillControls } from '../../../skills/ProfileSkillResolution.js';
9
- import { materializeProfileSourcePaths } from '../run/RunProfileResolution.js';
10
- import { createLaunchProfileLayers, loadProfileSources } from '../RunCommand.js';
11
- import { getOrCreateProfileCommander } from './Shared.js';
12
- export const executeProfileLintCommand = (input) => {
13
- const diagnostics = collectProfileLintDiagnostics(input);
14
- const hasErrors = diagnostics.some((diagnostic) => diagnostic.severity === 'error');
15
- const hasWarnings = diagnostics.some((diagnostic) => diagnostic.severity === 'warning');
16
- const exitCode = hasErrors || (input.strict === true && hasWarnings) ? 1 : 0;
17
- return { diagnostics, exitCode };
18
- };
19
- export const createProfileLintCommand = (dependencies = {}) => ({
20
- name: 'profile lint',
21
- description: 'Validate profiles, inheritance, and typed prompt includes.',
22
- register(program) {
23
- getOrCreateProfileCommander(program)
24
- .command('lint')
25
- .description('Validate profiles, inheritance, and typed prompt includes.')
26
- .option('--strict', 'Exit non-zero when warnings are present')
27
- .option('--json', 'Print diagnostics as JSON')
28
- .action((options) => {
29
- const result = executeProfileLintCommand({
30
- homeDirectory:
31
- /* v8 ignore next -- CLI defaults are exercised manually; tests inject stable temp roots. */
32
- dependencies.homeDirectory ?? homedir(),
33
- projectDirectory:
34
- /* v8 ignore next -- CLI defaults are exercised manually; tests inject stable temp roots. */
35
- dependencies.projectDirectory ?? process.cwd(),
36
- strict: options.strict,
37
- json: options.json,
38
- });
39
- writeLintResult(result, options.json === true,
40
- /* v8 ignore next -- CLI default writer is console.log; tests inject a collector. */
41
- dependencies.writeLine ?? console.log);
42
- process.exitCode = result.exitCode;
43
- });
44
- },
45
- });
46
- const collectProfileLintDiagnostics = (input) => {
47
- const settings = loadSettingsWithCachedRemoteSettings(input);
48
- const settingsDiagnostics = settings.issues.map((issue) => ({
49
- severity: 'error',
50
- path: `${issue.filePath}#${issue.path}`,
51
- message: issue.message,
52
- }));
53
- if (settingsDiagnostics.length > 0) {
54
- return settingsDiagnostics;
55
- }
56
- const loadedProfiles = loadProfileSources(input.homeDirectory, settings.settings.profileSources);
57
- const loadDiagnostics = loadedProfiles.issues.map((issue) => ({
58
- severity: 'error',
59
- path: issue.path,
60
- message: issue.message,
61
- }));
62
- const inheritanceDiagnostics = lintProfileInheritance(loadedProfiles.profiles);
63
- const promptDiagnostics = createPromptIncludeDiagnostics(loadedProfiles.profiles, input.projectDirectory).map((diagnostic) => ({
64
- severity: diagnostic.severity,
65
- path: diagnostic.path,
66
- message: diagnostic.message,
67
- }));
68
- const adapterDiagnostics = lintAdapterWarnings(loadedProfiles.profiles, input.projectDirectory);
69
- const skillDiagnostics = lintProfileSkills(loadedProfiles.profiles, input);
70
- return [
71
- ...loadDiagnostics,
72
- ...inheritanceDiagnostics,
73
- ...promptDiagnostics,
74
- ...adapterDiagnostics,
75
- ...skillDiagnostics,
76
- ];
77
- };
78
- // Diagnoses unresolved skill IDs, invalid SKILL.md frontmatter, missing `file`
79
- // references, escaping paths, and destination collisions without materializing.
80
- const lintProfileSkills = (profiles, input) => {
81
- const settings = loadSettingsWithCachedRemoteSettings(input);
82
- const sourcePaths = materializeProfileSourcePaths(input.homeDirectory, settings.settings.profileSources ?? []);
83
- return [...new Set(profiles.map((profile) => profile.profile.id))].flatMap((profileId) => {
84
- const resolution = resolveProfile({ profiles, profileId });
85
- if (resolution.profile === undefined || resolution.issues.length > 0) {
86
- return [];
87
- }
88
- const stackProfiles = profiles.filter((profile) => resolution.profileStack.some((stackProfile) => stackProfile.id === profile.profile.id));
89
- return resolveProfileSkillControls({
90
- profile: resolution.profile,
91
- profileLayers: stackProfiles,
92
- sourcePaths,
93
- projectDirectory: input.projectDirectory,
94
- }).diagnostics.map((diagnostic) => ({
95
- severity: diagnostic.severity,
96
- path: `/profiles/${profileId}: ${diagnostic.path}`,
97
- message: diagnostic.message,
98
- }));
99
- });
100
- };
101
- const lintProfileInheritance = (profiles) => [...new Set(profiles.map((profile) => profile.profile.id))].flatMap((profileId) => resolveProfile({ profiles, profileId }).issues.map((issue) => ({
102
- severity: 'error',
103
- path: issue.path,
104
- message: issue.message,
105
- })));
106
- const lintAdapterWarnings = (profiles, projectDirectory) => {
107
- const pi = createAgentAdapter('pi');
108
- return [...new Set(profiles.map((profile) => profile.profile.id))].flatMap((profileId) => {
109
- const resolution = resolveProfile({ profiles, profileId });
110
- if (resolution.profile === undefined || resolution.issues.length > 0) {
111
- return [];
112
- }
113
- const stackProfiles = profiles.filter((profile) => resolution.profileStack.some((stackProfile) => stackProfile.id === profile.profile.id));
114
- return pi
115
- .createCompositeProfile(omitPromptIncludes(resolution.profile), {
116
- rootDirectory: createCompositeProfileRootDirectory(resolution.profile.id, pi.id),
117
- profilePaths: profiles.map((profile) => profile.profilePath),
118
- profileFolders: profiles.flatMap((profile) => profile.resourceRootPath === undefined ? [] : [profile.resourceRootPath]),
119
- profileLayers: createLaunchProfileLayers(stackProfiles).map(omitPromptIncludesFromLayer),
120
- projectDirectory,
121
- })
122
- .warnings.map((message) => ({ severity: 'warning', path: `/profiles/${profileId}`, message }));
123
- });
124
- };
125
- const omitPromptIncludesFromLayer = (layer) => ({
126
- ...layer,
127
- profile: omitPromptIncludes(layer.profile),
128
- });
129
- const omitPromptIncludes = (profile) => ({
130
- ...profile,
131
- controls: omitPromptIncludesFromControls(profile.controls),
132
- });
133
- const omitPromptIncludesFromControls = (controls) => {
134
- const { appendSystemPrompt, pi, claude, ...rest } = controls;
135
- void appendSystemPrompt;
136
- return {
137
- ...rest,
138
- ...(pi === undefined ? {} : { pi: omitPromptIncludesFromControls(pi) }),
139
- ...(claude === undefined ? {} : { claude: omitPromptIncludesFromControls(claude) }),
140
- };
141
- };
142
- const writeLintResult = (result, json, writeLine) => {
143
- if (json) {
144
- writeLine(JSON.stringify(result.diagnostics, null, 2));
145
- return;
146
- }
147
- if (result.diagnostics.length === 0) {
148
- writeLine('No profile lint diagnostics.');
149
- return;
150
- }
151
- for (const diagnostic of result.diagnostics) {
152
- writeLine(`${diagnostic.severity}: ${diagnostic.path} ${diagnostic.message}`);
153
- }
154
- };
155
- //# sourceMappingURL=LintCommand.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LintCommand.js","sourceRoot":"","sources":["../../../../src/cli/commands/profile/LintCommand.ts"],"names":[],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- import type { CommandObject } from '../CommandObject.js';
2
- import type { ProfileCommandDependencies } from './Shared.js';
3
- export interface ListedProfile {
4
- readonly id: string;
5
- readonly label?: string;
6
- readonly profilePath: string;
7
- readonly template: boolean;
8
- }
9
- export interface ListProfilesInput {
10
- readonly homeDirectory: string;
11
- readonly projectDirectory: string;
12
- readonly includeTemplates?: boolean;
13
- }
14
- export interface ListProfilesResult {
15
- readonly profiles: readonly ListedProfile[];
16
- readonly messages: readonly string[];
17
- }
18
- export declare const createProfileListCommand: (dependencies: ProfileCommandDependencies) => CommandObject;
19
- export declare const executeListProfilesCommand: (input: ListProfilesInput) => ListProfilesResult;
@@ -1,91 +0,0 @@
1
- // Provides the profile list subcommand and profile discovery behavior.
2
- import { homedir } from 'node:os';
3
- import { Command } from 'commander';
4
- import { createProfileSourceCachePath, createRemoteRepositoryCachePath, resolveRemoteRepositorySubpath, } from '../../../profiles/ProfileCache.js';
5
- import { loadLocalProfileSource } from '../../../profiles/ProfileLoader.js';
6
- import { loadSettingsWithCachedRemoteSettings } from '../../../settings/SettingsLoader.js';
7
- import { getOrCreateProfileCommander } from './Shared.js';
8
- export const createProfileListCommand = (dependencies) => {
9
- const command = {
10
- name: 'profile list',
11
- description: 'List available Outfitter profiles.',
12
- register(program) {
13
- getOrCreateProfileCommander(program).addCommand(createProfileListCommander(dependencies));
14
- },
15
- };
16
- return command;
17
- };
18
- const createProfileListCommander = (dependencies) => new Command('list')
19
- .description('List available Outfitter profiles.')
20
- .option('--all', 'Include template profiles that are intended only for inheritance.')
21
- .action((options) => {
22
- const result = executeListProfilesCommand({
23
- /* v8 ignore next -- default process home is exercised by the direct CLI entrypoint, not unit tests. */
24
- homeDirectory: dependencies.homeDirectory ?? homedir(),
25
- /* v8 ignore next -- default process cwd is exercised by the direct CLI entrypoint, not unit tests. */
26
- projectDirectory: dependencies.projectDirectory ?? process.cwd(),
27
- includeTemplates: options.all,
28
- });
29
- emitMessages(result.messages, dependencies.writeLine);
30
- });
31
- export const executeListProfilesCommand = (input) => {
32
- const loadedSettings = loadSettingsWithCachedRemoteSettings(input);
33
- if (loadedSettings.issues.length > 0) {
34
- throw new Error(`Cannot list profiles with invalid settings: ${loadedSettings.issues.map(formatSettingsIssue).join('; ')}`);
35
- }
36
- const profileLoadResult = loadProfileSources(input.homeDirectory, loadedSettings.settings.profileSources);
37
- if (profileLoadResult.issues.length > 0) {
38
- throw new Error(`Cannot list profiles with invalid profiles: ${profileLoadResult.issues.map(formatProfileIssue).join('; ')}`);
39
- }
40
- const profiles = listHighestPrecedenceProfiles(profileLoadResult.profiles).filter((profile) => input.includeTemplates === true || !profile.template);
41
- return {
42
- profiles,
43
- messages: profiles.length === 0 ? ['No profiles found.'] : profiles.map(formatListedProfile),
44
- };
45
- };
46
- const emitMessages = (messages, writeLine) => {
47
- for (const message of messages) {
48
- /* v8 ignore next -- console fallback is direct CLI behavior; tests inject a writer. */
49
- (writeLine ?? console.log)(message);
50
- }
51
- };
52
- const loadProfileSources = (homeDirectory, sources) => {
53
- const profiles = [];
54
- const issues = [];
55
- for (const source of sources) {
56
- const materializedSource = materializeSource(homeDirectory, source);
57
- const result = loadLocalProfileSource(materializedSource);
58
- profiles.push(...result.profiles.map((profile) => ({ ...profile, source })));
59
- issues.push(...result.issues);
60
- }
61
- return { profiles, issues };
62
- };
63
- const materializeSource = (homeDirectory, source) => {
64
- if (source.uri === undefined && source.github === undefined) {
65
- return source;
66
- }
67
- if (source.uri !== undefined && source.ref === undefined && source.path === undefined) {
68
- return { path: createProfileSourceCachePath(homeDirectory, source.uri), only: source.only, except: source.except };
69
- }
70
- return {
71
- path: resolveRemoteRepositorySubpath(createRemoteRepositoryCachePath(homeDirectory, source), source.path),
72
- only: source.only,
73
- except: source.except,
74
- };
75
- };
76
- const listHighestPrecedenceProfiles = (loadedProfiles) => {
77
- const profilesById = new Map();
78
- for (const loadedProfile of loadedProfiles) {
79
- profilesById.set(loadedProfile.profile.id, {
80
- id: loadedProfile.profile.id,
81
- label: loadedProfile.profile.label,
82
- profilePath: loadedProfile.profilePath,
83
- template: loadedProfile.profile.template === true,
84
- });
85
- }
86
- return [...profilesById.values()].sort((left, right) => left.id.localeCompare(right.id));
87
- };
88
- const formatListedProfile = (profile) => profile.template ? `${profile.id} (template)` : profile.id;
89
- const formatSettingsIssue = (issue) => `${issue.filePath}#${issue.path} ${issue.message}`;
90
- const formatProfileIssue = (issue) => `${issue.path} ${issue.message}`;
91
- //# sourceMappingURL=ListCommand.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ListCommand.js","sourceRoot":"","sources":["../../../../src/cli/commands/profile/ListCommand.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const profileCommandName = "profile";
3
- export declare const profileCommandDescription = "List and manage Outfitter profiles.";
4
- export interface ProfileCommandDependencies {
5
- readonly homeDirectory?: string;
6
- readonly projectDirectory?: string;
7
- readonly writeLine?: (message: string) => void;
8
- }
9
- export declare const getOrCreateProfileCommander: (program: Command) => Command;
@@ -1,10 +0,0 @@
1
- export const profileCommandName = 'profile';
2
- export const profileCommandDescription = 'List and manage Outfitter profiles.';
3
- export const getOrCreateProfileCommander = (program) => {
4
- const existingProfileCommand = program.commands.find((command) => command.name() === profileCommandName);
5
- if (existingProfileCommand !== undefined) {
6
- return existingProfileCommand;
7
- }
8
- return program.command(profileCommandName).description(profileCommandDescription);
9
- };
10
- //# sourceMappingURL=Shared.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Shared.js","sourceRoot":"","sources":["../../../../src/cli/commands/profile/Shared.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAAC;AAC5C,MAAM,CAAC,MAAM,yBAAyB,GAAG,qCAAqC,CAAC;AAQ/E,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,OAAgB,EAAW,EAAE;IACvE,MAAM,sBAAsB,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,kBAAkB,CAAC,CAAC;IAEzG,IAAI,sBAAsB,KAAK,SAAS,EAAE,CAAC;QACzC,OAAO,sBAAsB,CAAC;IAChC,CAAC;IAED,OAAO,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC;AACpF,CAAC,CAAC"}
@@ -1,7 +0,0 @@
1
- import type { RunCommandDependencies, RunCommandInput } from '../RunCommand.js';
2
- export interface FirstRunRuntimeOnboarding {
3
- readonly defaultProfilesPath: string;
4
- }
5
- export declare const prepareFirstRunRuntimeOnboarding: (input: RunCommandInput, dependencies: RunCommandDependencies) => FirstRunRuntimeOnboarding | undefined;
6
- export declare const resolveRunProgressWriter: (dependencies: RunCommandDependencies) => ((message: string) => void);
7
- export declare const isInteractiveRunLaunch: (dependencies: RunCommandDependencies) => boolean;
@@ -1,52 +0,0 @@
1
- // Decides whether a run should enter Pi-native first-run onboarding and prepares its inputs.
2
- import { existsSync } from 'node:fs';
3
- import { join } from 'node:path';
4
- import { isNonInteractivePiLaunch } from '../PiLoginLaunch.js';
5
- import { createGitSynchronizer, syncProfileSource } from '../SyncCommand.js';
6
- import { selectRunAgentId } from './RunProfileResolution.js';
7
- const defaultProfilesSource = {
8
- github: 'ai-outfitter/default-profiles',
9
- path: 'profiles',
10
- };
11
- export const prepareFirstRunRuntimeOnboarding = (input, dependencies) => {
12
- if (!shouldUsePiNativeFirstRunOnboarding(input, dependencies)) {
13
- return undefined;
14
- }
15
- const syncResult = syncProfileSource(input.homeDirectory, defaultProfilesSource, dependencies.synchronizer ?? createGitSynchronizer(resolveRunProgressWriter(dependencies)));
16
- /* v8 ignore next -- network/cache failure path is integration-level behavior; setup fallback message is deterministic. */
17
- if (syncResult.status === 'failed') {
18
- throw new Error(`Cannot start Pi-native onboarding because the default profiles source failed to sync: ${syncResult.message}. ` +
19
- 'Fix the network/git issue or run `outfitter setup` once the source is reachable.');
20
- }
21
- return { defaultProfilesPath: join(syncResult.cachePath, defaultProfilesSource.path) };
22
- };
23
- const shouldUsePiNativeFirstRunOnboarding = (input, dependencies) => {
24
- if (input.forceRuntimeOnboarding !== true && existsSync(join(input.homeDirectory, '.outfitter', 'settings.yml'))) {
25
- return false;
26
- }
27
- const selectedAgentId = dependencies.adapter?.id ?? selectRunAgentId(input.agentId, undefined);
28
- /* v8 ignore next -- explicit profile/non-pi paths are covered by normal run command selection tests. */
29
- if (input.profileId !== undefined || selectedAgentId !== 'pi') {
30
- return false;
31
- }
32
- if (isNonInteractivePiLaunch(input.passThroughArgs ?? [])) {
33
- return false;
34
- }
35
- return isInteractiveRunLaunch(dependencies);
36
- };
37
- // Network/build steps (catalog clones, extension caching) report per-source progress through this
38
- // writer so first boot never stalls silently before launch.
39
- export const resolveRunProgressWriter = (dependencies) =>
40
- /* v8 ignore next -- console fallback is direct CLI behavior; tests inject writeLine. */
41
- dependencies.writeLine ?? console.log;
42
- export const isInteractiveRunLaunch = (dependencies) => {
43
- if (dependencies.interactive !== undefined) {
44
- return dependencies.interactive;
45
- }
46
- /* v8 ignore next -- default process streams are direct terminal behavior; tests inject streams. */
47
- const inputIsTty = (dependencies.input ?? process.stdin).isTTY === true;
48
- /* v8 ignore next -- default process streams are direct terminal behavior; tests inject streams. */
49
- const outputIsTty = (dependencies.output ?? process.stdout).isTTY === true;
50
- return inputIsTty && outputIsTty;
51
- };
52
- //# sourceMappingURL=RunFirstRunOnboarding.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RunFirstRunOnboarding.js","sourceRoot":"","sources":["../../../../src/cli/commands/run/RunFirstRunOnboarding.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAA4B,MAAM,mBAAmB,CAAC;AACvG,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAM7D,MAAM,qBAAqB,GAAG;IAC5B,MAAM,EAAE,+BAA+B;IACvC,IAAI,EAAE,UAAU;CACsB,CAAC;AAEzC,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAC9C,KAAsB,EACtB,YAAoC,EACG,EAAE;IACzC,IAAI,CAAC,mCAAmC,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,CAAC;QAC9D,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,UAAU,GAAG,iBAAiB,CAClC,KAAK,CAAC,aAAa,EACnB,qBAAqB,EACrB,YAAY,CAAC,YAAY,IAAI,qBAAqB,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAC,CAC3F,CAAC;IAEF,0HAA0H;IAC1H,IAAI,UAAU,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CACb,yFAAyF,UAAU,CAAC,OAAO,IAAI;YAC7G,kFAAkF,CACrF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,mBAAmB,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;AACzF,CAAC,CAAC;AAEF,MAAM,mCAAmC,GAAG,CAAC,KAAsB,EAAE,YAAoC,EAAW,EAAE;IACpH,IAAI,KAAK,CAAC,sBAAsB,KAAK,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;QACjH,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,eAAe,GAAG,YAAY,CAAC,OAAO,EAAE,EAAE,IAAI,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAE/F,wGAAwG;IACxG,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;QAC9D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,wBAAwB,CAAC,KAAK,CAAC,eAAe,IAAI,EAAE,CAAC,EAAE,CAAC;QAC1D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,sBAAsB,CAAC,YAAY,CAAC,CAAC;AAC9C,CAAC,CAAC;AAEF,kGAAkG;AAClG,4DAA4D;AAC5D,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,YAAoC,EAA+B,EAAE;AAC5G,wFAAwF;AACxF,YAAY,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC;AAExC,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,YAAoC,EAAW,EAAE;IACtF,IAAI,YAAY,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QAC3C,OAAO,YAAY,CAAC,WAAW,CAAC;IAClC,CAAC;IAED,mGAAmG;IACnG,MAAM,UAAU,GAAG,CAAC,YAAY,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC;IACxE,mGAAmG;IACnG,MAAM,WAAW,GAAG,CAAC,YAAY,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC;IAE3E,OAAO,UAAU,IAAI,WAAW,CAAC;AACnC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- import type { ResolvedRunProfile } from './RunProfileResolution.js';
2
- export declare const emitLaunchSummary: (resolvedProfile: ResolvedRunProfile, adapterId: string, compositeProfileRootDirectory: string, writeLine: ((message: string) => void) | undefined) => void;
@@ -1,35 +0,0 @@
1
- // Renders the human-readable launch summary lines printed before an agent starts.
2
- import chalk from 'chalk';
3
- import { redactProfileSourceUriCredentials } from '../../../profiles/ProfileCache.js';
4
- export const emitLaunchSummary = (resolvedProfile, adapterId, compositeProfileRootDirectory, writeLine) => {
5
- const writer = writeLine ?? console.log;
6
- const model = selectSummaryModel(resolvedProfile.profile, adapterId);
7
- writer(`${chalk.magenta('→')} resolving profile ${chalk.yellow(resolvedProfile.profile.id)}`);
8
- for (const layer of resolvedProfile.profileLayers) {
9
- writer(`${chalk.green('✓')} profile layer ${chalk.yellow(layer.profile.id)} ${chalk.dim(formatProfileLayerSource(layer))}`);
10
- }
11
- writer(`${chalk.green('✓')} merged controls${model === undefined ? '' : ` model=${chalk.yellow(model)}`}`);
12
- writer(`${chalk.green('✓')} prepared composite profile ${chalk.dim(compositeProfileRootDirectory)}`);
13
- writer(`${chalk.blue('↳')} launching ${chalk.cyan(adapterId)} …`);
14
- };
15
- const selectSummaryModel = (profile, adapterId) => {
16
- if (adapterId === 'claude') {
17
- return profile.controls.claude?.model ?? profile.controls.model;
18
- }
19
- return profile.controls.pi?.model ?? profile.controls.model;
20
- };
21
- const formatProfileLayerSource = (layer) => {
22
- if (layer.source.github !== undefined) {
23
- return formatRemoteProfileSource(`github:${layer.source.github}`, layer.source.ref, layer.source.path);
24
- }
25
- if (layer.source.uri !== undefined) {
26
- return formatRemoteProfileSource(redactProfileSourceUriCredentials(layer.source.uri), layer.source.ref, layer.source.path);
27
- }
28
- return layer.folderPath;
29
- };
30
- const formatRemoteProfileSource = (source, ref, path) => {
31
- const refSuffix = ref === undefined ? '' : `@${ref}`;
32
- const pathSuffix = path === undefined ? '' : `/${path}`;
33
- return `${source}${refSuffix}${pathSuffix}`;
34
- };
35
- //# sourceMappingURL=RunLaunchSummary.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RunLaunchSummary.js","sourceRoot":"","sources":["../../../../src/cli/commands/run/RunLaunchSummary.ts"],"names":[],"mappings":"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"}
@@ -1,39 +0,0 @@
1
- import { type Profile } from '../../../profiles/Profile.js';
2
- import type { LoadedProfile } from '../../../profiles/ProfileLoader.js';
3
- import type { ProfileSourceReference } from '../../../profiles/ProfileSource.js';
4
- import { type Settings } from '../../../settings/Settings.js';
5
- export interface ResolvedRunProfile {
6
- readonly profile: Profile;
7
- readonly profilePaths: readonly string[];
8
- readonly profileFolders: readonly string[];
9
- readonly homeDirectory: string;
10
- readonly cacheDirectory: string;
11
- readonly projectDirectory: string;
12
- readonly settings: Settings;
13
- readonly settingsPaths: readonly string[];
14
- readonly profileLayers: readonly LoadedProfile[];
15
- }
16
- export interface RunProfileResolutionInput {
17
- readonly homeDirectory: string;
18
- readonly projectDirectory: string;
19
- readonly profileId?: string;
20
- }
21
- export declare const createFirstRunBootstrapProfile: (input: RunProfileResolutionInput) => ResolvedRunProfile;
22
- export declare const loadResolvedProfile: (input: RunProfileResolutionInput) => ResolvedRunProfile;
23
- export declare const selectRunAgentId: (selectedAgentId: string | undefined, defaultAgentId: string | undefined) => string;
24
- export declare const createLaunchProfileLayers: (loadedProfiles: readonly LoadedProfile[]) => {
25
- profile: Profile;
26
- profilePath: string;
27
- sourceRootPath: string | undefined;
28
- resourceRootPath: string | undefined;
29
- layout: import("../../../profiles/ProfileLoader.js").ProfileLayout | undefined;
30
- }[];
31
- export declare const loadProfileSources: (homeDirectory: string, sources: readonly ProfileSourceReference[]) => {
32
- readonly profiles: readonly LoadedProfile[];
33
- readonly issues: readonly {
34
- readonly path: string;
35
- readonly message: string;
36
- }[];
37
- };
38
- /** Materialized on-disk paths for configured sources, in configured (precedence) order. */
39
- export declare const materializeProfileSourcePaths: (homeDirectory: string, sources: readonly ProfileSourceReference[]) => readonly string[];