BillyOutlast bbc3d4c2a5 T02: client debug logging subsystem
- launcher/debug-logger.cjs (new): sync JSONL appender, activates on
  --heretek-debug-log <path> / HERETEK_DEBUG_LOG, schema
  {ts,iso,source,level,event,data}; invalid paths disable gracefully.
- heretek-hook.cjs: init logger in installPreloadHook, log window
  creation/load/navigation, uncaughtException/unhandledRejection, flag
  non-spoofed api.gdevelop.io attempts (filter widens only when active).
- preload-unlock.cjs: expose window.__HERETEK_LOGGER__ (capped ring
  buffer), hook error/unhandledrejection, intercept console.error/warn
  (pass-through); fallback-source embedding extended.
- ai-studio: DebugEvents.js emitter + LoopGuard turn/guard events
  ([AI_REQUEST_START],[TOOL_CALL],[TOOL_RESULT],[GUARD_EVALUATE],
  [REQUEST_STATE_CHANGE]); MANIFEST hashes updated; TIER2_FILES extended.
- scripts/dump-debug-log.mjs (new): filter by event/level/request id.
- tests/launcher/debug-logger.test.cjs (new, 15 tests); inject.test
  3->4 launcher files. npm test 146/146 green.
2026-10-12 00:31:19 -04:00
2026-10-12 00:31:19 -04:00

GDevelop-Unlocked

Surgical, patch-stack conversion of the premium unlocks + Bring-Your-Own-Key local AI studio pioneered in the (now-retired) GDevelop-Heretek fork — into a maintainable delivery shape with zero dependency on that fork. No 205-file merge treadmill, no donor checkout in any build/test/CI path.

Three delivery mechanisms, all applied onto stock upstream GDevelop:

Mechanism Lives in What it does
Tier-1 patches (01–06) patches/ Curated minimal hunks: subscription/capability unlocks, checker no-ops, logo/watermark + preview/debugger gate removal, Electron loader line
Tier-2 glue (07–14) patches/ + packages/ai-studio/ Fork's BYOK AI routing ported as patches; runtime (CustomAIClient, 12 Studio modules) extracted verbatim into packages/ai-studio/ and overlaid by the driver
Launcher hook launcher/ Main-process preload injection + fetch/XHR spoof + webRequest backstop, so a stock build unlocks at runtime

Patches 07/08/11/13/14 are curated forward-ports (see patches/REBASE.md); 09/10/12 are verbatim deltas (09/10 purely additive). Full audit trail: AUDIT_REPORT.md.

Quickstart

npm test                                   # full suite (unit + integration), offline
node scripts/apply-patches.mjs --check     # seam gate only, no filesystem changes

# Apply everything to a pristine upstream checkout (then build it):
node scripts/apply-patches.mjs --target <upstream-checkout>
node scripts/apply-patches.mjs --verify-only --target <patched-checkout>  # read-only re-check

# Stock release artifact (bundled code — source hunks can't apply;
# Tier-1 only, see launcher/README.md):
node scripts/inject-launcher.mjs --appdir <extracted-asar-dir>

Requirements: Node ≥ 22, patch, git. The upstream test fixture (review/GDevelop, multi-GB) is gitignored; CI clones the pinned upstream commit. Nothing else external is needed — this repo is fork-independent.

Layout

  • patches/ — 14 patches + README.md (per-patch targets) + REBASE.md
  • scripts/ — apply-patches.mjs (driver), generate-tier1/2-patches.mjs (generators), inject-launcher.mjs, strip-updater-feed.mjs (release)
  • launcher/ — heretek-hook.cjs, preload-unlock.cjs, unlock-payloads.cjs
  • packages/ai-studio/ — extracted Tier-2 runtime + dev-harness/ mock provider
  • packages/unlock-shim/ — routing/leak-guard invariants (reference impl)
  • tests/ — seams/, patches/, launcher/, tier2/, web/, integration/
  • docs/ — upstream-ai-provider-rfc.md and friends
  • web-userscript/ — web-editor demo userscript (not a delivery path)

CI

  • seam-tests — full npm test + patcher gate against the pinned upstream commit
  • e2e — release-artifact smoke under xvfb (tier1-smoke), OpenAI-contract check against the committed mock (byok-mock), real Ollama on schedule (byok-ollama)
  • release — manual dispatch: patched source → full build → smoke gate → artifact (and a GitHub release only when publish=true)

Status & provenance

  • Upstream baseline: UPSTREAM_BASELINE.json (the only pin — there is no donor pin; tests/patches/pins.test.mjs keeps the workflows on it)
  • Retirement plan for the donor fork: RETIREMENT.md
  • Latest audit verdict: conditional PASS (AUDIT_REPORT.md §7) — remaining work is live CI/model/browser proof, not code changes.
S
Description
No description provided
Readme MIT
662 KiB
0 Stars 1 Watchers 0 Forks
Languages
JavaScript 97.9%
Python 1.8%
Ruby 0.3%