jfl 0.9.8 → 0.9.10

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.
Files changed (52) hide show
  1. package/dist/commands/init.d.ts.map +1 -1
  2. package/dist/commands/init.js +85 -20
  3. package/dist/commands/init.js.map +1 -1
  4. package/dist/commands/peter.d.ts.map +1 -1
  5. package/dist/commands/peter.js +136 -42
  6. package/dist/commands/peter.js.map +1 -1
  7. package/dist/commands/repair.d.ts.map +1 -1
  8. package/dist/commands/repair.js +13 -11
  9. package/dist/commands/repair.js.map +1 -1
  10. package/dist/commands/session.d.ts.map +1 -1
  11. package/dist/commands/session.js +3 -37
  12. package/dist/commands/session.js.map +1 -1
  13. package/dist/commands/start.js +3 -3
  14. package/dist/commands/start.js.map +1 -1
  15. package/dist/lib/agent-config.d.ts +1 -0
  16. package/dist/lib/agent-config.d.ts.map +1 -1
  17. package/dist/lib/agent-config.js.map +1 -1
  18. package/dist/lib/agent-guards.d.ts +67 -0
  19. package/dist/lib/agent-guards.d.ts.map +1 -0
  20. package/dist/lib/agent-guards.js +229 -0
  21. package/dist/lib/agent-guards.js.map +1 -0
  22. package/dist/lib/agent-session.d.ts.map +1 -1
  23. package/dist/lib/agent-session.js +316 -48
  24. package/dist/lib/agent-session.js.map +1 -1
  25. package/dist/lib/gtm-generator.js +3 -1
  26. package/dist/lib/gtm-generator.js.map +1 -1
  27. package/dist/lib/memory-search.d.ts.map +1 -1
  28. package/dist/lib/memory-search.js +0 -8
  29. package/dist/lib/memory-search.js.map +1 -1
  30. package/dist/utils/jfl-paths.d.ts +9 -0
  31. package/dist/utils/jfl-paths.d.ts.map +1 -1
  32. package/dist/utils/jfl-paths.js +13 -0
  33. package/dist/utils/jfl-paths.js.map +1 -1
  34. package/package.json +1 -1
  35. package/packages/pi/dist/index.d.ts.map +1 -1
  36. package/packages/pi/dist/index.js +19 -1
  37. package/packages/pi/dist/index.js.map +1 -1
  38. package/packages/pi/dist/session.d.ts +5 -1
  39. package/packages/pi/dist/session.d.ts.map +1 -1
  40. package/packages/pi/dist/session.js +247 -116
  41. package/packages/pi/dist/session.js.map +1 -1
  42. package/packages/pi/dist/startup-briefing.d.ts.map +1 -1
  43. package/packages/pi/dist/startup-briefing.js +66 -0
  44. package/packages/pi/dist/startup-briefing.js.map +1 -1
  45. package/packages/pi/extensions/index.ts +24 -1
  46. package/packages/pi/extensions/session.ts +256 -96
  47. package/packages/pi/extensions/startup-briefing.ts +69 -0
  48. package/packages/pi/skills/end/SKILL.md +8 -0
  49. package/scripts/postinstall.js +0 -18
  50. package/scripts/session/session-cleanup.sh +19 -6
  51. package/template/.github/workflows/jfl-eval.yml +8 -1
  52. package/template/scripts/session/session-cleanup.sh +23 -8
@@ -92,24 +92,6 @@ function main() {
92
92
 
93
93
  const bunInstalled = hasBun();
94
94
 
95
- if (!bunInstalled) {
96
- console.log("⚠️ Bun runtime not found.");
97
- console.log(" Some JFL tools (like ralph-tui) require Bun.");
98
- console.log("");
99
- console.log(" Install Bun:");
100
- if (platform() === "win32") {
101
- console.log(' powershell -c "irm bun.sh/install.ps1 | iex"');
102
- } else {
103
- console.log(" curl -fsSL https://bun.sh/install | bash");
104
- }
105
- console.log("");
106
- console.log(" Then run: jfl update");
107
- console.log("");
108
- return;
109
- }
110
-
111
- console.log("✅ Bun runtime detected\n");
112
-
113
95
  for (const tool of TOOLS) {
114
96
  if (tool.requiresBun && !bunInstalled) {
115
97
  console.log(`⏭️ Skipping ${tool.name} (requires Bun)`);
@@ -127,15 +127,28 @@ fi
127
127
  echo "Attempting to merge $BRANCH to $WORKING_BRANCH..."
128
128
  cd "$MAIN_REPO"
129
129
 
130
+ # Commit any dirty .jfl/ files that background processes (PP, flow engine) may have written.
131
+ # Without this, git checkout refuses to switch branches when these files differ.
132
+ if ! git diff --quiet 2>/dev/null || ! git diff --cached --quiet 2>/dev/null; then
133
+ echo "Committing background-modified files before checkout..."
134
+ git add -A .jfl/ 2>/dev/null || true
135
+ git diff --cached --quiet 2>/dev/null || git commit -m "session: auto-commit before merge" 2>/dev/null || true
136
+ fi
137
+
130
138
  # Checkout working branch in the main repo
131
139
  if ! git checkout "$WORKING_BRANCH" 2>/dev/null; then
132
- echo "⚠ Could not checkout $WORKING_BRANCH, skipping merge"
133
- echo " Session branch $BRANCH preserved for manual merge"
134
- # Notify jfl-services that session ended
135
- if command -v curl >/dev/null 2>&1; then
136
- curl -s -X DELETE "http://localhost:3401/sessions/$BRANCH" >/dev/null 2>&1 || true
140
+ # Last resort: stash anything remaining and retry
141
+ echo "Checkout blocked by dirty files, stashing..."
142
+ git stash push -m "session-cleanup: auto-stash before merge" 2>/dev/null || true
143
+ if ! git checkout "$WORKING_BRANCH" 2>/dev/null; then
144
+ echo "⚠ Could not checkout $WORKING_BRANCH, skipping merge"
145
+ echo " Session branch $BRANCH preserved for manual merge"
146
+ # Notify jfl-services that session ended
147
+ if command -v curl >/dev/null 2>&1; then
148
+ curl -s -X DELETE "http://localhost:3401/sessions/$BRANCH" >/dev/null 2>&1 || true
149
+ fi
150
+ exit 0
137
151
  fi
138
- exit 0
139
152
  fi
140
153
 
141
154
  # Attempt merge with auto-resolve for .jfl/ conflicts
@@ -513,6 +513,9 @@ jobs:
513
513
  PR_NUMBER=${{ github.event.pull_request.number }}
514
514
  IMPROVED="${{ steps.delta.outputs.improved }}"
515
515
 
516
+ DELTA="${{ steps.delta.outputs.delta }}"
517
+ REGRESSION=$(node -e "console.log(parseFloat('$DELTA') < 0)")
518
+
516
519
  if [ "$IMPROVED" = "true" ]; then
517
520
  # Check if AI review requested changes
518
521
  REVIEW_STATE=$(gh pr view $PR_NUMBER --json reviews --jq '[.reviews[] | select(.author.login == "github-actions")] | last | .state // "NONE"' 2>/dev/null || echo "NONE")
@@ -525,10 +528,14 @@ jobs:
525
528
  gh pr merge $PR_NUMBER --merge --delete-branch \
526
529
  --body "Auto-merged by JFL eval: test_pass_rate improved by ${{ steps.delta.outputs.delta }} (${{ steps.baseline.outputs.score }} → ${{ steps.pr_eval.outputs.score }})"
527
530
  fi
528
- else
531
+ elif [ "$REGRESSION" = "true" ]; then
529
532
  echo "Eval regression — requesting changes on PR #$PR_NUMBER"
530
533
  gh pr review $PR_NUMBER --request-changes \
531
534
  --body "JFL eval regression: test_pass_rate dropped by ${{ steps.delta.outputs.delta }} (${{ steps.baseline.outputs.score }} → ${{ steps.pr_eval.outputs.score }}). Run: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
535
+ else
536
+ echo "Eval neutral (no improvement, no regression) — approving PR #$PR_NUMBER"
537
+ gh pr review $PR_NUMBER --approve \
538
+ --body "JFL eval: no regression (delta=${{ steps.delta.outputs.delta }}, ${{ steps.baseline.outputs.score }} → ${{ steps.pr_eval.outputs.score }}). Manual merge OK."
532
539
  fi
533
540
 
534
541
  - name: Eval Summary
@@ -48,8 +48,10 @@ if [ -f ".auto-merge.pid" ]; then
48
48
  rm -f ".auto-merge.pid"
49
49
  fi
50
50
 
51
- # Context Hub is a persistent daemon do NOT kill it on session end.
52
- # It serves multiple sessions and runtimes (Claude Code, Pi, etc).
51
+ # Context Hub is a DAEMONpersists across sessions. Do NOT kill it here.
52
+ # Killing it before Stop hooks fire causes ECONNREFUSED on all HTTP hooks.
53
+ # The hub has 5-layer resilience (launchd, MCP auto-recovery, SessionStart ensure,
54
+ # self-healing on crash, startup grace period). Only stop via: jfl context-hub stop
53
55
 
54
56
  # Get current session info
55
57
  BRANCH=$(git branch --show-current 2>/dev/null || echo "")
@@ -125,15 +127,28 @@ fi
125
127
  echo "Attempting to merge $BRANCH to $WORKING_BRANCH..."
126
128
  cd "$MAIN_REPO"
127
129
 
130
+ # Commit any dirty .jfl/ files that background processes (PP, flow engine) may have written.
131
+ # Without this, git checkout refuses to switch branches when these files differ.
132
+ if ! git diff --quiet 2>/dev/null || ! git diff --cached --quiet 2>/dev/null; then
133
+ echo "Committing background-modified files before checkout..."
134
+ git add -A .jfl/ 2>/dev/null || true
135
+ git diff --cached --quiet 2>/dev/null || git commit -m "session: auto-commit before merge" 2>/dev/null || true
136
+ fi
137
+
128
138
  # Checkout working branch in the main repo
129
139
  if ! git checkout "$WORKING_BRANCH" 2>/dev/null; then
130
- echo "⚠ Could not checkout $WORKING_BRANCH, skipping merge"
131
- echo " Session branch $BRANCH preserved for manual merge"
132
- # Notify jfl-services that session ended
133
- if command -v curl >/dev/null 2>&1; then
134
- curl -s -X DELETE "http://localhost:3401/sessions/$BRANCH" >/dev/null 2>&1 || true
140
+ # Last resort: stash anything remaining and retry
141
+ echo "Checkout blocked by dirty files, stashing..."
142
+ git stash push -m "session-cleanup: auto-stash before merge" 2>/dev/null || true
143
+ if ! git checkout "$WORKING_BRANCH" 2>/dev/null; then
144
+ echo "⚠ Could not checkout $WORKING_BRANCH, skipping merge"
145
+ echo " Session branch $BRANCH preserved for manual merge"
146
+ # Notify jfl-services that session ended
147
+ if command -v curl >/dev/null 2>&1; then
148
+ curl -s -X DELETE "http://localhost:3401/sessions/$BRANCH" >/dev/null 2>&1 || true
149
+ fi
150
+ exit 0
135
151
  fi
136
- exit 0
137
152
  fi
138
153
 
139
154
  # Attempt merge with auto-resolve for .jfl/ conflicts