@ai-outfitter/outfitter 1.0.3 → 1.1.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 (47) hide show
  1. package/code/enterprise/cli/privateCatalogGate.cjs +3 -3
  2. package/dist/cli/OutfitterCli.js +2 -0
  3. package/dist/cli/OutfitterCli.js.map +1 -1
  4. package/dist/cli/commands/DumpCommand.js +8 -3
  5. package/dist/cli/commands/DumpCommand.js.map +1 -1
  6. package/dist/cli/commands/ListCommand.js +4 -3
  7. package/dist/cli/commands/ListCommand.js.map +1 -1
  8. package/dist/cli/commands/PiRuntimeLaunch.js +3 -16
  9. package/dist/cli/commands/PiRuntimeLaunch.js.map +1 -1
  10. package/dist/cli/commands/RunAgentCommand.js +1 -0
  11. package/dist/cli/commands/RunAgentCommand.js.map +1 -1
  12. package/dist/cli/commands/SetupCommand.d.ts +1 -1
  13. package/dist/cli/commands/SetupCommand.js +6 -13
  14. package/dist/cli/commands/SetupCommand.js.map +1 -1
  15. package/dist/cli/commands/SyncCommand.d.ts +31 -0
  16. package/dist/cli/commands/SyncCommand.js +162 -0
  17. package/dist/cli/commands/SyncCommand.js.map +1 -0
  18. package/dist/cli/commands/ValidateCommand.js +4 -2
  19. package/dist/cli/commands/ValidateCommand.js.map +1 -1
  20. package/dist/paths/RepositoryAssets.d.ts +4 -0
  21. package/dist/paths/RepositoryAssets.js +26 -0
  22. package/dist/paths/RepositoryAssets.js.map +1 -0
  23. package/dist/resolver/Layer.d.ts +17 -1
  24. package/dist/resolver/Layer.js +23 -15
  25. package/dist/resolver/Layer.js.map +1 -1
  26. package/dist/resolver/ResolverContext.d.ts +2 -0
  27. package/dist/resolver/ResolverContext.js +7 -2
  28. package/dist/resolver/ResolverContext.js.map +1 -1
  29. package/dist/settings/SettingsLoader.d.ts +12 -3
  30. package/dist/settings/SettingsLoader.js +25 -11
  31. package/dist/settings/SettingsLoader.js.map +1 -1
  32. package/dist/setup/DefaultCatalog.d.ts +2 -1
  33. package/dist/setup/DefaultCatalog.js +25 -50
  34. package/dist/setup/DefaultCatalog.js.map +1 -1
  35. package/dist/sources/GitRepository.d.ts +28 -0
  36. package/dist/sources/GitRepository.js +139 -0
  37. package/dist/sources/GitRepository.js.map +1 -0
  38. package/dist/sources/PrivateCatalogGate.d.ts +27 -0
  39. package/dist/sources/PrivateCatalogGate.js +23 -0
  40. package/dist/sources/PrivateCatalogGate.js.map +1 -0
  41. package/dist/sources/SourceCache.d.ts +11 -1
  42. package/dist/sources/SourceCache.js +11 -2
  43. package/dist/sources/SourceCache.js.map +1 -1
  44. package/docs/documentation/catalogs.md +10 -2
  45. package/docs/documentation/cli.md +11 -3
  46. package/docs/documentation/settings.md +4 -2
  47. package/package.json +1 -1
@@ -0,0 +1,23 @@
1
+ // Loads the enterprise-licensed private-catalog policy boundary for CLI source synchronization.
2
+ import { createRequire } from 'node:module';
3
+ import { resolveRepositoryCodeAsset } from '../paths/RepositoryAssets.js';
4
+ import { createRemoteRepositoryCachePath, formatRemoteSourceDisplay } from './SourceCache.js';
5
+ const loadEnterpriseGateModule = () => createRequire(import.meta.url)(resolveRepositoryCodeAsset('enterprise/cli/privateCatalogGate.cjs'));
6
+ export const createEnterprisePrivateCatalogGate = (input) => {
7
+ const enterprise = loadEnterpriseGateModule();
8
+ const { homeDirectory } = input;
9
+ const gate = enterprise.createPrivateCatalogGate({
10
+ homeDirectory,
11
+ classifier: input.classifier ?? enterprise.createGitHubRepositoryVisibilityClassifier(),
12
+ prompt: input.prompt,
13
+ });
14
+ return {
15
+ filter(sources, cacheDirectory) {
16
+ return enterprise.gatePrivateCatalogSources(sources, gate, {
17
+ formatDisplayUri: formatRemoteSourceDisplay,
18
+ resolveCachePath: (source) => createRemoteRepositoryCachePath(homeDirectory, source, cacheDirectory),
19
+ });
20
+ },
21
+ };
22
+ };
23
+ //# sourceMappingURL=PrivateCatalogGate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrivateCatalogGate.js","sourceRoot":"","sources":["../../src/sources/PrivateCatalogGate.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,OAAO,EAAE,+BAA+B,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AA6C9F,MAAM,wBAAwB,GAAG,GAAyB,EAAE,CAC1D,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAC5B,0BAA0B,CAAC,uCAAuC,CAAC,CAC5C,CAAC;AAE5B,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,KAIlD,EAA4B,EAAE;IAC7B,MAAM,UAAU,GAAG,wBAAwB,EAAE,CAAC;IAC9C,MAAM,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC;IAChC,MAAM,IAAI,GAAG,UAAU,CAAC,wBAAwB,CAAC;QAC/C,aAAa;QACb,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,UAAU,CAAC,0CAA0C,EAAE;QACvF,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC,CAAC;IAEH,OAAO;QACL,MAAM,CACJ,OAAqB,EACrB,cAAuB;YAEvB,OAAO,UAAU,CAAC,yBAAyB,CAAC,OAAO,EAAE,IAAI,EAAE;gBACzD,gBAAgB,EAAE,yBAAyB;gBAC3C,gBAAgB,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,+BAA+B,CAAC,aAAa,EAAE,MAAM,EAAE,cAAc,CAAC;aACrG,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC,CAAC"}
@@ -10,10 +10,20 @@ export type RemoteSourceReference = {
10
10
  readonly ref?: string;
11
11
  readonly path?: string;
12
12
  };
13
+ /** Distinguishes remote (`uri`/`github`) sources from local `path` sources. */
14
+ export declare const isRemoteSource: <T extends {
15
+ readonly uri?: string;
16
+ readonly github?: string;
17
+ }>(source: T) => source is T & RemoteSourceReference;
13
18
  export declare const normalizeGitUri: (uri: string) => string;
14
19
  export declare const normalizeRemoteSourceUri: (source: RemoteSourceReference) => string;
20
+ export declare const formatRemoteSourceDisplay: (source: RemoteSourceReference) => string;
15
21
  export declare const redactSourceUriCredentials: (uri: string) => string;
22
+ /** Redacts credentials from every URI embedded in arbitrary command or stderr text. */
23
+ export declare const redactEmbeddedSourceCredentials: (value: string) => string;
16
24
  export declare const encodeSourceUri: (uri: string) => string;
17
25
  export declare const encodeRemoteSource: (source: RemoteSourceReference) => string;
18
- export declare const createRemoteRepositoryCachePath: (homeDirectory: string, source: RemoteSourceReference) => string;
26
+ /** Resolves the one cache root used by sync, settings, layer discovery, and setup bootstrap. */
27
+ export declare const resolveRemoteRepositoryCacheRoot: (homeDirectory: string, cacheDirectory?: string) => string;
28
+ export declare const createRemoteRepositoryCachePath: (homeDirectory: string, source: RemoteSourceReference, cacheDirectory?: string) => string;
19
29
  export declare const resolveRemoteRepositorySubpath: (repositoryPath: string, subpath?: string) => string;
@@ -1,5 +1,7 @@
1
1
  // Encodes remote `.agents` source cache paths and normalizes remote source references.
2
2
  import { isAbsolute, join, relative, resolve } from 'node:path';
3
+ /** Distinguishes remote (`uri`/`github`) sources from local `path` sources. */
4
+ export const isRemoteSource = (source) => source.uri !== undefined || source.github !== undefined;
3
5
  export const normalizeGitUri = (uri) => (uri.startsWith('git+') ? uri.slice('git+'.length) : uri);
4
6
  export const normalizeRemoteSourceUri = (source) => {
5
7
  if (source.uri !== undefined) {
@@ -7,6 +9,9 @@ export const normalizeRemoteSourceUri = (source) => {
7
9
  }
8
10
  return `git+https://github.com/${source.github}.git`;
9
11
  };
12
+ export const formatRemoteSourceDisplay = (source) => source.github === undefined
13
+ ? redactSourceUriCredentials(source.uri)
14
+ : `github:${source.github}${source.ref === undefined ? '' : `#${source.ref}`}`;
10
15
  export const redactSourceUriCredentials = (uri) => {
11
16
  const prefix = uri.startsWith('git+') ? 'git+' : '';
12
17
  const normalizedUri = normalizeGitUri(uri);
@@ -20,12 +25,16 @@ export const redactSourceUriCredentials = (uri) => {
20
25
  return `${prefix}${parsedUri.toString()}`;
21
26
  }
22
27
  catch {
23
- return uri.replace(/\/\/[^/@\s]+@/u, '//REDACTED@');
28
+ return uri.replace(/\/\/[^/@\s]+@/gu, '//REDACTED@');
24
29
  }
25
30
  };
31
+ /** Redacts credentials from every URI embedded in arbitrary command or stderr text. */
32
+ export const redactEmbeddedSourceCredentials = (value) => value.replace(/((?:git\+)?[A-Za-z][A-Za-z0-9+.-]*:\/\/)[^/@\s]+@/gu, '$1REDACTED@');
26
33
  export const encodeSourceUri = (uri) => Buffer.from(redactSourceUriCredentials(uri), 'utf8').toString('base64url');
27
34
  export const encodeRemoteSource = (source) => encodeSourceUri(`${normalizeRemoteSourceUri(source)}#${source.ref ?? ''}`);
28
- export const createRemoteRepositoryCachePath = (homeDirectory, source) => join(homeDirectory, '.agents', 'cache', 'repos', encodeRemoteSource(source));
35
+ /** Resolves the one cache root used by sync, settings, layer discovery, and setup bootstrap. */
36
+ export const resolveRemoteRepositoryCacheRoot = (homeDirectory, cacheDirectory) => cacheDirectory ?? join(homeDirectory, '.agents', 'cache');
37
+ export const createRemoteRepositoryCachePath = (homeDirectory, source, cacheDirectory) => join(resolveRemoteRepositoryCacheRoot(homeDirectory, cacheDirectory), 'repos', encodeRemoteSource(source));
29
38
  export const resolveRemoteRepositorySubpath = (repositoryPath, subpath = '') => {
30
39
  if (isAbsolute(subpath)) {
31
40
  throw new Error(`Remote repository path '${subpath}' must be relative.`);
@@ -1 +1 @@
1
- {"version":3,"file":"SourceCache.js","sourceRoot":"","sources":["../../src/sources/SourceCache.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOhE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAElH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,MAA6B,EAAU,EAAE;IAChF,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,MAAM,CAAC,GAAG,CAAC;IACpB,CAAC;IAED,OAAO,0BAA0B,MAAM,CAAC,MAAM,MAAM,CAAC;AACvD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,GAAW,EAAU,EAAE;IAChE,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACpD,MAAM,aAAa,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IAE3C,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;QAEzC,IAAI,SAAS,CAAC,QAAQ,KAAK,EAAE,IAAI,SAAS,CAAC,QAAQ,KAAK,EAAE,EAAE,CAAC;YAC3D,OAAO,GAAG,CAAC;QACb,CAAC;QAED,SAAS,CAAC,QAAQ,GAAG,UAAU,CAAC;QAChC,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAC;QACxB,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;IACtD,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAW,EAAU,EAAE,CACrD,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAE7E,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAA6B,EAAU,EAAE,CAC1E,eAAe,CAAC,GAAG,wBAAwB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC;AAE7E,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,aAAqB,EAAE,MAA6B,EAAU,EAAE,CAC9G,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;AAE/E,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,cAAsB,EAAE,OAAO,GAAG,EAAE,EAAU,EAAE;IAC7F,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,2BAA2B,OAAO,qBAAqB,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,YAAY,GAAG,QAAQ,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;IAE5D,IAAI,YAAY,KAAK,IAAI,IAAI,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACxF,MAAM,IAAI,KAAK,CAAC,2BAA2B,OAAO,oCAAoC,CAAC,CAAC;IAC1F,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC"}
1
+ {"version":3,"file":"SourceCache.js","sourceRoot":"","sources":["../../src/sources/SourceCache.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOhE,+EAA+E;AAC/E,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,MAAS,EAC4B,EAAE,CAAC,MAAM,CAAC,GAAG,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC;AAElG,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAElH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,MAA6B,EAAU,EAAE;IAChF,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,MAAM,CAAC,GAAG,CAAC;IACpB,CAAC;IAED,OAAO,0BAA0B,MAAM,CAAC,MAAM,MAAM,CAAC;AACvD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,MAA6B,EAAU,EAAE,CACjF,MAAM,CAAC,MAAM,KAAK,SAAS;IACzB,CAAC,CAAC,0BAA0B,CAAC,MAAM,CAAC,GAAG,CAAC;IACxC,CAAC,CAAC,UAAU,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC;AAEnF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,GAAW,EAAU,EAAE;IAChE,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACpD,MAAM,aAAa,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IAE3C,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;QAEzC,IAAI,SAAS,CAAC,QAAQ,KAAK,EAAE,IAAI,SAAS,CAAC,QAAQ,KAAK,EAAE,EAAE,CAAC;YAC3D,OAAO,GAAG,CAAC;QACb,CAAC;QAED,SAAS,CAAC,QAAQ,GAAG,UAAU,CAAC;QAChC,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAC;QACxB,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC,OAAO,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC;IACvD,CAAC;AACH,CAAC,CAAC;AAEF,uFAAuF;AACvF,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,KAAa,EAAU,EAAE,CACvE,KAAK,CAAC,OAAO,CAAC,qDAAqD,EAAE,aAAa,CAAC,CAAC;AAEtF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAW,EAAU,EAAE,CACrD,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAE7E,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAA6B,EAAU,EAAE,CAC1E,eAAe,CAAC,GAAG,wBAAwB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC;AAE7E,gGAAgG;AAChG,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,aAAqB,EAAE,cAAuB,EAAU,EAAE,CACzG,cAAc,IAAI,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AAE5D,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAC7C,aAAqB,EACrB,MAA6B,EAC7B,cAAuB,EACf,EAAE,CAAC,IAAI,CAAC,gCAAgC,CAAC,aAAa,EAAE,cAAc,CAAC,EAAE,OAAO,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;AAExH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,cAAsB,EAAE,OAAO,GAAG,EAAE,EAAU,EAAE;IAC7F,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,2BAA2B,OAAO,qBAAqB,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,YAAY,GAAG,QAAQ,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;IAE5D,IAAI,YAAY,KAAK,IAAI,IAAI,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACxF,MAAM,IAAI,KAAK,CAAC,2BAA2B,OAAO,oCAAoC,CAAC,CAAC;IAC1F,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC"}
@@ -101,11 +101,19 @@ Remote settings are cached locally and merged at lower precedence than your proj
101
101
 
102
102
  `outfitter sync` synchronizes every remote source into the local cache:
103
103
 
104
- 1. Remote settings repositories are cloned or updated first, then reloaded.
104
+ 1. Local settings are validated. Remote settings repositories are cloned or updated first, then
105
+ merged settings are reloaded.
105
106
  2. Remote sources (including any added by remote settings) are cloned or updated.
106
107
  3. Each synced source is validated; sync reports `updated`, `unchanged`, `skipped`, or `failed` per source.
107
108
 
108
- Pinned (`ref:`) sources stay on their pinned ref until you change it; unpinned sources fast-forward on every sync.
109
+ All repositories live under `<cache_directory>/repos/<encoded-uri-and-ref>/` (default
110
+ `~/.agents/cache`). Pinned (`ref:`) sources stay on their selected ref until you change it; unpinned
111
+ sources resolve the remote's current default branch on every sync.
112
+
113
+ Fetch and validation happen in a temporary sibling directory. Outfitter swaps a valid checkout into
114
+ place atomically, so a failed fetch or invalid update preserves the last working cache. A required
115
+ source failure makes sync exit nonzero. `outfitter run` remains offline with respect to source
116
+ synchronization; run sync explicitly when you want network updates.
109
117
 
110
118
  ## Private repositories
111
119
 
@@ -1,7 +1,5 @@
1
1
  # CLI reference
2
2
 
3
- > **Status: RFC [#165](https://github.com/ai-outfitter/outfitter/issues/165) target.** This reference describes the dotagents end-state command surface. The currently released CLI still implements the legacy profile commands; implementation PRs replace them incrementally.
4
-
5
3
  Global options:
6
4
 
7
5
  | Option | Description |
@@ -41,7 +39,17 @@ fallback.
41
39
 
42
40
  ## `outfitter sync`
43
41
 
44
- Synchronize remote sources and remote settings into the local cache. Reports a per-source status of `updated`, `unchanged`, `skipped`, or `failed`, and validates synced sources.
42
+ Synchronize remote sources and remote settings into the local cache. Sync validates local settings,
43
+ updates `remote_settings`, reloads the merged settings, and then updates the remote `sources` that
44
+ result. Each repository reports `updated`, `unchanged`, `skipped`, or `failed`.
45
+
46
+ Fetched content is validated in a temporary checkout before an atomic cache swap, so a failed fetch
47
+ or invalid update leaves the last valid cache available. Required-source failures and invalid
48
+ settings exit nonzero. Credentials embedded in URIs are redacted from status, errors, cache paths,
49
+ and Git output.
50
+
51
+ Sync is explicit: `outfitter run` never initiates network access. If a configured cache is absent,
52
+ resolution tells you to run `outfitter sync`.
45
53
 
46
54
  ## `outfitter list [kind]`
47
55
 
@@ -39,13 +39,15 @@ remote_settings:
39
39
  path: .agents/settings.yml
40
40
  ref: 9c47d1e2b8a05f36c4d7e90a12b3f8c5d6e71a04
41
41
 
42
- cache_directory: ~/.agents/cache
42
+ cache_directory: ./cache # optional; relative to this settings file
43
43
  ```
44
44
 
45
45
  - `default_agent` / `default_harness` — which agent plain `outfitter` runs, and the harness it launches in.
46
46
  - `sources` — ordered list of remote or local `.agents` payloads. Remote entries (`github:` / `uri:`) accept `ref:` pinning and an optional `path:` to the payload inside the repository; see [Catalogs](./catalogs.md) for conventions and trust guidance.
47
47
  - `remote_settings` — shared settings a repository distributes; cached locally and merged below your project and user settings, so anything you set locally wins.
48
- - `cache_directory` — where remote sources are cached (`outfitter sync` updates them).
48
+ - `cache_directory` — the repository cache root used consistently by sync, remote settings, remote
49
+ source resolution, and default-catalog setup. It defaults to `~/.agents/cache`; repositories live
50
+ below its `repos/` directory.
49
51
 
50
52
  ## Precedence
51
53
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-outfitter/outfitter",
3
- "version": "1.0.3",
3
+ "version": "1.1.0",
4
4
  "description": "Profile-oriented wrapper for launching pi, Claude Code, and future agent CLIs with reproducible configuration.",
5
5
  "type": "module",
6
6
  "repository": {