jorgex-stack 1.9.42 → 1.9.44
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/README.md +5 -3
- package/dist/cli.js +53 -12
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -114,7 +114,7 @@ Programmatic mode does **not** provide:
|
|
|
114
114
|
|
|
115
115
|
### Pi runtime
|
|
116
116
|
|
|
117
|
-
El canon de Stack y el paquete Pi adoptado mantienen una snapshot de 17 skills
|
|
117
|
+
El canon de Stack y el paquete Pi adoptado mantienen una snapshot de 17 árboles de skills con 89 archivos de skill. La identidad, procedencia e integridad del paquete adoptado son autoritativas en `src/lib/pi-runtime-pin.json`.
|
|
118
118
|
|
|
119
119
|
Pi combines the frozen **snapshot v2** package with a Stack-owned shared projection. The version references that follow describe historical Stack/Pi transitions, not the current pin. The current pin, package integrity and lifecycle are maintained in [docs/references/pi-runtime.md](docs/references/pi-runtime.md) and `src/lib/pi-runtime-pin.json`; this README does not imply a future release.
|
|
120
120
|
|
|
@@ -128,10 +128,12 @@ pnpm dlx jorgex-stack@1.9.7 sync --agents pi
|
|
|
128
128
|
pnpm dlx jorgex-stack@1.9.7 uninstall --agents pi
|
|
129
129
|
```
|
|
130
130
|
|
|
131
|
-
Stack downloads the frozen registry tarball, verifies its exact size plus SHA-256/SHA-512, backs up Pi's `settings.json`, and only then asks Pi to install that local file. The exact artifact and integrity values are authoritative in `src/lib/pi-runtime-pin.json`, while the lifecycle remains authoritative in `src/lib/pi-runtime.ts`. Pi's own package-manager invocation is the narrow runtime exception to the repository's pnpm-only rule; the Stack lifecycle never launches npm directly. After the package is healthy, Stack projects the shared resources into Pi: marked `jorgex:system-prompt` and `jorgex:engram-protocol` sections in `~/.pi/agent/AGENTS.md`, canonical skills under `~/.agents/skills`, and `~/.pi/agent/prompts/lean-audit.md`. Pi 0.8.
|
|
131
|
+
Stack downloads the frozen registry tarball, verifies its exact size plus SHA-256/SHA-512, backs up Pi's `settings.json`, and only then asks Pi to install that local file. The exact artifact and integrity values are authoritative in `src/lib/pi-runtime-pin.json`, while the lifecycle remains authoritative in `src/lib/pi-runtime.ts`. Pi's own package-manager invocation is the narrow runtime exception to the repository's pnpm-only rule; the Stack lifecycle never launches npm directly. After the package is healthy, Stack projects the shared resources into Pi: marked `jorgex:system-prompt` and `jorgex:engram-protocol` sections in `~/.pi/agent/AGENTS.md`, canonical skills under `~/.agents/skills`, and `~/.pi/agent/prompts/lean-audit.md`. Pi 0.8.22 registers Context7 through an isolated in-memory HTTP bridge during bootstrap; `available` means configuration permits registration and does not imply an HTTP handshake. A conflict preserves the existing MCP file and blocks managed activation. No MCP configuration or credentials are written. For the file runtimes, Context7, Playwright and DevTools use independent managed sections. The global Playwright package and Chromium cache are shared by the machine; `--playwright-runtimes` controls which runtime receives the guide. The adopted Pi package implements and tests `playwright-handoff-v1` through `PI_CODING_AGENT_DIR/jorgex-pi/playwright.v1.json`. Historical package entries do not describe the current pin. Filters are applied only after this projection exists, so the package does not duplicate shared resources. Package ownership is recorded separately in `~/.jorgex-stack/pi-receipt.json`; projection ownership is recorded in `~/.jorgex-stack/pi-projection-receipt.json`. Package receipts reject manual, duplicate, divergent, partial, corrupt, copied-to-another-scope, or unknown-history state. Projection cleanup requires an exact scope-bound ownership receipt; DevTools conflicts preserve the handoff for review.
|
|
132
132
|
|
|
133
133
|
The static `AGENTS.md` projected by Stack does not include Context7; Pi's native bootstrap adds that section after registering the isolated bridge. Pi never writes, owns or removes MCP files. In Claude Code, Codex and OpenCode, a compatible existing Context7 entry is preserved and removed only with explicit canonical Stack ownership.
|
|
134
134
|
|
|
135
|
+
Pi 0.8.22 also seeds `theme=JorgeX`, `quietStartup=true`, and `hideThinkingBlock=true` only for missing fields during first initialization. User changes and deletions are preserved without reseeding. `hideThinkingBlock` changes presentation only; `defaultThinkingLevel` and reasoning remain unchanged. Pi owns only the fields it creates and records in its lifecycle receipt; pre-existing user settings remain unowned. The JorgeX header preserves builtin and custom commands. `Ctrl+O` remains Pi's native tool presentation, with `NO_COLOR` and `JORGEX_PI_MOTION` behavior unchanged; Stack adds no renderer.
|
|
136
|
+
|
|
135
137
|
Historically, the published Pi 0.8.0 direct-package snapshot added `work-audit`: the snapshot grew from **17 to 18 skill trees** (96 to 97 files), and the active runtime allowlist grew from **16 to 17 skills**. The historical Pi 0.8.5 snapshot reference records 18 skill trees and 98 files; it does not describe the adopted pin. Reference F2-A is included while the private F1 skills remain preserved. `playwright-cli` remains in the snapshot but inactive because browser automation is a separate opt-in integration.
|
|
136
138
|
|
|
137
139
|
The historical published artifact has two separate provenance anchors. The local size/SHA-256/SHA-512 checks bind the downloaded bytes to Stack's accepted artifact; they are checks within that checkout, not independent trust roots. npm's external provenance/attestation is outside Stack runtime verification, and `provenance.commit` is informative unless that external attestation is independently verified.
|
|
@@ -192,7 +194,7 @@ Daily operation:
|
|
|
192
194
|
- `doctor` reports the Playwright CLI state (`disabled`, `healthy`, `missing:package`, `missing:browser`, `unreadable`, `broken`, `outdated`) and, when the opt-in package and browser cache are present, verifies one local headless Chromium launch against `about:blank`; it does not open external sites or repair state. An `unreadable` browser cache includes its exact path and filesystem error code so permissions or another local cause can be investigated. If either preference file is corrupt, doctor prints the exact path and the remedy (`Corrige o borra ese archivo antes de reintentar`) before any other browser check; in that case `install`/`uninstall`/`update`/`update --check` will abort with exit 1 until the file is fixed, so the corruption cannot be reconciled destructively.
|
|
193
195
|
- `update --check` only inspects Playwright CLI when its preference is `enabled` (a binary appearing in `PATH` is not consent). It compares the installed version against the approved pin `0.1.18` — it does not consult npm latest, and a Playwright CLI binary-only update does not require `sync` afterwards.
|
|
194
196
|
- `uninstall` preserves the global `@playwright/cli` package and all browser data by default; `--remove-playwright` removes the package only (never the browser cache, profiles, cookies, storage state, traces, screenshots or videos). If `pnpm remove --global @playwright/cli` exits non-zero, `uninstall` reports the failure instead of a success outro. For DevTools MCP, ownership is released only after the corresponding unmerge is applied; if no unmerge action is written, the ownership marker is preserved for a later retry.
|
|
195
|
-
- `install`/`sync` also inject (and `disable`/`uninstall` remove) managed capability sections in `AGENTS.md` (OpenCode, Codex) or `CLAUDE.md` (Claude Code). File runtimes keep `jorgex:playwright`, `jorgex:chrome-devtools` and `jorgex:context7` independent; Pi 0.8.
|
|
197
|
+
- `install`/`sync` also inject (and `disable`/`uninstall` remove) managed capability sections in `AGENTS.md` (OpenCode, Codex) or `CLAUDE.md` (Claude Code). File runtimes keep `jorgex:playwright`, `jorgex:chrome-devtools` and `jorgex:context7` independent; Pi 0.8.22 projects the Context7 section after registering its isolated HTTP bridge and keeps the legacy `jorgex:browser` format for migration. User content outside managed markers is preserved. `--target-dir` never reads the real preferences, so by default no section is emitted in target-dir runs — but explicit flags like `--devtools` simulate the MCP entry (and its DevTools block) inside the temp target without touching the real global state, and `install --dry-run --playwright` projects the Playwright section into the plan preview without installing anything. If reconciliation detects a partial or ambiguous system-prompt state, the CLI exits non-zero and recommends repairing it with `sync` or a repeated install; no write is attempted before marker validation. See [docs/references/browser-automation.md](docs/references/browser-automation.md) §2.7 for the full lifecycle.
|
|
196
198
|
|
|
197
199
|
### Update: Interactive Flow
|
|
198
200
|
|
package/dist/cli.js
CHANGED
|
@@ -3476,22 +3476,37 @@ var ALLOWED_EXTERNAL_WRITES = /* @__PURE__ */ new Set([
|
|
|
3476
3476
|
"models.json",
|
|
3477
3477
|
"jorgex-pi/sol-lifecycle.v1.json"
|
|
3478
3478
|
]);
|
|
3479
|
+
var PERMISSIONS_EXTERNAL_WRITES = /* @__PURE__ */ new Set([
|
|
3480
|
+
...ALLOWED_EXTERNAL_WRITES,
|
|
3481
|
+
"extensions/pi-permission-system/config.json",
|
|
3482
|
+
"jorgex-pi/permissions-lifecycle.v1.json",
|
|
3483
|
+
"jorgex-pi/permissions-backups"
|
|
3484
|
+
]);
|
|
3485
|
+
var EXPERIENCE_EXTERNAL_WRITES = /* @__PURE__ */ new Set([
|
|
3486
|
+
...PERMISSIONS_EXTERNAL_WRITES,
|
|
3487
|
+
"jorgex-pi/experience-lifecycle.v1.json"
|
|
3488
|
+
]);
|
|
3479
3489
|
function sameRecord(left, right) {
|
|
3480
3490
|
return JSON.stringify(left) === JSON.stringify(right);
|
|
3481
3491
|
}
|
|
3482
|
-
function managedExternalWritesAreSafe(writes) {
|
|
3483
|
-
if (
|
|
3492
|
+
function managedExternalWritesAreSafe(writes, capabilities) {
|
|
3493
|
+
if (!Array.isArray(capabilities)) return false;
|
|
3494
|
+
const permissions = capabilities.includes("permissions-policy-v1");
|
|
3495
|
+
const experience = capabilities.includes("experience-defaults-v1");
|
|
3496
|
+
if (experience && !permissions) return false;
|
|
3497
|
+
const allowed = experience ? EXPERIENCE_EXTERNAL_WRITES : permissions ? PERMISSIONS_EXTERNAL_WRITES : ALLOWED_EXTERNAL_WRITES;
|
|
3498
|
+
if (writes.length !== allowed.size) return false;
|
|
3484
3499
|
const seen = /* @__PURE__ */ new Set();
|
|
3485
3500
|
for (const write of writes) {
|
|
3486
3501
|
if (write === null || typeof write !== "object" || Array.isArray(write)) return false;
|
|
3487
3502
|
if (Object.keys(write).sort().join(",") !== "owner,relativePath,root,semantics") return false;
|
|
3488
3503
|
if (write.owner !== "jorgex-pi" || write.root !== "PI_CODING_AGENT_DIR") return false;
|
|
3489
|
-
if (typeof write.relativePath !== "string" || !
|
|
3504
|
+
if (typeof write.relativePath !== "string" || !allowed.has(write.relativePath)) return false;
|
|
3490
3505
|
if (/^(?:[A-Za-z]:|[\\/])/.test(write.relativePath) || write.relativePath.split(/[\\/]/).includes("..")) return false;
|
|
3491
3506
|
if (typeof write.semantics !== "string" || write.semantics.trim() === "" || seen.has(write.relativePath)) return false;
|
|
3492
3507
|
seen.add(write.relativePath);
|
|
3493
3508
|
}
|
|
3494
|
-
return seen.size ===
|
|
3509
|
+
return seen.size === allowed.size;
|
|
3495
3510
|
}
|
|
3496
3511
|
function ownership(receipt) {
|
|
3497
3512
|
return { receipt, adapters: false, manifest: false, modelMap: false };
|
|
@@ -3612,7 +3627,7 @@ function parseReceipt(receiptJson, candidate, scope, engramBin) {
|
|
|
3612
3627
|
return sameRecord(parsed, expected) ? expected : null;
|
|
3613
3628
|
}
|
|
3614
3629
|
function candidateIsValid(candidate, observed) {
|
|
3615
|
-
return candidate.package.name === "jorgex-pi" && candidate.package.source === `npm:${candidate.package.name}@${candidate.package.version}` && candidate.contract.schemaVersion === 1 && candidate.contract.runner.schemaVersion === 1 && candidate.contract.runner.bin === "jorgex-pi" && candidate.contract.runner.maxStdoutBytes === 65536 && managedExternalWritesAreSafe(candidate.contract.managedExternalWrites) && [...REQUIRED_CAPABILITIES].every((capability) => candidate.contract.capabilities.includes(capability)) && sameRecord(candidate.tarball, observed);
|
|
3630
|
+
return candidate.package.name === "jorgex-pi" && candidate.package.source === `npm:${candidate.package.name}@${candidate.package.version}` && candidate.contract.schemaVersion === 1 && candidate.contract.runner.schemaVersion === 1 && candidate.contract.runner.bin === "jorgex-pi" && candidate.contract.runner.maxStdoutBytes === 65536 && managedExternalWritesAreSafe(candidate.contract.managedExternalWrites, candidate.contract.capabilities) && [...REQUIRED_CAPABILITIES].every((capability) => candidate.contract.capabilities.includes(capability)) && sameRecord(candidate.tarball, observed);
|
|
3616
3631
|
}
|
|
3617
3632
|
function planPiPackageLifecycle(input) {
|
|
3618
3633
|
if (!candidateIsValid(input.candidate, input.observedTarball)) {
|
|
@@ -6131,16 +6146,16 @@ import { createHash as createHash2 } from "crypto";
|
|
|
6131
6146
|
var pi_runtime_pin_default = {
|
|
6132
6147
|
package: {
|
|
6133
6148
|
name: "jorgex-pi",
|
|
6134
|
-
version: "0.8.
|
|
6135
|
-
source: "npm:jorgex-pi@0.8.
|
|
6149
|
+
version: "0.8.22",
|
|
6150
|
+
source: "npm:jorgex-pi@0.8.22"
|
|
6136
6151
|
},
|
|
6137
6152
|
provenance: {
|
|
6138
|
-
commit: "
|
|
6153
|
+
commit: "462de6f6f52dbc86b6808ed051dd441932974500"
|
|
6139
6154
|
},
|
|
6140
6155
|
tarball: {
|
|
6141
|
-
bytes:
|
|
6142
|
-
sha256: "
|
|
6143
|
-
sha512: "
|
|
6156
|
+
bytes: 89140502,
|
|
6157
|
+
sha256: "98fbcffe5ee81e9fd8754dfbb40d786ee7c10251ef7050d68e70808f8de4d1df",
|
|
6158
|
+
sha512: "ef415061fab27328cc1e43238653705bca089d32719034a3e6543da19069d42996d5b799b1f94eac8b2fccd64d97b2440dbf1ddcd1f3d22d9fc45ac0a805a7cd"
|
|
6144
6159
|
}
|
|
6145
6160
|
};
|
|
6146
6161
|
|
|
@@ -6164,6 +6179,8 @@ var PI_RUNTIME_CANDIDATE = {
|
|
|
6164
6179
|
"mcp-adapter-v1",
|
|
6165
6180
|
"engram-runtime-tools-v1",
|
|
6166
6181
|
"context7-http-v1",
|
|
6182
|
+
"permissions-policy-v1",
|
|
6183
|
+
"experience-defaults-v1",
|
|
6167
6184
|
"chrome-devtools-handoff-v1",
|
|
6168
6185
|
"playwright-handoff-v1",
|
|
6169
6186
|
"runner-json-v1",
|
|
@@ -6183,7 +6200,7 @@ var PI_RUNTIME_CANDIDATE = {
|
|
|
6183
6200
|
owner: "jorgex-pi",
|
|
6184
6201
|
root: "PI_CODING_AGENT_DIR",
|
|
6185
6202
|
relativePath: "settings.json",
|
|
6186
|
-
semantics: "merge a missing or matching partial defaultProvider=openai-codex and defaultModel=gpt-5.6-sol pair; preserve foreign halves; cleanup removes only receipt-owned exact values"
|
|
6203
|
+
semantics: "merge a missing or matching partial defaultProvider=openai-codex and defaultModel=gpt-5.6-sol pair plus first-visit theme=JorgeX, quietStartup=true, and hideThinkingBlock=true defaults; preserve foreign halves and existing experience values; cleanup removes only receipt-owned exact values"
|
|
6187
6204
|
},
|
|
6188
6205
|
{
|
|
6189
6206
|
owner: "jorgex-pi",
|
|
@@ -6196,6 +6213,30 @@ var PI_RUNTIME_CANDIDATE = {
|
|
|
6196
6213
|
root: "PI_CODING_AGENT_DIR",
|
|
6197
6214
|
relativePath: "jorgex-pi/sol-lifecycle.v1.json",
|
|
6198
6215
|
semantics: "record field, container, and file ownership; remove the receipt when empty"
|
|
6216
|
+
},
|
|
6217
|
+
{
|
|
6218
|
+
owner: "jorgex-pi",
|
|
6219
|
+
root: "PI_CODING_AGENT_DIR",
|
|
6220
|
+
relativePath: "extensions/pi-permission-system/config.json",
|
|
6221
|
+
semantics: "seed the generated permission policy only when absent; publish exclusively, preserve preexisting or invalid user state, and remove only an exact owned copy during cleanup"
|
|
6222
|
+
},
|
|
6223
|
+
{
|
|
6224
|
+
owner: "jorgex-pi",
|
|
6225
|
+
root: "PI_CODING_AGENT_DIR",
|
|
6226
|
+
relativePath: "jorgex-pi/permissions-lifecycle.v1.json",
|
|
6227
|
+
semantics: "record initialization and exact permission-config ownership without storing user configuration or credentials"
|
|
6228
|
+
},
|
|
6229
|
+
{
|
|
6230
|
+
owner: "jorgex-pi",
|
|
6231
|
+
root: "PI_CODING_AGENT_DIR",
|
|
6232
|
+
relativePath: "jorgex-pi/permissions-backups",
|
|
6233
|
+
semantics: "retain cleanup backups of exact owned permission policy bytes"
|
|
6234
|
+
},
|
|
6235
|
+
{
|
|
6236
|
+
owner: "jorgex-pi",
|
|
6237
|
+
root: "PI_CODING_AGENT_DIR",
|
|
6238
|
+
relativePath: "jorgex-pi/experience-lifecycle.v1.json",
|
|
6239
|
+
semantics: "record first initialization and exact ownership of missing theme, quietStartup, and hideThinkingBlock fields; preserve replacements and do not reseed after initialization"
|
|
6199
6240
|
}
|
|
6200
6241
|
]
|
|
6201
6242
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "jorgex-stack",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.44",
|
|
4
4
|
"description": "Harness multi-agente portable: instala la config JorgeX (agentes, skills, hooks, Engram, MCPs) en Claude Code, Codex CLI, OpenCode y Pi",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|