jorgex-stack 1.9.51 → 1.9.52

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/dist/cli.js CHANGED
@@ -5235,6 +5235,45 @@ async function querySkillHeads(skillNames, upstreams) {
5235
5235
  return { name, repo, info, head: heads.get(repo) ?? null };
5236
5236
  });
5237
5237
  }
5238
+ function complementsToScan(upstreams) {
5239
+ return Object.keys(upstreams.complements ?? {}).filter((name) => !name.startsWith("$"));
5240
+ }
5241
+ function resolveComplementUpdateCheck(name, info, upstream) {
5242
+ const pinned = info.version ?? null;
5243
+ if (!pinned)
5244
+ return {
5245
+ level: "warn",
5246
+ message: `${name}: sin pin en upstreams.json \u2014 fija la versi\xF3n revisada antes de instalar.`
5247
+ };
5248
+ if (upstream === null)
5249
+ return { level: "info", message: `${name}: pin ${pinned} (no se pudo consultar el upstream).` };
5250
+ if (upstream === pinned)
5251
+ return { level: "success", message: `${name}: al d\xEDa con el pin ${pinned}.` };
5252
+ return {
5253
+ level: "warn",
5254
+ message: `${name}: difiere del upstream (pin ${pinned}, upstream ${upstream}). Revisa el cambio y, si lo aceptas, re-pinea en upstreams.json \u2014 nunca auto-update.`
5255
+ };
5256
+ }
5257
+ async function queryComplementUpstreams(names, upstreams) {
5258
+ const requests = /* @__PURE__ */ new Map();
5259
+ const keyOf = (source) => {
5260
+ if (source.startsWith("npm:")) return `npm:${source.slice(4)}`;
5261
+ if (source.startsWith("github:")) return `github:${source.slice("github:".length).split("#")[0]}`;
5262
+ return null;
5263
+ };
5264
+ for (const name of names) {
5265
+ const key = keyOf(upstreams.complements[name].source);
5266
+ if (key && !requests.has(key)) {
5267
+ requests.set(key, key.startsWith("npm:") ? latestNpmVersion(key.slice("npm:".length)) : latestGithubRelease(key.slice("github:".length)));
5268
+ }
5269
+ }
5270
+ const observed = /* @__PURE__ */ new Map();
5271
+ await Promise.all([...requests.entries()].map(async ([key, request]) => observed.set(key, await request)));
5272
+ return names.map((name) => {
5273
+ const key = keyOf(upstreams.complements[name].source);
5274
+ return { name, upstream: key ? observed.get(key) ?? null : null };
5275
+ });
5276
+ }
5238
5277
  async function latestNpmVersion(pkg) {
5239
5278
  try {
5240
5279
  const res = await fetch(`https://registry.npmjs.org/${pkg}/latest`, {
@@ -5331,6 +5370,21 @@ async function runUpdateCheck(localVersion, includeBrowserState = true) {
5331
5370
  p4.log.info("Skills de terceros: ning\xFAn upstream se ha movido respecto a su pin.");
5332
5371
  }
5333
5372
  }
5373
+ const complementNames = complementsToScan(upstreams);
5374
+ if (complementNames.length > 0) {
5375
+ const complementQueries = await queryComplementUpstreams(complementNames, upstreams);
5376
+ let movedComplement = false;
5377
+ let unknownComplement = false;
5378
+ for (const { name, upstream } of complementQueries) {
5379
+ const report = resolveComplementUpdateCheck(name, upstreams.complements[name], upstream);
5380
+ p4.log[report.level](report.message);
5381
+ if (report.level === "warn") movedComplement = true;
5382
+ if (report.level === "info") unknownComplement = true;
5383
+ }
5384
+ if (!movedComplement && !unknownComplement) {
5385
+ p4.log.success("Complementos oficiales: al d\xEDa con sus pins.");
5386
+ }
5387
+ }
5334
5388
  if (githubRateLimited()) {
5335
5389
  p4.log.warn(rateLimitHint("GitHub limit\xF3 algunas consultas (rate limit sin token)."));
5336
5390
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jorgex-stack",
3
- "version": "1.9.51",
3
+ "version": "1.9.52",
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",
package/upstreams.json CHANGED
@@ -8,6 +8,53 @@
8
8
  "policy": "respect-existing — D7: si hay un Engram instalado (binario o DB), no se toca; update del binario solo con confirmación explícita y la DB jamás"
9
9
  }
10
10
  },
11
+ "complements": {
12
+ "$comment": "Complementos oficiales externos (ejecutan código en el runtime): pin exacto al instalar, nunca latest ni rangos flotantes. `reviewed` = última revisión aceptada; `update --check` es discovery-only y avisa si el upstream se movió; la adopción es re-pin deliberado con verificación, nunca auto-update.",
13
+ "gentle-engram": {
14
+ "source": "npm:gentle-engram",
15
+ "version": "0.1.12",
16
+ "reviewed": "2026-09-17",
17
+ "status": "pendiente-adopcion",
18
+ "note": "última publicada en npm (dist-tag latest); el setup oficial en main referencia 0.1.13 aún no publicada — re-pinear al salir. Incluye auto-cierre en session_shutdown. Issue: #155"
19
+ },
20
+ "pi-mcp-adapter": {
21
+ "source": "npm:pi-mcp-adapter",
22
+ "version": null,
23
+ "reviewed": "2026-09-17",
24
+ "status": "pendiente-pin",
25
+ "note": "upstream lo referencia sin versión (setup.go main): exigir pin exacto antes de adoptar. Issue: #155"
26
+ },
27
+ "engram-claude-plugin": {
28
+ "source": "github:Gentleman-Programming/engram#plugin/claude-code",
29
+ "version": "1.20.0",
30
+ "reviewed": "2026-09-17",
31
+ "note": "autocierre vía hook Stop (v1.20.0) / SessionEnd (main). Stack convive (detección + allowlists duales); falta instalación/verificación por Stack. Issue: #155"
32
+ },
33
+ "engram-codex-plugin": {
34
+ "source": "github:Gentleman-Programming/engram#plugin/codex",
35
+ "version": "1.20.0",
36
+ "reviewed": "2026-09-17",
37
+ "note": "autocierre vía hook Stop. Stack convive; falta instalación/verificación por Stack. Issue: #155"
38
+ },
39
+ "engram-opencode-plugin": {
40
+ "source": "github:Gentleman-Programming/engram#plugin/opencode",
41
+ "version": "1.20.0",
42
+ "reviewed": "2026-09-17",
43
+ "note": "auto-cierre (endSessionInEngram) solo en main; la copia vendorizada de Stack no lo tiene — migrar con transferencia de ownership de plugins/engram.ts. Issue: #155"
44
+ },
45
+ "chrome-devtools-mcp": {
46
+ "source": "npm:chrome-devtools-mcp",
47
+ "version": "1.6.0",
48
+ "reviewed": "2026-09-17",
49
+ "note": "opt-in, default-off; flags --isolated --redact-network-headers --no-performance-crux --no-usage-statistics"
50
+ },
51
+ "playwright-cli": {
52
+ "source": "npm:@playwright/cli",
53
+ "version": "0.1.18",
54
+ "reviewed": "2026-09-17",
55
+ "note": "CLI global compartido por la máquina; camino recomendado opt-in"
56
+ }
57
+ },
11
58
  "skills": {
12
59
  "deploy-to-vercel": {
13
60
  "source": "github:vercel-labs/agent-skills",