@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.
- package/.outfitter/skills/outfitter/SKILL.md +67 -37
- package/README.md +63 -35
- package/code/enterprise/cli/privateCatalogSettings.cjs +2 -2
- package/code/enterprise/pi-extension/privateCatalogOnboarding.js +5 -8
- package/code/enterprise/shared/privateCatalogPolicy.cjs +5 -5
- package/code/pi-extension/src/outfitter-extension.js +353 -553
- package/code/pi-extension/src/outfitter-runtime-extension.js +160 -0
- package/dist/agents/AgentLaunch.d.ts +9 -1
- package/dist/agents/AgentLaunch.js +19 -0
- package/dist/agents/AgentLaunch.js.map +1 -1
- package/dist/agents/PiCredentialPersistence.d.ts +6 -0
- package/dist/agents/PiCredentialPersistence.js +33 -0
- package/dist/agents/PiCredentialPersistence.js.map +1 -0
- package/dist/cli/OutfitterCli.js +10 -18
- package/dist/cli/OutfitterCli.js.map +1 -1
- package/dist/cli/commands/CommandObject.d.ts +0 -5
- package/dist/cli/commands/CommandObject.js +1 -4
- package/dist/cli/commands/CommandObject.js.map +1 -1
- package/dist/cli/commands/DumpCommand.d.ts +19 -0
- package/dist/cli/commands/DumpCommand.js +54 -0
- package/dist/cli/commands/DumpCommand.js.map +1 -0
- package/dist/cli/commands/ListCommand.d.ts +17 -0
- package/dist/cli/commands/ListCommand.js +77 -0
- package/dist/cli/commands/ListCommand.js.map +1 -0
- package/dist/cli/commands/PiRuntimeLaunch.d.ts +8 -0
- package/dist/cli/commands/PiRuntimeLaunch.js +47 -0
- package/dist/cli/commands/PiRuntimeLaunch.js.map +1 -0
- package/dist/cli/commands/ProcessDefaults.d.ts +2 -0
- package/dist/cli/commands/ProcessDefaults.js +5 -0
- package/dist/cli/commands/ProcessDefaults.js.map +1 -0
- package/dist/cli/commands/RunAgentCommand.d.ts +46 -0
- package/dist/cli/commands/RunAgentCommand.js +176 -0
- package/dist/cli/commands/RunAgentCommand.js.map +1 -0
- package/dist/cli/commands/SetupCommand.d.ts +38 -6
- package/dist/cli/commands/SetupCommand.js +194 -232
- package/dist/cli/commands/SetupCommand.js.map +1 -1
- package/dist/cli/commands/ValidateCommand.d.ts +20 -0
- package/dist/cli/commands/ValidateCommand.js +54 -0
- package/dist/cli/commands/ValidateCommand.js.map +1 -0
- package/dist/composer/Composer.d.ts +11 -0
- package/dist/composer/Composer.js +72 -0
- package/dist/composer/Composer.js.map +1 -0
- package/dist/composer/Composition.d.ts +33 -0
- package/dist/composer/Composition.js +2 -0
- package/dist/composer/Composition.js.map +1 -0
- package/dist/dump/Containment.d.ts +8 -0
- package/dist/dump/Containment.js +22 -0
- package/dist/dump/Containment.js.map +1 -0
- package/dist/dump/Dump.d.ts +8 -0
- package/dist/dump/Dump.js +182 -0
- package/dist/dump/Dump.js.map +1 -0
- package/dist/extensions/PiExtensionCache.d.ts +30 -0
- package/dist/extensions/PiExtensionCache.js +92 -0
- package/dist/extensions/PiExtensionCache.js.map +1 -0
- package/dist/fs/TypeConflict.d.ts +6 -0
- package/dist/fs/TypeConflict.js +21 -0
- package/dist/fs/TypeConflict.js.map +1 -0
- package/dist/paths/OutfitterCache.d.ts +6 -0
- package/dist/paths/OutfitterCache.js +17 -0
- package/dist/paths/OutfitterCache.js.map +1 -0
- package/dist/projection/Materialize.d.ts +24 -0
- package/dist/projection/Materialize.js +83 -0
- package/dist/projection/Materialize.js.map +1 -0
- package/dist/projection/ProjectHarness.d.ts +5 -0
- package/dist/projection/ProjectHarness.js +77 -0
- package/dist/projection/ProjectHarness.js.map +1 -0
- package/dist/projection/Projection.d.ts +23 -0
- package/dist/projection/Projection.js +2 -0
- package/dist/projection/Projection.js.map +1 -0
- package/dist/resolver/AgentDefinition.d.ts +30 -0
- package/dist/resolver/AgentDefinition.js +123 -0
- package/dist/resolver/AgentDefinition.js.map +1 -0
- package/dist/resolver/Layer.d.ts +12 -0
- package/dist/resolver/Layer.js +30 -0
- package/dist/resolver/Layer.js.map +1 -0
- package/dist/resolver/Resolver.d.ts +3 -0
- package/dist/resolver/Resolver.js +163 -0
- package/dist/resolver/Resolver.js.map +1 -0
- package/dist/resolver/ResolverContext.d.ts +15 -0
- package/dist/resolver/ResolverContext.js +11 -0
- package/dist/resolver/ResolverContext.js.map +1 -0
- package/dist/resolver/ResolverValidation.d.ts +11 -0
- package/dist/resolver/ResolverValidation.js +112 -0
- package/dist/resolver/ResolverValidation.js.map +1 -0
- package/dist/resolver/Resource.d.ts +88 -0
- package/dist/resolver/Resource.js +34 -0
- package/dist/resolver/Resource.js.map +1 -0
- package/dist/schemas/agent.schema.json +48 -0
- package/dist/schemas/settings.schema.json +32 -9
- package/dist/settings/Settings.d.ts +34 -5
- package/dist/settings/Settings.js +3 -1
- package/dist/settings/Settings.js.map +1 -1
- package/dist/settings/SettingsLoader.d.ts +1 -1
- package/dist/settings/SettingsLoader.js +23 -22
- package/dist/settings/SettingsLoader.js.map +1 -1
- package/dist/settings/SettingsMerger.js +12 -10
- package/dist/settings/SettingsMerger.js.map +1 -1
- package/dist/setup/DefaultCatalog.d.ts +20 -0
- package/dist/setup/DefaultCatalog.js +89 -0
- package/dist/setup/DefaultCatalog.js.map +1 -0
- package/dist/setup/Setup.d.ts +43 -0
- package/dist/setup/Setup.js +261 -0
- package/dist/setup/Setup.js.map +1 -0
- package/dist/skills/SkillDocument.d.ts +6 -1
- package/dist/skills/SkillDocument.js.map +1 -1
- package/dist/sources/SourceCache.d.ts +19 -0
- package/dist/{profiles/ProfileCache.js → sources/SourceCache.js} +22 -18
- package/dist/sources/SourceCache.js.map +1 -0
- package/dist/validation/SchemaValidator.d.ts +1 -1
- package/dist/validation/SchemaValidator.js +4 -13
- package/dist/validation/SchemaValidator.js.map +1 -1
- package/docs/architecture/state_writeback_strategy.md +54 -122
- package/docs/documentation/README.md +33 -12
- package/docs/documentation/actions.md +35 -52
- package/docs/documentation/agents.md +109 -0
- package/docs/documentation/best-practices.md +25 -63
- package/docs/documentation/catalogs.md +126 -0
- package/docs/documentation/cli.md +39 -41
- package/docs/documentation/concepts.md +66 -23
- package/docs/documentation/dump-and-bake.md +30 -0
- package/docs/documentation/first-time-cli-agent-users.md +8 -8
- package/docs/documentation/getting-started.md +28 -8
- package/docs/documentation/hooks.md +20 -0
- package/docs/documentation/iterating-on-profiles.md +56 -70
- package/docs/documentation/local-development.md +84 -0
- package/docs/documentation/migration.md +39 -0
- package/docs/documentation/personas.md +41 -0
- package/docs/documentation/porting-claude.md +54 -0
- package/docs/documentation/profiles.md +16 -169
- package/docs/documentation/settings.md +61 -0
- package/docs/documentation/skills.md +93 -334
- package/docs/documentation/state.md +24 -62
- package/docs/documentation/subagents.md +37 -0
- package/docs/documentation/support-matrix.md +40 -35
- package/docs/documentation/switching-to-outfitter.md +75 -81
- package/docs/documentation/tasks.md +13 -0
- package/docs/documentation/usecases/engineering.md +67 -84
- package/docs/documentation/usecases/organization-profile-catalog.md +83 -111
- package/docs/documentation/usecases/persona-reviews.md +133 -139
- package/docs/philosophy.md +2 -2
- package/package.json +3 -3
- package/src/schemas/agent.schema.json +48 -0
- package/src/schemas/settings.schema.json +32 -9
- package/dist/agents/AdapterProfileControls.d.ts +0 -21
- package/dist/agents/AdapterProfileControls.js +0 -76
- package/dist/agents/AdapterProfileControls.js.map +0 -1
- package/dist/agents/AdapterStatePaths.d.ts +0 -12
- package/dist/agents/AdapterStatePaths.js +0 -46
- package/dist/agents/AdapterStatePaths.js.map +0 -1
- package/dist/agents/AgentAdapter.d.ts +0 -44
- package/dist/agents/AgentAdapter.js +0 -2
- package/dist/agents/AgentAdapter.js.map +0 -1
- package/dist/agents/AgentRegistry.d.ts +0 -6
- package/dist/agents/AgentRegistry.js +0 -17
- package/dist/agents/AgentRegistry.js.map +0 -1
- package/dist/agents/LaunchResources.d.ts +0 -17
- package/dist/agents/LaunchResources.js +0 -61
- package/dist/agents/LaunchResources.js.map +0 -1
- package/dist/agents/OutfitterSkill.d.ts +0 -11
- package/dist/agents/OutfitterSkill.js +0 -128
- package/dist/agents/OutfitterSkill.js.map +0 -1
- package/dist/agents/ResourceIdentity.d.ts +0 -2
- package/dist/agents/ResourceIdentity.js +0 -51
- package/dist/agents/ResourceIdentity.js.map +0 -1
- package/dist/agents/claude/ClaudeAdapter.d.ts +0 -2
- package/dist/agents/claude/ClaudeAdapter.js +0 -148
- package/dist/agents/claude/ClaudeAdapter.js.map +0 -1
- package/dist/agents/claude/ClaudeCompositeProfileWriter.d.ts +0 -5
- package/dist/agents/claude/ClaudeCompositeProfileWriter.js +0 -7
- package/dist/agents/claude/ClaudeCompositeProfileWriter.js.map +0 -1
- package/dist/agents/pi/PiAdapter.d.ts +0 -2
- package/dist/agents/pi/PiAdapter.js +0 -363
- package/dist/agents/pi/PiAdapter.js.map +0 -1
- package/dist/agents/pi/PiArgs.d.ts +0 -2
- package/dist/agents/pi/PiArgs.js +0 -15
- package/dist/agents/pi/PiArgs.js.map +0 -1
- package/dist/agents/pi/PiCompositeProfileWriter.d.ts +0 -5
- package/dist/agents/pi/PiCompositeProfileWriter.js +0 -7
- package/dist/agents/pi/PiCompositeProfileWriter.js.map +0 -1
- package/dist/agents/pi/PiExtensionCache.d.ts +0 -12
- package/dist/agents/pi/PiExtensionCache.js +0 -195
- package/dist/agents/pi/PiExtensionCache.js.map +0 -1
- package/dist/agents/pi/PiMcpConfig.d.ts +0 -2
- package/dist/agents/pi/PiMcpConfig.js +0 -114
- package/dist/agents/pi/PiMcpConfig.js.map +0 -1
- package/dist/agents/pi/PiSettingsMergePolicy.d.ts +0 -17
- package/dist/agents/pi/PiSettingsMergePolicy.js +0 -59
- package/dist/agents/pi/PiSettingsMergePolicy.js.map +0 -1
- package/dist/agents/pi/PiSkillSources.d.ts +0 -8
- package/dist/agents/pi/PiSkillSources.js +0 -73
- package/dist/agents/pi/PiSkillSources.js.map +0 -1
- package/dist/cli/commands/FirstRunWelcomeProfile.d.ts +0 -11
- package/dist/cli/commands/FirstRunWelcomeProfile.js +0 -110
- package/dist/cli/commands/FirstRunWelcomeProfile.js.map +0 -1
- package/dist/cli/commands/PiLoginLaunch.d.ts +0 -22
- package/dist/cli/commands/PiLoginLaunch.js +0 -170
- package/dist/cli/commands/PiLoginLaunch.js.map +0 -1
- package/dist/cli/commands/RunCommand.d.ts +0 -36
- package/dist/cli/commands/RunCommand.js +0 -345
- package/dist/cli/commands/RunCommand.js.map +0 -1
- package/dist/cli/commands/SyncCommand.d.ts +0 -46
- package/dist/cli/commands/SyncCommand.js +0 -244
- package/dist/cli/commands/SyncCommand.js.map +0 -1
- package/dist/cli/commands/WelcomeCommand.d.ts +0 -56
- package/dist/cli/commands/WelcomeCommand.js +0 -224
- package/dist/cli/commands/WelcomeCommand.js.map +0 -1
- package/dist/cli/commands/assets/outfitter-ascii.txt +0 -5
- package/dist/cli/commands/profile/Command.d.ts +0 -7
- package/dist/cli/commands/profile/Command.js +0 -24
- package/dist/cli/commands/profile/Command.js.map +0 -1
- package/dist/cli/commands/profile/CreateCommand.d.ts +0 -19
- package/dist/cli/commands/profile/CreateCommand.js +0 -115
- package/dist/cli/commands/profile/CreateCommand.js.map +0 -1
- package/dist/cli/commands/profile/LintCommand.d.ts +0 -19
- package/dist/cli/commands/profile/LintCommand.js +0 -155
- package/dist/cli/commands/profile/LintCommand.js.map +0 -1
- package/dist/cli/commands/profile/ListCommand.d.ts +0 -19
- package/dist/cli/commands/profile/ListCommand.js +0 -91
- package/dist/cli/commands/profile/ListCommand.js.map +0 -1
- package/dist/cli/commands/profile/Shared.d.ts +0 -9
- package/dist/cli/commands/profile/Shared.js +0 -10
- package/dist/cli/commands/profile/Shared.js.map +0 -1
- package/dist/cli/commands/run/RunFirstRunOnboarding.d.ts +0 -7
- package/dist/cli/commands/run/RunFirstRunOnboarding.js +0 -52
- package/dist/cli/commands/run/RunFirstRunOnboarding.js.map +0 -1
- package/dist/cli/commands/run/RunLaunchSummary.d.ts +0 -2
- package/dist/cli/commands/run/RunLaunchSummary.js +0 -35
- package/dist/cli/commands/run/RunLaunchSummary.js.map +0 -1
- package/dist/cli/commands/run/RunProfileResolution.d.ts +0 -39
- package/dist/cli/commands/run/RunProfileResolution.js +0 -128
- package/dist/cli/commands/run/RunProfileResolution.js.map +0 -1
- package/dist/cli/commands/run/RunStateWritePrompt.d.ts +0 -2
- package/dist/cli/commands/run/RunStateWritePrompt.js +0 -29
- package/dist/cli/commands/run/RunStateWritePrompt.js.map +0 -1
- package/dist/cli/commands/setup/SetupPrompts.d.ts +0 -14
- package/dist/cli/commands/setup/SetupPrompts.js +0 -296
- package/dist/cli/commands/setup/SetupPrompts.js.map +0 -1
- package/dist/cli/commands/setup/SetupSourceImport.d.ts +0 -5
- package/dist/cli/commands/setup/SetupSourceImport.js +0 -177
- package/dist/cli/commands/setup/SetupSourceImport.js.map +0 -1
- package/dist/cli/commands/setup/SetupSourceLaunch.d.ts +0 -4
- package/dist/cli/commands/setup/SetupSourceLaunch.js +0 -65
- package/dist/cli/commands/setup/SetupSourceLaunch.js.map +0 -1
- package/dist/cli/commands/setup/SetupStarterSource.d.ts +0 -21
- package/dist/cli/commands/setup/SetupStarterSource.js +0 -133
- package/dist/cli/commands/setup/SetupStarterSource.js.map +0 -1
- package/dist/cli/commands/setup/SetupTypes.d.ts +0 -91
- package/dist/cli/commands/setup/SetupTypes.js +0 -26
- package/dist/cli/commands/setup/SetupTypes.js.map +0 -1
- package/dist/compositeProfile/CompositeProfile.d.ts +0 -8
- package/dist/compositeProfile/CompositeProfile.js +0 -6
- package/dist/compositeProfile/CompositeProfile.js.map +0 -1
- package/dist/compositeProfile/CompositeProfileAssembler.d.ts +0 -12
- package/dist/compositeProfile/CompositeProfileAssembler.js +0 -32
- package/dist/compositeProfile/CompositeProfileAssembler.js.map +0 -1
- package/dist/compositeProfile/CompositeProfileCleanup.d.ts +0 -9
- package/dist/compositeProfile/CompositeProfileCleanup.js +0 -87
- package/dist/compositeProfile/CompositeProfileCleanup.js.map +0 -1
- package/dist/compositeProfile/CompositeProfileFile.d.ts +0 -16
- package/dist/compositeProfile/CompositeProfileFile.js +0 -16
- package/dist/compositeProfile/CompositeProfileFile.js.map +0 -1
- package/dist/compositeProfile/CompositeProfileTemplate.d.ts +0 -15
- package/dist/compositeProfile/CompositeProfileTemplate.js +0 -65
- package/dist/compositeProfile/CompositeProfileTemplate.js.map +0 -1
- package/dist/compositeProfile/CompositeProfileWatcher.d.ts +0 -18
- package/dist/compositeProfile/CompositeProfileWatcher.js +0 -46
- package/dist/compositeProfile/CompositeProfileWatcher.js.map +0 -1
- package/dist/compositeProfile/StatePersistence.d.ts +0 -39
- package/dist/compositeProfile/StatePersistence.js +0 -249
- package/dist/compositeProfile/StatePersistence.js.map +0 -1
- package/dist/fs/SafeSymlink.d.ts +0 -13
- package/dist/fs/SafeSymlink.js +0 -50
- package/dist/fs/SafeSymlink.js.map +0 -1
- package/dist/profiles/Profile.d.ts +0 -60
- package/dist/profiles/Profile.js +0 -7
- package/dist/profiles/Profile.js.map +0 -1
- package/dist/profiles/ProfileCache.d.ts +0 -8
- package/dist/profiles/ProfileCache.js.map +0 -1
- package/dist/profiles/ProfileLoader.d.ts +0 -28
- package/dist/profiles/ProfileLoader.js +0 -299
- package/dist/profiles/ProfileLoader.js.map +0 -1
- package/dist/profiles/ProfileMerger.d.ts +0 -19
- package/dist/profiles/ProfileMerger.js +0 -112
- package/dist/profiles/ProfileMerger.js.map +0 -1
- package/dist/profiles/ProfileSource.d.ts +0 -35
- package/dist/profiles/ProfileSource.js +0 -13
- package/dist/profiles/ProfileSource.js.map +0 -1
- package/dist/profiles/PromptIncludes.d.ts +0 -32
- package/dist/profiles/PromptIncludes.js +0 -147
- package/dist/profiles/PromptIncludes.js.map +0 -1
- package/dist/prompts/SystemPromptExport.d.ts +0 -16
- package/dist/prompts/SystemPromptExport.js +0 -81
- package/dist/prompts/SystemPromptExport.js.map +0 -1
- package/dist/schemas/profile-source.schema.json +0 -29
- package/dist/schemas/profile.schema.json +0 -200
- package/dist/skills/ProfileSkillResolution.d.ts +0 -21
- package/dist/skills/ProfileSkillResolution.js +0 -88
- package/dist/skills/ProfileSkillResolution.js.map +0 -1
- package/dist/skills/SkillCatalog.d.ts +0 -41
- package/dist/skills/SkillCatalog.js +0 -119
- package/dist/skills/SkillCatalog.js.map +0 -1
- package/dist/skills/SkillResolution.d.ts +0 -34
- package/dist/skills/SkillResolution.js +0 -369
- package/dist/skills/SkillResolution.js.map +0 -1
- package/docs/documentation/profile-repository.md +0 -179
- package/src/schemas/SchemaDocument.ts +0 -20
- package/src/schemas/profile-source.schema.json +0 -29
- package/src/schemas/profile.schema.json +0 -200
|
@@ -1,173 +1,167 @@
|
|
|
1
1
|
# Persona Reviews
|
|
2
2
|
|
|
3
|
-
A persona review catalog
|
|
3
|
+
A persona review catalog gathers structured feedback on a product, docs, onboarding flow, or UX from the points of view of the people who might use it — before asking real prospects to spend time. It uses the [persona convention](../personas.md): **one base review agent** plus a **directory of persona description documents**, run once per document.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
There is no `personas:` map and no agent per customer type. The review rules live in a single agent; each persona is a cheap markdown file you feed it as input.
|
|
6
6
|
|
|
7
7
|
```text
|
|
8
|
-
customer-
|
|
8
|
+
customer-review/ # standalone .agents repo; root is the payload
|
|
9
|
+
agents/
|
|
10
|
+
reviewer/agent.md # the base review agent
|
|
9
11
|
settings.yml
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
docs/user-personas/
|
|
13
|
+
roles/ # reusable job archetypes (shared segment priorities)
|
|
14
|
+
staff-engineer.md
|
|
15
|
+
founder-operator.md
|
|
16
|
+
platform-lead.md
|
|
17
|
+
individuals/ # specific named people, each naming one or more roles
|
|
18
|
+
marcus-bell.md # roles: [staff-engineer]
|
|
19
|
+
dana-okafor.md # roles: [founder-operator]
|
|
20
|
+
priya-nair.md # roles: [platform-lead]
|
|
17
21
|
```
|
|
18
22
|
|
|
19
|
-
|
|
23
|
+
Personas come in two kinds of file, and a review **mixes and matches** them: a **role** carries the priorities everyone in a customer segment shares, and an **individual** is one named person who inherits one or more roles and adds their own demographics and voice. Keep roles reusable and individuals concrete, and you can cover a lot of viewpoints from a small set of files.
|
|
20
24
|
|
|
21
|
-
|
|
22
|
-
# customer-persona-reviews/settings.yml
|
|
23
|
-
profile_sources:
|
|
24
|
-
- path: ./personas
|
|
25
|
-
only:
|
|
26
|
-
- founder-operator
|
|
27
|
-
- staff-engineer
|
|
28
|
-
- engineering-manager
|
|
29
|
-
- platform-lead
|
|
30
|
-
- agency-consultant
|
|
31
|
-
```
|
|
25
|
+
## Settings
|
|
32
26
|
|
|
33
|
-
|
|
27
|
+
Settings only names the default agent and where resources resolve from — no persona list:
|
|
34
28
|
|
|
35
29
|
```yaml
|
|
36
|
-
#
|
|
37
|
-
|
|
38
|
-
label: Customer Persona Base
|
|
39
|
-
template: true
|
|
40
|
-
description: Shared rules for reviewing an artifact from a customer persona's point of view.
|
|
41
|
-
controls:
|
|
42
|
-
append_system_prompt: |
|
|
43
|
-
Review as the assigned customer persona. Read or experience the provided artifact
|
|
44
|
-
from that persona's point of view: docs, screenshots, website, prototype, product
|
|
45
|
-
flow, or onboarding path. Distinguish evidence from assumptions, cite the exact
|
|
46
|
-
page or UI moment that shaped your reaction, and do not invent real customer research.
|
|
30
|
+
# settings.yml
|
|
31
|
+
default_agent: reviewer
|
|
47
32
|
```
|
|
48
33
|
|
|
49
|
-
##
|
|
34
|
+
## The base review agent
|
|
50
35
|
|
|
51
|
-
|
|
36
|
+
One agent holds the review method and the output shape. It does not name any customer type; it reads the persona files it is told to adopt, in order.
|
|
52
37
|
|
|
53
|
-
```yaml
|
|
54
|
-
# personas/founder-operator.yml
|
|
55
|
-
id: founder-operator
|
|
56
|
-
label: Founder Operator
|
|
57
|
-
description: Reviews whether a product helps a hands-on founder get leverage quickly.
|
|
58
|
-
inherits:
|
|
59
|
-
- base-customer-persona
|
|
60
|
-
controls:
|
|
61
|
-
provider: anthropic
|
|
62
|
-
model: anthropic/claude-sonnet-4
|
|
63
|
-
thinking: high
|
|
64
|
-
append_system_prompt: |
|
|
65
|
-
You are a technical founder who writes product specs, edits docs, ships small
|
|
66
|
-
features, and manages a thin team. For this example, review Outfitter as the
|
|
67
|
-
product. Say whether the first hour feels obviously valuable. Flag jargon, setup
|
|
68
|
-
friction, unclear pricing or trust boundaries, and anything that delays the first
|
|
69
|
-
useful outcome.
|
|
70
38
|
```
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
39
|
+
<!-- agents/reviewer/agent.md -->
|
|
40
|
+
---
|
|
41
|
+
name: reviewer
|
|
42
|
+
description: Reviews an artifact from the point of view of an assigned customer persona.
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
Adopt the persona files named in your instructions, in order: a role file
|
|
46
|
+
establishes the segment's priorities, and an individual file layers that
|
|
47
|
+
person's demographics and voice on top (later files refine earlier ones). If
|
|
48
|
+
an individual names roles in its frontmatter, treat those as its baseline.
|
|
49
|
+
|
|
50
|
+
Read or experience the provided artifact from that persona's point of view:
|
|
51
|
+
docs, screenshots, website, prototype, product flow, or onboarding path.
|
|
52
|
+
Distinguish evidence from assumptions, cite the exact page or UI moment that
|
|
53
|
+
shaped your reaction, and do not invent real customer research.
|
|
54
|
+
|
|
55
|
+
Return feedback as: persona, artifact reviewed, first impression, top blocker,
|
|
56
|
+
strongest value signal, confusing language, suggested change, and confidence.
|
|
57
|
+
If you need more context, ask for the smallest missing artifact.
|
|
88
58
|
```
|
|
89
59
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
label: Engineering Manager
|
|
94
|
-
description: Reviews whether a product helps a team standardize work safely.
|
|
95
|
-
inherits:
|
|
96
|
-
- base-customer-persona
|
|
97
|
-
controls:
|
|
98
|
-
provider: openai
|
|
99
|
-
model: openai/gpt-4.1
|
|
100
|
-
thinking: medium
|
|
101
|
-
append_system_prompt: |
|
|
102
|
-
You manage engineers with different tool habits. For this example, review Outfitter
|
|
103
|
-
as the product. Say whether team defaults, onboarding, review expectations, and
|
|
104
|
-
governance are understandable. Flag anything that makes rollout, support, training,
|
|
105
|
-
or risk ownership unclear.
|
|
106
|
-
```
|
|
60
|
+
## Roles: reusable job archetypes
|
|
61
|
+
|
|
62
|
+
A role captures what everyone in a customer segment shares — the job, its goals, anxieties, buying triggers, and what its feedback focuses on — with no personal detail. Roles are reused across many individuals.
|
|
107
63
|
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
64
|
+
```
|
|
65
|
+
<!-- docs/user-personas/roles/staff-engineer.md -->
|
|
66
|
+
---
|
|
67
|
+
kind: role
|
|
68
|
+
title: Staff Engineer
|
|
69
|
+
segment: large-eng-org
|
|
70
|
+
goals: [reduce cross-team friction, raise technical quality, adopt tools that survive scrutiny]
|
|
71
|
+
anxieties: [tools that demo well but fail on a real codebase, unproven claims]
|
|
72
|
+
buying_triggers: [credible examples, verifiable outcomes, a clean migration path]
|
|
73
|
+
feedback_focus: [depth, verification paths, missing examples, evidence behind claims]
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
Responsible for large codebases, architecture decisions, reviews, and
|
|
77
|
+
cross-team technical quality. Cares whether the docs explain how the product
|
|
78
|
+
improves real engineering work. Flags missing examples, weak verification
|
|
79
|
+
paths, and claims that need evidence.
|
|
124
80
|
```
|
|
125
81
|
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
Say whether the docs and UX make isolation, project settings, and switching contexts
|
|
141
|
-
obvious.
|
|
82
|
+
```
|
|
83
|
+
<!-- docs/user-personas/roles/founder-operator.md -->
|
|
84
|
+
---
|
|
85
|
+
kind: role
|
|
86
|
+
title: Founder-operator
|
|
87
|
+
segment: seed-stage-startup
|
|
88
|
+
goals: [ship weekly, keep the team small, reach the next milestone before the runway ends]
|
|
89
|
+
anxieties: [tool sprawl, hidden pricing, time lost to setup]
|
|
90
|
+
buying_triggers: [obvious value in the first hour, no credit card to try]
|
|
91
|
+
feedback_focus: [time-to-first-value, jargon, trust boundaries, pricing clarity]
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
A hands-on founder who writes product specs, edits docs, ships small features,
|
|
95
|
+
and manages a thin team. Cares whether the first hour feels obviously valuable.
|
|
142
96
|
```
|
|
143
97
|
|
|
144
|
-
##
|
|
98
|
+
## Individuals: named people who inherit roles
|
|
145
99
|
|
|
146
|
-
|
|
100
|
+
An individual is one concrete person — with the demographics a [Lean Canvas](https://leanstack.com/lean-canvas) customer segment gets — who names one or more roles to inherit and then adds their own attributes and voice. The named person **mixes and matches** roles: usually one, but a founder who also runs the platform can list both.
|
|
147
101
|
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
102
|
+
```
|
|
103
|
+
<!-- docs/user-personas/individuals/marcus-bell.md -->
|
|
104
|
+
---
|
|
105
|
+
kind: individual
|
|
106
|
+
name: Marcus Bell
|
|
107
|
+
roles: [staff-engineer]
|
|
108
|
+
born: 1985-11-02
|
|
109
|
+
location: Seattle, WA
|
|
110
|
+
household_income: 265000
|
|
111
|
+
education: MS Computer Engineering
|
|
112
|
+
employer: ~400-engineer fintech
|
|
113
|
+
hobbies: [rock climbing, sci-fi novels, restoring old synths]
|
|
114
|
+
skills: [distributed systems, code review, architecture, mentoring]
|
|
115
|
+
tone: dry, skeptical, cites sources
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
Reads new tooling the way he reads a design doc: looking for the failure mode
|
|
119
|
+
first. Warm once convinced, but will not take a benchmark on faith.
|
|
152
120
|
```
|
|
153
121
|
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
122
|
+
```
|
|
123
|
+
<!-- docs/user-personas/individuals/dana-okafor.md -->
|
|
124
|
+
---
|
|
125
|
+
kind: individual
|
|
126
|
+
name: Dana Okafor
|
|
127
|
+
roles: [founder-operator, platform-lead] # mixes two roles
|
|
128
|
+
born: 1989-03-14
|
|
129
|
+
location: Austin, TX
|
|
130
|
+
household_income: 180000
|
|
131
|
+
education: BS Computer Science
|
|
132
|
+
employer: 6-person seed-stage startup (also the de facto platform owner)
|
|
133
|
+
hobbies: [trail running, home espresso, mechanical keyboards]
|
|
134
|
+
skills: [product specs, TypeScript, fundraising, hiring]
|
|
135
|
+
tone: fast, pragmatic, allergic to jargon
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
Wears the founder and the platform hat at once, so she weighs first-hour value
|
|
139
|
+
against fleet-wide safety in the same breath. Impatient with setup friction.
|
|
158
140
|
```
|
|
159
141
|
|
|
160
|
-
|
|
142
|
+
Keep the role attribute set consistent so reviews stay comparable, and let individuals vary freely in demographics and tone. Add more roles (`platform-lead`, `engineering-manager`, `agency-consultant`) and more individuals the same way.
|
|
161
143
|
|
|
162
|
-
|
|
144
|
+
## Running the reviews
|
|
163
145
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
146
|
+
Run the base agent once per persona, naming the role and individual files to adopt and the artifact under review:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
outfitter run reviewer -- --print \
|
|
150
|
+
"Adopt docs/user-personas/roles/staff-engineer.md refined by \
|
|
151
|
+
docs/user-personas/individuals/marcus-bell.md. Read README.md, \
|
|
152
|
+
docs/getting-started.md, and docs/pricing.md, then return the standard \
|
|
153
|
+
review shape: where the product feels credible, where it feels \
|
|
154
|
+
underspecified, and the one example that would most improve your confidence."
|
|
171
155
|
```
|
|
172
156
|
|
|
173
|
-
|
|
157
|
+
```bash
|
|
158
|
+
outfitter run reviewer -- --print \
|
|
159
|
+
"Adopt docs/user-personas/individuals/dana-okafor.md and the roles it names. \
|
|
160
|
+
Browse the local docs site and try the first-run setup flow. Report the \
|
|
161
|
+
first confusing moment, the first moment that felt valuable, and whether \
|
|
162
|
+
you would keep using it."
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
Model and thinking choices — cheaper models for high-volume routing reviews, deeper reasoning for platform-risk reviews — live in the reviewer agent's loadout, or a machine-local override, rather than being duplicated per persona.
|
|
166
|
+
|
|
167
|
+
Because the base agent fixes the output shape, feedback from every persona document is directly comparable. The result is a reusable customer-persona review catalog that reads docs or experiences a UX from many viewpoints without pretending to replace real customer discovery.
|
package/docs/philosophy.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Outfitter Philosophy
|
|
2
2
|
|
|
3
|
-
Make, share, and switch the profiles your coding agents use — manually or programmatically.
|
|
3
|
+
Make, share, and switch the agent profiles your coding agents use — manually or programmatically. A profile is just an agent and the loadout it composes; there is no separate profile format.
|
|
4
4
|
|
|
5
5
|
## Expeditious agents
|
|
6
6
|
|
|
@@ -12,7 +12,7 @@ Tight profiles also make delegation practical. When a role is small and well def
|
|
|
12
12
|
|
|
13
13
|
## Composition over accumulation
|
|
14
14
|
|
|
15
|
-
The common failure mode is a single, ever-growing agent setup: one configuration that accretes every tool and instruction anyone has ever needed, serving no task particularly well. Outfitter takes the opposite approach.
|
|
15
|
+
The common failure mode is a single, ever-growing agent setup: one configuration that accretes every tool and instruction anyone has ever needed, serving no task particularly well. Outfitter takes the opposite approach. Agent profiles are small, purpose-built, and composable — you stack a personal baseline, a team convention, and a project-specific role, and switch between agents as the work changes. Each stays sharp because it never has to be everything at once.
|
|
16
16
|
|
|
17
17
|
## Individual, team, enterprise
|
|
18
18
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-outfitter/outfitter",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "Profile-oriented wrapper for launching pi, Claude Code, and future agent CLIs with reproducible configuration.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"LICENSE.md"
|
|
27
27
|
],
|
|
28
28
|
"scripts": {
|
|
29
|
-
"build": "tsc -p tsconfig.build.json && shx rm -rf dist/schemas && shx mkdir -p dist/schemas && shx cp src/schemas/*.json dist/schemas/ && shx
|
|
29
|
+
"build": "tsc -p tsconfig.build.json && shx rm -rf dist/schemas && shx mkdir -p dist/schemas && shx cp src/schemas/*.json dist/schemas/ && shx chmod +x dist/cli.js",
|
|
30
30
|
"prepare": "npm run build",
|
|
31
31
|
"prepack": "node scripts/sync-package-assets.mjs",
|
|
32
32
|
"dev_install": "node scripts/dev-install.mjs",
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
"vitest": "^4.1.7"
|
|
61
61
|
},
|
|
62
62
|
"engines": {
|
|
63
|
-
"node": ">=
|
|
63
|
+
"node": ">=24.18.0 <25"
|
|
64
64
|
},
|
|
65
65
|
"keywords": [
|
|
66
66
|
"agent",
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://outfitter.dev/schemas/agent.schema.json",
|
|
4
|
+
"title": "Outfitter agent definition frontmatter",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["name"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"name": { "type": "string", "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", "maxLength": 64 },
|
|
9
|
+
"description": { "type": "string" },
|
|
10
|
+
"skills": {
|
|
11
|
+
"$ref": "#/$defs/slugList",
|
|
12
|
+
"description": "Skill slugs resolved from agents/<name>/skills first, then catalog-wide skills."
|
|
13
|
+
},
|
|
14
|
+
"subagents": {
|
|
15
|
+
"$ref": "#/$defs/slugList",
|
|
16
|
+
"description": "Agent slugs delegated to. Resolved catalog-wide (a delegate is a shared agent, not nested under agents/<name>)."
|
|
17
|
+
},
|
|
18
|
+
"mcp": {
|
|
19
|
+
"$ref": "#/$defs/slugList",
|
|
20
|
+
"description": "MCP server ids. Per-agent agents/<name>/mcp.json is discovered and merges by id over the tree-root mcp.json; projection into the run is deferred (adapter parity, #183)."
|
|
21
|
+
},
|
|
22
|
+
"extensions": {
|
|
23
|
+
"$ref": "#/$defs/slugList",
|
|
24
|
+
"description": "Harness-native extension selections passed through to the launch; no on-disk agent-local namespace."
|
|
25
|
+
},
|
|
26
|
+
"plugins": {
|
|
27
|
+
"$ref": "#/$defs/slugList",
|
|
28
|
+
"description": "Harness-native plugin selections passed through to the launch; no on-disk agent-local namespace."
|
|
29
|
+
},
|
|
30
|
+
"model": { "type": "string", "minLength": 1 },
|
|
31
|
+
"thinking": { "type": "string", "minLength": 1 },
|
|
32
|
+
"tools": {
|
|
33
|
+
"type": "object",
|
|
34
|
+
"properties": {
|
|
35
|
+
"allow": { "type": "array", "items": { "type": "string", "minLength": 1 } },
|
|
36
|
+
"deny": { "type": "array", "items": { "type": "string", "minLength": 1 } }
|
|
37
|
+
},
|
|
38
|
+
"additionalProperties": false
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"additionalProperties": true,
|
|
42
|
+
"$defs": {
|
|
43
|
+
"slugList": {
|
|
44
|
+
"type": "array",
|
|
45
|
+
"items": { "type": "string", "minLength": 1 }
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -4,10 +4,14 @@
|
|
|
4
4
|
"title": "Outfitter settings",
|
|
5
5
|
"type": "object",
|
|
6
6
|
"properties": {
|
|
7
|
-
"
|
|
8
|
-
"
|
|
7
|
+
"default_agent": { "type": "string", "minLength": 1 },
|
|
8
|
+
"default_harness": { "enum": ["pi", "claude"] },
|
|
9
9
|
"cache_directory": { "type": "string", "minLength": 1 },
|
|
10
|
-
"
|
|
10
|
+
"state_persistence": {
|
|
11
|
+
"type": "object",
|
|
12
|
+
"description": "Maps adapter-declared state paths to a persistence strategy.",
|
|
13
|
+
"additionalProperties": { "enum": ["symlink", "discard", "warn", "error", "prompt"] }
|
|
14
|
+
},
|
|
11
15
|
"startup": {
|
|
12
16
|
"type": "object",
|
|
13
17
|
"description": "Controls Outfitter startup presentation inside launched agents.",
|
|
@@ -21,18 +25,37 @@
|
|
|
21
25
|
},
|
|
22
26
|
"enterprise": {
|
|
23
27
|
"type": "object",
|
|
24
|
-
"description": "Enterprise governance settings. User-home ~/.
|
|
28
|
+
"description": "Enterprise governance settings. User-home ~/.agents/settings.yml is the source of truth for these controls.",
|
|
25
29
|
"properties": {
|
|
26
|
-
"
|
|
30
|
+
"private_catalogs": {
|
|
27
31
|
"type": "boolean",
|
|
28
|
-
"description": "Enable confirmed-private GitHub
|
|
32
|
+
"description": "Enable confirmed-private GitHub catalogs after reviewing the Outfitter Enterprise license or enterprise agreement."
|
|
29
33
|
}
|
|
30
34
|
},
|
|
31
35
|
"additionalProperties": false
|
|
32
36
|
},
|
|
33
|
-
"
|
|
37
|
+
"sources": {
|
|
34
38
|
"type": "array",
|
|
35
|
-
"items": {
|
|
39
|
+
"items": {
|
|
40
|
+
"type": "object",
|
|
41
|
+
"oneOf": [
|
|
42
|
+
{
|
|
43
|
+
"required": ["path"],
|
|
44
|
+
"not": {
|
|
45
|
+
"anyOf": [{ "required": ["uri"] }, { "required": ["github"] }, { "required": ["ref"] }]
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
{ "required": ["uri"], "not": { "required": ["github"] } },
|
|
49
|
+
{ "required": ["github"], "not": { "required": ["uri"] } }
|
|
50
|
+
],
|
|
51
|
+
"properties": {
|
|
52
|
+
"path": { "type": "string", "minLength": 1 },
|
|
53
|
+
"uri": { "type": "string", "minLength": 1 },
|
|
54
|
+
"github": { "type": "string", "pattern": "^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$" },
|
|
55
|
+
"ref": { "type": "string", "minLength": 1 }
|
|
56
|
+
},
|
|
57
|
+
"additionalProperties": false
|
|
58
|
+
}
|
|
36
59
|
},
|
|
37
60
|
"remote_settings": {
|
|
38
61
|
"type": "array",
|
|
@@ -53,7 +76,7 @@
|
|
|
53
76
|
},
|
|
54
77
|
"custom_settings": {
|
|
55
78
|
"type": "object",
|
|
56
|
-
"description": "Arbitrary YAML-compatible values exposed to Outfitter
|
|
79
|
+
"description": "Arbitrary YAML-compatible values exposed to Outfitter composition templates as outfitter.custom_settings."
|
|
57
80
|
}
|
|
58
81
|
},
|
|
59
82
|
"additionalProperties": true
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import type { AppendSystemPromptControl, ProfileControls } from '../profiles/Profile.js';
|
|
2
|
-
export declare const genericControlNames: Set<string>;
|
|
3
|
-
export declare const supportedControlNames: (controls: ReadonlySet<string>) => readonly string[];
|
|
4
|
-
export declare const controlAliases: readonly [{
|
|
5
|
-
readonly camelCase: "sessionDirectory";
|
|
6
|
-
readonly snakeCase: "session_directory";
|
|
7
|
-
}, {
|
|
8
|
-
readonly camelCase: "promptTemplate";
|
|
9
|
-
readonly snakeCase: "prompt_template";
|
|
10
|
-
}, {
|
|
11
|
-
readonly camelCase: "systemPrompt";
|
|
12
|
-
readonly snakeCase: "system_prompt";
|
|
13
|
-
}, {
|
|
14
|
-
readonly camelCase: "appendSystemPrompt";
|
|
15
|
-
readonly snakeCase: "append_system_prompt";
|
|
16
|
-
}];
|
|
17
|
-
export declare const mergeAgentSpecificControls: <T extends ProfileControls>(controls: ProfileControls, agentKey: "pi" | "claude") => T;
|
|
18
|
-
export declare const flagValue: (flag: string, value: string | undefined) => readonly string[];
|
|
19
|
-
export declare const repeatFlag: (flag: string, values: readonly string[] | undefined) => readonly string[];
|
|
20
|
-
export declare const repeatFlagValue: (flag: string, value: AppendSystemPromptControl | undefined) => readonly string[];
|
|
21
|
-
export declare const findUnsupportedControlNames: (controls: Readonly<Record<string, unknown>>, supportedControls: ReadonlySet<string>, knownControls?: ReadonlySet<string>) => string[];
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import { mergeLaunchResourceSources, mergeSkillControlSources } from './LaunchResources.js';
|
|
2
|
-
export const genericControlNames = new Set([
|
|
3
|
-
'model',
|
|
4
|
-
'provider',
|
|
5
|
-
'thinking',
|
|
6
|
-
'environment',
|
|
7
|
-
'args',
|
|
8
|
-
'sessionDirectory',
|
|
9
|
-
'session_directory',
|
|
10
|
-
'extensions',
|
|
11
|
-
'skills',
|
|
12
|
-
'promptTemplate',
|
|
13
|
-
'prompt_template',
|
|
14
|
-
'systemPrompt',
|
|
15
|
-
'system_prompt',
|
|
16
|
-
'appendSystemPrompt',
|
|
17
|
-
'append_system_prompt',
|
|
18
|
-
'deepwork',
|
|
19
|
-
'pi',
|
|
20
|
-
'claude',
|
|
21
|
-
]);
|
|
22
|
-
export const supportedControlNames = (controls) => [...controls].filter((controlName) => !controlName.includes('_') && controlName !== 'pi' && controlName !== 'claude');
|
|
23
|
-
export const controlAliases = [
|
|
24
|
-
{ camelCase: 'sessionDirectory', snakeCase: 'session_directory' },
|
|
25
|
-
{ camelCase: 'promptTemplate', snakeCase: 'prompt_template' },
|
|
26
|
-
{ camelCase: 'systemPrompt', snakeCase: 'system_prompt' },
|
|
27
|
-
{ camelCase: 'appendSystemPrompt', snakeCase: 'append_system_prompt' },
|
|
28
|
-
];
|
|
29
|
-
export const mergeAgentSpecificControls = (controls, agentKey) => {
|
|
30
|
-
const agentControls = controls[agentKey];
|
|
31
|
-
return {
|
|
32
|
-
...controls,
|
|
33
|
-
...definedControls(agentControls),
|
|
34
|
-
environment: { ...controls.environment, ...agentControls?.environment },
|
|
35
|
-
args: agentControls?.args ?? controls.args,
|
|
36
|
-
extensions: mergeLaunchResourceSources('extension', controls.extensions, agentControls?.extensions),
|
|
37
|
-
skills: mergeSkillControlSources(controls.skills, agentControls?.skills),
|
|
38
|
-
};
|
|
39
|
-
};
|
|
40
|
-
export const flagValue = (flag, value) => value === undefined ? [] : [flag, value];
|
|
41
|
-
export const repeatFlag = (flag, values) => values === undefined ? [] : values.flatMap((value) => [flag, value]);
|
|
42
|
-
export const repeatFlagValue = (flag, value) => {
|
|
43
|
-
if (value === undefined) {
|
|
44
|
-
return [];
|
|
45
|
-
}
|
|
46
|
-
if (typeof value === 'string') {
|
|
47
|
-
return [flag, value];
|
|
48
|
-
}
|
|
49
|
-
if (!Array.isArray(value)) {
|
|
50
|
-
return [];
|
|
51
|
-
}
|
|
52
|
-
return repeatFlag(flag, value.filter((entry) => typeof entry === 'string'));
|
|
53
|
-
};
|
|
54
|
-
export const findUnsupportedControlNames = (controls, supportedControls, knownControls = genericControlNames) => {
|
|
55
|
-
const controlNames = new Set(Object.keys(controls));
|
|
56
|
-
const unsupported = [];
|
|
57
|
-
for (const { camelCase, snakeCase } of controlAliases) {
|
|
58
|
-
if (!controlNames.has(camelCase) && !controlNames.has(snakeCase)) {
|
|
59
|
-
continue;
|
|
60
|
-
}
|
|
61
|
-
if (!supportedControls.has(camelCase) && !supportedControls.has(snakeCase)) {
|
|
62
|
-
unsupported.push(controlNames.has(snakeCase) ? snakeCase : camelCase);
|
|
63
|
-
}
|
|
64
|
-
controlNames.delete(camelCase);
|
|
65
|
-
controlNames.delete(snakeCase);
|
|
66
|
-
}
|
|
67
|
-
unsupported.push(...[...controlNames].filter((controlName) => !knownControls.has(controlName) || !supportedControls.has(controlName)));
|
|
68
|
-
return unsupported;
|
|
69
|
-
};
|
|
70
|
-
const definedControls = (controls) => {
|
|
71
|
-
if (controls === undefined) {
|
|
72
|
-
return {};
|
|
73
|
-
}
|
|
74
|
-
return Object.fromEntries(Object.entries(controls).filter((entry) => entry[1] !== undefined));
|
|
75
|
-
};
|
|
76
|
-
//# sourceMappingURL=AdapterProfileControls.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AdapterProfileControls.js","sourceRoot":"","sources":["../../src/agents/AdapterProfileControls.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { Profile } from '../profiles/Profile.js';
|
|
2
|
-
import type { StatePathDeclaration, StatePersistenceStrategy, CompositeProfileStatePath } from '../compositeProfile/StatePersistence.js';
|
|
3
|
-
export interface DeclaredStatePathInput {
|
|
4
|
-
readonly adapterId: string;
|
|
5
|
-
readonly declarations: Readonly<Record<string, StatePathDeclaration>>;
|
|
6
|
-
readonly profile: Profile;
|
|
7
|
-
readonly resolveSourcePath: (relativePath: string, directory: boolean) => string;
|
|
8
|
-
}
|
|
9
|
-
export declare const createDeclaredStatePaths: (input: DeclaredStatePathInput) => readonly CompositeProfileStatePath[];
|
|
10
|
-
export declare const assertDeclaredStatePersistenceKeys: (adapterId: string, declarations: Readonly<Record<string, StatePathDeclaration>>, profile: Profile) => void;
|
|
11
|
-
export declare const resolveStateStrategy: (profile: Profile, relativePath: string, declaration: StatePathDeclaration) => StatePersistenceStrategy;
|
|
12
|
-
export declare const findProfileStateSource: (profileFolders: readonly string[], adapterId: string, relativePath: string, directory: boolean) => string | undefined;
|