Skip to content

Commit e8a6aff

Browse files
build: refresh committed Agent Bundle from 60e3e54
1 parent 60e3e54 commit e8a6aff

4 files changed

Lines changed: 93 additions & 168 deletions

File tree

‎artifact/INSTALL.md‎

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -28,37 +28,38 @@ manifest-declared `hooks/hooks.json` from that directory; plugin hooks run from
2828
The installer writes an install receipt (`.agent-bundle-install.json`: plugin, version, content hash,
2929
owned files) beside the plugin manifest. Re-running `node ./install.mjs` on an identical artifact
3030
is a no-op that says so. When the installed copy has the same version but different content, the
31-
installer replaces its owned files in place and leaves runtime state (`state/`) untouched:
31+
installer replaces its owned files in place and leaves unowned entries untouched:
3232

3333
```sh
3434
node ./install.mjs # same-version content drift of a receipt-managed copy is replaced
35-
node ./install.mjs --replace # also replace a different installed version, or adopt a pre-receipt copy
35+
node ./install.mjs --replace # also replace a different installed version
3636
```
3737

38-
`--force` is an alias for `--replace`. A directory that is not an agent-bundle install of this
39-
plugin is always refused with an installed-versus-artifact content-hash comparison; remove it
40-
manually. The optional `agent-bundle` CLI applies the same policy through
38+
A directory without a receipt naming this plugin (including a copy placed before install receipts
39+
existed) is foreign and always refused with an installed-versus-artifact content-hash comparison;
40+
remove it manually and reinstall. The optional `agent-bundle` CLI applies the same policy through
4141
`agent-bundle install cursor --from ./ [--replace]`.
4242

4343
### Uninstall
4444

4545
```sh
4646
node ./install.mjs --uninstall --plan # print exactly what would be removed
47-
node ./install.mjs --uninstall # remove the receipt-owned files; keep state/
48-
node ./install.mjs --uninstall --purge-data --confirm-purge # also remove durable runtime state
47+
node ./install.mjs --uninstall # remove the receipt-owned files; keep durable state
48+
node ./install.mjs --uninstall --purge-data --confirm-purge # also remove receipt-owned durable runtime state
4949
node ./install.mjs --uninstall --mode marketplace # remove a staged marketplace repository
5050
```
5151

5252
Uninstall removes exactly what the receipt owns: the listed files, the directories the installer
5353
created (including `~/.cursor/plugins/local` when the installer made it), and nothing else. Durable
54-
runtime state under `state/` (state kernel, notices journal) — and, for an Agent Plugins pack with a stdio
55-
server, the `~/.cursor/agent-bundle/plugin-data/<name>` directory the receipt records as `PLUGIN_DATA` — is kept
56-
unless `--purge-data --confirm-purge` is passed (a kept data directory leaves a remnant receipt behind so a later
57-
purge still finds it; an empty one is pruned); unowned files are left in place and listed. A supported older
58-
receipt with no recorded state location retains the current environment's default as unproven; a keep-data run
59-
cannot turn that observation into later purge authority. A directory without a receipt is refused unless
60-
`--force` (which removes a pre-receipt legacy copy by its inventory); owned content that no longer matches
61-
the receipt is refused unless `--force`; a directory that is not this plugin's install is always refused.
54+
runtime state (the framework state roots the receipt records with ownership evidence) — and, for an Agent
55+
Plugins pack with a stdio server, the `~/.cursor/agent-bundle/plugin-data/<name>` directory the receipt records
56+
as `PLUGIN_DATA` — is kept unless `--purge-data --confirm-purge` is passed (a kept data directory leaves a
57+
remnant receipt behind so a later purge still finds it; an empty one is pruned); unowned entries, including a
58+
`state/` directory beside the plugin, are left in place and listed. A receipt with no recorded state location
59+
(written before the install could record it) retains the current environment's default as unproven; a
60+
keep-data run cannot turn that observation into later purge authority. A directory without a receipt naming
61+
this plugin is foreign and always refused, with or without `--force`; owned content that no longer matches
62+
the receipt is refused unless `--force`.
6263
A second run is a `Not installed` no-op. With the optional `agent-bundle` CLI,
6364
`agent-bundle uninstall cursor --from ./ [--mode marketplace]` applies the same policy, and
6465
`agent-bundle doctor --from ./` shows the lifecycle stage (placed, registered, enabled, active) with
@@ -142,21 +143,21 @@ other clients; the recorded clients above name which of them expand the placehol
142143
### Reinstall after a same-version rebuild
143144

144145
The installer records an install receipt (`.agent-bundle-install.json`) and replaces its owned files in
145-
place when the same version was rebuilt with different content; runtime state (`state/`) is never
146-
touched. Pass `--replace` (alias `--force`) to replace a different installed version or to adopt a
147-
copy installed before receipts existed. Foreign directories are refused with a content-hash
148-
comparison. For a client that manages its own copy, remove and re-add the plugin through that client
149-
when only content changed at the same version.
146+
place when the same version was rebuilt with different content; unowned entries are never
147+
touched. Pass `--replace` to replace a different installed version. A directory without a receipt
148+
naming this plugin (including a copy installed before receipts existed) is foreign and refused with a
149+
content-hash comparison; remove it manually. For a client that manages its own copy, remove and re-add
150+
the plugin through that client when only content changed at the same version.
150151

151152
### Uninstall
152153

153154
```sh
154155
node ./install.mjs --uninstall --plan # print exactly what would be removed
155-
node ./install.mjs --uninstall # remove the receipt-owned files; keep state/
156-
node ./install.mjs --uninstall --purge-data --confirm-purge # also remove durable runtime state
156+
node ./install.mjs --uninstall # remove the receipt-owned files; keep durable state
157+
node ./install.mjs --uninstall --purge-data --confirm-purge # also remove receipt-owned durable runtime state
157158
```
158159

159160
Uninstall removes exactly what the receipt owns (files, installer-created directories) and keeps
160-
durable runtime state under `state/` (and the recorded `PLUGIN_DATA` directory of an Agent Plugins pack)
161-
unless `--purge-data --confirm-purge` is passed. A missing
162-
receipt or modified owned content is refused unless `--force`; foreign directories are always refused.
161+
the durable runtime state the receipt records (and the recorded `PLUGIN_DATA` directory of an Agent Plugins
162+
pack) unless `--purge-data --confirm-purge` is passed. Modified owned content is refused unless `--force`;
163+
a directory without a receipt naming this plugin is foreign and always refused.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"assets":[{"externals":[{"externalType":"node-commonjs","issuers":["lib/bots.js"],"kind":"builtin","request":"child_process","userRequest":"child_process"},{"externalType":"node-commonjs","issuers":["lib/local-plugins.js"],"kind":"builtin","request":"fs","userRequest":"fs"},{"externalType":"module","issuers":["server.js"],"kind":"builtin","request":"node:fs","userRequest":"node:fs"},{"externalType":"module","issuers":["server.js"],"kind":"builtin","request":"node:http","userRequest":"node:http"},{"externalType":"module","issuers":["server.js"],"kind":"builtin","request":"node:path","userRequest":"node:path"},{"externalType":"module","issuers":["server.js"],"kind":"builtin","request":"node:url","userRequest":"node:url"},{"externalType":"node-commonjs","issuers":["lib/local-plugins.js"],"kind":"builtin","request":"os","userRequest":"os"},{"externalType":"node-commonjs","issuers":["lib/local-plugins.js"],"kind":"builtin","request":"path","userRequest":"path"}],"packages":[],"path":"scripts/plugin-library-server.mjs","sha256":"6b2c7548077aad7a68b0dd2716c833eb3597b91cc25f0dd6c24e1cd464326411"},{"externals":[{"externalType":"module","issuers":["bin/plugin-library.mjs"],"kind":"builtin","request":"node:child_process","userRequest":"node:child_process"},{"externalType":"module","issuers":["bin/plugin-library.mjs"],"kind":"builtin","request":"node:fs","userRequest":"node:fs"},{"externalType":"module","issuers":["bin/plugin-library.mjs"],"kind":"builtin","request":"node:path","userRequest":"node:path"},{"externalType":"module","issuers":["bin/plugin-library.mjs"],"kind":"builtin","request":"node:url","userRequest":"node:url"}],"packages":[],"path":"scripts/plugin-library.mjs","sha256":"c295407765af2e4afb8d97bbf6b794191558139b24bcbb4ca950a204f00fd464"}],"coverage":{"rewritable":false,"unobserved":["import(<expression>)","require(<expression>)","require.resolve(…)","createRequire(…)(…)","import.meta.resolve(…)"]},"policy":{"name":"closed-world-externals","revision":1},"producer":{"name":"agent-bundle","rspack":"2.2.5","version":"0.2.1"}}
1+
{"assets":[{"externals":[{"externalType":"node-commonjs","issuers":["lib/bots.js"],"kind":"builtin","request":"child_process","userRequest":"child_process"},{"externalType":"node-commonjs","issuers":["lib/local-plugins.js"],"kind":"builtin","request":"fs","userRequest":"fs"},{"externalType":"module","issuers":["server.js"],"kind":"builtin","request":"node:fs","userRequest":"node:fs"},{"externalType":"module","issuers":["server.js"],"kind":"builtin","request":"node:http","userRequest":"node:http"},{"externalType":"module","issuers":["server.js"],"kind":"builtin","request":"node:path","userRequest":"node:path"},{"externalType":"module","issuers":["server.js"],"kind":"builtin","request":"node:url","userRequest":"node:url"},{"externalType":"node-commonjs","issuers":["lib/local-plugins.js"],"kind":"builtin","request":"os","userRequest":"os"},{"externalType":"node-commonjs","issuers":["lib/local-plugins.js"],"kind":"builtin","request":"path","userRequest":"path"}],"packages":[],"path":"scripts/plugin-library-server.mjs","sha256":"6b2c7548077aad7a68b0dd2716c833eb3597b91cc25f0dd6c24e1cd464326411"},{"externals":[{"externalType":"module","issuers":["bin/plugin-library.mjs"],"kind":"builtin","request":"node:child_process","userRequest":"node:child_process"},{"externalType":"module","issuers":["bin/plugin-library.mjs"],"kind":"builtin","request":"node:fs","userRequest":"node:fs"},{"externalType":"module","issuers":["bin/plugin-library.mjs"],"kind":"builtin","request":"node:path","userRequest":"node:path"},{"externalType":"module","issuers":["bin/plugin-library.mjs"],"kind":"builtin","request":"node:url","userRequest":"node:url"}],"packages":[],"path":"scripts/plugin-library.mjs","sha256":"c295407765af2e4afb8d97bbf6b794191558139b24bcbb4ca950a204f00fd464"}],"coverage":{"rewritable":false,"unobserved":["import(<expression>)","require(<expression>)","require.resolve(…)","createRequire(…)(…)","import.meta.resolve(…)"]},"policy":{"name":"closed-world-externals","revision":1},"producer":{"name":"agent-bundle","rspack":"2.2.5","version":"0.3.0"}}

0 commit comments

Comments
 (0)