@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
@@ -3,40 +3,42 @@
3
3
  import { mergeObjectsWithPolicy } from '../merge/SettingsValueMerger.js';
4
4
  import { emptySettings } from './Settings.js';
5
5
  export const mergeSettingsStack = (settingsStack) => {
6
- let defaultProfile;
7
6
  let defaultAgent;
8
- let profileSources;
7
+ let defaultHarness;
8
+ let sources;
9
9
  let remoteSettings;
10
10
  let cacheDirectory;
11
+ let statePersistence;
11
12
  let customSettings;
12
- let profileExport;
13
13
  let startup;
14
14
  let enterprise;
15
15
  for (const settings of settingsStack) {
16
- defaultProfile = settings.defaultProfile ?? defaultProfile;
17
16
  defaultAgent = settings.defaultAgent ?? defaultAgent;
18
- profileSources = settings.profileSources ?? profileSources;
17
+ defaultHarness = settings.defaultHarness ?? defaultHarness;
18
+ sources = settings.sources ?? sources;
19
19
  remoteSettings = settings.remoteSettings ?? remoteSettings;
20
20
  cacheDirectory = settings.cacheDirectory ?? cacheDirectory;
21
+ statePersistence =
22
+ settings.statePersistence === undefined
23
+ ? statePersistence
24
+ : { ...statePersistence, ...settings.statePersistence };
21
25
  customSettings = mergeOptionalCustomSettings(customSettings, settings.customSettings);
22
- profileExport = mergeOptionalBoolean(profileExport, settings.profileExport);
23
26
  startup = settings.startup === undefined ? startup : { ...startup, ...settings.startup };
24
27
  enterprise = settings.enterprise === undefined ? enterprise : { ...enterprise, ...settings.enterprise };
25
28
  }
26
29
  return {
27
30
  ...emptySettings(),
28
- defaultProfile,
29
31
  defaultAgent,
30
- profileSources: profileSources ?? [],
32
+ defaultHarness,
33
+ sources: sources ?? [],
31
34
  remoteSettings: remoteSettings ?? [],
32
35
  cacheDirectory,
36
+ statePersistence: statePersistence ?? {},
33
37
  customSettings: customSettings ?? {},
34
- profileExport,
35
38
  startup: startup ?? {},
36
39
  enterprise: enterprise ?? {},
37
40
  };
38
41
  };
39
- const mergeOptionalBoolean = (lowerPrecedence, higherPrecedence) => higherPrecedence ?? lowerPrecedence;
40
42
  const mergeOptionalCustomSettings = (lowerPrecedence, higherPrecedence) => higherPrecedence === undefined ? lowerPrecedence : mergeCustomSettings(lowerPrecedence, higherPrecedence);
41
43
  const mergeCustomSettings = (lowerPrecedence, higherPrecedence) => mergeObjectsWithPolicy(lowerPrecedence, higherPrecedence);
42
44
  //# sourceMappingURL=SettingsMerger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsMerger.js","sourceRoot":"","sources":["../../src/settings/SettingsMerger.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,qDAAqD;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAEzE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,aAAkC,EAAY,EAAE;IACjF,IAAI,cAAkC,CAAC;IACvC,IAAI,YAAgC,CAAC;IACrC,IAAI,cAA0C,CAAC;IAC/C,IAAI,cAA0C,CAAC;IAC/C,IAAI,cAAkC,CAAC;IACvC,IAAI,cAA0C,CAAC;IAC/C,IAAI,aAAkC,CAAC;IACvC,IAAI,OAA4B,CAAC;IACjC,IAAI,UAAkC,CAAC;IAEvC,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE,CAAC;QACrC,cAAc,GAAG,QAAQ,CAAC,cAAc,IAAI,cAAc,CAAC;QAC3D,YAAY,GAAG,QAAQ,CAAC,YAAY,IAAI,YAAY,CAAC;QAErD,cAAc,GAAG,QAAQ,CAAC,cAAc,IAAI,cAAc,CAAC;QAC3D,cAAc,GAAG,QAAQ,CAAC,cAAc,IAAI,cAAc,CAAC;QAC3D,cAAc,GAAG,QAAQ,CAAC,cAAc,IAAI,cAAc,CAAC;QAC3D,cAAc,GAAG,2BAA2B,CAAC,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;QACtF,aAAa,GAAG,oBAAoB,CAAC,aAAa,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC5E,OAAO,GAAG,QAAQ,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;QACzF,UAAU,GAAG,QAAQ,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,UAAU,EAAE,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC;IAC1G,CAAC;IAED,OAAO;QACL,GAAG,aAAa,EAAE;QAClB,cAAc;QACd,YAAY;QACZ,cAAc,EAAE,cAAc,IAAI,EAAE;QACpC,cAAc,EAAE,cAAc,IAAI,EAAE;QACpC,cAAc;QACd,cAAc,EAAE,cAAc,IAAI,EAAE;QACpC,aAAa;QACb,OAAO,EAAE,OAAO,IAAI,EAAE;QACtB,UAAU,EAAE,UAAU,IAAI,EAAE;KAC7B,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAC3B,eAAoC,EACpC,gBAAqC,EAChB,EAAE,CAAC,gBAAgB,IAAI,eAAe,CAAC;AAE9D,MAAM,2BAA2B,GAAG,CAClC,eAA2C,EAC3C,gBAA4C,EAChB,EAAE,CAC9B,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,mBAAmB,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC;AAE5G,MAAM,mBAAmB,GAAG,CAC1B,eAA2C,EAC3C,gBAAgC,EAChB,EAAE,CAAC,sBAAsB,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC"}
1
+ {"version":3,"file":"SettingsMerger.js","sourceRoot":"","sources":["../../src/settings/SettingsMerger.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,qDAAqD;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAEzE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,aAAkC,EAAY,EAAE;IACjF,IAAI,YAAgC,CAAC;IACrC,IAAI,cAA0C,CAAC;IAC/C,IAAI,OAA4B,CAAC;IACjC,IAAI,cAA0C,CAAC;IAC/C,IAAI,cAAkC,CAAC;IACvC,IAAI,gBAA8C,CAAC;IACnD,IAAI,cAA0C,CAAC;IAC/C,IAAI,OAA4B,CAAC;IACjC,IAAI,UAAkC,CAAC;IAEvC,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE,CAAC;QACrC,YAAY,GAAG,QAAQ,CAAC,YAAY,IAAI,YAAY,CAAC;QACrD,cAAc,GAAG,QAAQ,CAAC,cAAc,IAAI,cAAc,CAAC;QAE3D,OAAO,GAAG,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC;QACtC,cAAc,GAAG,QAAQ,CAAC,cAAc,IAAI,cAAc,CAAC;QAC3D,cAAc,GAAG,QAAQ,CAAC,cAAc,IAAI,cAAc,CAAC;QAC3D,gBAAgB;YACd,QAAQ,CAAC,gBAAgB,KAAK,SAAS;gBACrC,CAAC,CAAC,gBAAgB;gBAClB,CAAC,CAAC,EAAE,GAAG,gBAAgB,EAAE,GAAG,QAAQ,CAAC,gBAAgB,EAAE,CAAC;QAC5D,cAAc,GAAG,2BAA2B,CAAC,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;QACtF,OAAO,GAAG,QAAQ,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;QACzF,UAAU,GAAG,QAAQ,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,UAAU,EAAE,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC;IAC1G,CAAC;IAED,OAAO;QACL,GAAG,aAAa,EAAE;QAClB,YAAY;QACZ,cAAc;QACd,OAAO,EAAE,OAAO,IAAI,EAAE;QACtB,cAAc,EAAE,cAAc,IAAI,EAAE;QACpC,cAAc;QACd,gBAAgB,EAAE,gBAAgB,IAAI,EAAE;QACxC,cAAc,EAAE,cAAc,IAAI,EAAE;QACpC,OAAO,EAAE,OAAO,IAAI,EAAE;QACtB,UAAU,EAAE,UAAU,IAAI,EAAE;KAC7B,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAG,CAClC,eAA2C,EAC3C,gBAA4C,EAChB,EAAE,CAC9B,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,mBAAmB,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC;AAE5G,MAAM,mBAAmB,GAAG,CAC1B,eAA2C,EAC3C,gBAAgC,EAChB,EAAE,CAAC,sBAAsB,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { RemoteSourceReference } from '../sources/SourceCache.js';
2
+ export declare const defaultCatalogSource: {
3
+ readonly github: "ai-outfitter/default-profiles";
4
+ readonly ref: "v1.0.0";
5
+ };
6
+ export interface PinnedCatalogBootstrapInput {
7
+ readonly homeDirectory: string;
8
+ readonly source: RemoteSourceReference & {
9
+ readonly ref: string;
10
+ };
11
+ }
12
+ export interface PinnedCatalogBootstrapResult {
13
+ readonly root: string;
14
+ readonly source: RemoteSourceReference & {
15
+ readonly ref: string;
16
+ };
17
+ }
18
+ /** Fetches one immutable catalog revision into the same cache path used by normal source resolution. */
19
+ export declare const bootstrapPinnedCatalog: (input: PinnedCatalogBootstrapInput) => PinnedCatalogBootstrapResult;
20
+ export declare const bootstrapDefaultCatalog: (homeDirectory: string) => PinnedCatalogBootstrapResult;
@@ -0,0 +1,89 @@
1
+ // Bootstraps the one canonical default catalog at the immutable revision shipped by Outfitter.
2
+ import { execFileSync } from 'node:child_process';
3
+ import { existsSync, mkdirSync, renameSync, rmSync } from 'node:fs';
4
+ import { dirname, join } from 'node:path';
5
+ import { createRemoteRepositoryCachePath, normalizeGitUri, normalizeRemoteSourceUri } from '../sources/SourceCache.js';
6
+ export const defaultCatalogSource = {
7
+ github: 'ai-outfitter/default-profiles',
8
+ // TODO(release-automation): when default-profiles publishes a new Release Please tag, open a
9
+ // conventional dependency-bump commit in Outfitter so its next Release Please release ships it.
10
+ ref: 'v1.0.0',
11
+ };
12
+ const runGit = (arguments_) => {
13
+ try {
14
+ return execFileSync('git', [...arguments_], {
15
+ encoding: 'utf8',
16
+ stdio: ['ignore', 'pipe', 'pipe'],
17
+ }).trim();
18
+ }
19
+ catch (error) {
20
+ throw new Error(`git ${arguments_.join(' ')} failed: ${String(error)}`, { cause: error });
21
+ }
22
+ };
23
+ const fullCommitPattern = /^[a-f0-9]{40}$/u;
24
+ const versionTagPattern = /^v\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/u;
25
+ const assertImmutableRef = (ref) => {
26
+ if (!fullCommitPattern.test(ref) && !versionTagPattern.test(ref)) {
27
+ throw new Error(`Default catalog ref '${ref}' must be a full commit SHA or version tag.`);
28
+ }
29
+ };
30
+ const resolveExpectedCommit = (root, ref) => fullCommitPattern.test(ref) ? ref : runGit(['-C', root, 'rev-parse', `refs/tags/${ref}^{commit}`]);
31
+ const isPinnedCatalogCheckout = (root, ref) => {
32
+ if (!existsSync(join(root, 'agents')))
33
+ return false;
34
+ try {
35
+ return (runGit(['-C', root, 'rev-parse', 'HEAD']) === resolveExpectedCommit(root, ref) &&
36
+ runGit(['-C', root, 'status', '--porcelain']) === '');
37
+ }
38
+ catch {
39
+ return false;
40
+ }
41
+ };
42
+ /** Fetches one immutable catalog revision into the same cache path used by normal source resolution. */
43
+ export const bootstrapPinnedCatalog = (input) => {
44
+ assertImmutableRef(input.source.ref);
45
+ const root = createRemoteRepositoryCachePath(input.homeDirectory, input.source);
46
+ if (isPinnedCatalogCheckout(root, input.source.ref))
47
+ return { root, source: input.source };
48
+ mkdirSync(dirname(root), { recursive: true });
49
+ const nonce = `${process.pid}-${Math.random().toString(16).slice(2)}`;
50
+ const temporaryRoot = `${root}.outfitter-${nonce}.tmp`;
51
+ const staleRoot = `${root}.outfitter-${nonce}.stale`;
52
+ const remote = normalizeGitUri(normalizeRemoteSourceUri(input.source));
53
+ let movedStaleCache = false;
54
+ try {
55
+ runGit(['init', '--quiet', temporaryRoot]);
56
+ runGit(['-C', temporaryRoot, 'remote', 'add', 'origin', remote]);
57
+ const fetchRef = fullCommitPattern.test(input.source.ref)
58
+ ? input.source.ref
59
+ : `refs/tags/${input.source.ref}:refs/tags/${input.source.ref}`;
60
+ runGit(['-C', temporaryRoot, 'fetch', '--quiet', '--depth=1', 'origin', fetchRef]);
61
+ runGit(['-C', temporaryRoot, 'checkout', '--quiet', '--detach', 'FETCH_HEAD']);
62
+ if (!isPinnedCatalogCheckout(temporaryRoot, input.source.ref)) {
63
+ throw new Error(`Fetched default catalog did not resolve to ${input.source.ref}.`);
64
+ }
65
+ if (existsSync(root)) {
66
+ renameSync(root, staleRoot);
67
+ movedStaleCache = true;
68
+ }
69
+ renameSync(temporaryRoot, root);
70
+ if (movedStaleCache)
71
+ rmSync(staleRoot, { recursive: true, force: true });
72
+ return { root, source: input.source };
73
+ }
74
+ catch (error) {
75
+ /* v8 ignore next -- only an OS-level failure during the atomic cache rename requires restoration. */
76
+ if (movedStaleCache && !existsSync(root) && existsSync(staleRoot))
77
+ renameSync(staleRoot, root);
78
+ const detail = String(error);
79
+ throw new Error(`Could not fetch the default Outfitter catalog at pinned revision ${input.source.ref}. ${detail}`, {
80
+ cause: error,
81
+ });
82
+ }
83
+ finally {
84
+ rmSync(temporaryRoot, { recursive: true, force: true });
85
+ rmSync(staleRoot, { recursive: true, force: true });
86
+ }
87
+ };
88
+ export const bootstrapDefaultCatalog = (homeDirectory) => bootstrapPinnedCatalog({ homeDirectory, source: defaultCatalogSource });
89
+ //# sourceMappingURL=DefaultCatalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DefaultCatalog.js","sourceRoot":"","sources":["../../src/setup/DefaultCatalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { Harness } from '../settings/Settings.js';
2
+ export type SetupScope = 'home' | 'project';
3
+ export type SetupMode = 'default' | 'create' | 'catalog' | 'source';
4
+ export interface SetupAgentChoice {
5
+ readonly id: string;
6
+ readonly label: string;
7
+ readonly description: string;
8
+ }
9
+ export interface SetupSelection {
10
+ readonly setupMode: SetupMode;
11
+ readonly agentId?: string;
12
+ readonly agentLabel?: string;
13
+ readonly github?: string;
14
+ readonly ref?: string;
15
+ readonly settingsPath?: string;
16
+ readonly sourceUri?: string;
17
+ readonly harness: Harness;
18
+ readonly privateCatalogsEnabled?: boolean;
19
+ readonly privateCatalogAccepted?: boolean;
20
+ readonly target: SetupScope;
21
+ }
22
+ export interface SetupInput {
23
+ readonly homeDirectory: string;
24
+ readonly projectDirectory: string;
25
+ readonly selection: SetupSelection;
26
+ readonly availableAgents: readonly SetupAgentChoice[];
27
+ readonly defaultCatalogRoot?: string;
28
+ }
29
+ export interface SetupResult {
30
+ readonly created: readonly string[];
31
+ readonly updated: readonly string[];
32
+ readonly settingsPath: string;
33
+ readonly defaultAgent?: string;
34
+ readonly defaultHarness: Harness;
35
+ readonly messages: readonly string[];
36
+ }
37
+ export declare const sanitizeAgentSlug: (raw: string) => string;
38
+ /** Returns the profiles shown by the original default-catalog setup picker. */
39
+ export declare const discoverSetupAgentChoices: (input: {
40
+ readonly defaultCatalogRoot?: string;
41
+ }) => readonly SetupAgentChoice[];
42
+ /** Applies a UI selection without touching any existing agent resource. */
43
+ export declare const applySetupSelection: (input: SetupInput) => SetupResult;
@@ -0,0 +1,261 @@
1
+ /* eslint-disable complexity */
2
+ // Harness-neutral setup state: applies the original profile-era setup outcomes to `.agents`.
3
+ import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, rmSync, statSync, writeFileSync } from 'node:fs';
4
+ import { dirname, join } from 'node:path';
5
+ import { HARNESSES } from '../settings/Settings.js';
6
+ import { defaultCatalogSource } from './DefaultCatalog.js';
7
+ const defaultAgentSlug = 'assistant';
8
+ const maxSlugLength = 64;
9
+ const agentSlugPattern = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
10
+ export const sanitizeAgentSlug = (raw) => {
11
+ const slug = raw
12
+ .trim()
13
+ .toLowerCase()
14
+ .replace(/[^a-z0-9]+/g, '-')
15
+ .replace(/^-+|-+$/g, '')
16
+ .slice(0, maxSlugLength)
17
+ .replace(/-+$/g, '');
18
+ return agentSlugPattern.test(slug) ? slug : defaultAgentSlug;
19
+ };
20
+ const readFrontmatterValue = (content, key) => {
21
+ const match = new RegExp(`^${key}:\\s*([^\\n]+)`, 'mu').exec(content);
22
+ // Strip only a real inline YAML comment (whitespace + '#'), so values like 'C#' survive.
23
+ return match?.[1]
24
+ ?.replace(/\s+#.*$/u, '')
25
+ .trim()
26
+ .replace(/^['"]|['"]$/gu, '');
27
+ };
28
+ const readMarkdownHeading = (content) => /^#\s+(.+)$/mu.exec(content)?.[1]?.trim();
29
+ const discoverAgentsInCatalog = (root) => {
30
+ const agentsDirectory = join(root, 'agents');
31
+ if (!existsSync(agentsDirectory))
32
+ return [];
33
+ let entries;
34
+ try {
35
+ entries = readdirSync(agentsDirectory).sort();
36
+ }
37
+ catch {
38
+ return [];
39
+ }
40
+ const choices = entries.flatMap((entry) => {
41
+ const agentPath = join(agentsDirectory, entry, 'agent.md');
42
+ try {
43
+ if (!statSync(agentPath).isFile())
44
+ return [];
45
+ const content = readFileSync(agentPath, 'utf8');
46
+ const id = sanitizeAgentSlug(readFrontmatterValue(content, 'name') ?? entry);
47
+ if (id !== entry || !agentSlugPattern.test(id))
48
+ return [];
49
+ return [
50
+ {
51
+ id,
52
+ label: readFrontmatterValue(content, 'label') ?? readMarkdownHeading(content) ?? id,
53
+ description: readFrontmatterValue(content, 'description') ?? 'Outfitter profile from the default catalog.',
54
+ },
55
+ ];
56
+ }
57
+ catch {
58
+ return [];
59
+ }
60
+ });
61
+ return choices.sort((left, right) => {
62
+ if (left.id === 'founder')
63
+ return -1;
64
+ if (right.id === 'founder')
65
+ return 1;
66
+ return left.id.localeCompare(right.id);
67
+ });
68
+ };
69
+ /** Returns the profiles shown by the original default-catalog setup picker. */
70
+ export const discoverSetupAgentChoices = (input) => {
71
+ if (input.defaultCatalogRoot === undefined)
72
+ return [];
73
+ return discoverAgentsInCatalog(input.defaultCatalogRoot);
74
+ };
75
+ const userProfileMarkdown = (slug, label) => `---\nname: "${slug}"\nlabel: "${label}"\ndescription: User-created Outfitter profile.\n---\n\n# ${label}\n\n` +
76
+ 'You are a helpful coding agent. Follow the instructions and skills available in this .agents tree.\n';
77
+ const replaceOrAppendScalar = (content, key, value) => {
78
+ const linePattern = new RegExp(`^${key}:.*$`, 'mu');
79
+ if (linePattern.test(content))
80
+ return content.replace(linePattern, `${key}: ${value}`);
81
+ return `${content.replace(/\s*$/u, '')}${content.trim() === '' ? '' : '\n'}${key}: ${value}\n`;
82
+ };
83
+ const upsertDefaultCatalogSource = (content) => {
84
+ const sourceLines = [` - github: ${defaultCatalogSource.github}`, ` ref: ${defaultCatalogSource.ref}`];
85
+ if (!/^sources:\s*$/mu.test(content)) {
86
+ return `${content.replace(/\s*$/u, '')}\nsources:\n${sourceLines.join('\n')}\n`;
87
+ }
88
+ const lines = content.replace(/\s*$/u, '').split('\n');
89
+ const start = lines.findIndex((line) => /^sources:\s*$/u.test(line));
90
+ let end = start + 1;
91
+ while (end < lines.length && (/^\s/u.test(lines[end] ?? '') || (lines[end] ?? '') === ''))
92
+ end += 1;
93
+ const existing = lines.findIndex((line, index) => {
94
+ if (index <= start || index >= end)
95
+ return false;
96
+ const match = /^\s*-\s+github:\s*(.+?)\s*$/u.exec(line);
97
+ return match?.[1]?.replace(/^['"]|['"]$/gu, '') === defaultCatalogSource.github;
98
+ });
99
+ if (existing === -1) {
100
+ lines.splice(start + 1, 0, ...sourceLines);
101
+ return `${lines.join('\n')}\n`;
102
+ }
103
+ let blockEnd = existing + 1;
104
+ while (blockEnd < end && !/^\s*-\s+/u.test(lines[blockEnd] ?? ''))
105
+ blockEnd += 1;
106
+ const block = lines.slice(existing, blockEnd).filter((line) => !/^\s+path:\s*/u.test(line));
107
+ const refIndex = block.findIndex((line) => /^\s+ref:\s*/u.test(line));
108
+ if (refIndex === -1)
109
+ block.splice(1, 0, ` ref: ${defaultCatalogSource.ref}`);
110
+ else
111
+ block[refIndex] = ` ref: ${defaultCatalogSource.ref}`;
112
+ lines.splice(existing, blockEnd - existing, ...block);
113
+ return `${lines.join('\n')}\n`;
114
+ };
115
+ const createSettingsContent = (existing, selection) => {
116
+ if (selection.setupMode === 'source') {
117
+ return [
118
+ `default_harness: ${selection.harness}`,
119
+ 'remote_settings:',
120
+ ` - uri: ${JSON.stringify(selection.sourceUri)}`,
121
+ ' path: settings.yml',
122
+ '',
123
+ ].join('\n');
124
+ }
125
+ if (selection.setupMode === 'catalog') {
126
+ return [
127
+ ...(selection.privateCatalogsEnabled && selection.target === 'home'
128
+ ? ['enterprise:', ' private_catalogs: true']
129
+ : []),
130
+ `default_harness: ${selection.harness}`,
131
+ 'remote_settings:',
132
+ ` - github: ${selection.github}`,
133
+ ` ref: ${selection.ref}`,
134
+ ` path: ${selection.settingsPath}`,
135
+ '',
136
+ ].join('\n');
137
+ }
138
+ let content = replaceOrAppendScalar(existing, 'default_agent', String(selection.agentId));
139
+ content = replaceOrAppendScalar(content, 'default_harness', selection.harness);
140
+ return selection.setupMode === 'default' ? upsertDefaultCatalogSource(content) : content;
141
+ };
142
+ const enablePrivateCatalogs = (content) => {
143
+ if (/^\s*private_catalogs:\s*true\s*$/mu.test(content))
144
+ return content;
145
+ if (/^\s*private_catalogs:\s*(?:true|false)\s*$/mu.test(content)) {
146
+ return content.replace(/^\s*private_catalogs:\s*(?:true|false)\s*$/mu, ' private_catalogs: true');
147
+ }
148
+ if (/^enterprise:\s*$/mu.test(content)) {
149
+ return content.replace(/^enterprise:\s*$/mu, 'enterprise:\n private_catalogs: true');
150
+ }
151
+ return `${content.replace(/\s*$/u, '')}${content.trim() === '' ? '' : '\n'}enterprise:\n private_catalogs: true\n`;
152
+ };
153
+ const atomicWrite = (path, content) => {
154
+ mkdirSync(dirname(path), { recursive: true });
155
+ const temporaryPath = `${path}.outfitter-${process.pid}-${Math.random().toString(16).slice(2)}.tmp`;
156
+ try {
157
+ writeFileSync(temporaryPath, content, { flag: 'wx' });
158
+ renameSync(temporaryPath, path);
159
+ }
160
+ finally {
161
+ rmSync(temporaryPath, { force: true });
162
+ }
163
+ };
164
+ const assertSelection = (input) => {
165
+ const { selection } = input;
166
+ if (!HARNESSES.includes(selection.harness)) {
167
+ throw new Error(`Setup returned unsupported harness '${String(selection.harness)}'.`);
168
+ }
169
+ if (selection.setupMode === 'catalog') {
170
+ if (!selection.github || !/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/u.test(selection.github)) {
171
+ throw new Error('Setup returned an invalid catalog repository.');
172
+ }
173
+ if (!selection.ref ||
174
+ !selection.settingsPath ||
175
+ selection.settingsPath.startsWith('/') ||
176
+ selection.settingsPath.includes('..')) {
177
+ throw new Error('Setup returned invalid catalog settings.');
178
+ }
179
+ return;
180
+ }
181
+ if (selection.setupMode === 'source') {
182
+ if (!selection.sourceUri)
183
+ throw new Error('Setup returned an invalid source URI.');
184
+ return;
185
+ }
186
+ // Validate the exact id that gets written as the agent directory/frontmatter name — do not
187
+ // normalize here, or an id that passes validation could still be written in a schema-invalid form.
188
+ if (!selection.agentId || !agentSlugPattern.test(selection.agentId)) {
189
+ throw new Error(`Setup returned invalid agent id '${selection.agentId}'.`);
190
+ }
191
+ if (selection.setupMode === 'default') {
192
+ if (!input.availableAgents.some((candidate) => candidate.id === selection.agentId)) {
193
+ throw new Error(`Setup selected unavailable agent '${selection.agentId}'.`);
194
+ }
195
+ if (input.defaultCatalogRoot === undefined)
196
+ throw new Error('The default Outfitter profile catalog is unavailable.');
197
+ }
198
+ };
199
+ /** Applies a UI selection without touching any existing agent resource. */
200
+ export const applySetupSelection = (input) => {
201
+ assertSelection(input);
202
+ const targetRoot = input.selection.target === 'home' ? input.homeDirectory : input.projectDirectory;
203
+ const settingsPath = join(targetRoot, '.agents', 'settings.yml');
204
+ const created = [];
205
+ const updated = [];
206
+ let createdAgentPath;
207
+ let privateHomeSettingsPath;
208
+ let privateHomeSettingsExisted = false;
209
+ let previousPrivateHomeSettings = '';
210
+ if (input.selection.setupMode === 'create') {
211
+ const agentPath = join(targetRoot, '.agents', 'agents', input.selection.agentId, 'agent.md');
212
+ if (!existsSync(agentPath)) {
213
+ atomicWrite(agentPath, userProfileMarkdown(input.selection.agentId, input.selection.agentLabel?.trim() || input.selection.agentId));
214
+ created.push(agentPath);
215
+ createdAgentPath = agentPath;
216
+ }
217
+ }
218
+ try {
219
+ if (input.selection.setupMode === 'catalog' &&
220
+ input.selection.privateCatalogAccepted === true &&
221
+ input.selection.target === 'project') {
222
+ privateHomeSettingsPath = join(input.homeDirectory, '.agents', 'settings.yml');
223
+ privateHomeSettingsExisted = existsSync(privateHomeSettingsPath);
224
+ previousPrivateHomeSettings = privateHomeSettingsExisted ? readFileSync(privateHomeSettingsPath, 'utf8') : '';
225
+ atomicWrite(privateHomeSettingsPath, enablePrivateCatalogs(previousPrivateHomeSettings));
226
+ (privateHomeSettingsExisted ? updated : created).push(privateHomeSettingsPath);
227
+ }
228
+ const settingsExisted = existsSync(settingsPath);
229
+ const existingSettings = settingsExisted ? readFileSync(settingsPath, 'utf8') : '';
230
+ atomicWrite(settingsPath, createSettingsContent(existingSettings, input.selection));
231
+ (settingsExisted ? updated : created).unshift(settingsPath);
232
+ }
233
+ catch (error) {
234
+ if (createdAgentPath !== undefined)
235
+ rmSync(createdAgentPath, { force: true });
236
+ if (privateHomeSettingsPath !== undefined) {
237
+ if (privateHomeSettingsExisted)
238
+ atomicWrite(privateHomeSettingsPath, previousPrivateHomeSettings);
239
+ else
240
+ rmSync(privateHomeSettingsPath, { force: true });
241
+ }
242
+ throw error;
243
+ }
244
+ return {
245
+ created,
246
+ updated,
247
+ settingsPath,
248
+ defaultAgent: input.selection.agentId,
249
+ defaultHarness: input.selection.harness,
250
+ messages: [
251
+ ...created.map((path) => `Created ${path}`),
252
+ ...updated.map((path) => `Updated ${path}`),
253
+ ...(input.selection.agentId === undefined
254
+ ? []
255
+ : [
256
+ `Default agent '${input.selection.agentId}' will launch in ${input.selection.harness} on the next Outfitter run.`,
257
+ ]),
258
+ ],
259
+ };
260
+ };
261
+ //# sourceMappingURL=Setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Setup.js","sourceRoot":"","sources":["../../src/setup/Setup.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,9 @@
1
- import type { SkillReference } from '../profiles/Profile.js';
1
+ /** A materializable skill reference: a source-tree `file` or an active-project `repo_file`. */
2
+ export type SkillReference = {
3
+ readonly file: string;
4
+ } | {
5
+ readonly repo_file: string;
6
+ };
2
7
  export declare const isSkillReference: (value: unknown) => value is SkillReference;
3
8
  /** Frontmatter keys that materialize external files into a generated skill directory. */
4
9
  export declare const skillMaterializationSections: readonly ["references", "scripts", "assets"];
@@ -1 +1 @@
1
- {"version":3,"file":"SkillDocument.js","sourceRoot":"","sources":["../../src/skills/SkillDocument.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SkillDocument.js","sourceRoot":"","sources":["../../src/skills/SkillDocument.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /** A remote `.agents` source: a git URI or a `github` shorthand, with an optional ref. */
2
+ export type RemoteSourceReference = {
3
+ readonly uri: string;
4
+ readonly github?: never;
5
+ readonly ref?: string;
6
+ readonly path?: string;
7
+ } | {
8
+ readonly github: string;
9
+ readonly uri?: never;
10
+ readonly ref?: string;
11
+ readonly path?: string;
12
+ };
13
+ export declare const normalizeGitUri: (uri: string) => string;
14
+ export declare const normalizeRemoteSourceUri: (source: RemoteSourceReference) => string;
15
+ export declare const redactSourceUriCredentials: (uri: string) => string;
16
+ export declare const encodeSourceUri: (uri: string) => string;
17
+ export declare const encodeRemoteSource: (source: RemoteSourceReference) => string;
18
+ export declare const createRemoteRepositoryCachePath: (homeDirectory: string, source: RemoteSourceReference) => string;
19
+ export declare const resolveRemoteRepositorySubpath: (repositoryPath: string, subpath?: string) => string;
@@ -1,22 +1,13 @@
1
- // Encodes remote profile/source cache paths.
1
+ // Encodes remote `.agents` source cache paths and normalizes remote source references.
2
2
  import { isAbsolute, join, relative, resolve } from 'node:path';
3
- import { normalizeRemoteSourceUri } from './ProfileSource.js';
4
- export const encodeProfileSourceUri = (uri) => Buffer.from(redactProfileSourceUriCredentials(uri), 'utf8').toString('base64url');
5
- export const encodeRemoteSource = (source) => encodeProfileSourceUri(`${normalizeRemoteSourceUri(source)}#${source.ref ?? ''}`);
6
- export const createProfileSourceCachePath = (homeDirectory, uri) => join(homeDirectory, '.outfitter', 'cache', 'profiles', encodeProfileSourceUri(uri));
7
- export const createRemoteRepositoryCachePath = (homeDirectory, source) => join(homeDirectory, '.outfitter', 'cache', 'repos', encodeRemoteSource(source));
8
- export const resolveRemoteRepositorySubpath = (repositoryPath, subpath = '') => {
9
- if (isAbsolute(subpath)) {
10
- throw new Error(`Remote repository path '${subpath}' must be relative.`);
11
- }
12
- const resolvedPath = resolve(repositoryPath, subpath);
13
- const relativePath = relative(repositoryPath, resolvedPath);
14
- if (relativePath === '..' || relativePath.startsWith('../') || isAbsolute(relativePath)) {
15
- throw new Error(`Remote repository path '${subpath}' must stay inside the repository.`);
3
+ export const normalizeGitUri = (uri) => (uri.startsWith('git+') ? uri.slice('git+'.length) : uri);
4
+ export const normalizeRemoteSourceUri = (source) => {
5
+ if (source.uri !== undefined) {
6
+ return source.uri;
16
7
  }
17
- return resolvedPath;
8
+ return `git+https://github.com/${source.github}.git`;
18
9
  };
19
- export const redactProfileSourceUriCredentials = (uri) => {
10
+ export const redactSourceUriCredentials = (uri) => {
20
11
  const prefix = uri.startsWith('git+') ? 'git+' : '';
21
12
  const normalizedUri = normalizeGitUri(uri);
22
13
  try {
@@ -32,5 +23,18 @@ export const redactProfileSourceUriCredentials = (uri) => {
32
23
  return uri.replace(/\/\/[^/@\s]+@/u, '//REDACTED@');
33
24
  }
34
25
  };
35
- export const normalizeGitUri = (uri) => (uri.startsWith('git+') ? uri.slice('git+'.length) : uri);
36
- //# sourceMappingURL=ProfileCache.js.map
26
+ export const encodeSourceUri = (uri) => Buffer.from(redactSourceUriCredentials(uri), 'utf8').toString('base64url');
27
+ export const encodeRemoteSource = (source) => encodeSourceUri(`${normalizeRemoteSourceUri(source)}#${source.ref ?? ''}`);
28
+ export const createRemoteRepositoryCachePath = (homeDirectory, source) => join(homeDirectory, '.agents', 'cache', 'repos', encodeRemoteSource(source));
29
+ export const resolveRemoteRepositorySubpath = (repositoryPath, subpath = '') => {
30
+ if (isAbsolute(subpath)) {
31
+ throw new Error(`Remote repository path '${subpath}' must be relative.`);
32
+ }
33
+ const resolvedPath = resolve(repositoryPath, subpath);
34
+ const relativePath = relative(repositoryPath, resolvedPath);
35
+ if (relativePath === '..' || relativePath.startsWith('../') || isAbsolute(relativePath)) {
36
+ throw new Error(`Remote repository path '${subpath}' must stay inside the repository.`);
37
+ }
38
+ return resolvedPath;
39
+ };
40
+ //# sourceMappingURL=SourceCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SourceCache.js","sourceRoot":"","sources":["../../src/sources/SourceCache.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOhE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAElH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,MAA6B,EAAU,EAAE;IAChF,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,MAAM,CAAC,GAAG,CAAC;IACpB,CAAC;IAED,OAAO,0BAA0B,MAAM,CAAC,MAAM,MAAM,CAAC;AACvD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,GAAW,EAAU,EAAE;IAChE,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACpD,MAAM,aAAa,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IAE3C,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;QAEzC,IAAI,SAAS,CAAC,QAAQ,KAAK,EAAE,IAAI,SAAS,CAAC,QAAQ,KAAK,EAAE,EAAE,CAAC;YAC3D,OAAO,GAAG,CAAC;QACb,CAAC;QAED,SAAS,CAAC,QAAQ,GAAG,UAAU,CAAC;QAChC,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAC;QACxB,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;IACtD,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAW,EAAU,EAAE,CACrD,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAE7E,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAA6B,EAAU,EAAE,CAC1E,eAAe,CAAC,GAAG,wBAAwB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC;AAE7E,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,aAAqB,EAAE,MAA6B,EAAU,EAAE,CAC9G,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;AAE/E,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,cAAsB,EAAE,OAAO,GAAG,EAAE,EAAU,EAAE;IAC7F,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,2BAA2B,OAAO,qBAAqB,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,YAAY,GAAG,QAAQ,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;IAE5D,IAAI,YAAY,KAAK,IAAI,IAAI,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACxF,MAAM,IAAI,KAAK,CAAC,2BAA2B,OAAO,oCAAoC,CAAC,CAAC;IAC1F,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC"}
@@ -1,4 +1,4 @@
1
- export type SchemaName = 'settings' | 'profile' | 'profile-source';
1
+ export type SchemaName = 'settings' | 'agent';
2
2
  export interface ValidationIssue {
3
3
  readonly path: string;
4
4
  readonly message: string;