@tera-system/pro 0.2.12 → 0.2.14

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/MANIFEST.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tera-system/pro",
3
- "version": "0.2.12",
3
+ "version": "0.2.14",
4
4
  "description": "Build manifest for the Tera System Pro commercial plugin component (THIN mode — content served from teranoo.com signed bundle).",
5
5
  "compatibleEnvironments": [
6
6
  "opencode"
@@ -15,13 +15,13 @@
15
15
  "projectControlTemplates": 1,
16
16
  "assets": 49
17
17
  },
18
- "bundleRef": "core-bundle-v0.2.11.signed.json (SHA256 B05E0A99811958BE44DFB162812366723D3080145122A3C3E0C345E37E2E51B2)",
19
- "builtAt": "2026-08-28",
18
+ "bundleRef": "core-bundle-v0.2.14.signed.json (SHA256 CF02CA7939BE55DC73B71212B53F73D6CF4CB434C4F580613BFFF3448CBA23E9)",
19
+ "builtAt": "2026-08-30",
20
20
  "sha256": {
21
- "agents": "9769b3acc15e44e8ae56e4d585f7b965f6c30eafceea509edd0dfe3ce1d83270",
22
- "commands": "f8c91dab42e41d1f8362edfd816964ceabdbd95e8ebdd02e83ea36f7f805a259",
23
- "core/tera-system": "f1436c0eafdebde6177d3fd9e7ccdcabd28430daaff188ae61d7ae3d30f229d1",
24
- "tools": "1f96a2de662c50c5c0a4c62d27ec583671c690163a0b35add036bfdd2b3a1f1a",
21
+ "agents": "259904c525641511d80751a66926ca92d45eddea66adbaea2147c78807223adf",
22
+ "commands": "c541b6664c067fac5fb85d280448159b9854cf203ecb4112153a621edb94aa90",
23
+ "core/tera-system": "68a2b5536a4b76a367ecfe0cad2fbd07b17d54d9c3deee0b2ea339a9749c54e3",
24
+ "tools": "86ec41d886f42ae0faf0ee341abf73ab6abd29380c59246dedc47bcdbb1e7358",
25
25
  "core/project-control": "cb979181d50e54c9b9b9173ffc890ca021bfaefe9678b1cad4a2f67ceac3dfdd"
26
26
  }
27
27
  }
package/README.md CHANGED
@@ -38,8 +38,8 @@ node scripts/install.js --target /path/to/workspace
38
38
  ط¨ط¹ط¯ ط§ظ„طھط«ط¨ظٹطھطŒ ظپط¹ظ‘ظ„ ط§ظ„ظ…ظپطھط§ط­:
39
39
 
40
40
  ```bash
41
- TERA_LICENSE_KEY=your-key npm run tera-license # ط£ظˆ
42
- npm run tera-sync
41
+ TERA_LICENSE_KEY=your-key npx tera-license # ط£ظˆ
42
+ npx tera-sync
43
43
  ```
44
44
 
45
45
  ط§ظ„طھط­ظ‚ظ‚ ظٹط¹ظ…ظ„ ط¹ط¨ط±: API ط§ظ„ط³ظٹط±ظپط± → fallback ط£ظˆظپظ„ط§ظٹظ† (Ed25519) → ظ†ط¨ط¶ ظ‚ظ„ط¨ ظƒظ„ 3 ط£ظٹط§ظ….
package/RELEASES.md CHANGED
@@ -4,8 +4,37 @@
4
4
 
5
5
  ---
6
6
 
7
+ ## 0.2.14 (2026-08-30)
7
8
 
9
+ ### Buyable tool access: bin entries + npx commands + sync integrity fix (SCP-2026-08-30-004)
8
10
 
11
+ **What changed:**
12
+ - **package.json `bin` entries added** — `tera-license`, `tera-sync`, `tera-heartbeat`, `tera-preflight` are now real commands. Buyers run `npx tera-sync`, `npx tera-preflight`, `npx tera-license activate <key>` from their workspace root. Previously `npx` failed (E404 — not a bin) and `npm run` failed ("Missing script" — scripts live in the package, not the project root).
13
+ - **tera-sync.mjs: integrity refresh after apply** — after applying the bundle, the integrity manifest is recreated. Previously a sync that changed bundle content left the install-time snapshot stale → preflight reported "modified files" → license gate BLOCKED. This would have broken existing buyers after a bundle update.
14
+ - **license-gate.mjs runtime message** — activation instruction now `npx tera-license activate <key>` (was `npm run tera-license -- activate <key>`, which fails from the buyer's project root).
15
+ - **TERA_LICENSE_GUARD.md** — same `npx` instruction in the Unlicensed block + preflight verification via `npx tera-preflight`.
16
+ - **README.md** — activation commands use `npx`.
17
+
18
+ **Why:**
19
+ - First real buyer trial proved neither `npx` (E404) nor `npm run` (Missing script) reached the package tools — the entry door to the system was broken for every buyer.
20
+ - Bundle content changed (guard text) — this release ships the updated signed bundle `core-bundle-v0.2.14.signed.json` (200 files, contentSha256 cf165c6cb0bc1af0b55c968ae0c493a415ca52a92712b731dc61a5f2a324dfa2) to the server.
21
+
22
+ **Deployment order (corrected):** publish npm `0.2.14` FIRST, then update the server bundle. npm-first ensures existing buyers already have the integrity-refresh fix in tera-sync before the bundle content changes; server-first would cause a temporary "modified files" scare for existing buyers running sync with old scripts.
23
+
24
+
25
+
26
+
27
+
28
+ ## 0.2.13 (2026-08-30)
29
+
30
+ ### Revocation speed: periodic recheck 30d -> 3d (SCP-2026-08-30-002)
31
+
32
+ **What changed (scripts only):**
33
+ - license-gate.mjs: RECHECK_INTERVAL_DAYS 30 -> 3 - an active client now contacts the license server at least every 3 days, so a server-side revocation is detected within <=3 days of usage (instead of up to 30).
34
+
35
+ **Why:**
36
+ - Revocation of Saeed was live on the server, but the 30-day recheck interval meant an active client would not notice for up to 30 days. 3 days balances detection speed with server load.
37
+ - Offline at recheck -> allowed (grace), no false blocking.
9
38
 
10
39
  ## 0.2.12 (2026-08-30)
11
40
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tera-system/pro",
3
- "version": "0.2.12",
3
+ "version": "0.2.14",
4
4
  "description": "Tera System Pro — commercial edition (thin): system files are fetched from teranoo.com as a signed bundle; enforced license gate + heartbeat",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "type": "module",
@@ -19,7 +19,11 @@
19
19
  ],
20
20
  "bin": {
21
21
  "tera-restore": "scripts/install.js",
22
- "tera-pro-restore": "scripts/install.js"
22
+ "tera-pro-restore": "scripts/install.js",
23
+ "tera-license": "scripts/tera-license.mjs",
24
+ "tera-sync": "scripts/tera-sync.mjs",
25
+ "tera-heartbeat": "scripts/tera-heartbeat.mjs",
26
+ "tera-preflight": "scripts/preflight.mjs"
23
27
  },
24
28
  "scripts": {
25
29
  "postinstall": "node scripts/install.js",
@@ -15,7 +15,7 @@ export const GATE_RESULTS = {
15
15
  DENY_NEEDS_RECHECK: "deny-needs-recheck",
16
16
  };
17
17
 
18
- const RECHECK_INTERVAL_DAYS = 30;
18
+ const RECHECK_INTERVAL_DAYS = 3; // SCP-2026-08-30-002: revocation detection within <=3 days (was 30)
19
19
  const RECHECK_INTERVAL_MS = RECHECK_INTERVAL_DAYS * 86400000;
20
20
 
21
21
  /**
@@ -125,7 +125,7 @@ export async function enforceLicenseGate(target, options = {}) {
125
125
  "❌ Tera System License Required.\n" +
126
126
  "Current state: Unlicensed (trial mode).\n\n" +
127
127
  "Visit https://teranoo.com/pricing to obtain a license key.\n" +
128
- "Then run: npm run tera-license -- activate <key>",
128
+ "Then run: npx tera-license activate <key>",
129
129
  };
130
130
  }
131
131
 
@@ -16,6 +16,7 @@
16
16
  import fs from "node:fs";
17
17
  import path from "node:path";
18
18
  import { verifyBundle, applyBundle } from "./lib/bundle.mjs";
19
+ import { createIntegrityManifest, saveIntegrityManifest } from "./lib/integrity.mjs";
19
20
 
20
21
  const DEFAULT_URL = "https://teranoo.com/api/tera-system/bundle";
21
22
 
@@ -108,6 +109,17 @@ const syncStateFile = path.join(target, ".tera", "sync.state.json");
108
109
  syncedAt: new Date().toISOString(),
109
110
  }, null, 2));
110
111
 
112
+ // Refresh the integrity manifest AFTER applying files (SCP-2026-08-30-004).
113
+ // Without this, a sync that changes bundle content would leave the install-time
114
+ // snapshot stale and preflight would report "modified" → license gate BLOCKS.
115
+ try {
116
+ const integrityManifest = createIntegrityManifest(target);
117
+ saveIntegrityManifest(target, integrityManifest);
118
+ console.log(`✔ Integrity updated : ${integrityManifest.fileCount} files tracked`);
119
+ } catch (err) {
120
+ console.log(`⚠ Integrity update failed: ${err.message} — run install again if preflight blocks`);
121
+ }
122
+
111
123
  console.log(`✔ Sync state : .tera/sync.state.json`);
112
124
  console.log("\n✔ sync complete");
113
125
  })().catch((err) => {