jfl 0.9.2 → 0.9.4

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 (71) hide show
  1. package/dist/commands/context-hub.d.ts.map +1 -1
  2. package/dist/commands/context-hub.js +23 -1
  3. package/dist/commands/context-hub.js.map +1 -1
  4. package/dist/commands/init.d.ts.map +1 -1
  5. package/dist/commands/init.js +6 -0
  6. package/dist/commands/init.js.map +1 -1
  7. package/dist/commands/peter.d.ts.map +1 -1
  8. package/dist/commands/peter.js +11 -15
  9. package/dist/commands/peter.js.map +1 -1
  10. package/dist/commands/pivot.d.ts.map +1 -1
  11. package/dist/commands/pivot.js +22 -25
  12. package/dist/commands/pivot.js.map +1 -1
  13. package/dist/commands/repair.d.ts.map +1 -1
  14. package/dist/commands/repair.js +26 -0
  15. package/dist/commands/repair.js.map +1 -1
  16. package/dist/commands/session.d.ts.map +1 -1
  17. package/dist/commands/session.js +39 -0
  18. package/dist/commands/session.js.map +1 -1
  19. package/dist/commands/start.d.ts.map +1 -1
  20. package/dist/commands/start.js +60 -0
  21. package/dist/commands/start.js.map +1 -1
  22. package/dist/commands/update.d.ts.map +1 -1
  23. package/dist/commands/update.js +3 -1
  24. package/dist/commands/update.js.map +1 -1
  25. package/dist/lib/agent-session.d.ts.map +1 -1
  26. package/dist/lib/agent-session.js +6 -3
  27. package/dist/lib/agent-session.js.map +1 -1
  28. package/dist/lib/gtm-generator.js +7 -0
  29. package/dist/lib/gtm-generator.js.map +1 -1
  30. package/dist/lib/memory-db.d.ts +8 -0
  31. package/dist/lib/memory-db.d.ts.map +1 -1
  32. package/dist/lib/memory-db.js +24 -0
  33. package/dist/lib/memory-db.js.map +1 -1
  34. package/dist/lib/memory-indexer.d.ts +8 -0
  35. package/dist/lib/memory-indexer.d.ts.map +1 -1
  36. package/dist/lib/memory-indexer.js +30 -1
  37. package/dist/lib/memory-indexer.js.map +1 -1
  38. package/dist/lib/memory-search.d.ts.map +1 -1
  39. package/dist/lib/memory-search.js +2 -7
  40. package/dist/lib/memory-search.js.map +1 -1
  41. package/dist/lib/service-detector.js +2 -2
  42. package/dist/lib/service-detector.js.map +1 -1
  43. package/dist/lib/telemetry/physical-world-collector.js +1 -1
  44. package/dist/lib/telemetry/physical-world-collector.js.map +1 -1
  45. package/dist/utils/git.d.ts +1 -1
  46. package/dist/utils/git.d.ts.map +1 -1
  47. package/dist/utils/git.js +9 -6
  48. package/dist/utils/git.js.map +1 -1
  49. package/dist/utils/provenance.d.ts +65 -0
  50. package/dist/utils/provenance.d.ts.map +1 -0
  51. package/dist/utils/provenance.js +213 -0
  52. package/dist/utils/provenance.js.map +1 -0
  53. package/package.json +1 -1
  54. package/packages/pi/extensions/context.ts +11 -0
  55. package/packages/pi/extensions/header.ts +171 -0
  56. package/packages/pi/extensions/hud-tool.ts +1 -1
  57. package/packages/pi/extensions/index.ts +43 -3
  58. package/packages/pi/extensions/memory-tool.ts +3 -3
  59. package/packages/pi/extensions/onboarding-v2.ts +70 -185
  60. package/packages/pi/extensions/onboarding-v3.ts +32 -21
  61. package/packages/pi/extensions/service-skills.ts +6 -1
  62. package/packages/pi/extensions/session.ts +7 -1
  63. package/packages/pi/extensions/startup-briefing.ts +313 -0
  64. package/packages/pi/extensions/subway-mesh.ts +893 -0
  65. package/packages/pi/extensions/types.ts +1 -0
  66. package/packages/pi/package.json +1 -0
  67. package/scripts/pp-branch-pr.sh +24 -6
  68. package/scripts/pp-branch-pr.sh.bak +115 -0
  69. package/template/.pi/settings.json +2 -0
  70. package/template/CLAUDE.md +82 -1738
  71. package/template/CLAUDE.md.bak +0 -1187
@@ -74,6 +74,7 @@ export interface PiContext {
74
74
  setWidget(id: string, content: string[] | WidgetFactory | undefined, opts?: { placement?: "aboveEditor" | "belowEditor" }): void
75
75
  setStatus(key: string, text: string | undefined): void
76
76
  setFooter(factory: ((tui: any, theme: PiTheme, footerData: any) => any) | undefined): void
77
+ setHeader?(factory: ((tui: any, theme: PiTheme) => { render: (width: number) => string[]; invalidate: () => void }) | undefined): void
77
78
  setEditorText(text: string): void
78
79
  theme: PiTheme
79
80
  hasUI: boolean
@@ -29,6 +29,7 @@
29
29
  ],
30
30
  "dependencies": {
31
31
  "axios": "^1.13.4",
32
+ "ws": "^8.19.0",
32
33
  "yaml": "^2.8.2"
33
34
  },
34
35
  "devDependencies": {
@@ -43,15 +43,33 @@ if git diff --quiet HEAD && [ -z "$(git ls-files --others --exclude-standard)" ]
43
43
  exit 0
44
44
  fi
45
45
 
46
- # 4. Commit
46
+ # 4. Commit with provenance signing
47
47
  git add -A
48
- COMMIT_MSG="fix(pp): ${TASK}
49
48
 
50
- Agent: peter-parker
51
- Branch: ${BRANCH_NAME}
52
- Auto-generated by JFL self-driving loop
49
+ AGENT_ID="peter-parker"
50
+ AGENT_SESSION="${BRANCH_NAME}"
51
+ AGENT_TIMESTAMP="$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
52
+
53
+ # Compute provenance hash from staged diff + agent identity
54
+ PROVENANCE_KEY_PATH=".jfl/provenance-key"
55
+ if [ ! -f "${PROVENANCE_KEY_PATH}" ]; then
56
+ mkdir -p .jfl
57
+ openssl rand -hex 32 > "${PROVENANCE_KEY_PATH}"
58
+ chmod 600 "${PROVENANCE_KEY_PATH}"
59
+ fi
60
+ PROVENANCE_KEY=$(cat "${PROVENANCE_KEY_PATH}")
61
+ STAGED_DIFF=$(git diff --cached)
62
+ PROVENANCE_PAYLOAD="${AGENT_ID}
63
+ ${AGENT_TIMESTAMP}
64
+ ${STAGED_DIFF}"
65
+ PROVENANCE_HASH="sha256:$(printf '%s' "${PROVENANCE_PAYLOAD}" | openssl dgst -sha256 -hmac "${PROVENANCE_KEY}" | awk '{print $NF}')"
66
+
67
+ COMMIT_MSG="fix(pp): ${TASK}
53
68
 
54
- Co-authored-by: Peter Parker <pp@jfl.dev>"
69
+ Agent-Id: ${AGENT_ID}
70
+ Agent-Session: ${AGENT_SESSION}
71
+ Provenance-Hash: ${PROVENANCE_HASH}
72
+ Agent-Timestamp: ${AGENT_TIMESTAMP}"
55
73
 
56
74
  git commit -m "${COMMIT_MSG}"
57
75
 
@@ -0,0 +1,115 @@
1
+ #!/bin/bash
2
+ # scripts/pp-branch-pr.sh
3
+ #
4
+ # Wraps Peter Parker agent execution in git branch + PR workflow.
5
+ # Creates a branch, runs the agent, commits changes, opens a PR,
6
+ # and posts a pr:created event to the hub.
7
+ #
8
+ # Called by flow engine spawn action or directly.
9
+ #
10
+ # Usage: pp-branch-pr.sh <task-description> [hub-url] [hub-token]
11
+
12
+ set -euo pipefail
13
+
14
+ TASK="${1:?Usage: pp-branch-pr.sh <task-description> [hub-url] [hub-token]}"
15
+ HUB_URL="${2:-}"
16
+ HUB_TOKEN="${3:-}"
17
+ BRANCH_NAME="pp/fix-$(date +%s)"
18
+ BASE_BRANCH="main"
19
+
20
+ if [ -z "$HUB_URL" ] && [ -f ".jfl/context-hub.port" ]; then
21
+ PORT=$(cat .jfl/context-hub.port)
22
+ HUB_URL="http://localhost:${PORT}"
23
+ fi
24
+ if [ -z "$HUB_TOKEN" ] && [ -f ".jfl/context-hub.token" ]; then
25
+ HUB_TOKEN=$(cat .jfl/context-hub.token)
26
+ fi
27
+
28
+ echo "PP: Creating branch ${BRANCH_NAME}"
29
+
30
+ # 1. Create branch from clean main
31
+ git fetch origin "${BASE_BRANCH}" 2>/dev/null || true
32
+ git checkout -b "${BRANCH_NAME}" "origin/${BASE_BRANCH}" 2>/dev/null || git checkout -b "${BRANCH_NAME}" "${BASE_BRANCH}"
33
+
34
+ # 2. Run Peter Parker
35
+ echo "PP: Running agent on task: ${TASK}"
36
+ jfl peter run --task "${TASK}"
37
+
38
+ # 3. Check if anything changed
39
+ if git diff --quiet HEAD && [ -z "$(git ls-files --others --exclude-standard)" ]; then
40
+ echo "PP: No changes made, cleaning up"
41
+ git checkout "${BASE_BRANCH}" 2>/dev/null || true
42
+ git branch -D "${BRANCH_NAME}" 2>/dev/null || true
43
+ exit 0
44
+ fi
45
+
46
+ # 4. Commit
47
+ git add -A
48
+ COMMIT_MSG="fix(pp): ${TASK}
49
+
50
+ Agent: peter-parker
51
+ Branch: ${BRANCH_NAME}
52
+ Auto-generated by JFL self-driving loop
53
+
54
+ Co-authored-by: Peter Parker <pp@jfl.dev>"
55
+
56
+ git commit -m "${COMMIT_MSG}"
57
+
58
+ # 5. Push
59
+ git push -u origin "${BRANCH_NAME}"
60
+
61
+ # 6. Create PR
62
+ PR_TITLE="PP: $(echo "${TASK}" | head -c 60)"
63
+ PR_BODY="## Auto-generated by Peter Parker
64
+
65
+ **Task:** ${TASK}
66
+ **Branch:** \`${BRANCH_NAME}\`
67
+
68
+ ### Eval Suite
69
+ This PR will be evaluated by the CI eval suite.
70
+ Auto-merge will trigger if eval score improves over baseline.
71
+
72
+ ---
73
+ *Generated by JFL self-driving loop*"
74
+
75
+ PR_URL=$(gh pr create \
76
+ --title "${PR_TITLE}" \
77
+ --body "${PR_BODY}" \
78
+ --base "${BASE_BRANCH}" \
79
+ --head "${BRANCH_NAME}" \
80
+ --label "pp-generated" 2>&1) || {
81
+ echo "PP: Label may not exist, retrying without label"
82
+ PR_URL=$(gh pr create \
83
+ --title "${PR_TITLE}" \
84
+ --body "${PR_BODY}" \
85
+ --base "${BASE_BRANCH}" \
86
+ --head "${BRANCH_NAME}" 2>&1)
87
+ }
88
+
89
+ echo "PP: PR created at ${PR_URL}"
90
+
91
+ # 7. Post event to hub
92
+ if [ -n "${HUB_URL}" ]; then
93
+ TASK_JSON=$(printf '%s' "${TASK}" | python3 -c 'import sys,json; print(json.dumps(sys.stdin.read().strip()))')
94
+
95
+ CURL_ARGS=(-s -X POST "${HUB_URL}/api/events" -H "Content-Type: application/json")
96
+ if [ -n "${HUB_TOKEN}" ]; then
97
+ CURL_ARGS+=(-H "Authorization: Bearer ${HUB_TOKEN}")
98
+ fi
99
+ CURL_ARGS+=(-d "{
100
+ \"type\": \"pr:created\",
101
+ \"source\": \"peter-parker\",
102
+ \"data\": {
103
+ \"task\": ${TASK_JSON},
104
+ \"pr_url\": \"${PR_URL}\",
105
+ \"branch\": \"${BRANCH_NAME}\"
106
+ }
107
+ }")
108
+
109
+ curl "${CURL_ARGS[@]}" 2>/dev/null || echo "PP: Warning - could not post event to hub"
110
+ fi
111
+
112
+ # 8. Return to base branch
113
+ git checkout "${BASE_BRANCH}" 2>/dev/null || true
114
+
115
+ echo "PP: Done"
@@ -0,0 +1,2 @@
1
+ {
2
+ }