@tryinget/pi-agent-vent 0.2.1 → 0.3.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tryinget/pi-agent-vent",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "description": "Local pi tool for agents to record recurring frustrations, bugs, and workflow friction without creating incidents or external telemetry",
5
5
  "type": "module",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -39,9 +39,9 @@
39
39
  "quality:ci": "bash ./scripts/quality-gate.sh ci",
40
40
  "check": "npm run quality:ci",
41
41
  "test": "npm run quality:ci",
42
- "docs:list": "bash ./scripts/docs-list.sh",
43
- "docs:list:workspace": "bash ./scripts/docs-list.sh --workspace --discover",
44
- "docs:list:json": "bash ./scripts/docs-list.sh --json",
42
+ "docs:list": "node ~/ai-society/core/agent-scripts/scripts/docs-list.mjs",
43
+ "docs:list:workspace": "node ~/ai-society/core/agent-scripts/scripts/docs-list.mjs --workspace --discover",
44
+ "docs:list:json": "node ~/ai-society/core/agent-scripts/scripts/docs-list.mjs --json",
45
45
  "release:check": "bash ./scripts/release-check.sh",
46
46
  "release:check:quick": "SKIP_PI_SMOKE=1 bash ./scripts/release-check.sh",
47
47
  "loop-doctor": "bash -lc 'node --version; npm --version; npm pkg get name version >/dev/null; git status --short -- . || true; exit 0'",
@@ -87,11 +87,12 @@
87
87
  },
88
88
  "devDependencies": {
89
89
  "@biomejs/biome": "2.3.14",
90
- "@earendil-works/pi-ai": "0.83.0",
91
- "@earendil-works/pi-coding-agent": "0.83.0"
90
+ "@earendil-works/pi-agent-core": "0.84.3",
91
+ "@earendil-works/pi-ai": "0.84.3",
92
+ "@earendil-works/pi-coding-agent": "0.84.3"
92
93
  },
93
94
  "overrides": {
94
- "fast-xml-parser": "5.3.6"
95
+ "fast-xml-parser": "5.7.0"
95
96
  },
96
97
  "peerDependencies": {
97
98
  "@earendil-works/pi-ai": "*",
@@ -9,6 +9,8 @@ set -euo pipefail
9
9
  ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
10
10
  REPO_ROOT="$(cd "$ROOT_DIR/../.." && pwd)"
11
11
  cd "$ROOT_DIR"
12
+ RELEASE_SANDBOX_ROOT="$(git -C "$ROOT_DIR" rev-parse --show-toplevel)"
13
+ source "$RELEASE_SANDBOX_ROOT/scripts/release-sandbox.sh"
12
14
 
13
15
  # Scratch-root resolution, from first principles:
14
16
  # the invariant is "release-check scratch lands on a managed, disposable root",
@@ -43,46 +45,11 @@ REPOSITORY_URL="$(node -p "(() => { const pkg = JSON.parse(require('node:fs').re
43
45
 
44
46
  HOST_VERSION="$(node -p "JSON.parse(require('node:fs').readFileSync('package.json', 'utf8')).devDependencies['@earendil-works/pi-coding-agent'] || ''")"
45
47
 
46
- # One release-only policy membrane. Every dependency-resolving command, including
47
- # Pi's nested npm invocation, must enter through here with disposable cache/prefix.
48
- RELEASE_MIN_AGE=0
49
- with_release_npm_policy() {
50
- local cache="$1"
51
- local prefix="$2"
52
- shift 2
53
- case "$cache" in
54
- "$TMP_ROOT"/pi-agent-vent-*-npm-cache-*) ;;
55
- *)
56
- echo "Release command refused non-isolated npm cache: $cache" >&2
57
- return 1
58
- ;;
59
- esac
60
- if [[ "$prefix" != "-" ]]; then
61
- case "$prefix" in
62
- "$TMP_ROOT"/pi-agent-vent-*-npm-prefix-*) ;;
63
- *)
64
- echo "Release command refused non-isolated npm prefix: $prefix" >&2
65
- return 1
66
- ;;
67
- esac
68
- (
69
- export NPM_CONFIG_PREFIX="$prefix" NPM_CONFIG_CACHE="$cache"
70
- export NPM_CONFIG_MIN_RELEASE_AGE="$RELEASE_MIN_AGE"
71
- "$@"
72
- )
73
- else
74
- (
75
- export NPM_CONFIG_CACHE="$cache" NPM_CONFIG_MIN_RELEASE_AGE="$RELEASE_MIN_AGE"
76
- "$@"
77
- )
78
- fi
79
- }
80
-
81
48
  release_npm_install() {
82
- local cache="$1"
83
- local prefix="$2"
49
+ local _cache="$1"
50
+ local _prefix="$2"
84
51
  shift 2
85
- with_release_npm_policy "$cache" "$prefix" npm install \
52
+ release_sandbox_npm install \
86
53
  --include=optional --ignore-scripts --no-audit --fund=false "$@"
87
54
  }
88
55
 
@@ -128,7 +95,7 @@ if [[ "$NAME" != "${NAME,,}" ]]; then
128
95
  fi
129
96
 
130
97
  echo "== npm pack --dry-run --json"
131
- PACK_JSON="$(npm --cache "$CONTROL_NPM_CACHE" pack --dry-run --json)"
98
+ PACK_JSON="$(release_sandbox_npm pack --dry-run --json)"
132
99
  echo "$PACK_JSON"
133
100
  if [[ -f "$REPO_ROOT/scripts/npm-pack-json.mjs" ]]; then
134
101
  PACK_JSON="$(printf '%s' "$PACK_JSON" | node "$REPO_ROOT/scripts/npm-pack-json.mjs")"
@@ -138,7 +105,7 @@ PACK_JSON="$PACK_JSON" node ./scripts/release-artifact-check.mjs
138
105
 
139
106
  echo "== npm publish --dry-run"
140
107
  set +e
141
- PUBLISH_DRY_RUN_OUTPUT="$(npm --cache "$CONTROL_NPM_CACHE" publish --dry-run 2>&1)"
108
+ PUBLISH_DRY_RUN_OUTPUT="$(release_sandbox_npm publish --dry-run 2>&1)"
142
109
  PUBLISH_DRY_RUN_EXIT=$?
143
110
  set -e
144
111
  echo "$PUBLISH_DRY_RUN_OUTPUT"
@@ -152,7 +119,7 @@ if [[ "$PUBLISH_DRY_RUN_EXIT" -ne 0 ]]; then
152
119
  fi
153
120
 
154
121
  echo "== npm pack"
155
- TARBALL="$(npm --cache "$CONTROL_NPM_CACHE" pack --silent | tail -n 1)"
122
+ TARBALL="$(release_sandbox_npm pack --silent | tail -n 1)"
156
123
  TARBALL_PATH="$ROOT_DIR/$TARBALL"
157
124
  echo "Tarball: $TARBALL_PATH"
158
125
 
@@ -165,13 +132,13 @@ tar -xzf "$TARBALL_PATH" -C "$TARBALL_CHECK_DIR"
165
132
  # This isolated artifact probe intentionally selects the exact host contract above.
166
133
  # Ordinary installs retain the workstation's npm release-age policy.
167
134
  release_npm_install "$TARBALL_NPM_CACHE" -
168
- npm run check
135
+ release_sandbox_npm run check
169
136
  )
170
137
 
171
138
  ARTIFACT_NPM_PREFIX="$(release_tmp_dir artifact-npm-prefix)"
172
139
  ARTIFACT_NPM_CACHE="$(release_tmp_dir artifact-npm-cache)"
173
140
  ARTIFACT_TOOL_VENT_DIR="$(release_tmp_dir artifact-tool-store)"
174
- ARTIFACT_PACKAGE_ROOT="$(npm --prefix "$ARTIFACT_NPM_PREFIX" root -g)/$NAME"
141
+ ARTIFACT_PACKAGE_ROOT="$(release_sandbox_npm --prefix "$ARTIFACT_NPM_PREFIX" root -g)/$NAME"
175
142
 
176
143
  case "$ARTIFACT_PACKAGE_ROOT" in
177
144
  "$ARTIFACT_NPM_PREFIX"/*) ;;
@@ -199,41 +166,16 @@ else
199
166
  echo "pi CLI not found in PATH." >&2
200
167
  exit 1
201
168
  fi
202
- INSTALLED_PI_VERSION="$(pi --version)"
203
- node ./scripts/release-smoke-check.mjs assert-exact-host-contract \
204
- --package-json package.json \
205
- --host-version "$INSTALLED_PI_VERSION"
206
- if [[ ! -f "$HOME/.pi/agent/auth.json" ]]; then
207
- echo "Missing $HOME/.pi/agent/auth.json (needed for isolated pi smoke tests)." >&2
208
- echo "Tip: set SKIP_PI_SMOKE=1 for artifact-only checks." >&2
209
- exit 1
210
- fi
211
-
212
169
  TEST_AGENT_DIR="$(release_tmp_dir pi-agent-dir)"
213
170
  TEST_NPM_PREFIX="$(release_tmp_dir pi-npm-prefix)"
214
171
  TEST_NPM_CACHE="$(release_tmp_dir pi-npm-cache)"
172
+ release_sandbox_prepare_runtime "$TEST_AGENT_DIR" "$TEST_NPM_PREFIX" "$TEST_NPM_CACHE"
215
173
 
216
- cp "$HOME/.pi/agent/auth.json" "$TEST_AGENT_DIR/auth.json"
217
-
218
- # Allow override via environment variables for different provider configurations
219
- PI_TEST_DEFAULT_PROVIDER="${PI_TEST_DEFAULT_PROVIDER:-openai}"
220
- PI_TEST_DEFAULT_MODEL="${PI_TEST_DEFAULT_MODEL:-gpt-4o}"
221
- PI_TEST_ENABLED_MODELS="${PI_TEST_ENABLED_MODELS:-[\"openai/gpt-4*\"]}"
222
-
223
- cat > "$TEST_AGENT_DIR/settings.json" <<JSON
224
- {
225
- "defaultProvider": "${PI_TEST_DEFAULT_PROVIDER}",
226
- "defaultModel": "${PI_TEST_DEFAULT_MODEL}",
227
- "enabledModels": ${PI_TEST_ENABLED_MODELS},
228
- "npmCommand": ["npm", "--prefix", "${TEST_NPM_PREFIX}", "--cache", "${TEST_NPM_CACHE}"],
229
- "extensions": []
230
- }
231
- JSON
232
-
233
- echo "== pi install tarball (isolated PI_CODING_AGENT_DIR and npm prefix)"
174
+ echo "== pi install tarball (credential-isolated Pi and npm roots)"
234
175
  PACKAGE_SPEC="npm:$TARBALL_PATH"
235
- PI_CODING_AGENT_DIR="$TEST_AGENT_DIR" \
236
- with_release_npm_policy "$TEST_NPM_CACHE" "$TEST_NPM_PREFIX" pi install "$PACKAGE_SPEC"
176
+ release_sandbox_exec "$TEST_AGENT_DIR" "$TEST_NPM_PREFIX" "$TEST_NPM_CACHE" \
177
+ pi install "$PACKAGE_SPEC"
178
+ release_sandbox_link_available_peers "$TEST_AGENT_DIR" "$ROOT_DIR"
237
179
 
238
180
  echo "== verify tarball package recorded in settings"
239
181
  TEST_AGENT_DIR="$TEST_AGENT_DIR" PACKAGE_SPEC="$PACKAGE_SPEC" node <<'NODE'
@@ -258,15 +200,15 @@ NODE
258
200
  if [[ -x "./scripts/release-smoke.sh" ]]; then
259
201
  echo "== extension-specific smoke checks (scripts/release-smoke.sh)"
260
202
  PI_INSTALLED_PACKAGE_ROOT="$TEST_AGENT_DIR/npm/node_modules/$NAME"
261
- NPM_CONFIG_PREFIX="$TEST_NPM_PREFIX" NPM_CONFIG_CACHE="$TEST_NPM_CACHE" \
262
- PI_CODING_AGENT_DIR="$TEST_AGENT_DIR" PACKAGE_SPEC="$PACKAGE_SPEC" \
263
- INSTALLED_PACKAGE_ROOT="$PI_INSTALLED_PACKAGE_ROOT" bash ./scripts/release-smoke.sh
203
+ release_sandbox_exec "$TEST_AGENT_DIR" "$TEST_NPM_PREFIX" "$TEST_NPM_CACHE" \
204
+ env PACKAGE_SPEC="$PACKAGE_SPEC" INSTALLED_PACKAGE_ROOT="$PI_INSTALLED_PACKAGE_ROOT" \
205
+ bash ./scripts/release-smoke.sh
264
206
  fi
265
207
  fi
266
208
 
267
209
  echo "== npm view ${NAME} version (pre-publish may be 404)"
268
210
  set +e
269
- npm --cache "$CONTROL_NPM_CACHE" view "$NAME" version --json --registry https://registry.npmjs.org/
211
+ release_sandbox_npm view "$NAME" version --json --registry https://registry.npmjs.org/
270
212
  VIEW_EXIT=$?
271
213
  set -e
272
214
  echo "npm view exit: $VIEW_EXIT"
@@ -6,6 +6,8 @@
6
6
  # ---
7
7
  set -euo pipefail
8
8
 
9
+ : "${TMPDIR:?TMPDIR is required for managed release-smoke scratch}"
10
+
9
11
  ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
10
12
  cd "$ROOT_DIR"
11
13
 
@@ -42,7 +44,7 @@ cleanup() {
42
44
  }
43
45
  trap cleanup EXIT
44
46
 
45
- SMOKE_DIR="$(mktemp -d /tmp/pi-agent-vent-release-smoke-XXXXXX)"
47
+ SMOKE_DIR="$(mktemp -d "$TMPDIR/pi-agent-vent-release-smoke.XXXXXX")"
46
48
  SMOKE_LOCAL_PATH_VENT_DIR="$SMOKE_DIR/agent-vent-local-path-store"
47
49
  SMOKE_TOOL_VENT_DIR="$SMOKE_DIR/agent-vent-tool-store"
48
50
  SMOKE_LOCAL_PATH_OUTPUT="$SMOKE_DIR/agent-vent-local-path.out"
@@ -50,8 +52,10 @@ PACKAGE_NAME="$(node -p "JSON.parse(require('node:fs').readFileSync('package.jso
50
52
  PACKAGE_VERSION="$(node -p "JSON.parse(require('node:fs').readFileSync('package.json', 'utf8')).version")"
51
53
  INSTALLED_EXTENSION_PATH="$INSTALLED_PACKAGE_ROOT/extensions/agent-vent.ts"
52
54
 
53
- case "$(realpath -m "$INSTALLED_PACKAGE_ROOT")" in
54
- "$(realpath "$PI_CODING_AGENT_DIR")"/*) ;;
55
+ INSTALLED_PACKAGE_ROOT="$(node -e 'console.log(require("node:fs").realpathSync(process.argv[1]))' "$INSTALLED_PACKAGE_ROOT")"
56
+ PI_CODING_AGENT_DIR_REAL="$(node -e 'console.log(require("node:fs").realpathSync(process.argv[1]))' "$PI_CODING_AGENT_DIR")"
57
+ case "$INSTALLED_PACKAGE_ROOT" in
58
+ "$PI_CODING_AGENT_DIR_REAL"/*) ;;
55
59
  *)
56
60
  echo "Installed package root escaped isolated Pi agent directory: $INSTALLED_PACKAGE_ROOT" >&2
57
61
  exit 1
@@ -113,9 +113,10 @@ function validatePackageJson() {
113
113
  "quality:ci": "bash ./scripts/quality-gate.sh ci",
114
114
  check: "npm run quality:ci",
115
115
  test: "npm run quality:ci",
116
- "docs:list": "bash ./scripts/docs-list.sh",
117
- "docs:list:workspace": "bash ./scripts/docs-list.sh --workspace --discover",
118
- "docs:list:json": "bash ./scripts/docs-list.sh --json",
116
+ "docs:list": "node ~/ai-society/core/agent-scripts/scripts/docs-list.mjs",
117
+ "docs:list:workspace":
118
+ "node ~/ai-society/core/agent-scripts/scripts/docs-list.mjs --workspace --discover",
119
+ "docs:list:json": "node ~/ai-society/core/agent-scripts/scripts/docs-list.mjs --json",
119
120
  "release:check": "bash ./scripts/release-check.sh",
120
121
  "release:check:quick": "SKIP_PI_SMOKE=1 bash ./scripts/release-check.sh",
121
122
  };
@@ -32,7 +32,6 @@ required_files=(
32
32
  "policy/engineering-lane.json"
33
33
  "policy/security-policy.json"
34
34
  ".pi/prompts/commit.md"
35
- "scripts/docs-list.sh"
36
35
  "scripts/release-artifact-check.mjs"
37
36
  "scripts/release-check.sh"
38
37
  "scripts/validate-structure.sh"
@@ -62,7 +61,6 @@ required_dirs=(
62
61
  )
63
62
 
64
63
  required_executables=(
65
- "scripts/docs-list.sh"
66
64
  "scripts/release-check.sh"
67
65
  "scripts/validate-structure.sh"
68
66
  "scripts/validate-structure.mjs"