@ouro.bot/cli 0.1.0-alpha.829 → 0.1.0-alpha.830

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/changelog.json CHANGED
@@ -1,6 +1,12 @@
1
1
  {
2
2
  "_note": "This changelog is maintained as part of the PR/version-bump workflow. Agent-curated, not auto-generated. Agents read this file directly via read_file to understand what changed between versions.",
3
3
  "versions": [
4
+ {
5
+ "version": "0.1.0-alpha.830",
6
+ "changes": [
7
+ "Persist authority vault writes (remove-resident-token, rollback restore-token-cursor) by binding the real bitwarden store writable in the fence, not a throwaway tmpfs copy; reads still use the copy. Fixes the install stranding after transfer-cursor."
8
+ ]
9
+ },
4
10
  {
5
11
  "version": "0.1.0-alpha.829",
6
12
  "changes": [
@@ -1,5 +1,5 @@
1
1
  {
2
- "runtimeVersion": "0.1.0-alpha.829",
2
+ "runtimeVersion": "0.1.0-alpha.830",
3
3
  "bundleSchemaVersion": 3,
4
4
  "lastUpdated": "2026-09-03T00:00:00.000Z"
5
5
  }
@@ -1,7 +1,7 @@
1
1
  <?xml version="1.0"?>
2
2
  <Container version="2">
3
3
  <Name>ouro-butler</Name>
4
- <Repository>ghcr.io/ourostack/ouroboros-butler:0.1.0-alpha.829</Repository>
4
+ <Repository>ghcr.io/ourostack/ouroboros-butler:0.1.0-alpha.830</Repository>
5
5
  <Registry>https://github.com/ourostack/ouroboros/pkgs/container/ouroboros-butler</Registry>
6
6
  <Network>host</Network>
7
7
  <Shell>sh</Shell>
@@ -736,25 +736,38 @@ class SanctuaryAuthorityRootLifecycle {
736
736
  // resident credential store is owned by the resident uid (10001), so a bare
737
737
  // cap-dropped root cannot even read it (EACCES on agent.json → surfaces as
738
738
  // "vault owner unavailable"). CAP_DAC_OVERRIDE is restored — the single
739
- // capability needed to read the resident's files, nothing broader — and the
740
- // read-only bitwarden app-data is copied into a writable tmpfs inside the
741
- // container before the CLI runs, because bitwarden cannot unlock a store it
742
- // cannot write to. The copy stays inside the container's own tmpfs, so the
743
- // fence still never writes to resident state. `operation` is one of the four
744
- // fixed literals validated by the CLI, never external input.
739
+ // capability needed to reach the resident's files, nothing broader.
740
+ //
741
+ // bitwarden cannot unlock (or sync) a store it cannot write to, so the store
742
+ // dir must be writable inside the fence. The two verbs split by intent:
743
+ // • snapshot / presence are READS: the read-only store is copied into a
744
+ // throwaway tmpfs, so the fence never mutates resident state.
745
+ // • remove / restore are WRITES whose whole purpose is to change the vault
746
+ // (remove-resident-token, rollback restore-token-cursor). They bind the
747
+ // real ${RUNTIME}/bitwarden writable (rw over the read-only .ouro-cli),
748
+ // so the edit — and bitwarden's own sync-on-unlock — persists. Copying to
749
+ // tmpfs here would silently discard the write and fail the step's readback.
750
+ // `operation` is one of the four fixed literals validated by the CLI.
745
751
  const cli = "/opt/ouro/dist/heart/daemon/sanctuary-authority-root-lifecycle.js";
752
+ const persists = operation === "remove" || operation === "restore";
753
+ const bitwarden = persists
754
+ ? ["--mount", `type=bind,src=${RUNTIME}/bitwarden,dst=/home/ouro/.ouro-cli/bitwarden`]
755
+ : [
756
+ "--mount", `type=bind,src=${RUNTIME}/bitwarden,dst=/home/ouro/.bw-src,readonly`,
757
+ "--tmpfs", "/home/ouro/.ouro-cli/bitwarden:rw,nosuid,nodev,noexec,mode=0700",
758
+ ];
759
+ const prepare = persists ? "" : "cp -r /home/ouro/.bw-src/. /home/ouro/.ouro-cli/bitwarden/ && ";
746
760
  return JSON.parse(this.#docker([
747
761
  "run", "--rm", "-i", "--pull=never", "--network", "host", "--user", "0:0", "--read-only",
748
762
  "--cap-drop=ALL", "--cap-add=DAC_OVERRIDE", "--security-opt=no-new-privileges", "--entrypoint", "/bin/sh",
749
763
  "--mount", `type=bind,src=${RUNTIME},dst=/home/ouro/.ouro-cli,readonly`,
750
- "--mount", `type=bind,src=${RUNTIME}/bitwarden,dst=/home/ouro/.bw-src,readonly`,
764
+ ...bitwarden,
751
765
  "--mount", `type=bind,src=${BUNDLE},dst=/home/ouro/AgentBundles/sanctuary.ouro,readonly`,
752
- "--tmpfs", "/home/ouro/.ouro-cli/bitwarden:rw,nosuid,nodev,noexec,mode=0700",
753
766
  "--tmpfs", "/home/ouro/.config:rw,nosuid,nodev,noexec,mode=0700",
754
767
  "--tmpfs", "/tmp:rw,nosuid,nodev,noexec,mode=0700",
755
768
  "--env", `OURO_AUTHORITY_REMOVE_INTERLOCK=${this.#request.epochId}`,
756
769
  this.#transaction.targetImageId, "-c",
757
- `cp -r /home/ouro/.bw-src/. /home/ouro/.ouro-cli/bitwarden/ && exec /usr/local/bin/node ${cli} vault ${operation}`,
770
+ `${prepare}exec /usr/local/bin/node ${cli} vault ${operation}`,
758
771
  ], input === undefined ? undefined : JSON.stringify(input)));
759
772
  }
760
773
  }
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@ouro.bot/cli",
3
- "version": "0.1.0-alpha.829",
3
+ "version": "0.1.0-alpha.830",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@ouro.bot/cli",
9
- "version": "0.1.0-alpha.829",
9
+ "version": "0.1.0-alpha.830",
10
10
  "dependencies": {
11
11
  "@anthropic-ai/sdk": "^0.78.0",
12
12
  "@azure/identity": "^4.13.0",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ouro.bot/cli",
3
- "version": "0.1.0-alpha.829",
3
+ "version": "0.1.0-alpha.830",
4
4
  "engines": {
5
5
  "node": ">=22"
6
6
  },