methodproof 0.8.2__tar.gz → 0.8.3__tar.gz

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 (87) hide show
  1. {methodproof-0.8.2 → methodproof-0.8.3}/PKG-INFO +1 -1
  2. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/hooks/claude_code.py +32 -1
  3. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/hooks/claude_code.sh +10 -1
  4. {methodproof-0.8.2 → methodproof-0.8.3}/pyproject.toml +1 -1
  5. {methodproof-0.8.2 → methodproof-0.8.3}/.github/workflows/ci.yml +0 -0
  6. {methodproof-0.8.2 → methodproof-0.8.3}/.gitignore +0 -0
  7. {methodproof-0.8.2 → methodproof-0.8.3}/CHANGELOG.md +0 -0
  8. {methodproof-0.8.2 → methodproof-0.8.3}/LICENSE +0 -0
  9. {methodproof-0.8.2 → methodproof-0.8.3}/README.md +0 -0
  10. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/__init__.py +0 -0
  11. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/__main__.py +0 -0
  12. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/_daemon.py +0 -0
  13. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/agents/__init__.py +0 -0
  14. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/agents/base.py +0 -0
  15. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/agents/music.py +0 -0
  16. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/agents/terminal.py +0 -0
  17. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/agents/watcher.py +0 -0
  18. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/analysis.py +0 -0
  19. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/binding.py +0 -0
  20. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/bip39.py +0 -0
  21. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/bridge.py +0 -0
  22. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/cli.py +0 -0
  23. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/config.py +0 -0
  24. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/crypto.py +0 -0
  25. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/e2e.py +0 -0
  26. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/graph.py +0 -0
  27. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/hook.py +0 -0
  28. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/hooks/__init__.py +0 -0
  29. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/hooks/cline_hook.sh +0 -0
  30. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/hooks/codex_hook.sh +0 -0
  31. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/hooks/gemini_hook.sh +0 -0
  32. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/hooks/install.py +0 -0
  33. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/hooks/kiro_hook.sh +0 -0
  34. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/hooks/mcp_register.py +0 -0
  35. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/hooks/openclaw/HOOK.md +0 -0
  36. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/hooks/openclaw/handler.ts +0 -0
  37. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/hooks/openclaw_install.py +0 -0
  38. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/hooks/opencode_plugin.js +0 -0
  39. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/hooks/wrappers.py +0 -0
  40. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/integrity.py +0 -0
  41. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/kdf.py +0 -0
  42. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/keychain.py +0 -0
  43. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/live.py +0 -0
  44. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/lock.py +0 -0
  45. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/mcp.py +0 -0
  46. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/migrate_db.py +0 -0
  47. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/proxy.py +0 -0
  48. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/proxy_daemon.py +0 -0
  49. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/repos.py +0 -0
  50. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/skills/methodproof/SKILL.md +0 -0
  51. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/store.py +0 -0
  52. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/sync.py +0 -0
  53. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/tui/__init__.py +0 -0
  54. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/tui/consent.py +0 -0
  55. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/tui/init.py +0 -0
  56. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/tui/log.py +0 -0
  57. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/tui/login_success.py +0 -0
  58. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/tui/review.py +0 -0
  59. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/tui/start.py +0 -0
  60. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/tui/status.py +0 -0
  61. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/tui/theme.py +0 -0
  62. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/viewer.py +0 -0
  63. {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/wordlist.py +0 -0
  64. {methodproof-0.8.2 → methodproof-0.8.3}/test_windows_compat.py +0 -0
  65. {methodproof-0.8.2 → methodproof-0.8.3}/tests/__init__.py +0 -0
  66. {methodproof-0.8.2 → methodproof-0.8.3}/tests/conftest.py +0 -0
  67. {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_analysis.py +0 -0
  68. {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_cli_auth.py +0 -0
  69. {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_cli_config.py +0 -0
  70. {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_cli_helpers.py +0 -0
  71. {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_cli_session.py +0 -0
  72. {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_cli_share.py +0 -0
  73. {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_cli_start.py +0 -0
  74. {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_cli_update.py +0 -0
  75. {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_e2e_integration.py +0 -0
  76. {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_graph.py +0 -0
  77. {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_hooks.py +0 -0
  78. {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_live.py +0 -0
  79. {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_openclaw_hooks.py +0 -0
  80. {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_profiles.py +0 -0
  81. {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_repos.py +0 -0
  82. {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_security.py +0 -0
  83. {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_store.py +0 -0
  84. {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_sync.py +0 -0
  85. {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_viewer.py +0 -0
  86. {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_wrappers.py +0 -0
  87. {methodproof-0.8.2 → methodproof-0.8.3}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: methodproof
3
- Version: 0.8.2
3
+ Version: 0.8.3
4
4
  Summary: See how you code. Capture and visualize your engineering process.
5
5
  License-Expression: Apache-2.0
6
6
  License-File: LICENSE
@@ -150,6 +150,24 @@ _META_EXTRACTORS = {
150
150
  }
151
151
 
152
152
 
153
+ def _extract_recap(transcript_path: str) -> str | None:
154
+ """Grep transcript for the last ※ recap: line. Journal mode only."""
155
+ import pathlib
156
+ tp = pathlib.Path(transcript_path)
157
+ if not tp.exists():
158
+ return None
159
+ try:
160
+ text = tp.read_text(errors="replace")
161
+ except OSError:
162
+ return None
163
+ last_recap = None
164
+ for line in text.splitlines():
165
+ stripped = line.strip()
166
+ if stripped.startswith("※ recap:") or stripped.startswith("recap:"):
167
+ last_recap = stripped.removeprefix("※ ").removeprefix("recap:").strip()
168
+ return last_recap
169
+
170
+
153
171
  def main() -> None:
154
172
  try:
155
173
  data = json.load(sys.stdin)
@@ -162,7 +180,20 @@ def main() -> None:
162
180
  meta = extractor(data) if extractor else {"tool": _TOOL, "event": event}
163
181
  ts = time.time()
164
182
 
165
- payload = json.dumps({"events": [{"type": etype, "timestamp": ts, "metadata": meta}]}).encode()
183
+ events_out = [{"type": etype, "timestamp": ts, "metadata": meta}]
184
+
185
+ # On Stop, grep transcript for recap (journal mode only)
186
+ transcript_path = data.get("transcript_path", "")
187
+ if event == "Stop" and transcript_path:
188
+ recap = _extract_recap(transcript_path)
189
+ if recap:
190
+ events_out.append({
191
+ "type": "context_recap",
192
+ "timestamp": ts,
193
+ "metadata": {"tool": _TOOL, "recap": recap[:2000]},
194
+ })
195
+
196
+ payload = json.dumps({"events": events_out}).encode()
166
197
  req = urllib.request.Request(
167
198
  "http://localhost:9877/events", data=payload,
168
199
  headers={"Content-Type": "application/json"}, method="POST",
@@ -125,6 +125,15 @@ if command -v jq >/dev/null 2>&1; then
125
125
  Stop)
126
126
  TYPE="agent_turn_end"
127
127
  META='{"tool":"claude_code"}'
128
+ # Extract recap from transcript if available (journal mode)
129
+ TRANSCRIPT=$(echo "$INPUT" | jq -r '.transcript_path // empty' 2>/dev/null)
130
+ if [ -n "$TRANSCRIPT" ] && [ -f "$TRANSCRIPT" ]; then
131
+ RECAP=$(grep -E '※ recap:|^recap:' "$TRANSCRIPT" | tail -1 | sed 's/^.*※ recap: *//;s/^recap: *//' | head -c 2000)
132
+ if [ -n "$RECAP" ]; then
133
+ RECAP_ESCAPED=$(echo "$RECAP" | jq -Rs '.' 2>/dev/null || echo '""')
134
+ RECAP_EVENT=",{\"type\":\"context_recap\",\"timestamp\":$TS,\"metadata\":{\"tool\":\"claude_code\",\"recap\":$RECAP_ESCAPED}}"
135
+ fi
136
+ fi
128
137
  ;;
129
138
  StopFailure)
130
139
  TYPE="agent_turn_error"
@@ -178,7 +187,7 @@ else
178
187
  fi
179
188
 
180
189
  # Post to bridge with strict 1-second timeout (never block Claude Code)
181
- PAYLOAD="{\"events\":[{\"type\":\"$TYPE\",\"timestamp\":$TS,\"metadata\":$META}]}"
190
+ PAYLOAD="{\"events\":[{\"type\":\"$TYPE\",\"timestamp\":$TS,\"metadata\":$META}${RECAP_EVENT:-}]}"
182
191
  RESPONSE=$(curl -s -w "\n%{http_code}" --max-time 1 --connect-timeout 0.5 \
183
192
  -X POST http://localhost:9877/events \
184
193
  -H "Content-Type: application/json" \
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "methodproof"
3
- version = "0.8.2"
3
+ version = "0.8.3"
4
4
  description = "See how you code. Capture and visualize your engineering process."
5
5
  requires-python = ">=3.11"
6
6
  dependencies = ["watchdog>=4.0", "websocket-client>=1.7", "cryptography>=43.0", "keyring>=25.0", "textual>=0.59", "rich>=13.7", "sqlcipher3>=0.6"]
File without changes
File without changes
File without changes
File without changes
File without changes