@ai-outfitter/outfitter 1.5.0 → 1.7.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 (83) hide show
  1. package/README.md +11 -2
  2. package/code/pi-extension/src/outfitter-extension.js +9 -1
  3. package/dist/agents/AgentLaunch.d.ts +2 -2
  4. package/dist/agents/AgentLaunch.js +4 -3
  5. package/dist/agents/AgentLaunch.js.map +1 -1
  6. package/dist/agents/ClaudeStatePersistence.d.ts +18 -0
  7. package/dist/agents/ClaudeStatePersistence.js +225 -0
  8. package/dist/agents/ClaudeStatePersistence.js.map +1 -0
  9. package/dist/cli/OutfitterCli.js +1 -1
  10. package/dist/cli/OutfitterCli.js.map +1 -1
  11. package/dist/cli/commands/DumpCommand.d.ts +1 -0
  12. package/dist/cli/commands/DumpCommand.js +11 -1
  13. package/dist/cli/commands/DumpCommand.js.map +1 -1
  14. package/dist/cli/commands/ListCommand.d.ts +2 -0
  15. package/dist/cli/commands/ListCommand.js +15 -4
  16. package/dist/cli/commands/ListCommand.js.map +1 -1
  17. package/dist/cli/commands/RunAgentCommand.js +85 -17
  18. package/dist/cli/commands/RunAgentCommand.js.map +1 -1
  19. package/dist/cli/commands/SyncCommand.d.ts +8 -3
  20. package/dist/cli/commands/SyncCommand.js +126 -21
  21. package/dist/cli/commands/SyncCommand.js.map +1 -1
  22. package/dist/cli/commands/ValidateCommand.js +1 -1
  23. package/dist/cli/commands/ValidateCommand.js.map +1 -1
  24. package/dist/projection/CodexMcp.d.ts +11 -0
  25. package/dist/projection/CodexMcp.js +143 -0
  26. package/dist/projection/CodexMcp.js.map +1 -0
  27. package/dist/projection/Materialize.d.ts +3 -1
  28. package/dist/projection/Materialize.js +7 -3
  29. package/dist/projection/Materialize.js.map +1 -1
  30. package/dist/projection/ProjectHarness.js +66 -29
  31. package/dist/projection/ProjectHarness.js.map +1 -1
  32. package/dist/projection/Projection.d.ts +2 -0
  33. package/dist/resolver/AmbiguityWarnings.d.ts +7 -0
  34. package/dist/resolver/AmbiguityWarnings.js +86 -0
  35. package/dist/resolver/AmbiguityWarnings.js.map +1 -0
  36. package/dist/resolver/Layer.d.ts +8 -2
  37. package/dist/resolver/Layer.js +48 -8
  38. package/dist/resolver/Layer.js.map +1 -1
  39. package/dist/resolver/ResolverContext.d.ts +3 -1
  40. package/dist/resolver/ResolverContext.js +11 -2
  41. package/dist/resolver/ResolverContext.js.map +1 -1
  42. package/dist/resolver/ResolverValidation.d.ts +12 -1
  43. package/dist/resolver/ResolverValidation.js +30 -20
  44. package/dist/resolver/ResolverValidation.js.map +1 -1
  45. package/dist/schemas/settings.schema.json +1 -1
  46. package/dist/schemas/system-extension-hook.schema.json +38 -0
  47. package/dist/settings/Settings.d.ts +1 -1
  48. package/dist/settings/Settings.js +1 -1
  49. package/dist/settings/Settings.js.map +1 -1
  50. package/dist/settings/SettingsLoader.js.map +1 -1
  51. package/dist/setup/DefaultCatalog.d.ts +18 -0
  52. package/dist/setup/DefaultCatalog.js +74 -13
  53. package/dist/setup/DefaultCatalog.js.map +1 -1
  54. package/dist/sources/SourceCache.d.ts +20 -0
  55. package/dist/sources/SourceCache.js +31 -1
  56. package/dist/sources/SourceCache.js.map +1 -1
  57. package/dist/sources/TransitiveSources.d.ts +45 -0
  58. package/dist/sources/TransitiveSources.js +179 -0
  59. package/dist/sources/TransitiveSources.js.map +1 -0
  60. package/dist/system/SystemExtensionHook.d.ts +34 -0
  61. package/dist/system/SystemExtensionHook.js +190 -0
  62. package/dist/system/SystemExtensionHook.js.map +1 -0
  63. package/dist/validation/SchemaValidator.d.ts +1 -1
  64. package/dist/validation/SchemaValidator.js +2 -0
  65. package/dist/validation/SchemaValidator.js.map +1 -1
  66. package/docs/architecture/state_writeback_strategy.md +15 -3
  67. package/docs/documentation/README.md +14 -1
  68. package/docs/documentation/catalogs.md +61 -2
  69. package/docs/documentation/cli.md +2 -1
  70. package/docs/documentation/concepts.md +2 -2
  71. package/docs/documentation/hooks.md +33 -0
  72. package/docs/documentation/in-cluster.md +2 -0
  73. package/docs/documentation/migration.md +1 -1
  74. package/docs/documentation/personas.md +1 -1
  75. package/docs/documentation/settings.md +1 -1
  76. package/docs/documentation/state.md +27 -0
  77. package/docs/documentation/support-matrix.md +34 -23
  78. package/docs/documentation/usecases/org-onboarding-sdlc-report.md +143 -0
  79. package/docs/documentation/usecases/persona-reviews.md +1 -1
  80. package/docs/philosophy.md +20 -0
  81. package/package.json +1 -1
  82. package/src/schemas/settings.schema.json +1 -1
  83. package/src/schemas/system-extension-hook.schema.json +38 -0
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Outfitter
2
2
 
3
- Outfitter is the toolchain for [`.agents`](./docs/documentation/concepts.md#the-agents-protocol): it resolves agent configuration from local and remote `.agents` trees, composes agents, skills, and knowledge by slug, and launches the result through wrapped agent CLIs like [`pi`](https://github.com/earendil-works/pi-coding-agent) and Claude Code.
3
+ Outfitter is the toolchain for [`.agents`](./docs/documentation/concepts.md#the-agents-protocol): it resolves agent configuration from local and remote `.agents` trees, composes agents, skills, and knowledge by slug, and launches the result through wrapped agent CLIs like [`pi`](https://github.com/earendil-works/pi-coding-agent), Claude Code, and Codex CLI.
4
4
 
5
5
  Outfitter does not own a configuration format. Your `.agents/` directory is the source of truth — useful without Outfitter, committed and reviewed like any other code.
6
6
 
@@ -34,7 +34,15 @@ outfitter
34
34
  ```
35
35
 
36
36
  Pi is bundled and also hosts Outfitter's setup walkthrough. Install other runtime harnesses, such as
37
- Claude Code, separately. For the full walkthrough, see [Getting started](./docs/documentation/getting-started.md).
37
+ Claude Code and Codex CLI, separately. For the full walkthrough, see [Getting started](./docs/documentation/getting-started.md).
38
+
39
+ ## Climb the ramp
40
+
41
+ Three runbooks, one per rung of [the adoption ramp](./docs/philosophy.md#the-ramp-to-an-autonomous-lifecycle). Each starts where the previous one ended and closes with the one concrete step that begins the next rung. Their success checks are the signals an [SDLC assessment](./docs/documentation/usecases/org-onboarding-sdlc-report.md) reports, so "done" is something you run rather than something you judge.
42
+
43
+ 1. [**Share one catalog**](./docs/runbooks/share-one-catalog.md) — one pinned catalog the organization shares, instead of per-laptop configuration. → **delegated**
44
+ 2. [**Run it without your laptop**](./docs/runbooks/run-without-your-laptop.md) — an event triggers the workflow, its output lands through review, and the session is captured. → **automated**
45
+ 3. [**Give the agent a residence**](./docs/runbooks/give-the-agent-a-residence.md) — a named, assignable agent with an account and somewhere to live. → **governed**
38
46
 
39
47
  ## Already have a `.agents/` directory?
40
48
 
@@ -82,6 +90,7 @@ Layers merge by ID: `<project>/.agents/` over `~/.agents/` over pinned remote [c
82
90
 
83
91
  The [documentation index](./docs/documentation/README.md) follows the same arc — set up your own, understand the pieces, share across your org, automate more surfaces, contribute back:
84
92
 
93
+ - **Climb:** [Share one catalog](./docs/runbooks/share-one-catalog.md) · [Run it without your laptop](./docs/runbooks/run-without-your-laptop.md) · [Give the agent a residence](./docs/runbooks/give-the-agent-a-residence.md)
85
94
  - **Start:** [Getting started](./docs/documentation/getting-started.md) · [First-time CLI agent users](./docs/documentation/first-time-cli-agent-users.md) · [Switching to Outfitter](./docs/documentation/switching-to-outfitter.md)
86
95
  - **Understand:** [Concepts](./docs/documentation/concepts.md) · [Agents](./docs/documentation/agents.md) · [Skills](./docs/documentation/skills.md) · [Personas](./docs/documentation/personas.md) · [Subagents and delegation](./docs/documentation/subagents.md)
87
96
  - **Share:** [Catalogs](./docs/documentation/catalogs.md) · [Conventions](./docs/documentation/conventions.md) · [Organization catalog](./docs/documentation/usecases/organization-profile-catalog.md) · [Best practices](./docs/documentation/best-practices.md)
@@ -126,6 +126,12 @@ export default function outfitter(pi) {
126
126
  label: 'Claude Code',
127
127
  description: "Use Anthropic's separately installed Claude Code CLI.",
128
128
  },
129
+ {
130
+ value: 'codex',
131
+ label: 'Codex CLI',
132
+ description:
133
+ "Use OpenAI's separately installed Codex CLI. Projects model and MCP servers only; agent identity is not projected yet.",
134
+ },
129
135
  ];
130
136
  return selectFromItems(ctx, ['Which CLI agent should Outfitter use by default?'], items, 'pi');
131
137
  },
@@ -458,7 +464,9 @@ const selectFromItems = async (ctx, titleLines, items, initialValue) => {
458
464
  items.map((item) => item.label),
459
465
  );
460
466
  if (selected === undefined) return undefined;
461
- return items.some((item) => item.value === selected) ? selected : items.find((item) => item.label === selected)?.value;
467
+ return items.some((item) => item.value === selected)
468
+ ? selected
469
+ : items.find((item) => item.label === selected)?.value;
462
470
  };
463
471
 
464
472
  const selectDescribedOption = (ctx, titleLines, items, initialValue) =>
@@ -24,8 +24,8 @@ export declare const attachSignalForwarding: (child: {
24
24
  export declare const spawnLauncher: AgentProcessLauncher;
25
25
  /**
26
26
  * Launches a resolved plan through the given spawn boundary. The install-hint agentId is derived
27
- * from the logical launch command ('pi' | 'claude') so a missing-CLI failure always names the
28
- * harness actually being launched, regardless of how the harness was selected (flag, settings
27
+ * from the logical launch command ('pi' | 'claude' | 'codex') so a missing-CLI failure always names
28
+ * the harness actually being launched, regardless of how the harness was selected (flag, settings
29
29
  * default, or built-in fallback).
30
30
  */
31
31
  export declare const launchThroughSpawn: (spawn: AgentProcessLauncher, plan: AgentLaunchPlan) => Promise<number>;
@@ -104,15 +104,16 @@ export const spawnLauncher = {
104
104
  /* v8 ignore stop */
105
105
  /**
106
106
  * Launches a resolved plan through the given spawn boundary. The install-hint agentId is derived
107
- * from the logical launch command ('pi' | 'claude') so a missing-CLI failure always names the
108
- * harness actually being launched, regardless of how the harness was selected (flag, settings
107
+ * from the logical launch command ('pi' | 'claude' | 'codex') so a missing-CLI failure always names
108
+ * the harness actually being launched, regardless of how the harness was selected (flag, settings
109
109
  * default, or built-in fallback).
110
110
  */
111
111
  export const launchThroughSpawn = (spawn, plan) => launchAgentProcess(spawn, resolveAgentLaunchExecutable(plan), plan.command);
112
112
  const isCommandNotFoundError = (error) => error !== null && typeof error === 'object' && 'code' in error && error.code === 'ENOENT';
113
113
  const agentCliInstallHints = {
114
114
  pi: 'Install Pi with `npm install -g @earendil-works/pi-coding-agent` (see https://pi.dev).',
115
- claude: 'Install Claude Code from https://claude.com/claude-code, then rerun with `--agent claude`.',
115
+ claude: 'Install Claude Code from https://claude.com/claude-code, then rerun with `--harness claude`.',
116
+ codex: 'Install Codex CLI from https://developers.openai.com/codex/cli, then rerun with `--harness codex`.',
116
117
  };
117
118
  const formatMissingAgentCliMessage = (agentId, command) => {
118
119
  const installHint = agentCliInstallHints[agentId];
@@ -1 +1 @@
1
- {"version":3,"file":"AgentLaunch.js","sourceRoot":"","sources":["../../src/agents/AgentLaunch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AgentLaunch.js","sourceRoot":"","sources":["../../src/agents/AgentLaunch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export interface ClaudeSessionSeed {
2
+ readonly hashes: ReadonlyMap<string, string>;
3
+ readonly warning?: string;
4
+ }
5
+ /** Claude replaces every non-alphanumeric character in an absolute project path with `-`. */
6
+ export declare const resolveClaudeProjectSlug: (workingDirectory: string) => string;
7
+ /** Seeds only the current working directory's durable Claude session history. */
8
+ export declare const seedClaudeSessions: (projectionRoot: string, homeDirectory: string, workingDirectory: string) => ClaudeSessionSeed;
9
+ /** Recursively merges projected Claude session artifacts without deleting durable files. */
10
+ export declare const persistClaudeSessions: (projectionRoot: string, homeDirectory: string, seededHashes?: ReadonlyMap<string, string>) => string | undefined;
11
+ /** Seeds credentials, onboarding/account state, and the current workspace's trust decision. */
12
+ export declare const seedClaudeCredentials: (projectionRoot: string, homeDirectory: string, workingDirectory: string) => string | undefined;
13
+ /**
14
+ * Copies changed credentials back and atomically merges account metadata into durable state.
15
+ * Returns a warning when a concurrent writer changed the durable credentials during the run, in
16
+ * which case the copy-back is skipped so the newer concurrent refresh is not overwritten.
17
+ */
18
+ export declare const persistClaudeCredentials: (projectionRoot: string, homeDirectory: string, seededCredentialsHash?: string) => string | undefined;
@@ -0,0 +1,225 @@
1
+ // Persists Claude Code credentials and sessions across runs. CLAUDE_CONFIG_DIR points Claude at an
2
+ // ephemeral projection root, but its durable Claude and MCP OAuth credentials normally live in
3
+ // ~/.claude/.credentials.json while account metadata, onboarding state, and workspace trust live in
4
+ // ~/.claude.json. Seed only the required top-level state and the current workspace's existing trust
5
+ // decision; merge credential and project-session changes back without exposing or replacing the
6
+ // rest of Claude's machine-local state.
7
+ import { createHash, randomUUID } from 'node:crypto';
8
+ import { chmodSync, copyFileSync, existsSync, mkdirSync, readdirSync, readFileSync, renameSync, rmSync, writeFileSync, } from 'node:fs';
9
+ import { dirname, join, relative } from 'node:path';
10
+ const CREDENTIALS_FILE = '.credentials.json';
11
+ const STATE_FILE = '.claude.json';
12
+ const CREDENTIAL_MODE = 0o600;
13
+ const PROJECTS_DIRECTORY = 'projects';
14
+ const hashFile = (path) => {
15
+ try {
16
+ return createHash('sha256').update(readFileSync(path)).digest('hex');
17
+ }
18
+ catch {
19
+ return undefined;
20
+ }
21
+ };
22
+ const isJsonObject = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
23
+ const readJsonObject = (path) => {
24
+ try {
25
+ const value = JSON.parse(readFileSync(path, 'utf8'));
26
+ return isJsonObject(value) ? value : undefined;
27
+ }
28
+ catch {
29
+ return undefined;
30
+ }
31
+ };
32
+ const atomicReplace = (destinationPath, fillTemporary) => {
33
+ const destinationDirectory = dirname(destinationPath);
34
+ mkdirSync(destinationDirectory, { recursive: true });
35
+ const temporaryPath = join(destinationDirectory, `.outfitter-${randomUUID()}`);
36
+ try {
37
+ fillTemporary(temporaryPath);
38
+ renameSync(temporaryPath, destinationPath);
39
+ }
40
+ finally {
41
+ rmSync(temporaryPath, { force: true });
42
+ }
43
+ };
44
+ const atomicCopy = (sourcePath, destinationPath) => {
45
+ if (!existsSync(sourcePath))
46
+ return;
47
+ atomicReplace(destinationPath, (temporaryPath) => {
48
+ copyFileSync(sourcePath, temporaryPath);
49
+ chmodSync(temporaryPath, CREDENTIAL_MODE);
50
+ });
51
+ };
52
+ const atomicCopyIfUnchanged = (sourcePath, destinationPath, expectedDestinationHash) => {
53
+ const destinationDirectory = dirname(destinationPath);
54
+ mkdirSync(destinationDirectory, { recursive: true });
55
+ const temporaryPath = join(destinationDirectory, `.outfitter-${randomUUID()}`);
56
+ try {
57
+ copyFileSync(sourcePath, temporaryPath);
58
+ chmodSync(temporaryPath, CREDENTIAL_MODE);
59
+ if (hashFile(destinationPath) !== expectedDestinationHash)
60
+ return false;
61
+ renameSync(temporaryPath, destinationPath);
62
+ return true;
63
+ }
64
+ finally {
65
+ rmSync(temporaryPath, { force: true });
66
+ }
67
+ };
68
+ const atomicWriteJson = (path, value) => {
69
+ atomicReplace(path, (temporaryPath) => {
70
+ writeFileSync(temporaryPath, `${JSON.stringify(value, null, 2)}\n`, { mode: CREDENTIAL_MODE });
71
+ });
72
+ };
73
+ /** Claude replaces every non-alphanumeric character in an absolute project path with `-`. */
74
+ export const resolveClaudeProjectSlug = (workingDirectory) => workingDirectory.replace(/[^a-zA-Z0-9]/g, '-');
75
+ const summarizePaths = (kind, paths) => paths.length === 0
76
+ ? undefined
77
+ : `Warning: Claude session persistence ${kind === 'conflicts' ? 'skipped concurrently changed files' : 'failed for files'}: ${paths.join(', ')}.`;
78
+ const walkRegularFiles = (root, visit, failures, current = root) => {
79
+ let entries;
80
+ try {
81
+ entries = readdirSync(current, { withFileTypes: true });
82
+ }
83
+ catch {
84
+ failures.push(relative(root, current) || '.');
85
+ return;
86
+ }
87
+ for (const entry of entries) {
88
+ const path = join(current, entry.name);
89
+ const relativePath = relative(root, path);
90
+ if (entry.isDirectory())
91
+ walkRegularFiles(root, visit, failures, path);
92
+ else if (entry.isFile()) {
93
+ try {
94
+ visit(path, relativePath);
95
+ }
96
+ catch {
97
+ failures.push(relativePath);
98
+ }
99
+ }
100
+ }
101
+ };
102
+ /** Seeds only the current working directory's durable Claude session history. */
103
+ export const seedClaudeSessions = (projectionRoot, homeDirectory, workingDirectory) => {
104
+ const slug = resolveClaudeProjectSlug(workingDirectory);
105
+ const source = join(resolveClaudeUserConfigDirectory(homeDirectory), PROJECTS_DIRECTORY, slug);
106
+ const destination = join(projectionRoot, PROJECTS_DIRECTORY, slug);
107
+ const hashes = new Map();
108
+ const failures = [];
109
+ if (existsSync(source)) {
110
+ walkRegularFiles(source, (sourcePath, relativePath) => {
111
+ const hash = hashFile(sourcePath);
112
+ if (hash === undefined)
113
+ throw new Error('unreadable session artifact');
114
+ atomicCopy(sourcePath, join(destination, relativePath));
115
+ hashes.set(join(slug, relativePath), hash);
116
+ }, failures);
117
+ }
118
+ return {
119
+ hashes,
120
+ warning: summarizePaths('failures', failures.map((path) => join(slug, path))),
121
+ };
122
+ };
123
+ /** Recursively merges projected Claude session artifacts without deleting durable files. */
124
+ export const persistClaudeSessions = (projectionRoot, homeDirectory, seededHashes = new Map()) => {
125
+ const projectionProjects = join(projectionRoot, PROJECTS_DIRECTORY);
126
+ if (!existsSync(projectionProjects))
127
+ return undefined;
128
+ const durableProjects = join(resolveClaudeUserConfigDirectory(homeDirectory), PROJECTS_DIRECTORY);
129
+ const conflicts = [];
130
+ const failures = [];
131
+ let slugs;
132
+ try {
133
+ slugs = readdirSync(projectionProjects, { withFileTypes: true });
134
+ }
135
+ catch {
136
+ return summarizePaths('failures', ['.']);
137
+ }
138
+ for (const slug of slugs) {
139
+ if (!slug.isDirectory())
140
+ continue;
141
+ const slugFailures = [];
142
+ walkRegularFiles(join(projectionProjects, slug.name), (projectionPath, nestedPath) => {
143
+ const relativePath = join(slug.name, nestedPath);
144
+ const projectedHash = hashFile(projectionPath);
145
+ if (projectedHash === undefined)
146
+ throw new Error('unreadable session artifact');
147
+ const seededHash = seededHashes.get(relativePath);
148
+ if (projectedHash === seededHash)
149
+ return;
150
+ const durablePath = join(durableProjects, relativePath);
151
+ const durableHash = hashFile(durablePath);
152
+ if (durableHash !== seededHash) {
153
+ conflicts.push(relativePath);
154
+ return;
155
+ }
156
+ if (!atomicCopyIfUnchanged(projectionPath, durablePath, durableHash))
157
+ conflicts.push(relativePath);
158
+ }, slugFailures);
159
+ failures.push(...slugFailures.map((path) => join(slug.name, path)));
160
+ }
161
+ return ([summarizePaths('conflicts', conflicts), summarizePaths('failures', failures)].filter(Boolean).join(' ') ||
162
+ undefined);
163
+ };
164
+ /** Claude's durable configuration directory (`~/.claude`). */
165
+ const resolveClaudeUserConfigDirectory = (homeDirectory) => join(homeDirectory, '.claude');
166
+ /** Claude's durable machine-local state file (`~/.claude.json`). */
167
+ const resolveClaudeUserStatePath = (homeDirectory) => join(homeDirectory, STATE_FILE);
168
+ const persistCredentialFile = (projectionRoot, homeDirectory, seededCredentialsHash) => {
169
+ const projectionCredentialsPath = join(projectionRoot, CREDENTIALS_FILE);
170
+ const projectedCredentialsHash = hashFile(projectionCredentialsPath);
171
+ if (projectedCredentialsHash === undefined || projectedCredentialsHash === seededCredentialsHash)
172
+ return undefined;
173
+ const durableCredentialsPath = join(resolveClaudeUserConfigDirectory(homeDirectory), CREDENTIALS_FILE);
174
+ if (hashFile(durableCredentialsPath) !== seededCredentialsHash) {
175
+ // Both this run and another process changed the credentials since seeding. The durable copy
176
+ // is the newer refresh; overwriting it with this projection would revert it.
177
+ return 'Warning: durable Claude credentials changed during the run; skipped the credential copy-back to preserve the concurrent refresh.';
178
+ }
179
+ atomicCopy(projectionCredentialsPath, durableCredentialsPath);
180
+ return undefined;
181
+ };
182
+ /** Seeds credentials, onboarding/account state, and the current workspace's trust decision. */
183
+ export const seedClaudeCredentials = (projectionRoot, homeDirectory, workingDirectory) => {
184
+ const projectionCredentialsPath = join(projectionRoot, CREDENTIALS_FILE);
185
+ atomicCopy(join(resolveClaudeUserConfigDirectory(homeDirectory), CREDENTIALS_FILE), projectionCredentialsPath);
186
+ const seededCredentialsHash = hashFile(projectionCredentialsPath);
187
+ const durableState = readJsonObject(resolveClaudeUserStatePath(homeDirectory));
188
+ if (durableState === undefined)
189
+ return seededCredentialsHash;
190
+ const seededState = {};
191
+ if (Object.hasOwn(durableState, 'oauthAccount'))
192
+ seededState.oauthAccount = durableState.oauthAccount;
193
+ if (Object.hasOwn(durableState, 'hasCompletedOnboarding')) {
194
+ seededState.hasCompletedOnboarding = durableState.hasCompletedOnboarding;
195
+ }
196
+ const projects = durableState.projects;
197
+ const project = isJsonObject(projects) ? projects[workingDirectory] : undefined;
198
+ if (isJsonObject(project) && project.hasTrustDialogAccepted === true) {
199
+ seededState.projects = { [workingDirectory]: { hasTrustDialogAccepted: true } };
200
+ }
201
+ if (Object.keys(seededState).length > 0) {
202
+ atomicWriteJson(join(projectionRoot, STATE_FILE), seededState);
203
+ }
204
+ return seededCredentialsHash;
205
+ };
206
+ /**
207
+ * Copies changed credentials back and atomically merges account metadata into durable state.
208
+ * Returns a warning when a concurrent writer changed the durable credentials during the run, in
209
+ * which case the copy-back is skipped so the newer concurrent refresh is not overwritten.
210
+ */
211
+ export const persistClaudeCredentials = (projectionRoot, homeDirectory, seededCredentialsHash) => {
212
+ const warning = persistCredentialFile(projectionRoot, homeDirectory, seededCredentialsHash);
213
+ const projectionState = readJsonObject(join(projectionRoot, STATE_FILE));
214
+ if (projectionState === undefined || !Object.hasOwn(projectionState, 'oauthAccount'))
215
+ return warning;
216
+ const durableStatePath = resolveClaudeUserStatePath(homeDirectory);
217
+ const durableState = readJsonObject(durableStatePath);
218
+ if (durableState === undefined && existsSync(durableStatePath))
219
+ return warning;
220
+ if (JSON.stringify(projectionState.oauthAccount) === JSON.stringify(durableState?.oauthAccount))
221
+ return warning;
222
+ atomicWriteJson(durableStatePath, { ...(durableState ?? {}), oauthAccount: projectionState.oauthAccount });
223
+ return warning;
224
+ };
225
+ //# sourceMappingURL=ClaudeStatePersistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClaudeStatePersistence.js","sourceRoot":"","sources":["../../src/agents/ClaudeStatePersistence.ts"],"names":[],"mappings":"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"}
@@ -19,7 +19,7 @@ export const createOutfitterProgram = (commands = createDefaultCommands()) => {
19
19
  const program = new Command();
20
20
  program
21
21
  .name('outfitter')
22
- .description('Resolve, compose, and launch .agents agents in pi, Claude Code, and future harnesses.')
22
+ .description('Resolve, compose, and launch .agents agents in pi, Claude Code, and Codex CLI.')
23
23
  .version(readOutfitterVersion());
24
24
  for (const command of commands) {
25
25
  command.register(program);
@@ -1 +1 @@
1
- {"version":3,"file":"OutfitterCli.js","sourceRoot":"","sources":["../../src/cli/OutfitterCli.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAEtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAoB,EAAE,CAAC;IAC1D,qBAAqB,EAAE;IACvB,kBAAkB,EAAE;IACpB,iBAAiB,EAAE;IACnB,iBAAiB,EAAE;IACnB,qBAAqB,EAAE;IACvB,iBAAiB,EAAE;CACpB,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,WAAqC,qBAAqB,EAAE,EAAW,EAAE;IAC9G,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,WAAW,CAAC;SACjB,WAAW,CAAC,uFAAuF,CAAC;SACpG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAEnC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
1
+ {"version":3,"file":"OutfitterCli.js","sourceRoot":"","sources":["../../src/cli/OutfitterCli.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAEtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAoB,EAAE,CAAC;IAC1D,qBAAqB,EAAE;IACvB,kBAAkB,EAAE;IACpB,iBAAiB,EAAE;IACnB,iBAAiB,EAAE;IACnB,qBAAqB,EAAE;IACvB,iBAAiB,EAAE;CACpB,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,WAAqC,qBAAqB,EAAE,EAAW,EAAE;IAC9G,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,WAAW,CAAC;SACjB,WAAW,CAAC,gFAAgF,CAAC;SAC7F,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAEnC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
@@ -4,6 +4,7 @@ export interface DumpInput {
4
4
  readonly projectDirectory: string;
5
5
  readonly agent?: string;
6
6
  readonly out: string;
7
+ readonly strict?: boolean;
7
8
  }
8
9
  export interface DumpCommandResult {
9
10
  readonly writtenPaths: readonly string[];
@@ -1,6 +1,7 @@
1
1
  // Provides `outfitter dump --agent <id> --out <dir>` over the effective resource set.
2
2
  import { Command } from 'commander';
3
3
  import { dumpAgent } from '../../dump/Dump.js';
4
+ import { strictAmbiguityFailureMessage } from '../../resolver/AmbiguityWarnings.js';
4
5
  import { resolveEffectiveSet } from '../../resolver/ResolverContext.js';
5
6
  import { resolveHomeDirectory, resolveProjectDirectory } from './ProcessDefaults.js';
6
7
  const resolveAgentSlug = (settings, requested) => {
@@ -13,11 +14,18 @@ const resolveAgentSlug = (settings, requested) => {
13
14
  return settings.defaultAgent;
14
15
  };
15
16
  export const executeDumpCommand = (input) => {
16
- const { set, settings, settingsIssues, warnings } = resolveEffectiveSet(input);
17
+ const { set, settings, settingsIssues, warnings, ambiguityWarnings } = resolveEffectiveSet(input);
17
18
  if (settingsIssues.length > 0) {
18
19
  throw new Error(`Cannot dump with invalid settings: ${settingsIssues.map((issue) => issue.message).join('; ')}`);
19
20
  }
20
21
  const syncWarnings = warnings.map((warning) => `warning: ${warning}`);
22
+ if (input.strict === true && ambiguityWarnings.length > 0) {
23
+ return {
24
+ writtenPaths: [],
25
+ messages: [...syncWarnings, `error: ${strictAmbiguityFailureMessage}`],
26
+ ok: false,
27
+ };
28
+ }
21
29
  const agentSlug = resolveAgentSlug(settings, input.agent);
22
30
  const result = dumpAgent(set, agentSlug, input.out, input.projectDirectory);
23
31
  const ok = result.errors.length === 0;
@@ -38,6 +46,7 @@ export const createDumpCommand = (dependencies = {}) => ({
38
46
  .description('Write the composed .agents tree for an agent to a directory.')
39
47
  .option('--agent <id>', 'Agent slug to dump (default: settings default_agent).')
40
48
  .option('--out <dir>', 'Output directory.', './outfitter-dump')
49
+ .option('--strict', 'Treat ambiguous source resolution as fatal.')
41
50
  .action((options) => {
42
51
  const result = executeDumpCommand({
43
52
  /* v8 ignore next 2 -- process defaults are exercised by the CLI entrypoint, not unit tests. */
@@ -45,6 +54,7 @@ export const createDumpCommand = (dependencies = {}) => ({
45
54
  projectDirectory: resolveProjectDirectory(dependencies.projectDirectory),
46
55
  agent: options.agent,
47
56
  out: options.out,
57
+ strict: options.strict,
48
58
  });
49
59
  for (const message of result.messages) {
50
60
  /* v8 ignore next -- console fallback is direct CLI behavior; tests inject a writer. */
@@ -1 +1 @@
1
- {"version":3,"file":"DumpCommand.js","sourceRoot":"","sources":["../../../src/cli/commands/DumpCommand.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DumpCommand.js","sourceRoot":"","sources":["../../../src/cli/commands/DumpCommand.ts"],"names":[],"mappings":"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"}
@@ -4,8 +4,10 @@ export interface ListInput {
4
4
  readonly projectDirectory: string;
5
5
  readonly kind?: string;
6
6
  readonly agent?: string;
7
+ readonly strict?: boolean;
7
8
  }
8
9
  export interface ListResult {
10
+ readonly exitCode: number;
9
11
  readonly messages: readonly string[];
10
12
  }
11
13
  export interface ListCommandDependencies {
@@ -1,5 +1,6 @@
1
1
  // Provides `outfitter list [kind]` over the effective resource set.
2
2
  import { Command } from 'commander';
3
+ import { strictAmbiguityFailureMessage } from '../../resolver/AmbiguityWarnings.js';
3
4
  import { agentLocalKinds, compareSlugs, findResource, listAgentResources, listResources, resourceKinds, } from '../../resolver/Resource.js';
4
5
  import { resolveEffectiveSet } from '../../resolver/ResolverContext.js';
5
6
  import { formatSettingsIssue } from '../../settings/SettingsLoader.js';
@@ -26,16 +27,22 @@ const resolveKindFilter = (kind) => {
26
27
  }
27
28
  return [resolved];
28
29
  };
30
+ const assertKnownAgent = (set, agent) => {
31
+ if (agent !== undefined && findResource(set, 'agent', agent) === undefined) {
32
+ throw new Error(`Unknown agent '${agent}'. Run 'outfitter list agents' to see resolvable agents.`);
33
+ }
34
+ };
29
35
  export const executeListCommand = (input) => {
30
- const { set, settingsIssues, warnings } = resolveEffectiveSet(input);
36
+ const { set, settingsIssues, warnings, ambiguityWarnings } = resolveEffectiveSet(input);
31
37
  if (settingsIssues.length > 0) {
32
38
  const detail = settingsIssues.map(formatSettingsIssue).join('; ');
33
39
  throw new Error(`Cannot list resources with invalid settings: ${detail}`);
34
40
  }
35
41
  const messages = warnings.map((warning) => `warning: ${warning}`);
36
- if (input.agent !== undefined && findResource(set, 'agent', input.agent) === undefined) {
37
- throw new Error(`Unknown agent '${input.agent}'. Run 'outfitter list agents' to see resolvable agents.`);
42
+ if (input.strict === true && ambiguityWarnings.length > 0) {
43
+ return { exitCode: 1, messages: [...messages, `error: ${strictAmbiguityFailureMessage}`] };
38
44
  }
45
+ assertKnownAgent(set, input.agent);
39
46
  for (const kind of resolveKindFilter(input.kind)) {
40
47
  const hasAgentContext = input.agent !== undefined && agentLocalKinds.includes(kind);
41
48
  const globalResources = listResources(set, kind);
@@ -50,7 +57,7 @@ export const executeListCommand = (input) => {
50
57
  .sort((left, right) => compareSlugs(left.slug, right.slug))
51
58
  .map((resource) => ` ${resource.slug} [${resource.winner.layer.label}${resource.winner.ownerAgent === undefined ? '' : '; agent-local'}]`)));
52
59
  }
53
- return { messages };
60
+ return { exitCode: 0, messages };
54
61
  };
55
62
  export const createListCommand = (dependencies = {}) => ({
56
63
  name: 'list',
@@ -59,6 +66,7 @@ export const createListCommand = (dependencies = {}) => ({
59
66
  program.addCommand(new Command('list')
60
67
  .description('List resolvable resources (agents, skills, knowledge, commands).')
61
68
  .argument('[kind]', 'Restrict to one kind: agents, skills, knowledge, or commands.')
69
+ .option('--strict', 'Treat ambiguous source resolution as fatal.')
62
70
  .option('--agent <id>', 'Resolve resources in an agent context, including its agent-local skills/knowledge/commands.')
63
71
  .action((kind, options) => {
64
72
  const result = executeListCommand({
@@ -67,11 +75,14 @@ export const createListCommand = (dependencies = {}) => ({
67
75
  projectDirectory: resolveProjectDirectory(dependencies.projectDirectory),
68
76
  kind,
69
77
  agent: options.agent,
78
+ strict: options.strict,
70
79
  });
71
80
  for (const message of result.messages) {
72
81
  /* v8 ignore next -- console fallback is direct CLI behavior; tests inject a writer. */
73
82
  (dependencies.writeLine ?? console.log)(message);
74
83
  }
84
+ if (result.exitCode !== 0)
85
+ process.exitCode = result.exitCode;
75
86
  }));
76
87
  },
77
88
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ListCommand.js","sourceRoot":"","sources":["../../../src/cli/commands/ListCommand.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ListCommand.js","sourceRoot":"","sources":["../../../src/cli/commands/ListCommand.ts"],"names":[],"mappings":"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"}