@ai-outfitter/outfitter 0.9.0 → 0.11.0

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 (77) hide show
  1. package/.outfitter/skills/outfitter/SKILL.md +86 -0
  2. package/README.md +2 -0
  3. package/code/pi-extension/src/outfitter-extension.js +48 -19
  4. package/dist/agents/AdapterProfileControls.js +2 -2
  5. package/dist/agents/AdapterProfileControls.js.map +1 -1
  6. package/dist/agents/AgentAdapter.d.ts +0 -2
  7. package/dist/agents/LaunchResources.d.ts +4 -0
  8. package/dist/agents/LaunchResources.js +27 -1
  9. package/dist/agents/LaunchResources.js.map +1 -1
  10. package/dist/agents/OutfitterSkill.d.ts +11 -0
  11. package/dist/agents/OutfitterSkill.js +128 -0
  12. package/dist/agents/OutfitterSkill.js.map +1 -0
  13. package/dist/agents/claude/ClaudeAdapter.js +16 -1
  14. package/dist/agents/claude/ClaudeAdapter.js.map +1 -1
  15. package/dist/agents/pi/PiAdapter.js +4 -12
  16. package/dist/agents/pi/PiAdapter.js.map +1 -1
  17. package/dist/agents/pi/PiArgs.js +1 -1
  18. package/dist/agents/pi/PiArgs.js.map +1 -1
  19. package/dist/agents/pi/PiSkillSources.js +5 -1
  20. package/dist/agents/pi/PiSkillSources.js.map +1 -1
  21. package/dist/cli/OutfitterCli.js +0 -2
  22. package/dist/cli/OutfitterCli.js.map +1 -1
  23. package/dist/cli/commands/PiLoginLaunch.d.ts +5 -0
  24. package/dist/cli/commands/PiLoginLaunch.js +2 -0
  25. package/dist/cli/commands/PiLoginLaunch.js.map +1 -1
  26. package/dist/cli/commands/RunCommand.d.ts +0 -2
  27. package/dist/cli/commands/RunCommand.js +29 -9
  28. package/dist/cli/commands/RunCommand.js.map +1 -1
  29. package/dist/cli/commands/profile/LintCommand.js +33 -1
  30. package/dist/cli/commands/profile/LintCommand.js.map +1 -1
  31. package/dist/cli/commands/run/RunProfileResolution.d.ts +2 -0
  32. package/dist/cli/commands/run/RunProfileResolution.js +4 -0
  33. package/dist/cli/commands/run/RunProfileResolution.js.map +1 -1
  34. package/dist/profiles/Profile.d.ts +14 -1
  35. package/dist/profiles/Profile.js.map +1 -1
  36. package/dist/profiles/ProfileLoader.js +18 -2
  37. package/dist/profiles/ProfileLoader.js.map +1 -1
  38. package/dist/profiles/ProfileMerger.js +3 -2
  39. package/dist/profiles/ProfileMerger.js.map +1 -1
  40. package/dist/schemas/profile.schema.json +40 -3
  41. package/dist/skills/ProfileSkillResolution.d.ts +21 -0
  42. package/dist/skills/ProfileSkillResolution.js +88 -0
  43. package/dist/skills/ProfileSkillResolution.js.map +1 -0
  44. package/dist/skills/SkillCatalog.d.ts +41 -0
  45. package/dist/skills/SkillCatalog.js +119 -0
  46. package/dist/skills/SkillCatalog.js.map +1 -0
  47. package/dist/skills/SkillDocument.d.ts +21 -0
  48. package/dist/skills/SkillDocument.js +85 -0
  49. package/dist/skills/SkillDocument.js.map +1 -0
  50. package/dist/skills/SkillResolution.d.ts +34 -0
  51. package/dist/skills/SkillResolution.js +369 -0
  52. package/dist/skills/SkillResolution.js.map +1 -0
  53. package/{doc → docs}/documentation/README.md +4 -1
  54. package/docs/documentation/actions.md +97 -0
  55. package/docs/documentation/best-practices.md +105 -0
  56. package/{doc → docs}/documentation/profile-repository.md +74 -6
  57. package/docs/documentation/skills.md +485 -0
  58. package/{doc → docs}/documentation/support-matrix.md +4 -1
  59. package/package.json +4 -8
  60. package/src/schemas/profile.schema.json +40 -3
  61. package/dist/agents/OutfitterDocs.d.ts +0 -2
  62. package/dist/agents/OutfitterDocs.js +0 -38
  63. package/dist/agents/OutfitterDocs.js.map +0 -1
  64. package/skills/outfitter/SKILL.md +0 -68
  65. /package/{doc → docs}/architecture/state_writeback_strategy.md +0 -0
  66. /package/{doc → docs}/documentation/cli.md +0 -0
  67. /package/{doc → docs}/documentation/concepts.md +0 -0
  68. /package/{doc → docs}/documentation/first-time-cli-agent-users.md +0 -0
  69. /package/{doc → docs}/documentation/getting-started.md +0 -0
  70. /package/{doc → docs}/documentation/iterating-on-profiles.md +0 -0
  71. /package/{doc → docs}/documentation/profiles.md +0 -0
  72. /package/{doc → docs}/documentation/state.md +0 -0
  73. /package/{doc → docs}/documentation/switching-to-outfitter.md +0 -0
  74. /package/{doc → docs}/documentation/usecases/engineering.md +0 -0
  75. /package/{doc → docs}/documentation/usecases/organization-profile-catalog.md +0 -0
  76. /package/{doc → docs}/documentation/usecases/persona-reviews.md +0 -0
  77. /package/{doc → docs}/philosophy.md +0 -0
@@ -42,7 +42,7 @@
42
42
  },
43
43
  "skills": {
44
44
  "type": "array",
45
- "items": { "type": "string" }
45
+ "items": { "$ref": "#/$defs/skillEntry" }
46
46
  },
47
47
  "prompt_template": { "type": "string" },
48
48
  "system_prompt": { "type": "string" },
@@ -81,7 +81,7 @@
81
81
  },
82
82
  "skills": {
83
83
  "type": "array",
84
- "items": { "type": "string" }
84
+ "items": { "$ref": "#/$defs/skillEntry" }
85
85
  },
86
86
  "prompt_template": { "type": "string" },
87
87
  "system_prompt": { "type": "string" },
@@ -111,7 +111,7 @@
111
111
  },
112
112
  "skills": {
113
113
  "type": "array",
114
- "items": { "type": "string" }
114
+ "items": { "$ref": "#/$defs/skillEntry" }
115
115
  },
116
116
  "prompt_template": { "type": "string" },
117
117
  "system_prompt": { "type": "string" },
@@ -129,6 +129,43 @@
129
129
  },
130
130
  "additionalProperties": true,
131
131
  "$defs": {
132
+ "skillReference": {
133
+ "oneOf": [
134
+ {
135
+ "type": "object",
136
+ "required": ["file"],
137
+ "properties": {
138
+ "file": { "type": "string" }
139
+ },
140
+ "additionalProperties": false
141
+ },
142
+ {
143
+ "type": "object",
144
+ "required": ["repo_file"],
145
+ "properties": {
146
+ "repo_file": { "type": "string" }
147
+ },
148
+ "additionalProperties": false
149
+ }
150
+ ]
151
+ },
152
+ "skillEntry": {
153
+ "oneOf": [
154
+ { "type": "string" },
155
+ {
156
+ "type": "object",
157
+ "required": ["id"],
158
+ "properties": {
159
+ "id": { "type": "string" },
160
+ "references": {
161
+ "type": "array",
162
+ "items": { "$ref": "#/$defs/skillReference" }
163
+ }
164
+ },
165
+ "additionalProperties": false
166
+ }
167
+ ]
168
+ },
132
169
  "appendSystemPromptEntry": {
133
170
  "oneOf": [
134
171
  { "type": "string" },
@@ -1,2 +0,0 @@
1
- export declare const resolveOutfitterDocsDirectory: () => string | undefined;
2
- export declare const createOutfitterDocsSystemPrompt: (docsDirectory: string) => string;
@@ -1,38 +0,0 @@
1
- // Points launched agents at the bundled user-facing Outfitter documentation.
2
- //
3
- // This mirrors pi's own self-documentation mechanism: pi's default system prompt
4
- // lists absolute paths to the docs shipped inside the pi package with guidance to
5
- // read them only when the user asks about pi itself. Outfitter appends the same
6
- // kind of section for its own documentation so an Outfitter-managed agent can
7
- // explain Outfitter features and iterate on its own profiles.
8
- import { existsSync } from 'node:fs';
9
- import { dirname, join } from 'node:path';
10
- import { fileURLToPath } from 'node:url';
11
- const packageRootDirectory = join(dirname(fileURLToPath(import.meta.url)), '..', '..');
12
- // The docs live at <repo>/docs/documentation in the repository layout and are
13
- // staged to <package>/doc/documentation by scripts/sync-package-assets.mjs for
14
- // the published npm package.
15
- export const resolveOutfitterDocsDirectory = () => {
16
- const repositoryDocsPath = join(packageRootDirectory, '..', '..', 'docs', 'documentation');
17
- const packageDocsPath = join(packageRootDirectory, 'doc', 'documentation');
18
- /* v8 ignore else -- packaged npm layout is exercised after pack, not unit tests. */
19
- if (existsSync(repositoryDocsPath)) {
20
- return repositoryDocsPath;
21
- }
22
- /* v8 ignore next 3 -- packaged npm layout is exercised after pack, not unit tests. */
23
- if (existsSync(packageDocsPath)) {
24
- return packageDocsPath;
25
- }
26
- /* v8 ignore next -- defensive fallback for installs that exclude documentation assets. */
27
- return undefined;
28
- };
29
- export const createOutfitterDocsSystemPrompt = (docsDirectory) => {
30
- return [
31
- 'Outfitter documentation (read only when the user asks about Outfitter itself — profiles, settings, profile catalogs, setup sources, state persistence, or how to inspect or change this launch configuration):',
32
- `- Documentation index: ${join(docsDirectory, 'README.md')}`,
33
- `- Additional docs: ${docsDirectory}`,
34
- '- When asked about: getting started (getting-started.md), profiles and profile layouts (profiles.md), shared profile repositories and catalogs (profile-repository.md), state persistence (state.md), switching from another agent CLI (switching-to-outfitter.md), first-time CLI agent users (first-time-cli-agent-users.md), iterating on a local or worktree profile — including improving your own active profile (iterating-on-profiles.md)',
35
- '- When reading Outfitter docs, resolve relative links against the documentation directory, read the referenced .md files completely, and follow cross-references before answering or editing profiles.',
36
- ].join('\n');
37
- };
38
- //# sourceMappingURL=OutfitterDocs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OutfitterDocs.js","sourceRoot":"","sources":["../../src/agents/OutfitterDocs.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,EAAE;AACF,iFAAiF;AACjF,kFAAkF;AAClF,gFAAgF;AAChF,8EAA8E;AAC9E,8DAA8D;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAEvF,8EAA8E;AAC9E,+EAA+E;AAC/E,6BAA6B;AAC7B,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAuB,EAAE;IACpE,MAAM,kBAAkB,GAAG,IAAI,CAAC,oBAAoB,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;IAC3F,MAAM,eAAe,GAAG,IAAI,CAAC,oBAAoB,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;IAE3E,oFAAoF;IACpF,IAAI,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACnC,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,sFAAsF;IACtF,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QAChC,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,0FAA0F;IAC1F,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,aAAqB,EAAU,EAAE;IAC/E,OAAO;QACL,gNAAgN;QAChN,0BAA0B,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,EAAE;QAC5D,sBAAsB,aAAa,EAAE;QACrC,mbAAmb;QACnb,wMAAwM;KACzM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC,CAAC"}
@@ -1,68 +0,0 @@
1
- ---
2
- name: outfitter
3
- description: Help users create, inspect, and maintain Outfitter profiles, settings, setup sources, and Pi launch loadouts. Use when a user invokes /outfitter or asks for help setting up Outfitter-managed profiles, profile.yml files, profile sources, default profiles, skills, extensions, prompts, or setup repositories.
4
- ---
5
-
6
- # Outfitter
7
-
8
- Use this skill to guide profile setup for Outfitter-managed Pi sessions.
9
-
10
- ## Default behavior
11
-
12
- If the user invokes `/outfitter` without a specific request:
13
-
14
- 1. Run `outfitter profile list` to show available profiles.
15
- 2. Summarize the profiles by name, scope/source when visible, and default status when visible.
16
- 3. Ask whether the user wants to create a new profile.
17
- 4. If they do, ask for the intended profile ID and scope before running `outfitter profile create`.
18
-
19
- ## Workflow
20
-
21
- 1. Inspect the current directory and home configuration before editing:
22
- - `.outfitter/settings.yml`
23
- - `.outfitter/local/settings.yml`
24
- - `.outfitter/profiles/*/profile.yml`
25
- - `~/.outfitter/settings.yml`
26
- 2. Identify the intended scope:
27
- - user profile: reusable across projects
28
- - project profile: checked into the repository
29
- - project-local profile: private machine-specific overrides
30
- 3. Prefer existing commands before manual file edits:
31
- - `outfitter setup <source>` to import setup sources
32
- - `outfitter sync` to refresh remote profile sources
33
- - `outfitter profile list` to inspect available profiles
34
- - `outfitter profile create <id> --scope user|project|project-local` to scaffold profiles
35
- - `outfitter run --profile <id>` to verify launch behavior
36
- 4. Keep profile changes focused:
37
- - put reusable resources under `skills/`, `prompts/`, `extensions/`, or `deepwork/jobs/`
38
- - put Pi-only resources under `cli_specific/pi/`
39
- - put Claude-only resources under `cli_specific/claude/`
40
- 5. Validate profile YAML against the current schema and run a smoke test with `outfitter run --profile <id> -- --help` when possible.
41
-
42
- ## Profile skeleton
43
-
44
- ```yaml
45
- id: engineer
46
- label: Engineer
47
-
48
- controls:
49
- provider: openai-codex
50
- model: gpt-5.5
51
- thinking: xhigh
52
- append_system_prompt:
53
- - ./prompts/engineering.md
54
- skills:
55
- - ./skills/review
56
- pi:
57
- extensions:
58
- - git:github.com/ai-outfitter/ulta-tasklist
59
- - git:github.com/ai-outfitter/deepwork
60
- skills:
61
- - ./cli_specific/pi/skills/outfitter
62
- ```
63
-
64
- ## Notes
65
-
66
- - Use profile IDs matching lowercase letters, digits, `.`, `_`, and `-`.
67
- - Use `template: true` only for inheritance-only profiles.
68
- - Do not store provider secrets in profile files; use Pi login, environment variables, or the user's private agent state.
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes