@ai-outfitter/outfitter 0.8.0 → 0.9.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.
- package/README.md +8 -0
- package/dist/agents/AdapterStatePaths.js +3 -1
- package/dist/agents/AdapterStatePaths.js.map +1 -1
- package/dist/agents/AgentAdapter.d.ts +1 -0
- package/dist/agents/claude/ClaudeAdapter.js +3 -2
- package/dist/agents/claude/ClaudeAdapter.js.map +1 -1
- package/dist/agents/pi/PiAdapter.js +9 -5
- package/dist/agents/pi/PiAdapter.js.map +1 -1
- package/dist/agents/pi/PiExtensionCache.d.ts +8 -0
- package/dist/agents/pi/PiExtensionCache.js +95 -5
- package/dist/agents/pi/PiExtensionCache.js.map +1 -1
- package/dist/cli/commands/PiLoginLaunch.js +3 -9
- package/dist/cli/commands/PiLoginLaunch.js.map +1 -1
- package/dist/cli/commands/RunCommand.d.ts +2 -0
- package/dist/cli/commands/RunCommand.js +111 -46
- package/dist/cli/commands/RunCommand.js.map +1 -1
- package/dist/cli/commands/SyncCommand.d.ts +1 -1
- package/dist/cli/commands/SyncCommand.js +37 -12
- package/dist/cli/commands/SyncCommand.js.map +1 -1
- package/dist/cli/commands/run/RunFirstRunOnboarding.d.ts +7 -0
- package/dist/cli/commands/run/RunFirstRunOnboarding.js +52 -0
- package/dist/cli/commands/run/RunFirstRunOnboarding.js.map +1 -0
- package/dist/cli/commands/run/RunProfileResolution.js +10 -1
- package/dist/cli/commands/run/RunProfileResolution.js.map +1 -1
- package/dist/cli/commands/run/RunStateWritePrompt.d.ts +2 -0
- package/dist/cli/commands/run/RunStateWritePrompt.js +29 -0
- package/dist/cli/commands/run/RunStateWritePrompt.js.map +1 -0
- package/dist/compositeProfile/CompositeProfileCleanup.d.ts +9 -0
- package/dist/compositeProfile/CompositeProfileCleanup.js +87 -0
- package/dist/compositeProfile/CompositeProfileCleanup.js.map +1 -0
- package/dist/compositeProfile/StatePersistence.d.ts +16 -1
- package/dist/compositeProfile/StatePersistence.js +27 -5
- package/dist/compositeProfile/StatePersistence.js.map +1 -1
- package/dist/fs/SafeSymlink.d.ts +13 -0
- package/dist/fs/SafeSymlink.js +50 -0
- package/dist/fs/SafeSymlink.js.map +1 -0
- package/dist/settings/SettingsLoader.d.ts +1 -0
- package/dist/settings/SettingsLoader.js +10 -1
- package/dist/settings/SettingsLoader.js.map +1 -1
- package/doc/documentation/state.md +22 -2
- package/package.json +1 -1
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// Provides the readline-based terminal prompt for state_persistence 'prompt' decisions.
|
|
2
|
+
import { createInterface } from 'node:readline/promises';
|
|
3
|
+
/* v8 ignore start -- readline prompting is direct terminal behavior; tests inject a prompt. */
|
|
4
|
+
export const createTerminalStateWritePrompt = (input, output) => async (request) => {
|
|
5
|
+
const readline = createInterface({ input, output });
|
|
6
|
+
try {
|
|
7
|
+
for (;;) {
|
|
8
|
+
const answer = (await readline.question(`${request.agentId} wrote state path '${request.relativePath}' (state_persistence 'prompt'). ` +
|
|
9
|
+
`[p]ersist to ${request.sourcePath ?? 'its durable source'} / [d]iscard / ` +
|
|
10
|
+
`[a]lways persist for this profile: `))
|
|
11
|
+
.trim()
|
|
12
|
+
.toLowerCase();
|
|
13
|
+
if (answer === 'p' || answer === 'persist') {
|
|
14
|
+
return 'persist';
|
|
15
|
+
}
|
|
16
|
+
if (answer === 'd' || answer === 'discard') {
|
|
17
|
+
return 'discard';
|
|
18
|
+
}
|
|
19
|
+
if (answer === 'a' || answer === 'always') {
|
|
20
|
+
return 'always';
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
finally {
|
|
25
|
+
readline.close();
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
/* v8 ignore stop */
|
|
29
|
+
//# sourceMappingURL=RunStateWritePrompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RunStateWritePrompt.js","sourceRoot":"","sources":["../../../../src/cli/commands/run/RunStateWritePrompt.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAIzD,+FAA+F;AAC/F,MAAM,CAAC,MAAM,8BAA8B,GACzC,CAAC,KAA4B,EAAE,MAA6B,EAAoC,EAAE,CAClG,KAAK,EAAE,OAAO,EAAE,EAAE;IAChB,MAAM,QAAQ,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAEpD,IAAI,CAAC;QACH,SAAS,CAAC;YACR,MAAM,MAAM,GAAG,CACb,MAAM,QAAQ,CAAC,QAAQ,CACrB,GAAG,OAAO,CAAC,OAAO,sBAAsB,OAAO,CAAC,YAAY,kCAAkC;gBAC5F,gBAAgB,OAAO,CAAC,UAAU,IAAI,oBAAoB,iBAAiB;gBAC3E,qCAAqC,CACxC,CACF;iBACE,IAAI,EAAE;iBACN,WAAW,EAAE,CAAC;YAEjB,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC3C,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC3C,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC1C,OAAO,QAAQ,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,QAAQ,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;AACH,CAAC,CAAC;AACJ,oBAAoB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const registerCompositeProfileDirectoryCleanup: (directory: string, processObject?: NodeJS.Process) => void;
|
|
2
|
+
export declare const executeCompositeProfileDirectoryCleanup: () => readonly string[];
|
|
3
|
+
export declare const defaultCompositeProfileSweepMaxAgeMs: number;
|
|
4
|
+
export interface SweepStaleCompositeProfileDirectoriesInput {
|
|
5
|
+
readonly directory?: string;
|
|
6
|
+
readonly maxAgeMs?: number;
|
|
7
|
+
readonly now?: number;
|
|
8
|
+
}
|
|
9
|
+
export declare const sweepStaleCompositeProfileDirectories: (input?: SweepStaleCompositeProfileDirectoriesInput) => readonly string[];
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
// Removes temporary composite profile directories on process exit and handled signals, and
|
|
2
|
+
// sweeps stale leftovers from earlier crashed runs. Composite directories contain symlinks
|
|
3
|
+
// into real auth/settings state, so removal must delete the links without ever following
|
|
4
|
+
// them to their targets; rmSync satisfies that because it unlinks symlink entries instead of
|
|
5
|
+
// traversing into their targets.
|
|
6
|
+
import { lstatSync, readdirSync, rmSync } from 'node:fs';
|
|
7
|
+
import { tmpdir } from 'node:os';
|
|
8
|
+
import { join } from 'node:path';
|
|
9
|
+
const pendingDirectories = new Set();
|
|
10
|
+
const installedProcesses = new WeakSet();
|
|
11
|
+
const cleanupSignals = ['SIGINT', 'SIGTERM', 'SIGHUP'];
|
|
12
|
+
// Cleanup is deferred to process exit (rather than performed inline when a run finishes) so
|
|
13
|
+
// the composite directory stays inspectable for the rest of the process lifetime, and so a
|
|
14
|
+
// single set of handlers covers every registered run.
|
|
15
|
+
export const registerCompositeProfileDirectoryCleanup = (directory, processObject = process) => {
|
|
16
|
+
pendingDirectories.add(directory);
|
|
17
|
+
installCompositeProfileCleanupHandlers(processObject);
|
|
18
|
+
};
|
|
19
|
+
export const executeCompositeProfileDirectoryCleanup = () => {
|
|
20
|
+
const removed = [];
|
|
21
|
+
for (const directory of pendingDirectories) {
|
|
22
|
+
try {
|
|
23
|
+
rmSync(directory, { recursive: true, force: true });
|
|
24
|
+
removed.push(directory);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// Best-effort teardown: a failed removal must not mask the process's own exit path.
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
pendingDirectories.clear();
|
|
31
|
+
return removed;
|
|
32
|
+
};
|
|
33
|
+
const installCompositeProfileCleanupHandlers = (processObject) => {
|
|
34
|
+
if (installedProcesses.has(processObject)) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
installedProcesses.add(processObject);
|
|
38
|
+
processObject.once('exit', () => void executeCompositeProfileDirectoryCleanup());
|
|
39
|
+
for (const signal of cleanupSignals) {
|
|
40
|
+
processObject.once(signal, () => handleCompositeProfileCleanupSignal(processObject, signal));
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
// Session journals are stored under ~/.outfitter/state rather than the composite directory,
|
|
44
|
+
// so signal-time cleanup removes the temporary directory while leaving any crash journal in
|
|
45
|
+
// place to be reported by the next invocation.
|
|
46
|
+
const handleCompositeProfileCleanupSignal = (processObject, signal) => {
|
|
47
|
+
executeCompositeProfileDirectoryCleanup();
|
|
48
|
+
// The once-registered handler has already been removed, so re-raising terminates the
|
|
49
|
+
// process with conventional signal semantics unless another handler intervenes.
|
|
50
|
+
processObject.kill(processObject.pid, signal);
|
|
51
|
+
};
|
|
52
|
+
export const defaultCompositeProfileSweepMaxAgeMs = 7 * 24 * 60 * 60 * 1000;
|
|
53
|
+
// Best-effort startup sweep of outfitter-* composite directories that crashed runs left in
|
|
54
|
+
// the temporary root. Entries are inspected with lstat and symlink entries are skipped, so
|
|
55
|
+
// the sweep never follows a symlink; stale directories are removed with rmSync, which
|
|
56
|
+
// deletes contained symlinks without touching their targets.
|
|
57
|
+
export const sweepStaleCompositeProfileDirectories = (input = {}) => {
|
|
58
|
+
const rootDirectory = input.directory ?? tmpdir();
|
|
59
|
+
const maxAgeMs = input.maxAgeMs ?? defaultCompositeProfileSweepMaxAgeMs;
|
|
60
|
+
const now = input.now ?? Date.now();
|
|
61
|
+
const removed = [];
|
|
62
|
+
for (const entryName of listSweepCandidates(rootDirectory)) {
|
|
63
|
+
const entryPath = join(rootDirectory, entryName);
|
|
64
|
+
try {
|
|
65
|
+
const entryStat = lstatSync(entryPath);
|
|
66
|
+
if (!entryStat.isDirectory() || now - entryStat.mtimeMs <= maxAgeMs) {
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
rmSync(entryPath, { recursive: true, force: true });
|
|
70
|
+
removed.push(entryPath);
|
|
71
|
+
/* v8 ignore next 3 -- entries can vanish between readdir and lstat; the sweep stays best-effort. */
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// Best-effort sweep: unreadable or vanished entries are skipped.
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return removed;
|
|
78
|
+
};
|
|
79
|
+
const listSweepCandidates = (rootDirectory) => {
|
|
80
|
+
try {
|
|
81
|
+
return readdirSync(rootDirectory).filter((entryName) => entryName.startsWith('outfitter-'));
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return [];
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
//# sourceMappingURL=CompositeProfileCleanup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CompositeProfileCleanup.js","sourceRoot":"","sources":["../../src/compositeProfile/CompositeProfileCleanup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { symlinkSync } from 'node:fs';
|
|
1
2
|
export type StatePersistenceStrategy = 'symlink' | 'discard' | 'warn' | 'error' | 'prompt';
|
|
2
3
|
export interface StatePathDeclaration {
|
|
3
4
|
readonly defaultStrategy?: StatePersistenceStrategy;
|
|
@@ -17,8 +18,22 @@ export interface CompositeProfileStateWriteIssue {
|
|
|
17
18
|
readonly strategy: StatePersistenceStrategy;
|
|
18
19
|
readonly unknown: boolean;
|
|
19
20
|
}
|
|
20
|
-
export
|
|
21
|
+
export interface StateMaterializationDependencies {
|
|
22
|
+
readonly symlink?: typeof symlinkSync;
|
|
23
|
+
readonly warn?: (message: string) => void;
|
|
24
|
+
readonly platform?: NodeJS.Platform;
|
|
25
|
+
}
|
|
26
|
+
export declare const materializeCompositeProfileStatePath: (rootDirectory: string, statePath: CompositeProfileStatePath, dependencies?: StateMaterializationDependencies) => void;
|
|
21
27
|
export declare const createCompositeProfileStateBaseline: (rootDirectory: string, statePaths?: readonly CompositeProfileStatePath[]) => CompositeProfileStateBaseline;
|
|
22
28
|
export declare const updateCompositeProfileStateBaselinePaths: (rootDirectory: string, baseline: CompositeProfileStateBaseline, outputPaths: readonly string[]) => CompositeProfileStateBaseline;
|
|
23
29
|
export declare const detectCompositeProfileStateWrites: (rootDirectory: string, statePaths: readonly CompositeProfileStatePath[], baseline: CompositeProfileStateBaseline) => readonly CompositeProfileStateWriteIssue[];
|
|
30
|
+
export type CompositeProfileStateWritePromptChoice = 'persist' | 'discard' | 'always';
|
|
31
|
+
export interface CompositeProfileStateWritePromptRequest {
|
|
32
|
+
readonly agentId: string;
|
|
33
|
+
readonly relativePath: string;
|
|
34
|
+
readonly sourcePath?: string;
|
|
35
|
+
}
|
|
36
|
+
export type CompositeProfileStateWritePrompt = (request: CompositeProfileStateWritePromptRequest) => Promise<CompositeProfileStateWritePromptChoice>;
|
|
37
|
+
export declare const persistCompositeProfileStateWrite: (rootDirectory: string, statePath: CompositeProfileStatePath) => void;
|
|
38
|
+
export declare const recordProfileStatePersistenceOverride: (profilePath: string, relativePath: string, strategy: StatePersistenceStrategy) => void;
|
|
24
39
|
export declare const ensureStateSourcePath: (sourcePath: string, directory: boolean) => string;
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
// Defines composite profile state persistence declarations, strategies, and write detection helpers.
|
|
2
|
-
import { existsSync, lstatSync, mkdirSync, readdirSync, readFileSync, readlinkSync, statSync,
|
|
2
|
+
import { cpSync, existsSync, lstatSync, mkdirSync, readdirSync, readFileSync, readlinkSync, statSync, unlinkSync, writeFileSync, } from 'node:fs';
|
|
3
3
|
import { dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';
|
|
4
4
|
import { sep as posixSeparator } from 'node:path/posix';
|
|
5
|
-
|
|
5
|
+
import { parseDocument } from 'yaml';
|
|
6
|
+
import { createSafeSymlink } from '../fs/SafeSymlink.js';
|
|
7
|
+
export const materializeCompositeProfileStatePath = (rootDirectory, statePath, dependencies = {}) => {
|
|
6
8
|
if (statePath.strategy === 'symlink') {
|
|
7
9
|
if (statePath.sourcePath === undefined) {
|
|
8
10
|
throw new Error(`State path '${statePath.relativePath}' uses symlink without a source path.`);
|
|
9
11
|
}
|
|
10
|
-
materializeSymlink(rootDirectory, statePath.relativePath, statePath.sourcePath, statePath.directory);
|
|
12
|
+
materializeSymlink(rootDirectory, statePath.relativePath, statePath.sourcePath, statePath.directory, dependencies);
|
|
11
13
|
return;
|
|
12
14
|
}
|
|
13
15
|
const outputPath = resolveCompositeProfileStateOutputPath(rootDirectory, statePath.relativePath);
|
|
@@ -55,6 +57,26 @@ export const detectCompositeProfileStateWrites = (rootDirectory, statePaths, bas
|
|
|
55
57
|
}
|
|
56
58
|
return [...issues.values()].sort((left, right) => left.relativePath.localeCompare(right.relativePath));
|
|
57
59
|
};
|
|
60
|
+
// Copies an agent's change to a prompt-strategy state path from the composite profile back
|
|
61
|
+
// to the durable source path, so an interactive "persist" choice survives the run.
|
|
62
|
+
export const persistCompositeProfileStateWrite = (rootDirectory, statePath) => {
|
|
63
|
+
if (statePath.sourcePath === undefined) {
|
|
64
|
+
throw new Error(`State path '${statePath.relativePath}' cannot be persisted without a durable source path.`);
|
|
65
|
+
}
|
|
66
|
+
const outputPath = resolveCompositeProfileStateOutputPath(rootDirectory, statePath.relativePath);
|
|
67
|
+
if (!pathLexicallyExists(outputPath)) {
|
|
68
|
+
throw new Error(`State path '${statePath.relativePath}' no longer exists in the composite profile, so it cannot be persisted.`);
|
|
69
|
+
}
|
|
70
|
+
ensureStateSourcePath(statePath.sourcePath, statePath.directory);
|
|
71
|
+
cpSync(outputPath, statePath.sourcePath, { recursive: true, force: true });
|
|
72
|
+
};
|
|
73
|
+
// Records a durable state_persistence override in a profile YAML file, preserving the
|
|
74
|
+
// existing document structure and comments.
|
|
75
|
+
export const recordProfileStatePersistenceOverride = (profilePath, relativePath, strategy) => {
|
|
76
|
+
const profileDocument = parseDocument(readFileSync(profilePath, 'utf8'));
|
|
77
|
+
profileDocument.setIn(['state_persistence', relativePath], strategy);
|
|
78
|
+
writeFileSync(profilePath, profileDocument.toString());
|
|
79
|
+
};
|
|
58
80
|
export const ensureStateSourcePath = (sourcePath, directory) => {
|
|
59
81
|
const sourceType = getExistingSourceType(sourcePath);
|
|
60
82
|
if (sourceType === undefined) {
|
|
@@ -111,14 +133,14 @@ const getExistingSourceType = (sourcePath) => {
|
|
|
111
133
|
throw error;
|
|
112
134
|
}
|
|
113
135
|
};
|
|
114
|
-
const materializeSymlink = (rootDirectory, relativePath, sourcePath, directory) => {
|
|
136
|
+
const materializeSymlink = (rootDirectory, relativePath, sourcePath, directory, dependencies) => {
|
|
115
137
|
const outputPath = resolveCompositeProfileStateOutputPath(rootDirectory, relativePath);
|
|
116
138
|
mkdirSync(dirname(outputPath), { recursive: true });
|
|
117
139
|
if (pathLexicallyExists(outputPath)) {
|
|
118
140
|
unlinkSync(outputPath);
|
|
119
141
|
}
|
|
120
142
|
ensureStateSourcePath(sourcePath, directory);
|
|
121
|
-
|
|
143
|
+
createSafeSymlink({ sourcePath, outputPath, directory, label: `State path '${relativePath}'` }, dependencies);
|
|
122
144
|
};
|
|
123
145
|
const pathLexicallyExists = (path) => {
|
|
124
146
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatePersistence.js","sourceRoot":"","sources":["../../src/compositeProfile/StatePersistence.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"StatePersistence.js","sourceRoot":"","sources":["../../src/compositeProfile/StatePersistence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { symlinkSync } from 'node:fs';
|
|
2
|
+
export interface SafeSymlinkInput {
|
|
3
|
+
readonly sourcePath: string;
|
|
4
|
+
readonly outputPath: string;
|
|
5
|
+
readonly directory: boolean;
|
|
6
|
+
readonly label: string;
|
|
7
|
+
}
|
|
8
|
+
export interface SafeSymlinkDependencies {
|
|
9
|
+
readonly symlink?: typeof symlinkSync;
|
|
10
|
+
readonly warn?: (message: string) => void;
|
|
11
|
+
readonly platform?: NodeJS.Platform;
|
|
12
|
+
}
|
|
13
|
+
export declare const createSafeSymlink: (input: SafeSymlinkInput, dependencies?: SafeSymlinkDependencies) => void;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// Creates symlinks with a Windows-only fallback for environments that deny symlink creation.
|
|
2
|
+
import { copyFileSync, cpSync, symlinkSync } from 'node:fs';
|
|
3
|
+
import { resolve } from 'node:path';
|
|
4
|
+
// Windows without Developer Mode rejects symlink creation with EPERM. Directories fall
|
|
5
|
+
// back to junctions, which need no privilege but require an absolute target; files (and
|
|
6
|
+
// directories whose junction also fails) fall back to a one-way copy with a warning
|
|
7
|
+
// because agent writes to the copy cannot persist back to the source. On POSIX platforms
|
|
8
|
+
// a permission error is a real filesystem problem, so it is rethrown instead of being
|
|
9
|
+
// silently downgraded to a copy.
|
|
10
|
+
export const createSafeSymlink = (input, dependencies = {}) => {
|
|
11
|
+
const symlink = dependencies.symlink ?? symlinkSync;
|
|
12
|
+
/* v8 ignore next -- the process platform default is direct runtime behavior; tests inject a platform. */
|
|
13
|
+
const platform = dependencies.platform ?? process.platform;
|
|
14
|
+
try {
|
|
15
|
+
symlink(input.sourcePath, input.outputPath, input.directory ? 'dir' : 'file');
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
if (platform !== 'win32' || !isSymlinkPermissionError(error)) {
|
|
19
|
+
throw error;
|
|
20
|
+
}
|
|
21
|
+
createWindowsSafeSymlinkFallback(symlink, input, dependencies.warn);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
const createWindowsSafeSymlinkFallback = (symlink, input, warn) => {
|
|
25
|
+
if (input.directory) {
|
|
26
|
+
try {
|
|
27
|
+
symlink(resolve(input.sourcePath), input.outputPath, 'junction');
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
if (!isSymlinkPermissionError(error)) {
|
|
32
|
+
throw error;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
copySafeSymlinkFallback(input, warn);
|
|
37
|
+
};
|
|
38
|
+
const copySafeSymlinkFallback = (input, warn) => {
|
|
39
|
+
if (input.directory) {
|
|
40
|
+
cpSync(input.sourcePath, input.outputPath, { recursive: true });
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
copyFileSync(input.sourcePath, input.outputPath);
|
|
44
|
+
}
|
|
45
|
+
/* v8 ignore next -- console fallback is direct CLI behavior; tests inject a warn writer. */
|
|
46
|
+
(warn ?? console.error)(`${input.label} could not be symlinked (symlinks are unavailable on this platform); ` +
|
|
47
|
+
`copied '${input.sourcePath}' instead, so writes to it will not persist back.`);
|
|
48
|
+
};
|
|
49
|
+
const isSymlinkPermissionError = (error) => error instanceof Error && 'code' in error && (error.code === 'EPERM' || error.code === 'EACCES');
|
|
50
|
+
//# sourceMappingURL=SafeSymlink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SafeSymlink.js","sourceRoot":"","sources":["../../src/fs/SafeSymlink.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,uFAAuF;AACvF,wFAAwF;AACxF,oFAAoF;AACpF,yFAAyF;AACzF,sFAAsF;AACtF,iCAAiC;AACjC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAAuB,EAAE,eAAwC,EAAE,EAAQ,EAAE;IAC7G,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,IAAI,WAAW,CAAC;IACpD,yGAAyG;IACzG,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;IAE3D,IAAI,CAAC;QACH,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAChF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7D,MAAM,KAAK,CAAC;QACd,CAAC;QAED,gCAAgC,CAAC,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;IACtE,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,gCAAgC,GAAG,CACvC,OAA2B,EAC3B,KAAuB,EACvB,IAA6C,EACvC,EAAE;IACR,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YACjE,OAAO;QACT,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrC,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,KAAuB,EAAE,IAA6C,EAAQ,EAAE;IAC/G,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClE,CAAC;SAAM,CAAC;QACN,YAAY,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IACnD,CAAC;IAED,4FAA4F;IAC5F,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,CACrB,GAAG,KAAK,CAAC,KAAK,uEAAuE;QACnF,WAAW,KAAK,CAAC,UAAU,mDAAmD,CACjF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAAC,KAAc,EAAW,EAAE,CAC3D,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC"}
|
|
@@ -28,6 +28,7 @@ export interface SettingsDiscoveryInput {
|
|
|
28
28
|
export declare const createSettingsLoadPlan: (locations: readonly SettingsLocation[]) => SettingsLoadPlan;
|
|
29
29
|
export declare const discoverSettingsLoadPlan: (input: SettingsDiscoveryInput) => SettingsLoadPlan;
|
|
30
30
|
export declare const discoverRemoteSettingsLoadPlan: (homeDirectory: string, remoteSettings: readonly RemoteSettingsReference[]) => SettingsLoadPlan;
|
|
31
|
+
export declare const resolveCachedRemoteSettingsPath: (homeDirectory: string, source: RemoteSettingsReference) => string;
|
|
31
32
|
export declare const loadSettingsFiles: (plan: SettingsLoadPlan) => SettingsLoadResult;
|
|
32
33
|
export declare const loadSettings: (plan: SettingsLoadPlan) => LoadedSettings;
|
|
33
34
|
export declare const loadSettingsWithCachedRemoteSettings: (input: SettingsDiscoveryInput, remoteSettingsReferencesOverride?: readonly RemoteSettingsReference[]) => LoadedSettings;
|
|
@@ -14,6 +14,15 @@ export const discoverSettingsLoadPlan = (input) => createSettingsLoadPlan([
|
|
|
14
14
|
{ scope: 'project-local', path: join(input.projectDirectory, '.outfitter', 'local', 'settings.yml') },
|
|
15
15
|
]);
|
|
16
16
|
export const discoverRemoteSettingsLoadPlan = (homeDirectory, remoteSettings) => discoverRemoteSettingsLocations(homeDirectory, remoteSettings).plan;
|
|
17
|
+
export const resolveCachedRemoteSettingsPath = (homeDirectory, source) => {
|
|
18
|
+
const repositoryPath = createRemoteRepositoryCachePath(homeDirectory, source);
|
|
19
|
+
const configuredPath = resolveRemoteRepositorySubpath(repositoryPath, source.path);
|
|
20
|
+
if (existsSync(configuredPath) || source.path !== 'settings.yml') {
|
|
21
|
+
return configuredPath;
|
|
22
|
+
}
|
|
23
|
+
const nestedOutfitterSettingsPath = resolveRemoteRepositorySubpath(repositoryPath, '.outfitter/settings.yml');
|
|
24
|
+
return existsSync(nestedOutfitterSettingsPath) ? nestedOutfitterSettingsPath : configuredPath;
|
|
25
|
+
};
|
|
17
26
|
export const loadSettingsFiles = (plan) => {
|
|
18
27
|
const files = [];
|
|
19
28
|
const issues = [];
|
|
@@ -54,7 +63,7 @@ const discoverRemoteSettingsLocations = (homeDirectory, remoteSettings) => {
|
|
|
54
63
|
try {
|
|
55
64
|
locations.push({
|
|
56
65
|
scope: 'remote',
|
|
57
|
-
path:
|
|
66
|
+
path: resolveCachedRemoteSettingsPath(homeDirectory, source),
|
|
58
67
|
});
|
|
59
68
|
}
|
|
60
69
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsLoader.js","sourceRoot":"","sources":["../../src/settings/SettingsLoader.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE/D,OAAO,EAAE,+BAA+B,EAAE,8BAA8B,EAAE,MAAM,6BAA6B,CAAC;AAG9G,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAsEzD,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,SAAsC,EAAoB,EAAE,CAAC,CAAC;IACnG,SAAS;CACV,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,KAA6B,EAAoB,EAAE,CAC1F,sBAAsB,CAAC;IACrB,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,YAAY,EAAE,cAAc,CAAC,EAAE;IAChF,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,YAAY,EAAE,cAAc,CAAC,EAAE;IACtF,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE;CACtG,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAC5C,aAAqB,EACrB,cAAkD,EAChC,EAAE,CAAC,+BAA+B,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC;AAE3F,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAAsB,EAAsB,EAAE;IAC9E,MAAM,KAAK,GAAyB,EAAE,CAAC;IACvC,MAAM,MAAM,GAAwB,EAAE,CAAC;IAEvC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,eAAe,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC3B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAsB,EAAkB,EAAE;IACrE,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAEvC,OAAO;QACL,GAAG,MAAM;QACT,QAAQ,EAAE,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KACxE,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oCAAoC,GAAG,CAClD,KAA6B,EAC7B,gCAAqE,EACrD,EAAE;IAClB,MAAM,aAAa,GAAG,YAAY,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC,CAAC;IAEpE,MAAM,wBAAwB,GAAG,gCAAgC,IAAI,aAAa,CAAC,QAAQ,CAAC,cAAe,CAAC;IAE5G,IAAI,aAAa,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,wBAAwB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7E,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,MAAM,uBAAuB,GAAG,+BAA+B,CAAC,KAAK,CAAC,aAAa,EAAE,wBAAwB,CAAC,CAAC;IAC/G,MAAM,cAAc,GAAG,YAAY,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,CAAC,GAAG,cAAc,CAAC,KAAK,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,CAAC,GAAG,uBAAuB,CAAC,MAAM,EAAE,GAAG,cAAc,CAAC,MAAM,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAEtG,OAAO;QACL,KAAK;QACL,MAAM;QACN,QAAQ,EAAE,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KACjE,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,+BAA+B,GAAG,CACtC,aAAqB,EACrB,cAAkD,EACjB,EAAE;IACnC,MAAM,SAAS,GAAuB,EAAE,CAAC;IACzC,MAAM,MAAM,GAAwB,EAAE,CAAC;IAEvC,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,cAAc,CAAC,OAAO,EAAE,EAAE,CAAC;QACvD,IAAI,CAAC;YACH,SAAS,CAAC,IAAI,CAAC;gBACb,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE
|
|
1
|
+
{"version":3,"file":"SettingsLoader.js","sourceRoot":"","sources":["../../src/settings/SettingsLoader.ts"],"names":[],"mappings":"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"}
|
|
@@ -64,10 +64,30 @@ state_persistence:
|
|
|
64
64
|
cache/: discard # Allow writes, then throw them away when the run ends.
|
|
65
65
|
plugins/: warn # Allow writes, discard them, and report them after the run.
|
|
66
66
|
settings.json: error # Allow the run, then fail if this path changed.
|
|
67
|
-
mcp.json: prompt #
|
|
67
|
+
mcp.json: prompt # Ask after the run: persist, discard, or always persist for this profile.
|
|
68
68
|
```
|
|
69
69
|
|
|
70
|
-
Use `symlink` for state you want to keep, such as login state, durable settings, MCP config, or plugin installs. Use `discard`, `warn`, or `error` for state that should not become part of the durable profile.
|
|
70
|
+
Use `symlink` for state you want to keep, such as login state, durable settings, MCP config, or plugin installs. Use `discard`, `warn`, or `error` for state that should not become part of the durable profile. Use `prompt` when you want to decide interactively after each run.
|
|
71
|
+
|
|
72
|
+
## Prompt strategy
|
|
73
|
+
|
|
74
|
+
When a `prompt` path changed during a run and both stdin and stdout are interactive terminals, Outfitter asks what to do with the change after the agent exits:
|
|
75
|
+
|
|
76
|
+
- **persist** — copy the change to the path's durable source (the profile-managed file or the native CLI location) for this run only.
|
|
77
|
+
- **discard** — throw the change away with the rest of the composite profile.
|
|
78
|
+
- **always** — persist the change and record a `state_persistence: <path>: symlink` override in the selected profile's own YAML file, so future runs persist writes to that path automatically.
|
|
79
|
+
|
|
80
|
+
The "always" choice is written into the selected profile's `profile.yml` because profiles are the single source of truth for `state_persistence` policy. If the selected profile comes from a remote or cached source, Outfitter never mutates the cache: the change is persisted once and a warning explains that the choice could not be recorded.
|
|
81
|
+
|
|
82
|
+
In non-interactive sessions (CI, scripts, piped stdio), `prompt` falls back to `warn` and Outfitter prints an explicit `prompt skipped: non-interactive` notice.
|
|
83
|
+
|
|
84
|
+
Undeclared writes governed by `unknown: prompt` cannot be persisted because they have no durable destination; Outfitter reports them as warnings and says so.
|
|
85
|
+
|
|
86
|
+
## Temporary directory cleanup
|
|
87
|
+
|
|
88
|
+
Composite profile directories are created under the system temporary directory and removed automatically when the Outfitter process exits or receives a handled signal. Removal deletes symlink entries without following them, so the durable auth/settings state the links point at is never touched. Pass `--debug` to keep the directory for inspection; Outfitter prints its path.
|
|
89
|
+
|
|
90
|
+
Each startup also best-effort sweeps `outfitter-*` directories older than seven days from the temporary root. The sweep never follows symlinks, so a stale directory's links are removed while their targets survive.
|
|
71
91
|
|
|
72
92
|
## User stories
|
|
73
93
|
|
package/package.json
CHANGED