@ai-outfitter/outfitter 0.7.2 → 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 +12 -2
- package/code/pi-extension/src/outfitter-extension.js +720 -0
- package/dist/agents/AdapterStatePaths.js +3 -1
- package/dist/agents/AdapterStatePaths.js.map +1 -1
- package/dist/agents/AgentAdapter.d.ts +3 -0
- package/dist/agents/AgentLaunch.js +5 -0
- package/dist/agents/AgentLaunch.js.map +1 -1
- package/dist/agents/OutfitterDocs.d.ts +2 -0
- package/dist/agents/OutfitterDocs.js +38 -0
- package/dist/agents/OutfitterDocs.js.map +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 +24 -19
- 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/agents/pi/PiSkillSources.d.ts +8 -0
- package/dist/agents/pi/PiSkillSources.js +69 -0
- package/dist/agents/pi/PiSkillSources.js.map +1 -0
- package/dist/cli/OutfitterCli.js +7 -2
- package/dist/cli/OutfitterCli.js.map +1 -1
- package/dist/cli/commands/PiLoginLaunch.js +28 -737
- package/dist/cli/commands/PiLoginLaunch.js.map +1 -1
- package/dist/cli/commands/RunCommand.d.ts +6 -17
- package/dist/cli/commands/RunCommand.js +115 -186
- package/dist/cli/commands/RunCommand.js.map +1 -1
- package/dist/cli/commands/SetupCommand.d.ts +4 -63
- package/dist/cli/commands/SetupCommand.js +13 -673
- package/dist/cli/commands/SetupCommand.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/RunLaunchSummary.d.ts +2 -0
- package/dist/cli/commands/run/RunLaunchSummary.js +35 -0
- package/dist/cli/commands/run/RunLaunchSummary.js.map +1 -0
- package/dist/cli/commands/run/RunProfileResolution.d.ts +37 -0
- package/dist/cli/commands/run/RunProfileResolution.js +124 -0
- package/dist/cli/commands/run/RunProfileResolution.js.map +1 -0
- 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/cli/commands/setup/SetupPrompts.d.ts +14 -0
- package/dist/cli/commands/setup/SetupPrompts.js +296 -0
- package/dist/cli/commands/setup/SetupPrompts.js.map +1 -0
- package/dist/cli/commands/setup/SetupSourceImport.d.ts +5 -0
- package/dist/cli/commands/setup/SetupSourceImport.js +177 -0
- package/dist/cli/commands/setup/SetupSourceImport.js.map +1 -0
- package/dist/cli/commands/setup/SetupSourceLaunch.d.ts +4 -0
- package/dist/cli/commands/setup/SetupSourceLaunch.js +65 -0
- package/dist/cli/commands/setup/SetupSourceLaunch.js.map +1 -0
- package/dist/cli/commands/setup/SetupStarterSource.d.ts +21 -0
- package/dist/cli/commands/setup/SetupStarterSource.js +133 -0
- package/dist/cli/commands/setup/SetupStarterSource.js.map +1 -0
- package/dist/cli/commands/setup/SetupTypes.d.ts +91 -0
- package/dist/cli/commands/setup/SetupTypes.js +26 -0
- package/dist/cli/commands/setup/SetupTypes.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/architecture/state_writeback_strategy.md +350 -0
- package/doc/documentation/README.md +21 -0
- package/doc/documentation/cli.md +74 -0
- package/doc/documentation/concepts.md +54 -0
- package/doc/documentation/first-time-cli-agent-users.md +137 -0
- package/doc/documentation/getting-started.md +49 -0
- package/doc/documentation/iterating-on-profiles.md +109 -0
- package/doc/documentation/profile-repository.md +111 -0
- package/doc/documentation/profiles.md +183 -0
- package/doc/documentation/state.md +224 -0
- package/doc/documentation/support-matrix.md +46 -0
- package/doc/documentation/switching-to-outfitter.md +130 -0
- package/doc/documentation/usecases/engineering.md +114 -0
- package/doc/documentation/usecases/organization-profile-catalog.md +140 -0
- package/doc/documentation/usecases/persona-reviews.md +173 -0
- package/doc/philosophy.md +25 -0
- package/package.json +3 -2
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// Post-import launch messaging and actions for setup-source onboarding.
|
|
2
|
+
import { loadLocalProfileSource } from '../../../profiles/ProfileLoader.js';
|
|
3
|
+
import { resolveProfile } from '../../../profiles/ProfileMerger.js';
|
|
4
|
+
import { loadSettingsWithCachedRemoteSettings } from '../../../settings/SettingsLoader.js';
|
|
5
|
+
import { materializeSetupProfileSource, promptForSetupSourceLaunchAction } from './SetupPrompts.js';
|
|
6
|
+
export const formatRunProfileExample = (profileId) => `Start the selected default profile either way:\n outfitter\n outfitter --profile ${profileId}`;
|
|
7
|
+
const formatRunDefaultProfileExample = () => `Start the current default profile:\n outfitter`;
|
|
8
|
+
/* v8 ignore start -- setup-source launch visibility fallbacks are exercised through integration-style CLI flows; unit tests cover the primary imported-profile outcomes. */
|
|
9
|
+
export const formatSetupSourceExitMessages = (input, importTarget, profileId, launchTarget) => {
|
|
10
|
+
if (launchTarget === 'default') {
|
|
11
|
+
return [formatRunDefaultProfileExample()];
|
|
12
|
+
}
|
|
13
|
+
if (importTarget !== 'home' || canResolveProfileForLaunch(input, profileId)) {
|
|
14
|
+
return [formatRunProfileExample(profileId)];
|
|
15
|
+
}
|
|
16
|
+
return [formatHiddenHomeImportMessage(profileId)];
|
|
17
|
+
};
|
|
18
|
+
const formatHiddenHomeImportMessage = (profileId) => `Imported profile '${profileId}' into user home, but this project overrides profile_sources and does not expose ~/.outfitter/profiles. ` +
|
|
19
|
+
'Import into the current project, add ~/.outfitter/profiles to project profile_sources, or run from a directory without project Outfitter settings.';
|
|
20
|
+
export const runSetupSourcePostImportAction = async (input, dependencies, importTarget, profileId, launchTarget) => {
|
|
21
|
+
if (dependencies.interactive !== true ||
|
|
22
|
+
(dependencies.launchSetupSourceProfile === undefined && dependencies.selectSetupSourceLaunchAction === undefined)) {
|
|
23
|
+
return 'exit';
|
|
24
|
+
}
|
|
25
|
+
const action = await selectSetupSourceLaunchAction(profileId, launchTarget, dependencies);
|
|
26
|
+
if (action === 'start') {
|
|
27
|
+
if (launchTarget === 'selected') {
|
|
28
|
+
assertSetupSourceProfileCanLaunch(input, importTarget, profileId);
|
|
29
|
+
}
|
|
30
|
+
await dependencies.launchSetupSourceProfile?.({
|
|
31
|
+
homeDirectory: input.homeDirectory,
|
|
32
|
+
projectDirectory: input.projectDirectory,
|
|
33
|
+
profileId: launchTarget === 'selected' ? profileId : undefined,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
return action;
|
|
37
|
+
};
|
|
38
|
+
const assertSetupSourceProfileCanLaunch = (input, importTarget, profileId) => {
|
|
39
|
+
if (importTarget !== 'home' || canResolveProfileForLaunch(input, profileId)) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
throw new Error(formatHiddenHomeImportMessage(profileId));
|
|
43
|
+
};
|
|
44
|
+
const canResolveProfileForLaunch = (input, profileId) => {
|
|
45
|
+
const loadedSettings = loadSettingsWithCachedRemoteSettings(input);
|
|
46
|
+
if (loadedSettings.issues.length > 0) {
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
const profiles = loadedSettings.settings.profileSources.flatMap((source) => loadLocalProfileSource({
|
|
50
|
+
path: materializeSetupProfileSource(input.homeDirectory, source),
|
|
51
|
+
only: source.only,
|
|
52
|
+
except: source.except,
|
|
53
|
+
}).profiles);
|
|
54
|
+
const resolution = resolveProfile({ profiles, profileId });
|
|
55
|
+
const selectedProfile = resolution.profileStack.find((profile) => profile.id === profileId);
|
|
56
|
+
return resolution.profile !== undefined && resolution.issues.length === 0 && selectedProfile?.template !== true;
|
|
57
|
+
};
|
|
58
|
+
const selectSetupSourceLaunchAction = async (profileId, launchTarget, dependencies) => {
|
|
59
|
+
if (dependencies.selectSetupSourceLaunchAction !== undefined) {
|
|
60
|
+
return dependencies.selectSetupSourceLaunchAction(profileId, launchTarget);
|
|
61
|
+
}
|
|
62
|
+
return promptForSetupSourceLaunchAction(profileId, launchTarget, dependencies);
|
|
63
|
+
};
|
|
64
|
+
/* v8 ignore stop */
|
|
65
|
+
//# sourceMappingURL=SetupSourceLaunch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SetupSourceLaunch.js","sourceRoot":"","sources":["../../../../src/cli/commands/setup/SetupSourceLaunch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type SetupCommandInput, type SetupSourceSynchronizer, type StarterLayout } from './SetupTypes.js';
|
|
2
|
+
export declare const prepareStarterLayout: (homeDirectory: string, projectDirectory: string, setupSourceUri: string, synchronizer?: SetupSourceSynchronizer) => StarterLayout;
|
|
3
|
+
export declare const validateStarterSettingsIfPresent: (settingsPath?: string) => void;
|
|
4
|
+
export declare const readStarterDefaultProfileId: (settingsPath?: string) => string;
|
|
5
|
+
export declare const readStarterExplicitDefaultProfileId: (settingsPath?: string) => string | undefined;
|
|
6
|
+
export type LoadedSetupSettingsFile = {
|
|
7
|
+
readonly location: {
|
|
8
|
+
readonly scope: string;
|
|
9
|
+
};
|
|
10
|
+
readonly settings: {
|
|
11
|
+
readonly defaultProfile?: string;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
export declare const readUserDefaultProfileId: (files: readonly LoadedSetupSettingsFile[]) => string;
|
|
15
|
+
export declare const ensureExistingUserSettingsDefaultProfile: (settingsPath: string, files: readonly LoadedSetupSettingsFile[], defaultProfileId: string) => void;
|
|
16
|
+
export declare const assertValidDefaultProfileId: (profileId: string) => void;
|
|
17
|
+
export declare const createDefaultSettingsContent: (defaultProfileId?: string) => string;
|
|
18
|
+
export declare const createInitialSettingsIfMissing: (settingsPath: string, starterSettingsPath?: string) => boolean;
|
|
19
|
+
export declare const readStarterSettingsContent: (starterSettingsPath: string) => string;
|
|
20
|
+
export declare const resolveLocalSetupSourceOutfitterPath: (input: SetupCommandInput) => string | undefined;
|
|
21
|
+
export declare const resolveLocalSetupSourceOutfitterPathFromUri: (setupSourceUri: string, projectDirectory: string) => string | undefined;
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
// Resolves and validates setup starter sources: local .outfitter folders, remote git caches, and starter settings.
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
3
|
+
import { dirname, isAbsolute, join, resolve } from 'node:path';
|
|
4
|
+
import spawn from 'cross-spawn';
|
|
5
|
+
import { createRemoteRepositoryCachePath, normalizeGitUri, redactProfileSourceUriCredentials, } from '../../../profiles/ProfileCache.js';
|
|
6
|
+
import { isValidProfileId } from '../../../profiles/ProfileLoader.js';
|
|
7
|
+
import { createSettingsLoadPlan, loadSettingsFiles } from '../../../settings/SettingsLoader.js';
|
|
8
|
+
import { formatSettingsIssue, } from './SetupTypes.js';
|
|
9
|
+
export const prepareStarterLayout = (homeDirectory, projectDirectory, setupSourceUri, synchronizer = createGitSetupSourceSynchronizer()) => {
|
|
10
|
+
const localOutfitterPath = resolveLocalSetupSourceOutfitterPathFromUri(setupSourceUri, projectDirectory);
|
|
11
|
+
if (localOutfitterPath !== undefined) {
|
|
12
|
+
const settingsPath = join(localOutfitterPath, 'settings.yml');
|
|
13
|
+
validateStarterSettingsIfPresent(existsSync(settingsPath) ? settingsPath : undefined);
|
|
14
|
+
return {
|
|
15
|
+
cachePath: localOutfitterPath,
|
|
16
|
+
settingsPath: existsSync(settingsPath) ? settingsPath : undefined,
|
|
17
|
+
profilesPath: firstExistingPath(join(localOutfitterPath, 'profiles')),
|
|
18
|
+
sourceKind: 'local-live',
|
|
19
|
+
sourceOutfitterPath: localOutfitterPath,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
const cachePath = createSetupSourceCachePath(homeDirectory, setupSourceUri);
|
|
23
|
+
synchronizer.sync(setupSourceUri, cachePath);
|
|
24
|
+
const settingsPath = firstExistingPath(join(cachePath, 'settings.yml'), join(cachePath, '.outfitter', 'settings.yml'));
|
|
25
|
+
validateStarterSettingsIfPresent(settingsPath);
|
|
26
|
+
const preferredProfilesPath = settingsPath?.endsWith(join('.outfitter', 'settings.yml'))
|
|
27
|
+
? join(cachePath, '.outfitter', 'profiles')
|
|
28
|
+
: join(cachePath, 'profiles');
|
|
29
|
+
const profilesPath = firstExistingPath(preferredProfilesPath, join(cachePath, 'profiles'), join(cachePath, '.outfitter', 'profiles'));
|
|
30
|
+
return { cachePath, settingsPath, profilesPath, sourceKind: 'remote-cache' };
|
|
31
|
+
};
|
|
32
|
+
const createSetupSourceCachePath = (homeDirectory, setupSourceUri) => createRemoteRepositoryCachePath(homeDirectory, { uri: setupSourceUri });
|
|
33
|
+
const createGitSetupSourceSynchronizer = () => ({
|
|
34
|
+
sync(uri, cachePath) {
|
|
35
|
+
mkdirSync(dirname(cachePath), { recursive: true });
|
|
36
|
+
if (existsSync(cachePath)) {
|
|
37
|
+
runGit(['-C', cachePath, 'pull', '--ff-only'], uri);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
runGit(['clone', '--', normalizeGitUri(uri), cachePath], uri);
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
const runGit = (args, sensitiveUri) => {
|
|
44
|
+
const result = spawn.sync('git', args, { stdio: 'pipe', encoding: 'utf8' });
|
|
45
|
+
if (result.status !== 0) {
|
|
46
|
+
/* v8 ignore next -- the final fallback only applies if git emits no stdout or stderr. */
|
|
47
|
+
throw new Error(redactSensitiveText((result.stderr || result.stdout || `git ${args.join(' ')} failed`).trim(), sensitiveUri));
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
const redactSensitiveText = (message, uri) => message
|
|
51
|
+
.split(uri)
|
|
52
|
+
.join(redactProfileSourceUriCredentials(uri))
|
|
53
|
+
.split(normalizeGitUri(uri))
|
|
54
|
+
.join(redactProfileSourceUriCredentials(normalizeGitUri(uri)));
|
|
55
|
+
const firstExistingPath = (...paths) => paths.find((path) => existsSync(path));
|
|
56
|
+
export const validateStarterSettingsIfPresent = (settingsPath) => {
|
|
57
|
+
if (settingsPath === undefined) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const loaded = loadSettingsFiles(createSettingsLoadPlan([{ scope: 'user', path: settingsPath }]));
|
|
61
|
+
if (loaded.issues.length > 0) {
|
|
62
|
+
throw new Error(`Cannot setup from invalid starter settings: ${loaded.issues.map(formatSettingsIssue).join('; ')}`);
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
export const readStarterDefaultProfileId = (settingsPath) => {
|
|
66
|
+
if (settingsPath === undefined) {
|
|
67
|
+
return 'engineer';
|
|
68
|
+
}
|
|
69
|
+
const loaded = loadSettingsFiles(createSettingsLoadPlan([{ scope: 'user', path: settingsPath }]));
|
|
70
|
+
return loaded.files[0]?.settings.defaultProfile ?? 'engineer';
|
|
71
|
+
};
|
|
72
|
+
export const readStarterExplicitDefaultProfileId = (settingsPath) => {
|
|
73
|
+
if (settingsPath === undefined) {
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
76
|
+
const loaded = loadSettingsFiles(createSettingsLoadPlan([{ scope: 'user', path: settingsPath }]));
|
|
77
|
+
return loaded.files[0]?.settings.defaultProfile;
|
|
78
|
+
};
|
|
79
|
+
export const readUserDefaultProfileId = (files) => files.find((file) => file.location.scope === 'user')?.settings.defaultProfile ?? 'engineer';
|
|
80
|
+
export const ensureExistingUserSettingsDefaultProfile = (settingsPath, files, defaultProfileId) => {
|
|
81
|
+
const userSettings = files.find((file) => file.location.scope === 'user');
|
|
82
|
+
if (userSettings === undefined || userSettings.settings.defaultProfile !== undefined) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const content = readFileSync(settingsPath, 'utf8');
|
|
86
|
+
writeFileSync(settingsPath, `${content}\ndefault_profile: ${defaultProfileId}\n`);
|
|
87
|
+
};
|
|
88
|
+
export const assertValidDefaultProfileId = (profileId) => {
|
|
89
|
+
if (!isValidProfileId(profileId)) {
|
|
90
|
+
throw new Error(`Default profile '${profileId}' is not a filesystem-safe Outfitter profile id.`);
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
export const createDefaultSettingsContent = (defaultProfileId = 'engineer') => [
|
|
94
|
+
`default_profile: ${defaultProfileId}`,
|
|
95
|
+
'profile_sources:',
|
|
96
|
+
' - github: ai-outfitter/default-profiles',
|
|
97
|
+
' path: profiles',
|
|
98
|
+
' - path: ./profiles',
|
|
99
|
+
'',
|
|
100
|
+
].join('\n');
|
|
101
|
+
export const createInitialSettingsIfMissing = (settingsPath, starterSettingsPath) => {
|
|
102
|
+
if (existsSync(settingsPath)) {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
mkdirSync(dirname(settingsPath), { recursive: true });
|
|
106
|
+
writeFileSync(settingsPath, starterSettingsPath === undefined
|
|
107
|
+
? createDefaultSettingsContent()
|
|
108
|
+
: readStarterSettingsContent(starterSettingsPath));
|
|
109
|
+
return true;
|
|
110
|
+
};
|
|
111
|
+
export const readStarterSettingsContent = (starterSettingsPath) => {
|
|
112
|
+
const content = readFileSync(starterSettingsPath, 'utf8');
|
|
113
|
+
const loaded = loadSettingsFiles(createSettingsLoadPlan([{ scope: 'user', path: starterSettingsPath }]));
|
|
114
|
+
if (loaded.files[0]?.settings.defaultProfile !== undefined) {
|
|
115
|
+
return content;
|
|
116
|
+
}
|
|
117
|
+
return `default_profile: engineer\n${content}`;
|
|
118
|
+
};
|
|
119
|
+
/* v8 ignore start -- local setup-source path probing is covered by filesystem integration tests. */
|
|
120
|
+
export const resolveLocalSetupSourceOutfitterPath = (input) => input.setupSourceUri === undefined
|
|
121
|
+
? undefined
|
|
122
|
+
: resolveLocalSetupSourceOutfitterPathFromUri(input.setupSourceUri, input.projectDirectory);
|
|
123
|
+
export const resolveLocalSetupSourceOutfitterPathFromUri = (setupSourceUri, projectDirectory) => {
|
|
124
|
+
if (isRemoteSetupSourceUri(setupSourceUri)) {
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
const sourcePath = isAbsolute(setupSourceUri) ? setupSourceUri : resolve(projectDirectory, setupSourceUri);
|
|
128
|
+
const outfitterPath = sourcePath.endsWith('.outfitter') ? sourcePath : join(sourcePath, '.outfitter');
|
|
129
|
+
return existsSync(outfitterPath) ? outfitterPath : undefined;
|
|
130
|
+
};
|
|
131
|
+
const isRemoteSetupSourceUri = (source) => /^[a-z][a-z0-9+.-]*:/iu.test(source) && !isAbsolute(source);
|
|
132
|
+
/* v8 ignore stop */
|
|
133
|
+
//# sourceMappingURL=SetupStarterSource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SetupStarterSource.js","sourceRoot":"","sources":["../../../../src/cli/commands/setup/SetupStarterSource.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import type { SyncCommandDependencies, SyncCommandResult } from '../SyncCommand.js';
|
|
2
|
+
import type { WelcomeCommandDependencies, WelcomeCommandResult } from '../WelcomeCommand.js';
|
|
3
|
+
export interface SetupCommandInput {
|
|
4
|
+
readonly homeDirectory: string;
|
|
5
|
+
readonly projectDirectory: string;
|
|
6
|
+
readonly setupSourceUri?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface SetupCommandResult {
|
|
9
|
+
readonly settingsPath: string;
|
|
10
|
+
readonly defaultProfilePath: string;
|
|
11
|
+
readonly createdSettings: boolean;
|
|
12
|
+
readonly copiedStarterProfileFiles: number;
|
|
13
|
+
readonly createdDefaultProfile: boolean;
|
|
14
|
+
readonly syncResult: SyncCommandResult;
|
|
15
|
+
readonly welcomeResult?: WelcomeCommandResult;
|
|
16
|
+
readonly messages: readonly string[];
|
|
17
|
+
}
|
|
18
|
+
export interface SetupSourceSynchronizer {
|
|
19
|
+
sync(uri: string, cachePath: string): void;
|
|
20
|
+
}
|
|
21
|
+
export interface SetupSourceLaunchInput {
|
|
22
|
+
readonly homeDirectory: string;
|
|
23
|
+
readonly projectDirectory: string;
|
|
24
|
+
readonly profileId?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface SetupPiOnboardingLaunchInput {
|
|
27
|
+
readonly homeDirectory: string;
|
|
28
|
+
readonly projectDirectory: string;
|
|
29
|
+
readonly setupSourceUri?: string;
|
|
30
|
+
}
|
|
31
|
+
export type SetupSourcePostImportAction = 'start' | 'exit';
|
|
32
|
+
export type SetupSourcePostImportLaunchTarget = 'selected' | 'default';
|
|
33
|
+
export type SetupCommandDependencies = SyncCommandDependencies & WelcomeCommandDependencies & {
|
|
34
|
+
readonly setupSourceSynchronizer?: SetupSourceSynchronizer;
|
|
35
|
+
readonly selectDefaultProfile?: (profiles: readonly SetupProfileChoice[], currentDefault: string) => Promise<string>;
|
|
36
|
+
readonly selectSetupSourceImportTarget?: (choices: readonly SetupSourceImportTargetChoice[], defaultTarget: SetupSourceImportTarget) => Promise<SetupSourceImportTarget>;
|
|
37
|
+
readonly selectSetupSourceLaunchAction?: (profileId: string, launchTarget: SetupSourcePostImportLaunchTarget) => Promise<SetupSourcePostImportAction>;
|
|
38
|
+
readonly selectSetupSourceImportMode?: (choices: readonly SetupSourceImportModeChoice[], defaultMode: SetupSourceImportMode) => Promise<SetupSourceImportMode>;
|
|
39
|
+
readonly launchSetupSourceProfile?: (input: SetupSourceLaunchInput) => Promise<void>;
|
|
40
|
+
readonly launchPiOnboarding?: (input: SetupPiOnboardingLaunchInput) => Promise<{
|
|
41
|
+
readonly exitCode: number;
|
|
42
|
+
}>;
|
|
43
|
+
readonly runWelcome?: (input: SetupCommandInput, dependencies: SetupCommandDependencies) => Promise<WelcomeCommandResult | undefined>;
|
|
44
|
+
};
|
|
45
|
+
export interface SetupProfileChoice {
|
|
46
|
+
readonly id: string;
|
|
47
|
+
readonly label?: string;
|
|
48
|
+
readonly description?: string;
|
|
49
|
+
}
|
|
50
|
+
export type SetupSourceImportTarget = 'home' | 'project';
|
|
51
|
+
export type SetupSourceImportMode = 'copy' | 'symlink';
|
|
52
|
+
export interface SetupSourceImportTargetChoice {
|
|
53
|
+
readonly target: SetupSourceImportTarget;
|
|
54
|
+
readonly label: string;
|
|
55
|
+
readonly description: string;
|
|
56
|
+
}
|
|
57
|
+
export interface SetupSourceImportModeChoice {
|
|
58
|
+
readonly mode: SetupSourceImportMode;
|
|
59
|
+
readonly label: string;
|
|
60
|
+
readonly description: string;
|
|
61
|
+
}
|
|
62
|
+
export declare const setupSourceImportModeChoices: readonly SetupSourceImportModeChoice[];
|
|
63
|
+
export declare const setupSourceImportTargetChoices: readonly SetupSourceImportTargetChoice[];
|
|
64
|
+
export interface StarterLayout {
|
|
65
|
+
readonly cachePath: string;
|
|
66
|
+
readonly settingsPath?: string;
|
|
67
|
+
readonly profilesPath?: string;
|
|
68
|
+
readonly sourceKind: 'local-live' | 'remote-cache';
|
|
69
|
+
readonly sourceOutfitterPath?: string;
|
|
70
|
+
}
|
|
71
|
+
export interface SetupSourceOnboardingResult {
|
|
72
|
+
readonly importTarget: SetupSourceImportTarget;
|
|
73
|
+
readonly selectedProfileId: string;
|
|
74
|
+
readonly importMode: SetupSourceImportMode;
|
|
75
|
+
}
|
|
76
|
+
export interface AppliedSetupSourceImport {
|
|
77
|
+
readonly settingsPath: string;
|
|
78
|
+
readonly settingsDescription: string;
|
|
79
|
+
readonly profilesPath: string;
|
|
80
|
+
readonly createdSettings: boolean;
|
|
81
|
+
readonly copiedStarterProfileFiles: number;
|
|
82
|
+
readonly copiedStarterResourceFiles: number;
|
|
83
|
+
readonly selectedProfileAlreadyExists: boolean;
|
|
84
|
+
readonly selectedProfileConflictMessage?: string;
|
|
85
|
+
readonly symlinkedOutfitter: boolean;
|
|
86
|
+
}
|
|
87
|
+
export declare const formatSettingsIssue: (issue: {
|
|
88
|
+
readonly filePath: string;
|
|
89
|
+
readonly path: string;
|
|
90
|
+
readonly message: string;
|
|
91
|
+
}) => string;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export const setupSourceImportModeChoices = [
|
|
2
|
+
{
|
|
3
|
+
mode: 'copy',
|
|
4
|
+
label: 'Copy snapshot',
|
|
5
|
+
description: 'copy profiles into the selected .outfitter folder; safest for normal use',
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
mode: 'symlink',
|
|
9
|
+
label: 'Symlink for development',
|
|
10
|
+
description: 'link the selected .outfitter folder to the local source so shared profile edits apply immediately',
|
|
11
|
+
},
|
|
12
|
+
];
|
|
13
|
+
export const setupSourceImportTargetChoices = [
|
|
14
|
+
{
|
|
15
|
+
target: 'home',
|
|
16
|
+
label: 'User home',
|
|
17
|
+
description: 'install profiles into ~/.outfitter for all repositories on this machine',
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
target: 'project',
|
|
21
|
+
label: 'Current project',
|
|
22
|
+
description: 'install profiles into this project .outfitter folder only',
|
|
23
|
+
},
|
|
24
|
+
];
|
|
25
|
+
export const formatSettingsIssue = (issue) => `${issue.filePath}#${issue.path} ${issue.message}`;
|
|
26
|
+
//# sourceMappingURL=SetupTypes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SetupTypes.js","sourceRoot":"","sources":["../../../../src/cli/commands/setup/SetupTypes.ts"],"names":[],"mappings":"AAyFA,MAAM,CAAC,MAAM,4BAA4B,GAA2C;IAClF;QACE,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,0EAA0E;KACxF;IACD;QACE,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,yBAAyB;QAChC,WAAW,EAAE,mGAAmG;KACjH;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAA6C;IACtF;QACE,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,yEAAyE;KACvF;IACD;QACE,MAAM,EAAE,SAAS;QACjB,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,2DAA2D;KACzE;CACF,CAAC;AA4BF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAInC,EAAU,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC"}
|
|
@@ -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;
|