jfl 0.2.4 → 0.3.0
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/README.md +16 -0
- package/dist/commands/agent.d.ts +7 -0
- package/dist/commands/agent.d.ts.map +1 -0
- package/dist/commands/agent.js +170 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/context-hub.d.ts.map +1 -1
- package/dist/commands/context-hub.js +274 -27
- package/dist/commands/context-hub.js.map +1 -1
- package/dist/commands/digest.d.ts.map +1 -1
- package/dist/commands/digest.js +45 -0
- package/dist/commands/digest.js.map +1 -1
- package/dist/commands/doctor.d.ts +7 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +236 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/eval.d.ts +6 -0
- package/dist/commands/eval.d.ts.map +1 -0
- package/dist/commands/eval.js +236 -0
- package/dist/commands/eval.js.map +1 -0
- package/dist/commands/hooks.d.ts +2 -0
- package/dist/commands/hooks.d.ts.map +1 -1
- package/dist/commands/hooks.js +1 -0
- package/dist/commands/hooks.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +230 -145
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/portfolio.d.ts +6 -0
- package/dist/commands/portfolio.d.ts.map +1 -0
- package/dist/commands/portfolio.js +296 -0
- package/dist/commands/portfolio.js.map +1 -0
- package/dist/commands/scope.d.ts +1 -0
- package/dist/commands/scope.d.ts.map +1 -1
- package/dist/commands/scope.js +189 -2
- package/dist/commands/scope.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +6 -0
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/voice.js.map +1 -1
- package/dist/dashboard/components.d.ts +1 -1
- package/dist/dashboard/components.d.ts.map +1 -1
- package/dist/dashboard/components.js +418 -6
- package/dist/dashboard/components.js.map +1 -1
- package/dist/dashboard/index.d.ts.map +1 -1
- package/dist/dashboard/index.js +32 -5
- package/dist/dashboard/index.js.map +1 -1
- package/dist/dashboard/pages.d.ts +1 -1
- package/dist/dashboard/pages.d.ts.map +1 -1
- package/dist/dashboard/pages.js +961 -123
- package/dist/dashboard/pages.js.map +1 -1
- package/dist/dashboard/styles.d.ts +1 -1
- package/dist/dashboard/styles.d.ts.map +1 -1
- package/dist/dashboard/styles.js +701 -88
- package/dist/dashboard/styles.js.map +1 -1
- package/dist/index.js +88 -45
- package/dist/index.js.map +1 -1
- package/dist/lib/agent-manifest.d.ts +35 -0
- package/dist/lib/agent-manifest.d.ts.map +1 -0
- package/dist/lib/agent-manifest.js +75 -0
- package/dist/lib/agent-manifest.js.map +1 -0
- package/dist/lib/eval-store.d.ts +15 -0
- package/dist/lib/eval-store.d.ts.map +1 -0
- package/dist/lib/eval-store.js +179 -0
- package/dist/lib/eval-store.js.map +1 -0
- package/dist/lib/flow-engine.d.ts +12 -0
- package/dist/lib/flow-engine.d.ts.map +1 -1
- package/dist/lib/flow-engine.js +181 -4
- package/dist/lib/flow-engine.js.map +1 -1
- package/dist/lib/kuva.d.ts +45 -0
- package/dist/lib/kuva.d.ts.map +1 -0
- package/dist/lib/kuva.js +131 -0
- package/dist/lib/kuva.js.map +1 -0
- package/dist/lib/service-gtm.d.ts +10 -1
- package/dist/lib/service-gtm.d.ts.map +1 -1
- package/dist/lib/service-gtm.js +35 -2
- package/dist/lib/service-gtm.js.map +1 -1
- package/dist/lib/trajectory-loader.d.ts +82 -0
- package/dist/lib/trajectory-loader.d.ts.map +1 -0
- package/dist/lib/trajectory-loader.js +406 -0
- package/dist/lib/trajectory-loader.js.map +1 -0
- package/dist/mcp/context-hub-mcp.js +60 -0
- package/dist/mcp/context-hub-mcp.js.map +1 -1
- package/dist/types/eval.d.ts +18 -0
- package/dist/types/eval.d.ts.map +1 -0
- package/dist/types/eval.js +5 -0
- package/dist/types/eval.js.map +1 -0
- package/dist/types/flows.d.ts +7 -0
- package/dist/types/flows.d.ts.map +1 -1
- package/dist/types/journal.d.ts +133 -0
- package/dist/types/journal.d.ts.map +1 -0
- package/dist/types/journal.js +59 -0
- package/dist/types/journal.js.map +1 -0
- package/dist/types/map.d.ts +1 -1
- package/dist/types/map.d.ts.map +1 -1
- package/dist/types/map.js.map +1 -1
- package/dist/ui/service-dashboard.js.map +1 -1
- package/dist/utils/wallet.js.map +1 -1
- package/package.json +1 -1
- package/scripts/migrate-to-branch-sessions.sh +201 -0
- package/scripts/session/fix-tracked-logs.sh +97 -0
- package/scripts/session/session-cleanup.sh +28 -10
- package/scripts/session/session-end.sh +0 -10
- package/scripts/session/session-init.sh +0 -16
- package/template/THEORY.md +26 -0
- package/template/scripts/session/session-cleanup.sh +28 -10
- package/template/scripts/session/session-sync.sh +10 -0
|
@@ -155,12 +155,21 @@ if [ $MERGE_STATUS -eq 0 ]; then
|
|
|
155
155
|
# Push to origin
|
|
156
156
|
git push origin "$WORKING_BRANCH" 2>/dev/null || echo "⚠ Push failed - run manually: git push origin $WORKING_BRANCH"
|
|
157
157
|
|
|
158
|
-
# Remove worktree if it exists
|
|
159
|
-
|
|
158
|
+
# Remove worktree if it exists (NEVER remove the main repo)
|
|
159
|
+
MAIN_TOPLEVEL=$(git rev-parse --show-toplevel 2>/dev/null)
|
|
160
|
+
WORKTREE_PATH=$(git worktree list | grep "$BRANCH" | grep -v "(bare)" | awk '{print $1}' | head -1)
|
|
160
161
|
if [ -n "$WORKTREE_PATH" ] && [ -d "$WORKTREE_PATH" ]; then
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
162
|
+
WORKTREE_REAL=$(cd "$WORKTREE_PATH" && pwd -P)
|
|
163
|
+
MAIN_REAL=$(cd "$MAIN_TOPLEVEL" && pwd -P)
|
|
164
|
+
if [ "$WORKTREE_REAL" = "$MAIN_REAL" ]; then
|
|
165
|
+
echo "⚠ SAFETY: refusing to rm -rf main repo at $WORKTREE_PATH"
|
|
166
|
+
elif [ "$WORKTREE_REAL" = "$HOME" ] || [ "$WORKTREE_REAL" = "/" ]; then
|
|
167
|
+
echo "⚠ SAFETY: refusing to rm -rf protected path $WORKTREE_PATH"
|
|
168
|
+
else
|
|
169
|
+
echo "Removing worktree at $WORKTREE_PATH..."
|
|
170
|
+
git worktree remove "$WORKTREE_PATH" --force 2>/dev/null || true
|
|
171
|
+
git worktree prune 2>/dev/null || true
|
|
172
|
+
fi
|
|
164
173
|
fi
|
|
165
174
|
|
|
166
175
|
# Delete the branch
|
|
@@ -227,12 +236,21 @@ else
|
|
|
227
236
|
# Push to origin
|
|
228
237
|
git push origin "$WORKING_BRANCH" 2>/dev/null || echo "⚠ Push failed - run manually: git push origin $WORKING_BRANCH"
|
|
229
238
|
|
|
230
|
-
# Remove worktree
|
|
231
|
-
|
|
239
|
+
# Remove worktree if it exists (NEVER remove the main repo)
|
|
240
|
+
MAIN_TOPLEVEL=$(git rev-parse --show-toplevel 2>/dev/null)
|
|
241
|
+
WORKTREE_PATH=$(git worktree list | grep "$BRANCH" | grep -v "(bare)" | awk '{print $1}' | head -1)
|
|
232
242
|
if [ -n "$WORKTREE_PATH" ] && [ -d "$WORKTREE_PATH" ]; then
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
243
|
+
WORKTREE_REAL=$(cd "$WORKTREE_PATH" && pwd -P)
|
|
244
|
+
MAIN_REAL=$(cd "$MAIN_TOPLEVEL" && pwd -P)
|
|
245
|
+
if [ "$WORKTREE_REAL" = "$MAIN_REAL" ]; then
|
|
246
|
+
echo "⚠ SAFETY: refusing to rm -rf main repo at $WORKTREE_PATH"
|
|
247
|
+
elif [ "$WORKTREE_REAL" = "$HOME" ] || [ "$WORKTREE_REAL" = "/" ]; then
|
|
248
|
+
echo "⚠ SAFETY: refusing to rm -rf protected path $WORKTREE_PATH"
|
|
249
|
+
else
|
|
250
|
+
echo "Removing worktree at $WORKTREE_PATH..."
|
|
251
|
+
git worktree remove "$WORKTREE_PATH" --force 2>/dev/null || true
|
|
252
|
+
git worktree prune 2>/dev/null || true
|
|
253
|
+
fi
|
|
236
254
|
fi
|
|
237
255
|
|
|
238
256
|
# Delete the branch
|
|
@@ -20,8 +20,6 @@ YELLOW='\033[1;33m'
|
|
|
20
20
|
BLUE='\033[0;34m'
|
|
21
21
|
NC='\033[0m'
|
|
22
22
|
|
|
23
|
-
END_START_TIME=$(date +%s)
|
|
24
|
-
|
|
25
23
|
FORCE=false
|
|
26
24
|
while [[ $# -gt 0 ]]; do
|
|
27
25
|
case $1 in
|
|
@@ -190,14 +188,6 @@ else
|
|
|
190
188
|
# Clean up session file
|
|
191
189
|
rm -f "$SESSION_FILE"
|
|
192
190
|
|
|
193
|
-
# Track session end telemetry (fire-and-forget)
|
|
194
|
-
END_DURATION=$(( $(date +%s) - END_START_TIME ))
|
|
195
|
-
jfl telemetry track \
|
|
196
|
-
--category session \
|
|
197
|
-
--event "hook:session_end" \
|
|
198
|
-
--duration "${END_DURATION}000" \
|
|
199
|
-
--success true 2>/dev/null &
|
|
200
|
-
|
|
201
191
|
echo ""
|
|
202
192
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
203
193
|
echo -e " ${GREEN}Session ended successfully!${NC}"
|
|
@@ -15,7 +15,6 @@ set -e
|
|
|
15
15
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
16
16
|
REPO_DIR="${JFL_REPO_DIR:-$(pwd)}"
|
|
17
17
|
WORKTREES_DIR="$REPO_DIR/worktrees"
|
|
18
|
-
INIT_START_TIME=$(date +%s)
|
|
19
18
|
|
|
20
19
|
cd "$REPO_DIR" || exit 1
|
|
21
20
|
|
|
@@ -158,10 +157,6 @@ if [[ -d "$WORKTREES_DIR" ]]; then
|
|
|
158
157
|
done
|
|
159
158
|
echo ""
|
|
160
159
|
echo -e "${GREEN}✓${NC} All changes saved. Continuing..."
|
|
161
|
-
jfl telemetry track \
|
|
162
|
-
--category session \
|
|
163
|
-
--event "hook:crash_recovery" \
|
|
164
|
-
--success true 2>/dev/null &
|
|
165
160
|
;;
|
|
166
161
|
2)
|
|
167
162
|
echo ""
|
|
@@ -353,14 +348,3 @@ if [[ "$use_worktree" != "true" ]]; then
|
|
|
353
348
|
echo -e "${GREEN}✓${NC} Session ready on branch: $session_name"
|
|
354
349
|
echo ""
|
|
355
350
|
fi
|
|
356
|
-
|
|
357
|
-
# ==============================================================================
|
|
358
|
-
# Step 4: Track session init telemetry (fire-and-forget)
|
|
359
|
-
# ==============================================================================
|
|
360
|
-
|
|
361
|
-
INIT_DURATION=$(( $(date +%s) - INIT_START_TIME ))
|
|
362
|
-
jfl telemetry track \
|
|
363
|
-
--category session \
|
|
364
|
-
--event "hook:session_init" \
|
|
365
|
-
--duration "${INIT_DURATION}000" \
|
|
366
|
-
--success true 2>/dev/null &
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Theory — {agent-name}
|
|
2
|
+
|
|
3
|
+
## Current Hypothesis
|
|
4
|
+
|
|
5
|
+
{What do you believe is true about your approach? Why should it work? What's the core insight?}
|
|
6
|
+
|
|
7
|
+
## Approach
|
|
8
|
+
|
|
9
|
+
{How are you executing on the hypothesis? What's the method?}
|
|
10
|
+
|
|
11
|
+
## Predictions (specific, falsifiable)
|
|
12
|
+
|
|
13
|
+
| # | Prediction | Metric | Target | By |
|
|
14
|
+
|---|-----------|--------|--------|-----|
|
|
15
|
+
| P1 | {specific claim} | {metric name} | {threshold} | {version or date} |
|
|
16
|
+
| P2 | {specific claim} | {metric name} | {threshold} | {version or date} |
|
|
17
|
+
|
|
18
|
+
## Evidence
|
|
19
|
+
|
|
20
|
+
| Date | Prediction | Actual | Delta | Verdict |
|
|
21
|
+
|------|-----------|--------|-------|---------|
|
|
22
|
+
| | | | | |
|
|
23
|
+
|
|
24
|
+
## Revisions
|
|
25
|
+
|
|
26
|
+
{When evidence contradicts predictions, document what changed and why.}
|
|
@@ -155,12 +155,21 @@ if [ $MERGE_STATUS -eq 0 ]; then
|
|
|
155
155
|
# Push to origin
|
|
156
156
|
git push origin "$WORKING_BRANCH" 2>/dev/null || echo "⚠ Push failed - run manually: git push origin $WORKING_BRANCH"
|
|
157
157
|
|
|
158
|
-
# Remove worktree if it exists
|
|
159
|
-
|
|
158
|
+
# Remove worktree if it exists (NEVER remove the main repo)
|
|
159
|
+
MAIN_TOPLEVEL=$(git rev-parse --show-toplevel 2>/dev/null)
|
|
160
|
+
WORKTREE_PATH=$(git worktree list | grep "$BRANCH" | grep -v "(bare)" | awk '{print $1}' | head -1)
|
|
160
161
|
if [ -n "$WORKTREE_PATH" ] && [ -d "$WORKTREE_PATH" ]; then
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
162
|
+
WORKTREE_REAL=$(cd "$WORKTREE_PATH" && pwd -P)
|
|
163
|
+
MAIN_REAL=$(cd "$MAIN_TOPLEVEL" && pwd -P)
|
|
164
|
+
if [ "$WORKTREE_REAL" = "$MAIN_REAL" ]; then
|
|
165
|
+
echo "⚠ SAFETY: refusing to rm -rf main repo at $WORKTREE_PATH"
|
|
166
|
+
elif [ "$WORKTREE_REAL" = "$HOME" ] || [ "$WORKTREE_REAL" = "/" ]; then
|
|
167
|
+
echo "⚠ SAFETY: refusing to rm -rf protected path $WORKTREE_PATH"
|
|
168
|
+
else
|
|
169
|
+
echo "Removing worktree at $WORKTREE_PATH..."
|
|
170
|
+
git worktree remove "$WORKTREE_PATH" --force 2>/dev/null || true
|
|
171
|
+
git worktree prune 2>/dev/null || true
|
|
172
|
+
fi
|
|
164
173
|
fi
|
|
165
174
|
|
|
166
175
|
# Delete the branch
|
|
@@ -227,12 +236,21 @@ else
|
|
|
227
236
|
# Push to origin
|
|
228
237
|
git push origin "$WORKING_BRANCH" 2>/dev/null || echo "⚠ Push failed - run manually: git push origin $WORKING_BRANCH"
|
|
229
238
|
|
|
230
|
-
# Remove worktree
|
|
231
|
-
|
|
239
|
+
# Remove worktree if it exists (NEVER remove the main repo)
|
|
240
|
+
MAIN_TOPLEVEL=$(git rev-parse --show-toplevel 2>/dev/null)
|
|
241
|
+
WORKTREE_PATH=$(git worktree list | grep "$BRANCH" | grep -v "(bare)" | awk '{print $1}' | head -1)
|
|
232
242
|
if [ -n "$WORKTREE_PATH" ] && [ -d "$WORKTREE_PATH" ]; then
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
243
|
+
WORKTREE_REAL=$(cd "$WORKTREE_PATH" && pwd -P)
|
|
244
|
+
MAIN_REAL=$(cd "$MAIN_TOPLEVEL" && pwd -P)
|
|
245
|
+
if [ "$WORKTREE_REAL" = "$MAIN_REAL" ]; then
|
|
246
|
+
echo "⚠ SAFETY: refusing to rm -rf main repo at $WORKTREE_PATH"
|
|
247
|
+
elif [ "$WORKTREE_REAL" = "$HOME" ] || [ "$WORKTREE_REAL" = "/" ]; then
|
|
248
|
+
echo "⚠ SAFETY: refusing to rm -rf protected path $WORKTREE_PATH"
|
|
249
|
+
else
|
|
250
|
+
echo "Removing worktree at $WORKTREE_PATH..."
|
|
251
|
+
git worktree remove "$WORKTREE_PATH" --force 2>/dev/null || true
|
|
252
|
+
git worktree prune 2>/dev/null || true
|
|
253
|
+
fi
|
|
236
254
|
fi
|
|
237
255
|
|
|
238
256
|
# Delete the branch
|
|
@@ -154,6 +154,16 @@ echo "--- Syncing submodules ---"
|
|
|
154
154
|
cd "$GTM_ROOT"
|
|
155
155
|
git submodule update --init --recursive 2>/dev/null || true
|
|
156
156
|
|
|
157
|
+
# Ensure jfl CLI and template files are up to date (at most once per 24h)
|
|
158
|
+
echo ""
|
|
159
|
+
echo "--- Checking jfl version ---"
|
|
160
|
+
cd "$GTM_ROOT"
|
|
161
|
+
if command -v jfl &>/dev/null; then
|
|
162
|
+
jfl update --auto 2>/dev/null && echo -e "${GREEN}jfl is up to date${NC}" || echo -e "${YELLOW}WARNING: jfl update check failed (offline?)${NC}"
|
|
163
|
+
else
|
|
164
|
+
echo -e "${YELLOW}WARNING: jfl not found in PATH${NC}"
|
|
165
|
+
fi
|
|
166
|
+
|
|
157
167
|
# Final status
|
|
158
168
|
echo ""
|
|
159
169
|
echo "========================================"
|