@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.
- package/code/enterprise/cli/privateCatalogGate.cjs +3 -3
- package/dist/cli/OutfitterCli.js +2 -0
- package/dist/cli/OutfitterCli.js.map +1 -1
- package/dist/cli/commands/DumpCommand.js +8 -3
- package/dist/cli/commands/DumpCommand.js.map +1 -1
- package/dist/cli/commands/ListCommand.js +4 -3
- package/dist/cli/commands/ListCommand.js.map +1 -1
- package/dist/cli/commands/PiRuntimeLaunch.js +3 -16
- package/dist/cli/commands/PiRuntimeLaunch.js.map +1 -1
- package/dist/cli/commands/RunAgentCommand.js +1 -0
- package/dist/cli/commands/RunAgentCommand.js.map +1 -1
- package/dist/cli/commands/SetupCommand.d.ts +1 -1
- package/dist/cli/commands/SetupCommand.js +6 -13
- package/dist/cli/commands/SetupCommand.js.map +1 -1
- package/dist/cli/commands/SyncCommand.d.ts +31 -0
- package/dist/cli/commands/SyncCommand.js +162 -0
- package/dist/cli/commands/SyncCommand.js.map +1 -0
- package/dist/cli/commands/ValidateCommand.js +4 -2
- package/dist/cli/commands/ValidateCommand.js.map +1 -1
- package/dist/paths/RepositoryAssets.d.ts +4 -0
- package/dist/paths/RepositoryAssets.js +26 -0
- package/dist/paths/RepositoryAssets.js.map +1 -0
- package/dist/resolver/Layer.d.ts +17 -1
- package/dist/resolver/Layer.js +23 -15
- package/dist/resolver/Layer.js.map +1 -1
- package/dist/resolver/ResolverContext.d.ts +2 -0
- package/dist/resolver/ResolverContext.js +7 -2
- package/dist/resolver/ResolverContext.js.map +1 -1
- package/dist/settings/SettingsLoader.d.ts +12 -3
- package/dist/settings/SettingsLoader.js +25 -11
- package/dist/settings/SettingsLoader.js.map +1 -1
- package/dist/setup/DefaultCatalog.d.ts +2 -1
- package/dist/setup/DefaultCatalog.js +25 -50
- package/dist/setup/DefaultCatalog.js.map +1 -1
- package/dist/sources/GitRepository.d.ts +28 -0
- package/dist/sources/GitRepository.js +139 -0
- package/dist/sources/GitRepository.js.map +1 -0
- package/dist/sources/PrivateCatalogGate.d.ts +27 -0
- package/dist/sources/PrivateCatalogGate.js +23 -0
- package/dist/sources/PrivateCatalogGate.js.map +1 -0
- package/dist/sources/SourceCache.d.ts +11 -1
- package/dist/sources/SourceCache.js +11 -2
- package/dist/sources/SourceCache.js.map +1 -1
- package/docs/documentation/catalogs.md +10 -2
- package/docs/documentation/cli.md +11 -3
- package/docs/documentation/settings.md +4 -2
- 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
|
-
|
|
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]+@/
|
|
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
|
-
|
|
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,
|
|
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
|
|
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
|
-
|
|
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.
|
|
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:
|
|
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` —
|
|
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