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.
- {methodproof-0.8.2 → methodproof-0.8.3}/PKG-INFO +1 -1
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/hooks/claude_code.py +32 -1
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/hooks/claude_code.sh +10 -1
- {methodproof-0.8.2 → methodproof-0.8.3}/pyproject.toml +1 -1
- {methodproof-0.8.2 → methodproof-0.8.3}/.github/workflows/ci.yml +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/.gitignore +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/CHANGELOG.md +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/LICENSE +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/README.md +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/__init__.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/__main__.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/_daemon.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/agents/__init__.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/agents/base.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/agents/music.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/agents/terminal.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/agents/watcher.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/analysis.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/binding.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/bip39.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/bridge.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/cli.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/config.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/crypto.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/e2e.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/graph.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/hook.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/hooks/__init__.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/hooks/cline_hook.sh +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/hooks/codex_hook.sh +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/hooks/gemini_hook.sh +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/hooks/install.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/hooks/kiro_hook.sh +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/hooks/mcp_register.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/hooks/openclaw/HOOK.md +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/hooks/openclaw/handler.ts +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/hooks/openclaw_install.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/hooks/opencode_plugin.js +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/hooks/wrappers.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/integrity.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/kdf.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/keychain.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/live.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/lock.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/mcp.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/migrate_db.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/proxy.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/proxy_daemon.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/repos.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/skills/methodproof/SKILL.md +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/store.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/sync.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/tui/__init__.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/tui/consent.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/tui/init.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/tui/log.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/tui/login_success.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/tui/review.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/tui/start.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/tui/status.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/tui/theme.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/viewer.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/methodproof/wordlist.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/test_windows_compat.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/tests/__init__.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/tests/conftest.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_analysis.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_cli_auth.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_cli_config.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_cli_helpers.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_cli_session.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_cli_share.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_cli_start.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_cli_update.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_e2e_integration.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_graph.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_hooks.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_live.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_openclaw_hooks.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_profiles.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_repos.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_security.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_store.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_sync.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_viewer.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/tests/test_wrappers.py +0 -0
- {methodproof-0.8.2 → methodproof-0.8.3}/uv.lock +0 -0
|
@@ -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
|
-
|
|
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.
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|