@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.
Files changed (103) hide show
  1. package/.outfitter/skills/outfitter/SKILL.md +86 -0
  2. package/README.md +10 -0
  3. package/code/pi-extension/src/outfitter-extension.js +11 -0
  4. package/dist/agents/AdapterProfileControls.js +2 -2
  5. package/dist/agents/AdapterProfileControls.js.map +1 -1
  6. package/dist/agents/AdapterStatePaths.js +3 -1
  7. package/dist/agents/AdapterStatePaths.js.map +1 -1
  8. package/dist/agents/AgentAdapter.d.ts +1 -2
  9. package/dist/agents/LaunchResources.d.ts +4 -0
  10. package/dist/agents/LaunchResources.js +27 -1
  11. package/dist/agents/LaunchResources.js.map +1 -1
  12. package/dist/agents/OutfitterSkill.d.ts +11 -0
  13. package/dist/agents/OutfitterSkill.js +128 -0
  14. package/dist/agents/OutfitterSkill.js.map +1 -0
  15. package/dist/agents/claude/ClaudeAdapter.js +19 -3
  16. package/dist/agents/claude/ClaudeAdapter.js.map +1 -1
  17. package/dist/agents/pi/PiAdapter.js +13 -17
  18. package/dist/agents/pi/PiAdapter.js.map +1 -1
  19. package/dist/agents/pi/PiArgs.js +1 -1
  20. package/dist/agents/pi/PiArgs.js.map +1 -1
  21. package/dist/agents/pi/PiExtensionCache.d.ts +8 -0
  22. package/dist/agents/pi/PiExtensionCache.js +95 -5
  23. package/dist/agents/pi/PiExtensionCache.js.map +1 -1
  24. package/dist/agents/pi/PiSkillSources.js +5 -1
  25. package/dist/agents/pi/PiSkillSources.js.map +1 -1
  26. package/dist/cli/OutfitterCli.js +0 -2
  27. package/dist/cli/OutfitterCli.js.map +1 -1
  28. package/dist/cli/commands/PiLoginLaunch.d.ts +5 -0
  29. package/dist/cli/commands/PiLoginLaunch.js +5 -9
  30. package/dist/cli/commands/PiLoginLaunch.js.map +1 -1
  31. package/dist/cli/commands/RunCommand.d.ts +2 -2
  32. package/dist/cli/commands/RunCommand.js +140 -55
  33. package/dist/cli/commands/RunCommand.js.map +1 -1
  34. package/dist/cli/commands/SyncCommand.d.ts +1 -1
  35. package/dist/cli/commands/SyncCommand.js +37 -12
  36. package/dist/cli/commands/SyncCommand.js.map +1 -1
  37. package/dist/cli/commands/profile/LintCommand.js +33 -1
  38. package/dist/cli/commands/profile/LintCommand.js.map +1 -1
  39. package/dist/cli/commands/run/RunFirstRunOnboarding.d.ts +7 -0
  40. package/dist/cli/commands/run/RunFirstRunOnboarding.js +52 -0
  41. package/dist/cli/commands/run/RunFirstRunOnboarding.js.map +1 -0
  42. package/dist/cli/commands/run/RunProfileResolution.d.ts +2 -0
  43. package/dist/cli/commands/run/RunProfileResolution.js +14 -1
  44. package/dist/cli/commands/run/RunProfileResolution.js.map +1 -1
  45. package/dist/cli/commands/run/RunStateWritePrompt.d.ts +2 -0
  46. package/dist/cli/commands/run/RunStateWritePrompt.js +29 -0
  47. package/dist/cli/commands/run/RunStateWritePrompt.js.map +1 -0
  48. package/dist/compositeProfile/CompositeProfileCleanup.d.ts +9 -0
  49. package/dist/compositeProfile/CompositeProfileCleanup.js +87 -0
  50. package/dist/compositeProfile/CompositeProfileCleanup.js.map +1 -0
  51. package/dist/compositeProfile/StatePersistence.d.ts +16 -1
  52. package/dist/compositeProfile/StatePersistence.js +27 -5
  53. package/dist/compositeProfile/StatePersistence.js.map +1 -1
  54. package/dist/fs/SafeSymlink.d.ts +13 -0
  55. package/dist/fs/SafeSymlink.js +50 -0
  56. package/dist/fs/SafeSymlink.js.map +1 -0
  57. package/dist/profiles/Profile.d.ts +14 -1
  58. package/dist/profiles/Profile.js.map +1 -1
  59. package/dist/profiles/ProfileLoader.js +18 -2
  60. package/dist/profiles/ProfileLoader.js.map +1 -1
  61. package/dist/profiles/ProfileMerger.js +3 -2
  62. package/dist/profiles/ProfileMerger.js.map +1 -1
  63. package/dist/schemas/profile.schema.json +40 -3
  64. package/dist/settings/SettingsLoader.d.ts +1 -0
  65. package/dist/settings/SettingsLoader.js +10 -1
  66. package/dist/settings/SettingsLoader.js.map +1 -1
  67. package/dist/skills/ProfileSkillResolution.d.ts +21 -0
  68. package/dist/skills/ProfileSkillResolution.js +88 -0
  69. package/dist/skills/ProfileSkillResolution.js.map +1 -0
  70. package/dist/skills/SkillCatalog.d.ts +41 -0
  71. package/dist/skills/SkillCatalog.js +119 -0
  72. package/dist/skills/SkillCatalog.js.map +1 -0
  73. package/dist/skills/SkillDocument.d.ts +21 -0
  74. package/dist/skills/SkillDocument.js +85 -0
  75. package/dist/skills/SkillDocument.js.map +1 -0
  76. package/dist/skills/SkillResolution.d.ts +34 -0
  77. package/dist/skills/SkillResolution.js +217 -0
  78. package/dist/skills/SkillResolution.js.map +1 -0
  79. package/{doc → docs}/documentation/README.md +4 -1
  80. package/docs/documentation/actions.md +97 -0
  81. package/docs/documentation/best-practices.md +105 -0
  82. package/{doc → docs}/documentation/profile-repository.md +74 -6
  83. package/docs/documentation/skills.md +436 -0
  84. package/{doc → docs}/documentation/state.md +22 -2
  85. package/{doc → docs}/documentation/support-matrix.md +4 -1
  86. package/package.json +4 -8
  87. package/src/schemas/profile.schema.json +40 -3
  88. package/dist/agents/OutfitterDocs.d.ts +0 -2
  89. package/dist/agents/OutfitterDocs.js +0 -38
  90. package/dist/agents/OutfitterDocs.js.map +0 -1
  91. package/skills/outfitter/SKILL.md +0 -68
  92. /package/{doc → docs}/architecture/state_writeback_strategy.md +0 -0
  93. /package/{doc → docs}/documentation/cli.md +0 -0
  94. /package/{doc → docs}/documentation/concepts.md +0 -0
  95. /package/{doc → docs}/documentation/first-time-cli-agent-users.md +0 -0
  96. /package/{doc → docs}/documentation/getting-started.md +0 -0
  97. /package/{doc → docs}/documentation/iterating-on-profiles.md +0 -0
  98. /package/{doc → docs}/documentation/profiles.md +0 -0
  99. /package/{doc → docs}/documentation/switching-to-outfitter.md +0 -0
  100. /package/{doc → docs}/documentation/usecases/engineering.md +0 -0
  101. /package/{doc → docs}/documentation/usecases/organization-profile-catalog.md +0 -0
  102. /package/{doc → docs}/documentation/usecases/persona-reviews.md +0 -0
  103. /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":"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"}
1
+ {"version":3,"file":"RunProfileResolution.js","sourceRoot":"","sources":["../../../../src/cli/commands/run/RunProfileResolution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { CompositeProfileStateWritePrompt } from '../../../compositeProfile/StatePersistence.js';
2
+ export declare const createTerminalStateWritePrompt: (input: NodeJS.ReadableStream, output: NodeJS.WritableStream) => CompositeProfileStateWritePrompt;
@@ -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 declare const materializeCompositeProfileStatePath: (rootDirectory: string, statePath: CompositeProfileStatePath) => void;
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, symlinkSync, unlinkSync, writeFileSync, } from 'node:fs';
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
- export const materializeCompositeProfileStatePath = (rootDirectory, statePath) => {
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
- symlinkSync(sourcePath, outputPath, directory ? 'dir' : 'file');
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":"AAAA,qGAAqG;AACrG,OAAO,EACL,UAAU,EACV,SAAS,EACT,SAAS,EACT,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,UAAU,EACV,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAC9E,OAAO,EAAE,GAAG,IAAI,cAAc,EAAE,MAAM,iBAAiB,CAAC;AA0BxD,MAAM,CAAC,MAAM,oCAAoC,GAAG,CAClD,aAAqB,EACrB,SAAoC,EAC9B,EAAE;IACR,IAAI,SAAS,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACrC,IAAI,SAAS,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,eAAe,SAAS,CAAC,YAAY,uCAAuC,CAAC,CAAC;QAChG,CAAC;QAED,kBAAkB,CAAC,aAAa,EAAE,SAAS,CAAC,YAAY,EAAE,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;QACrG,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAG,sCAAsC,CAAC,aAAa,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC;IAEjG,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;QACxB,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;SAAM,CAAC;QACN,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mCAAmC,GAAG,CACjD,aAAqB,EACrB,aAAmD,EAAE,EACtB,EAAE,CAAC,CAAC;IACnC,YAAY,EAAE,eAAe,CAAC,aAAa,EAAE,yBAAyB,CAAC,UAAU,CAAC,CAAC;CACpF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,wCAAwC,GAAG,CACtD,aAAqB,EACrB,QAAuC,EACvC,WAA8B,EACC,EAAE;IACjC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAEpD,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,YAAY,GAAG,qCAAqC,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QACtF,wBAAwB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QACrD,mBAAmB,CAAC,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,CAAC;AAC1B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAC/C,aAAqB,EACrB,UAAgD,EAChD,QAAuC,EACK,EAAE;IAC9C,MAAM,OAAO,GAAG,eAAe,CAAC,aAAa,EAAE,yBAAyB,CAAC,UAAU,CAAC,CAAC,CAAC;IACtF,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,EAAE,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAC5F,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAChE,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,GAAG,EAA2C,CAAC;IAClE,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC;IAC7F,MAAM,gBAAgB,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC;IAE9F,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,iBAAiB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;QAE/F,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,IAAI,2BAA2B,CAAC,WAAW,EAAE,SAAS,CAAC,EAAE,CAAC;gBACxD,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE;oBACjC,YAAY,EAAE,SAAS,CAAC,YAAY;oBACpC,QAAQ,EAAE,SAAS,CAAC,QAAQ;oBAC5B,OAAO,EAAE,KAAK;iBACf,CAAC,CAAC;YACL,CAAC;QACH,CAAC;aAAM,IACL,gBAAgB,KAAK,SAAS;YAC9B,gBAAgB,CAAC,QAAQ,KAAK,SAAS;YACvC,eAAe,CAAC,WAAW,CAAC,EAC5B,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7G,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;AACzG,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,UAAkB,EAAE,SAAkB,EAAU,EAAE;IACtF,MAAM,UAAU,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;IAErD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,IAAI,SAAS,EAAE,CAAC;YACd,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACpD,aAAa,CAAC,UAAU,EAAE,mCAAmC,CAAC,UAAU,CAAC,CAAC,CAAC;QAC7E,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,kCAAkC,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAEtE,IAAI,SAAS,IAAI,UAAU,KAAK,WAAW,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,sBAAsB,UAAU,wBAAwB,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,CAAC,SAAS,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,sBAAsB,UAAU,mBAAmB,CAAC,CAAC;IACvE,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,kCAAkC,GAAG,CACzC,UAAkB,EAClB,SAAkB,EAClB,UAAgC,EAC1B,EAAE;IACR,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,UAAU,CAAC,CAAC;IAE/D,IAAI,CAAC,SAAS,IAAI,UAAU,KAAK,MAAM,IAAI,kBAAkB,KAAK,SAAS,IAAI,eAAe,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3G,aAAa,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;IAChD,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,mCAAmC,GAAG,CAAC,UAAkB,EAAU,EAAE,CAAC,uBAAuB,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;AAEtH,MAAM,eAAe,GAAG,CAAC,UAAkB,EAAW,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AAExG,MAAM,uBAAuB,GAAG,CAAC,UAAkB,EAAsB,EAAE;IACzE,IAAI,qBAAqB,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC;QAClD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,qBAAqB,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,CAAC;QACrD,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAED,IAAI,qBAAqB,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,CAAC;QACpD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,UAAkB,EAAE,QAAgB,EAAW,EAAE,CAC9E,UAAU,CAAC,QAAQ,CAAC,GAAG,GAAG,GAAG,QAAQ,EAAE,CAAC,IAAI,UAAU,KAAK,QAAQ,CAAC;AAEtE,MAAM,qBAAqB,GAAG,CAAC,UAAkB,EAAoC,EAAE;IACrF,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC;IACnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,gGAAgG;QAChG,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAClD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,gGAAgG;QAChG,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CACzB,aAAqB,EACrB,YAAoB,EACpB,UAAkB,EAClB,SAAkB,EACZ,EAAE;IACR,MAAM,UAAU,GAAG,sCAAsC,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IACvF,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEpD,IAAI,mBAAmB,CAAC,UAAU,CAAC,EAAE,CAAC;QACpC,UAAU,CAAC,UAAU,CAAC,CAAC;IACzB,CAAC;IAED,qBAAqB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAC7C,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAClE,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAW,EAAE;IACpD,IAAI,CAAC;QACH,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,iGAAiG;QACjG,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAClD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,iGAAiG;QACjG,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CACtB,aAAqB,EACrB,uBAA4C,IAAI,GAAG,EAAE,EACxB,EAAE;IAC/B,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE/C,mBAAmB,CAAC,aAAa,EAAE,EAAE,EAAE,YAAY,EAAE,oBAAoB,CAAC,CAAC;IAE3E,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAC1B,aAAqB,EACrB,YAAoB,EACpB,YAAiC,EACjC,oBAAyC,EACnC,EAAE;IACR,MAAM,YAAY,GAChB,YAAY,KAAK,EAAE;QACjB,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,mCAAmC,CAAC,aAAa,EAAE,YAAY,EAAE,uBAAuB,CAAC,CAAC;IAEhG,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,cAAc,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,oBAAoB,CAAC,CAAC;IACjF,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CACrB,YAAoB,EACpB,YAAoB,EACpB,YAAiC,EACjC,oBAAyC,EACnC,EAAE;IACR,IAAI,qBAAqB,CAAC,YAAY,EAAE,oBAAoB,CAAC,EAAE,CAAC;QAC9D,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;IAErC,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;QAC1B,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,WAAW,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACxE,OAAO;IACT,CAAC;IAED,IAAI,YAAY,KAAK,EAAE,EAAE,CAAC;QACxB,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,sBAAsB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACvB,KAAK,MAAM,SAAS,IAAI,WAAW,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YACzD,cAAc,CACZ,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,EAC7B,YAAY,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,YAAY,GAAG,cAAc,GAAG,SAAS,EAAE,EAChF,YAAY,EACZ,oBAAoB,CACrB,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,YAAoB,EAAE,IAA+C,EAAU,EAAE;IAC/G,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QAClB,OAAO,QAAQ,YAAY,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;IACjE,CAAC;IAED,OAAO,WAAW,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAC7C,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,YAAoB,EAAE,oBAAyC,EAAW,EAAE,CACzG,YAAY,KAAK,EAAE;IACnB,CAAC,GAAG,oBAAoB,CAAC,CAAC,IAAI,CAC5B,CAAC,mBAAmB,EAAE,EAAE,CACtB,YAAY,KAAK,mBAAmB,IAAI,YAAY,CAAC,UAAU,CAAC,GAAG,mBAAmB,GAAG,cAAc,EAAE,CAAC,CAC7G,CAAC;AAEJ,MAAM,yBAAyB,GAAG,CAAC,UAAgD,EAAuB,EAAE,CAC1G,IAAI,GAAG,CACL,UAAU;KACP,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,KAAK,SAAS,IAAI,SAAS,CAAC,YAAY,KAAK,SAAS,CAAC;KAC/F,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,0BAA0B,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAC1E,CAAC;AAEJ,MAAM,wBAAwB,GAAG,CAAC,YAAiC,EAAE,YAAoB,EAAQ,EAAE;IACjG,KAAK,MAAM,eAAe,IAAI,CAAC,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QACvD,IAAI,eAAe,KAAK,YAAY,IAAI,eAAe,CAAC,UAAU,CAAC,GAAG,YAAY,GAAG,cAAc,EAAE,CAAC,EAAE,CAAC;YACvG,YAAY,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,sCAAsC,GAAG,CAAC,aAAqB,EAAE,YAAoB,EAAU,EAAE;IACrG,MAAM,sBAAsB,GAAG,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;IAErG,OAAO,mCAAmC,CAAC,aAAa,EAAE,sBAAsB,EAAE,eAAe,YAAY,GAAG,CAAC,CAAC;AACpH,CAAC,CAAC;AAEF,MAAM,qCAAqC,GAAG,CAAC,aAAqB,EAAE,UAAkB,EAAU,EAAE;IAClG,MAAM,kBAAkB,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAC7G,MAAM,kBAAkB,GAAG,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,kBAAkB,CAAC,CAAC;IAEhF,kCAAkC,CAChC,aAAa,EACb,kBAAkB,EAClB,sCAAsC,UAAU,GAAG,CACpD,CAAC;IAEF,OAAO,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAC5D,CAAC,CAAC;AAEF,MAAM,mCAAmC,GAAG,CAAC,aAAqB,EAAE,YAAoB,EAAE,KAAa,EAAU,EAAE;IACjH,MAAM,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACrD,MAAM,kBAAkB,GAAG,OAAO,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAChE,MAAM,kBAAkB,GAAG,QAAQ,CAAC,qBAAqB,EAAE,kBAAkB,CAAC,CAAC;IAE/E,kCAAkC,CAAC,aAAa,EAAE,kBAAkB,EAAE,KAAK,CAAC,CAAC;IAE7E,OAAO,kBAAkB,CAAC;AAC5B,CAAC,CAAC;AAEF,MAAM,kCAAkC,GAAG,CAAC,aAAqB,EAAE,YAAoB,EAAE,KAAa,EAAQ,EAAE;IAC9G,IAAI,YAAY,KAAK,IAAI,IAAI,YAAY,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7F,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,2CAA2C,aAAa,IAAI,CAAC,CAAC;IACxF,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAG,CAAC,WAAmB,EAAE,SAAoC,EAAW,EAAE;IACzG,IAAI,SAAS,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACrC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,SAAS,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACrC,OAAO,WAAW,KAAK,0BAA0B,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,WAAmB,EAAE,SAAoC,EAAW,EAAE;IAC/F,MAAM,iBAAiB,GAAG,0BAA0B,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAE7E,OAAO,WAAW,KAAK,iBAAiB,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,iBAAiB,GAAG,cAAc,EAAE,CAAC,CAAC;AAC9G,CAAC,CAAC;AAEF,MAAM,0BAA0B,GAAG,CAAC,YAAoB,EAAU,EAAE,CAClE,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;AAExE,MAAM,eAAe,GAAG,CAAC,YAAoB,EAAW,EAAE,CACxD,YAAY,KAAK,WAAW,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,YAAY,cAAc,EAAE,CAAC,CAAC;AAEzF,MAAM,WAAW,GAAG,CAAC,KAAc,EAAkC,EAAE,CAAC,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,CAAC"}
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 string[];
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":"AAqDA,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"}
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: readOptionalStringArray(controls.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: readOptionalStringArray(controls.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),