diff --git a/README.md b/README.md index 885b5b2..9d8711c 100644 --- a/README.md +++ b/README.md @@ -433,9 +433,14 @@ curl -o .opencode/plugins/ghost.ts \ The adapter reports `turn.started` (the prompt admission — the authoritative turn boundary) and `turn.completed` to the local recorder on -`127.0.0.1:5417/events`. No plugin? Recording still works — the filesystem -watcher + runtime probes capture everything from the outside and turns are -marked **estimated, never invented**. +`127.0.0.1:5417/events`. Note: `ghost watch` **recording** — it does not start +your app. Run your project as usual (e.g. `npm run dev`) in another terminal so +the runtime probes have something to measure. + +No plugin? Recording still works — the filesystem watcher + runtime probes +capture everything from the outside and turns are marked **estimated, never +invented**. Not a git repository? File recording still works; run `git init` +to unlock shadow-git checkpoints. ## 🛠️ Stack diff --git a/packages/ghost/ghost.mjs b/packages/ghost/ghost.mjs index 2a8f079..0fb5728 100644 --- a/packages/ghost/ghost.mjs +++ b/packages/ghost/ghost.mjs @@ -175,6 +175,7 @@ async function cmdWatch() { console.log(`\n ● Ghost recorder is live`); console.log(` session ${session.id}`); console.log(` repo ${repo}`); + if (!session.head) console.log(` git none — file recording only (run git init to enable shadow-git checkpoints)`); console.log(` app ${appUrl}`); console.log(` adapter ${eventsBase}/events (OpenCode plugin target)`); console.log(` sync ${sync}${sync === "off" ? " (local-only) — run: ghost setup to enable" : ""}`); @@ -210,6 +211,7 @@ function cmdStatus() { const head = shadow.currentHead(ROOT); console.log(`repo ${ROOT}`); console.log(`head ${head ? head.slice(0, 10) : "(no git)"}`); + if (!head) console.log(` (not a git repo — run git init to enable shadow-git checkpoints)`); console.log(`cloud ${config.cloudUrl}${creds ? " (paired)" : " (NOT paired)"}`); console.log(`sync ${creds ? config.sync : "off (local-only)"}`); console.log(`settings .ghost/config.json — secrets handled per README policy`); diff --git a/packages/ghost/install.sh b/packages/ghost/install.sh index ef9636e..19f8c8e 100644 --- a/packages/ghost/install.sh +++ b/packages/ghost/install.sh @@ -60,7 +60,7 @@ echo " shim : ${GHOST_BIN}/ghost" echo "" echo " Usage (from ANY project directory):" echo " ghost status # summary of repo + cloud pairing" -echo " ghost watch # record/live session View README" +echo " ghost watch # record a live session (README: full guide)" echo " ghost sessions # list recorded sessions" echo " ghost setup # optionally pair with Ghost Cloud" echo "" diff --git a/packages/ghost/lib/shadowgit.mjs b/packages/ghost/lib/shadowgit.mjs index 4d37e8f..1c80b67 100644 --- a/packages/ghost/lib/shadowgit.mjs +++ b/packages/ghost/lib/shadowgit.mjs @@ -22,7 +22,7 @@ export function commitSnapshot(repo, message = "ghost checkpoint") { const env = { ...process.env, GIT_INDEX_FILE: idx }; const git = (args, extraEnv = {}) => - execFileSync("git", args, { cwd: repo, env: { ...env, ...extraEnv }, encoding: "utf8" }).trim(); + execFileSync("git", args, { cwd: repo, env: { ...env, ...extraEnv }, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim(); try { git(["read-tree", "HEAD"]); } catch { /* empty repo without HEAD */ } git(["add", "-A"]); @@ -56,6 +56,6 @@ export function showFile(repo, sha, filePath) { } export function currentHead(repo) { - try { return execFileSync("git", ["rev-parse", "HEAD"], { cwd: repo, encoding: "utf8" }).trim(); } + try { return execFileSync("git", ["rev-parse", "HEAD"], { cwd: repo, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim(); } catch { return null; } } diff --git a/src/components/site/LandingPage.tsx b/src/components/site/LandingPage.tsx index c7a1c69..216d23f 100644 --- a/src/components/site/LandingPage.tsx +++ b/src/components/site/LandingPage.tsx @@ -799,7 +799,8 @@ export default function LandingPage() {

- 13 backend tests. Every pull request. The deployed URL. + 23 backend tests + 1 integration flow. Every pull request. + The deployed URL.

@@ -914,16 +915,19 @@ export default function LandingPage() { Required check
- - /13 + + /24