@ai-outfitter/outfitter 1.11.0 → 1.12.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 +4 -0
- package/README.md +5 -1
- package/dist/cli/OutfitterCli.js +2 -0
- package/dist/cli/OutfitterCli.js.map +1 -1
- package/dist/cli/commands/RunAgentCommand.d.ts +5 -0
- package/dist/cli/commands/RunAgentCommand.js +16 -1
- package/dist/cli/commands/RunAgentCommand.js.map +1 -1
- package/dist/cli/commands/SetupCommand.d.ts +2 -1
- package/dist/cli/commands/SetupCommand.js +1 -0
- package/dist/cli/commands/SetupCommand.js.map +1 -1
- package/dist/cli/commands/SourcesCommand.d.ts +19 -0
- package/dist/cli/commands/SourcesCommand.js +85 -0
- package/dist/cli/commands/SourcesCommand.js.map +1 -0
- package/dist/cli/commands/SyncCommand.js +8 -0
- package/dist/cli/commands/SyncCommand.js.map +1 -1
- package/dist/schemas/settings.schema.json +5 -0
- package/dist/settings/Settings.d.ts +6 -0
- package/dist/settings/Settings.js +1 -0
- package/dist/settings/Settings.js.map +1 -1
- package/dist/settings/SettingsLoader.js +1 -0
- package/dist/settings/SettingsLoader.js.map +1 -1
- package/dist/settings/SettingsMerger.js +3 -0
- package/dist/settings/SettingsMerger.js.map +1 -1
- package/dist/setup/DefaultCatalog.js +18 -2
- package/dist/setup/DefaultCatalog.js.map +1 -1
- package/dist/sources/SourceCachePolicy.d.ts +11 -0
- package/dist/sources/SourceCachePolicy.js +48 -0
- package/dist/sources/SourceCachePolicy.js.map +1 -0
- package/dist/sources/SourceState.d.ts +32 -0
- package/dist/sources/SourceState.js +90 -0
- package/dist/sources/SourceState.js.map +1 -0
- package/docs/documentation/README.md +5 -3
- package/docs/documentation/ai-outfitter.md +259 -0
- package/docs/documentation/assets/feature-to-pr.svg +70 -0
- package/docs/documentation/cli.md +8 -0
- package/docs/documentation/containers.md +3 -80
- package/docs/documentation/settings.md +5 -0
- package/package.json +1 -1
- package/src/schemas/settings.schema.json +5 -0
|
@@ -13,9 +13,6 @@ servers, or other use-case behavior. The default runtime user and group are
|
|
|
13
13
|
both `1000` (named `outfitter`), with `/tmp` as the home directory and
|
|
14
14
|
`/workspace` as the working directory.
|
|
15
15
|
|
|
16
|
-
A Nix closure variant of the image is also published under the `-nix` suffix;
|
|
17
|
-
see [the `-nix` variant](#the--nix-variant) below.
|
|
18
|
-
|
|
19
16
|
## Run a resident agent
|
|
20
17
|
|
|
21
18
|
A resident container is an ordinary `outfitter run` whose harness stays in RPC
|
|
@@ -47,7 +44,7 @@ spec:
|
|
|
47
44
|
fsGroup: 1000
|
|
48
45
|
containers:
|
|
49
46
|
- name: agent
|
|
50
|
-
# The
|
|
47
|
+
# The published Debian-based image.
|
|
51
48
|
image: ghcr.io/ai-outfitter/outfitter:<version>
|
|
52
49
|
stdin: true
|
|
53
50
|
workingDir: /workspace
|
|
@@ -85,8 +82,8 @@ The image is a normal Debian base: extend it with an ordinary Dockerfile.
|
|
|
85
82
|
`apt-get` works, and so does `COPY`ing binaries. A dynamically linked binary
|
|
86
83
|
runs when it matches the image — same architecture, glibc-linked, and its
|
|
87
84
|
shared-library dependencies present. The standard ELF interpreter is where
|
|
88
|
-
tools expect it
|
|
89
|
-
|
|
85
|
+
tools expect it, but the slim base ships a small library set. Use `apt-get
|
|
86
|
+
install` when a binary needs more runtime libraries.
|
|
90
87
|
Switch to `root` for the layers that install, then drop back to `1000`:
|
|
91
88
|
|
|
92
89
|
```dockerfile
|
|
@@ -111,77 +108,3 @@ docker run --rm --entrypoint /bin/sh example-agent \
|
|
|
111
108
|
|
|
112
109
|
The entrypoint stays `outfitter`; override `ENTRYPOINT` only when the derived
|
|
113
110
|
image wraps the launch itself.
|
|
114
|
-
|
|
115
|
-
## The `-nix` variant
|
|
116
|
-
|
|
117
|
-
The Nix closure image that was previously the primary tag remains published
|
|
118
|
-
for `lib.mkContainer` consumers:
|
|
119
|
-
|
|
120
|
-
```text
|
|
121
|
-
ghcr.io/ai-outfitter/outfitter:<version>-nix
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
It is built by the flake, includes the Nix CLI, Bash, core utilities, Git,
|
|
125
|
-
SSH, and CA certificates, and its entrypoint is an absolute `/nix/store` path.
|
|
126
|
-
It is not conventionally extensible — there is no apt, and foreign dynamic
|
|
127
|
-
binaries do not run — so extend it through Nix instead: the flake exports
|
|
128
|
-
`lib.mkContainer` for reproducible derivative images:
|
|
129
|
-
|
|
130
|
-
```nix
|
|
131
|
-
{
|
|
132
|
-
inputs = {
|
|
133
|
-
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
134
|
-
outfitter = {
|
|
135
|
-
url = "github:ai-outfitter/outfitter/v1.4.0";
|
|
136
|
-
inputs.nixpkgs.follows = "nixpkgs";
|
|
137
|
-
};
|
|
138
|
-
};
|
|
139
|
-
|
|
140
|
-
outputs =
|
|
141
|
-
{ nixpkgs, outfitter, ... }:
|
|
142
|
-
let
|
|
143
|
-
system = "x86_64-linux";
|
|
144
|
-
pkgs = nixpkgs.legacyPackages.${system};
|
|
145
|
-
in
|
|
146
|
-
{
|
|
147
|
-
packages.${system}.default = outfitter.lib.mkContainer {
|
|
148
|
-
inherit pkgs;
|
|
149
|
-
outfitterPackage = outfitter.packages.${system}.outfitter;
|
|
150
|
-
name = "example-agent";
|
|
151
|
-
extraPackages = [
|
|
152
|
-
pkgs.jq
|
|
153
|
-
pkgs.ripgrep
|
|
154
|
-
];
|
|
155
|
-
};
|
|
156
|
-
};
|
|
157
|
-
}
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
Build and exercise the exact image:
|
|
161
|
-
|
|
162
|
-
```sh
|
|
163
|
-
nix build
|
|
164
|
-
docker load < result
|
|
165
|
-
docker run --rm example-agent:latest --version
|
|
166
|
-
docker run --rm --entrypoint /bin/sh example-agent:latest \
|
|
167
|
-
-c 'nix --version && jq --version && rg --version'
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
Prefer adding known runtime packages through `extraPackages`. The resulting
|
|
171
|
-
image stays reproducible, and it avoids the trap below.
|
|
172
|
-
|
|
173
|
-
**Do not mount an empty volume over `/nix` of the `-nix` variant.** That image
|
|
174
|
-
_is_ its Nix store: the entrypoint is an absolute store path and every binary
|
|
175
|
-
in `/bin` is a symlink into `/nix/store`. Mounting a fresh volume there hides
|
|
176
|
-
all of it, so the container cannot start — it fails before it could initialize
|
|
177
|
-
the very store you mounted the volume to populate. (The primary Debian image
|
|
178
|
-
has no `/nix` and is not affected.)
|
|
179
|
-
|
|
180
|
-
Runtime installation in the `-nix` variant therefore needs one of:
|
|
181
|
-
|
|
182
|
-
- a volume **pre-populated** with the image's closure, seeded from the image
|
|
183
|
-
before the agent starts (an init container copying `/nix` into the volume);
|
|
184
|
-
- an **overlay** whose lower layer is the image's `/nix`, so the closure stays
|
|
185
|
-
visible while writes land in the upper layer; or
|
|
186
|
-
- writable Nix **state** only — `/nix/var` and a per-user profile — leaving the
|
|
187
|
-
store itself as the image shipped it.
|
|
@@ -41,6 +41,8 @@ remote_settings:
|
|
|
41
41
|
ref: 9c47d1e2b8a05f36c4d7e90a12b3f8c5d6e71a04
|
|
42
42
|
|
|
43
43
|
cache_directory: ./cache # optional; relative to this settings file
|
|
44
|
+
source_cache:
|
|
45
|
+
policy: repair # repair (default), locked, or offline
|
|
44
46
|
|
|
45
47
|
# Pseudonymous product analytics consent; defaults to true when absent.
|
|
46
48
|
telemetry:
|
|
@@ -53,6 +55,9 @@ telemetry:
|
|
|
53
55
|
- `remote_settings` — shared settings a repository distributes; cached locally and merged below your project and user settings, so anything you set locally wins.
|
|
54
56
|
- `cache_directory` — the repository cache root used consistently by sync, remote settings, remote
|
|
55
57
|
source resolution, and default-catalog setup. It defaults to `~/.agents/cache`; repositories live
|
|
58
|
+
- `source_cache.policy` — verifies remote caches before `run`: `repair` reuses healthy caches and
|
|
59
|
+
atomically repairs unhealthy ones, `locked` also requires full commit pins, and `offline` never
|
|
60
|
+
accesses the network.
|
|
56
61
|
below its `repos/` directory.
|
|
57
62
|
- `telemetry.enabled` — the primary and sole persistent control for pseudonymous product analytics. Edit it directly to enable or disable telemetry. See [Telemetry](./telemetry.md) for consent precedence, automatic identifier cleanup, the event contract, and the current inert-build status.
|
|
58
63
|
|
package/package.json
CHANGED
|
@@ -11,6 +11,11 @@
|
|
|
11
11
|
"description": "Whether a run stands on the machine's native harness configuration (inherit, the default) or on the projection alone (isolated). Honored only from home-scope settings."
|
|
12
12
|
},
|
|
13
13
|
"cache_directory": { "type": "string", "minLength": 1 },
|
|
14
|
+
"source_cache": {
|
|
15
|
+
"type": "object",
|
|
16
|
+
"properties": { "policy": { "enum": ["repair", "locked", "offline"] } },
|
|
17
|
+
"additionalProperties": false
|
|
18
|
+
},
|
|
14
19
|
"state_persistence": {
|
|
15
20
|
"type": "object",
|
|
16
21
|
"description": "Maps adapter-declared state paths to a persistence strategy.",
|