@ai-outfitter/outfitter 0.8.0 → 0.10.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/.outfitter/skills/outfitter/SKILL.md +86 -0
- package/README.md +10 -0
- package/code/pi-extension/src/outfitter-extension.js +11 -0
- package/dist/agents/AdapterProfileControls.js +2 -2
- package/dist/agents/AdapterProfileControls.js.map +1 -1
- package/dist/agents/AdapterStatePaths.js +3 -1
- package/dist/agents/AdapterStatePaths.js.map +1 -1
- package/dist/agents/AgentAdapter.d.ts +1 -2
- package/dist/agents/LaunchResources.d.ts +4 -0
- package/dist/agents/LaunchResources.js +27 -1
- package/dist/agents/LaunchResources.js.map +1 -1
- package/dist/agents/OutfitterSkill.d.ts +11 -0
- package/dist/agents/OutfitterSkill.js +128 -0
- package/dist/agents/OutfitterSkill.js.map +1 -0
- package/dist/agents/claude/ClaudeAdapter.js +19 -3
- package/dist/agents/claude/ClaudeAdapter.js.map +1 -1
- package/dist/agents/pi/PiAdapter.js +13 -17
- package/dist/agents/pi/PiAdapter.js.map +1 -1
- package/dist/agents/pi/PiArgs.js +1 -1
- package/dist/agents/pi/PiArgs.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.js +5 -1
- package/dist/agents/pi/PiSkillSources.js.map +1 -1
- package/dist/cli/OutfitterCli.js +0 -2
- package/dist/cli/OutfitterCli.js.map +1 -1
- package/dist/cli/commands/PiLoginLaunch.d.ts +5 -0
- package/dist/cli/commands/PiLoginLaunch.js +5 -9
- package/dist/cli/commands/PiLoginLaunch.js.map +1 -1
- package/dist/cli/commands/RunCommand.d.ts +2 -2
- package/dist/cli/commands/RunCommand.js +140 -55
- 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/profile/LintCommand.js +33 -1
- package/dist/cli/commands/profile/LintCommand.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.d.ts +2 -0
- package/dist/cli/commands/run/RunProfileResolution.js +14 -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/profiles/Profile.d.ts +14 -1
- package/dist/profiles/Profile.js.map +1 -1
- package/dist/profiles/ProfileLoader.js +18 -2
- package/dist/profiles/ProfileLoader.js.map +1 -1
- package/dist/profiles/ProfileMerger.js +3 -2
- package/dist/profiles/ProfileMerger.js.map +1 -1
- package/dist/schemas/profile.schema.json +40 -3
- package/dist/settings/SettingsLoader.d.ts +1 -0
- package/dist/settings/SettingsLoader.js +10 -1
- package/dist/settings/SettingsLoader.js.map +1 -1
- package/dist/skills/ProfileSkillResolution.d.ts +21 -0
- package/dist/skills/ProfileSkillResolution.js +88 -0
- package/dist/skills/ProfileSkillResolution.js.map +1 -0
- package/dist/skills/SkillCatalog.d.ts +41 -0
- package/dist/skills/SkillCatalog.js +119 -0
- package/dist/skills/SkillCatalog.js.map +1 -0
- package/dist/skills/SkillDocument.d.ts +21 -0
- package/dist/skills/SkillDocument.js +85 -0
- package/dist/skills/SkillDocument.js.map +1 -0
- package/dist/skills/SkillResolution.d.ts +34 -0
- package/dist/skills/SkillResolution.js +217 -0
- package/dist/skills/SkillResolution.js.map +1 -0
- package/{doc → docs}/documentation/README.md +4 -1
- package/docs/documentation/actions.md +97 -0
- package/docs/documentation/best-practices.md +105 -0
- package/{doc → docs}/documentation/profile-repository.md +74 -6
- package/docs/documentation/skills.md +436 -0
- package/{doc → docs}/documentation/state.md +22 -2
- package/{doc → docs}/documentation/support-matrix.md +4 -1
- package/package.json +4 -8
- package/src/schemas/profile.schema.json +40 -3
- package/dist/agents/OutfitterDocs.d.ts +0 -2
- package/dist/agents/OutfitterDocs.js +0 -38
- package/dist/agents/OutfitterDocs.js.map +0 -1
- package/skills/outfitter/SKILL.md +0 -68
- /package/{doc → docs}/architecture/state_writeback_strategy.md +0 -0
- /package/{doc → docs}/documentation/cli.md +0 -0
- /package/{doc → docs}/documentation/concepts.md +0 -0
- /package/{doc → docs}/documentation/first-time-cli-agent-users.md +0 -0
- /package/{doc → docs}/documentation/getting-started.md +0 -0
- /package/{doc → docs}/documentation/iterating-on-profiles.md +0 -0
- /package/{doc → docs}/documentation/profiles.md +0 -0
- /package/{doc → docs}/documentation/switching-to-outfitter.md +0 -0
- /package/{doc → docs}/documentation/usecases/engineering.md +0 -0
- /package/{doc → docs}/documentation/usecases/organization-profile-catalog.md +0 -0
- /package/{doc → docs}/documentation/usecases/persona-reviews.md +0 -0
- /package/{doc → docs}/philosophy.md +0 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// Decides whether a run should enter Pi-native first-run onboarding and prepares its inputs.
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { isNonInteractivePiLaunch } from '../PiLoginLaunch.js';
|
|
5
|
+
import { createGitSynchronizer, syncProfileSource } from '../SyncCommand.js';
|
|
6
|
+
import { selectRunAgentId } from './RunProfileResolution.js';
|
|
7
|
+
const defaultProfilesSource = {
|
|
8
|
+
github: 'ai-outfitter/default-profiles',
|
|
9
|
+
path: 'profiles',
|
|
10
|
+
};
|
|
11
|
+
export const prepareFirstRunRuntimeOnboarding = (input, dependencies) => {
|
|
12
|
+
if (!shouldUsePiNativeFirstRunOnboarding(input, dependencies)) {
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
const syncResult = syncProfileSource(input.homeDirectory, defaultProfilesSource, dependencies.synchronizer ?? createGitSynchronizer(resolveRunProgressWriter(dependencies)));
|
|
16
|
+
/* v8 ignore next -- network/cache failure path is integration-level behavior; setup fallback message is deterministic. */
|
|
17
|
+
if (syncResult.status === 'failed') {
|
|
18
|
+
throw new Error(`Cannot start Pi-native onboarding because the default profiles source failed to sync: ${syncResult.message}. ` +
|
|
19
|
+
'Fix the network/git issue or run `outfitter setup` once the source is reachable.');
|
|
20
|
+
}
|
|
21
|
+
return { defaultProfilesPath: join(syncResult.cachePath, defaultProfilesSource.path) };
|
|
22
|
+
};
|
|
23
|
+
const shouldUsePiNativeFirstRunOnboarding = (input, dependencies) => {
|
|
24
|
+
if (input.forceRuntimeOnboarding !== true && existsSync(join(input.homeDirectory, '.outfitter', 'settings.yml'))) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
const selectedAgentId = dependencies.adapter?.id ?? selectRunAgentId(input.agentId, undefined);
|
|
28
|
+
/* v8 ignore next -- explicit profile/non-pi paths are covered by normal run command selection tests. */
|
|
29
|
+
if (input.profileId !== undefined || selectedAgentId !== 'pi') {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
if (isNonInteractivePiLaunch(input.passThroughArgs ?? [])) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
return isInteractiveRunLaunch(dependencies);
|
|
36
|
+
};
|
|
37
|
+
// Network/build steps (catalog clones, extension caching) report per-source progress through this
|
|
38
|
+
// writer so first boot never stalls silently before launch.
|
|
39
|
+
export const resolveRunProgressWriter = (dependencies) =>
|
|
40
|
+
/* v8 ignore next -- console fallback is direct CLI behavior; tests inject writeLine. */
|
|
41
|
+
dependencies.writeLine ?? console.log;
|
|
42
|
+
export const isInteractiveRunLaunch = (dependencies) => {
|
|
43
|
+
if (dependencies.interactive !== undefined) {
|
|
44
|
+
return dependencies.interactive;
|
|
45
|
+
}
|
|
46
|
+
/* v8 ignore next -- default process streams are direct terminal behavior; tests inject streams. */
|
|
47
|
+
const inputIsTty = (dependencies.input ?? process.stdin).isTTY === true;
|
|
48
|
+
/* v8 ignore next -- default process streams are direct terminal behavior; tests inject streams. */
|
|
49
|
+
const outputIsTty = (dependencies.output ?? process.stdout).isTTY === true;
|
|
50
|
+
return inputIsTty && outputIsTty;
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=RunFirstRunOnboarding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RunFirstRunOnboarding.js","sourceRoot":"","sources":["../../../../src/cli/commands/run/RunFirstRunOnboarding.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAA4B,MAAM,mBAAmB,CAAC;AACvG,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAM7D,MAAM,qBAAqB,GAAG;IAC5B,MAAM,EAAE,+BAA+B;IACvC,IAAI,EAAE,UAAU;CACsB,CAAC;AAEzC,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAC9C,KAAsB,EACtB,YAAoC,EACG,EAAE;IACzC,IAAI,CAAC,mCAAmC,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,CAAC;QAC9D,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,UAAU,GAAG,iBAAiB,CAClC,KAAK,CAAC,aAAa,EACnB,qBAAqB,EACrB,YAAY,CAAC,YAAY,IAAI,qBAAqB,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAC,CAC3F,CAAC;IAEF,0HAA0H;IAC1H,IAAI,UAAU,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CACb,yFAAyF,UAAU,CAAC,OAAO,IAAI;YAC7G,kFAAkF,CACrF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,mBAAmB,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;AACzF,CAAC,CAAC;AAEF,MAAM,mCAAmC,GAAG,CAAC,KAAsB,EAAE,YAAoC,EAAW,EAAE;IACpH,IAAI,KAAK,CAAC,sBAAsB,KAAK,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;QACjH,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,eAAe,GAAG,YAAY,CAAC,OAAO,EAAE,EAAE,IAAI,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAE/F,wGAAwG;IACxG,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;QAC9D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,wBAAwB,CAAC,KAAK,CAAC,eAAe,IAAI,EAAE,CAAC,EAAE,CAAC;QAC1D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,sBAAsB,CAAC,YAAY,CAAC,CAAC;AAC9C,CAAC,CAAC;AAEF,kGAAkG;AAClG,4DAA4D;AAC5D,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,YAAoC,EAA+B,EAAE;AAC5G,wFAAwF;AACxF,YAAY,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC;AAExC,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,YAAoC,EAAW,EAAE;IACtF,IAAI,YAAY,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QAC3C,OAAO,YAAY,CAAC,WAAW,CAAC;IAClC,CAAC;IAED,mGAAmG;IACnG,MAAM,UAAU,GAAG,CAAC,YAAY,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC;IACxE,mGAAmG;IACnG,MAAM,WAAW,GAAG,CAAC,YAAY,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC;IAE3E,OAAO,UAAU,IAAI,WAAW,CAAC;AACnC,CAAC,CAAC"}
|
|
@@ -35,3 +35,5 @@ export declare const loadProfileSources: (homeDirectory: string, sources: readon
|
|
|
35
35
|
readonly message: string;
|
|
36
36
|
}[];
|
|
37
37
|
};
|
|
38
|
+
/** Materialized on-disk paths for configured sources, in configured (precedence) order. */
|
|
39
|
+
export declare const materializeProfileSourcePaths: (homeDirectory: string, sources: readonly ProfileSourceReference[]) => readonly string[];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Resolves the effective profile, layers, and profile sources for a run command launch.
|
|
2
|
-
import { mkdirSync } from 'node:fs';
|
|
2
|
+
import { existsSync, mkdirSync } from 'node:fs';
|
|
3
3
|
import { dirname, join } from 'node:path';
|
|
4
4
|
import { createEmptyProfile } from '../../../profiles/Profile.js';
|
|
5
5
|
import { createProfileSourceCachePath, createRemoteRepositoryCachePath, resolveRemoteRepositorySubpath, } from '../../../profiles/ProfileCache.js';
|
|
@@ -91,12 +91,25 @@ export const loadProfileSources = (homeDirectory, sources) => {
|
|
|
91
91
|
const issues = [];
|
|
92
92
|
for (const source of sources) {
|
|
93
93
|
const materializedSource = materializeSource(homeDirectory, source);
|
|
94
|
+
// A remote source whose cache has never synced (degraded-offline onboarding, blocked
|
|
95
|
+
// network) contributes no profiles instead of failing the launch; a later successful
|
|
96
|
+
// `outfitter sync` upgrades it to the full catalog.
|
|
97
|
+
if (isUnsyncedRemoteProfileSource(source, materializedSource.path)) {
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
94
100
|
const result = loadLocalProfileSource(materializedSource);
|
|
95
101
|
profiles.push(...result.profiles.map((profile) => ({ ...profile, source })));
|
|
96
102
|
issues.push(...result.issues);
|
|
97
103
|
}
|
|
98
104
|
return { profiles, issues };
|
|
99
105
|
};
|
|
106
|
+
/** Materialized on-disk paths for configured sources, in configured (precedence) order. */
|
|
107
|
+
export const materializeProfileSourcePaths = (homeDirectory, sources) => sources
|
|
108
|
+
.map((source) => materializeSource(homeDirectory, source).path)
|
|
109
|
+
.filter((path) => path !== undefined && existsSync(path));
|
|
110
|
+
const isUnsyncedRemoteProfileSource = (source, materializedPath) => (source.uri !== undefined || source.github !== undefined) &&
|
|
111
|
+
materializedPath !== undefined &&
|
|
112
|
+
!existsSync(materializedPath);
|
|
100
113
|
const materializeSource = (homeDirectory, source) => {
|
|
101
114
|
if (source.uri === undefined && source.github === undefined) {
|
|
102
115
|
return source;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RunProfileResolution.js","sourceRoot":"","sources":["../../../../src/cli/commands/run/RunProfileResolution.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"RunProfileResolution.js","sourceRoot":"","sources":["../../../../src/cli/commands/run/RunProfileResolution.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|
|
@@ -8,6 +8,19 @@ export interface PromptRepoFileInclude {
|
|
|
8
8
|
}
|
|
9
9
|
export type AppendSystemPromptEntry = string | PromptFileInclude | PromptRepoFileInclude;
|
|
10
10
|
export type AppendSystemPromptControl = AppendSystemPromptEntry | readonly AppendSystemPromptEntry[];
|
|
11
|
+
export interface SkillFileReference {
|
|
12
|
+
readonly file: string;
|
|
13
|
+
}
|
|
14
|
+
export interface SkillRepoFileReference {
|
|
15
|
+
readonly repo_file: string;
|
|
16
|
+
}
|
|
17
|
+
export type SkillReference = SkillFileReference | SkillRepoFileReference;
|
|
18
|
+
/** Expanded `controls.skills` entry appending profile-owned references to a selected skill. */
|
|
19
|
+
export interface SkillSelection {
|
|
20
|
+
readonly id: string;
|
|
21
|
+
readonly references?: readonly SkillReference[];
|
|
22
|
+
}
|
|
23
|
+
export type SkillControlEntry = string | SkillSelection;
|
|
11
24
|
export interface DeepWorkProfileControls {
|
|
12
25
|
readonly jobs?: readonly string[];
|
|
13
26
|
}
|
|
@@ -20,7 +33,7 @@ interface BaseProfileControls {
|
|
|
20
33
|
readonly args?: readonly string[];
|
|
21
34
|
readonly sessionDirectory?: string;
|
|
22
35
|
readonly extensions?: readonly string[];
|
|
23
|
-
readonly skills?: readonly
|
|
36
|
+
readonly skills?: readonly SkillControlEntry[];
|
|
24
37
|
readonly promptTemplate?: string;
|
|
25
38
|
readonly systemPrompt?: string;
|
|
26
39
|
readonly appendSystemPrompt?: AppendSystemPromptControl;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Profile.js","sourceRoot":"","sources":["../../src/profiles/Profile.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Profile.js","sourceRoot":"","sources":["../../src/profiles/Profile.ts"],"names":[],"mappings":"AAoEA,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EAAU,EAAW,EAAE,CAAC,CAAC;IAC1D,EAAE;IACF,QAAQ,EAAE,EAAE;IACZ,QAAQ,EAAE,EAAE;IACZ,gBAAgB,EAAE,EAAE;CACrB,CAAC,CAAC"}
|
|
@@ -3,6 +3,7 @@ import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';
|
|
|
3
3
|
import { join } from 'node:path';
|
|
4
4
|
import { validateSchema } from '../validation/SchemaValidator.js';
|
|
5
5
|
import { parseYamlDocument } from '../validation/YamlDocument.js';
|
|
6
|
+
import { isSkillReference } from '../skills/SkillDocument.js';
|
|
6
7
|
import { isPromptFileInclude, isPromptRepoFileInclude } from './PromptIncludes.js';
|
|
7
8
|
const profileIdPattern = /^[a-z0-9][a-z0-9._-]*[a-z0-9]$|^[a-z0-9]$/u;
|
|
8
9
|
const flatProfileFilePattern = /^(?<slug>.+)\.ya?ml$/u;
|
|
@@ -197,6 +198,21 @@ const readOptionalStringArray = (value) => {
|
|
|
197
198
|
}
|
|
198
199
|
return undefined;
|
|
199
200
|
};
|
|
201
|
+
const isSkillSelection = (value) => {
|
|
202
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value)) {
|
|
203
|
+
return false;
|
|
204
|
+
}
|
|
205
|
+
const record = value;
|
|
206
|
+
return (typeof record.id === 'string' &&
|
|
207
|
+
Object.keys(record).every((key) => key === 'id' || key === 'references') &&
|
|
208
|
+
(record.references === undefined || (Array.isArray(record.references) && record.references.every(isSkillReference))));
|
|
209
|
+
};
|
|
210
|
+
const readOptionalSkillControlEntries = (value) => {
|
|
211
|
+
if (!Array.isArray(value)) {
|
|
212
|
+
return undefined;
|
|
213
|
+
}
|
|
214
|
+
return value.filter((item) => typeof item === 'string' || isSkillSelection(item));
|
|
215
|
+
};
|
|
200
216
|
const readOptionalAppendSystemPrompt = (value) => {
|
|
201
217
|
if (typeof value === 'string' || isPromptFileInclude(value) || isPromptRepoFileInclude(value)) {
|
|
202
218
|
return value;
|
|
@@ -220,7 +236,7 @@ const readControls = (value) => {
|
|
|
220
236
|
args: readOptionalStringArray(controls.args),
|
|
221
237
|
sessionDirectory: readOptionalString(controls.session_directory),
|
|
222
238
|
extensions: readOptionalStringArray(controls.extensions),
|
|
223
|
-
skills:
|
|
239
|
+
skills: readOptionalSkillControlEntries(controls.skills),
|
|
224
240
|
promptTemplate: readOptionalString(controls.prompt_template),
|
|
225
241
|
systemPrompt: readOptionalString(controls.system_prompt),
|
|
226
242
|
appendSystemPrompt: readOptionalAppendSystemPrompt(controls.append_system_prompt),
|
|
@@ -253,7 +269,7 @@ const readAgentSpecificControls = (value) => {
|
|
|
253
269
|
args: readOptionalStringArray(controls.args),
|
|
254
270
|
sessionDirectory: readOptionalString(controls.session_directory),
|
|
255
271
|
extensions: readOptionalStringArray(controls.extensions),
|
|
256
|
-
skills:
|
|
272
|
+
skills: readOptionalSkillControlEntries(controls.skills),
|
|
257
273
|
promptTemplate: readOptionalString(controls.prompt_template),
|
|
258
274
|
systemPrompt: readOptionalString(controls.system_prompt),
|
|
259
275
|
appendSystemPrompt: readOptionalAppendSystemPrompt(controls.append_system_prompt),
|