diff --git a/docs/assets/code-recall-activity.svg b/docs/assets/code-recall-activity.svg index a84e584..dd22b4e 100644 --- a/docs/assets/code-recall-activity.svg +++ b/docs/assets/code-recall-activity.svg @@ -19,220 +19,220 @@ font-weight: 700; } - .terminal-1617617326-matrix { + .terminal-974709168-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-1617617326-title { + .terminal-974709168-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-1617617326-r1 { fill: #c5c8c6 } -.terminal-1617617326-r2 { fill: #a0a0a0;font-weight: bold } -.terminal-1617617326-r3 { fill: #a0a0a0 } -.terminal-1617617326-r4 { fill: #121212 } -.terminal-1617617326-r5 { fill: #656565 } -.terminal-1617617326-r6 { fill: #e0e0e0 } -.terminal-1617617326-r7 { fill: #c9c9c9 } -.terminal-1617617326-r8 { fill: #494949 } -.terminal-1617617326-r9 { fill: #6f6f6f } -.terminal-1617617326-r10 { fill: #e0e0e0;font-weight: bold } -.terminal-1617617326-r11 { fill: #b9b9b9 } -.terminal-1617617326-r12 { fill: #acacac } -.terminal-1617617326-r13 { fill: #c3c3c3 } -.terminal-1617617326-r14 { fill: #3b3b3b } -.terminal-1617617326-r15 { fill: #9e9e9e } -.terminal-1617617326-r16 { fill: #a4a4a4 } -.terminal-1617617326-r17 { fill: #b0b0b0;font-weight: bold } -.terminal-1617617326-r18 { fill: #515151 } + .terminal-974709168-r1 { fill: #c5c8c6 } +.terminal-974709168-r2 { fill: #a0a0a0;font-weight: bold } +.terminal-974709168-r3 { fill: #a0a0a0 } +.terminal-974709168-r4 { fill: #121212 } +.terminal-974709168-r5 { fill: #656565 } +.terminal-974709168-r6 { fill: #e0e0e0 } +.terminal-974709168-r7 { fill: #c9c9c9 } +.terminal-974709168-r8 { fill: #494949 } +.terminal-974709168-r9 { fill: #6f6f6f } +.terminal-974709168-r10 { fill: #e0e0e0;font-weight: bold } +.terminal-974709168-r11 { fill: #b9b9b9 } +.terminal-974709168-r12 { fill: #acacac } +.terminal-974709168-r13 { fill: #c3c3c3 } +.terminal-974709168-r14 { fill: #3b3b3b } +.terminal-974709168-r15 { fill: #9e9e9e } +.terminal-974709168-r16 { fill: #a4a4a4 } +.terminal-974709168-r17 { fill: #b0b0b0;font-weight: bold } +.terminal-974709168-r18 { fill: #515151 } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - code-recall v0.2.4 + code-recall v0.2.5 - + - - code-recall v0.2.4  8 sessions indexed | Claude 4, Codex 4 | latest 2026-05-18 -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -stripe webhook signature -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -Scope: All providers   Mode: hybrid   Visible:Claude 1Codex 1p provider  f filters  ? help  Ctrl+K commands - -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -2 of 2 results for "stripe webhook signature" in all providers -Fix Stripe webhook signature verification - 1ClaudeFix Stripe webhook signature verificationSession: Claude Code · Project: -strong 100%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·/Users/demo/Projects/payments-api · Activity: 2026-05-18 -2026-05-18 · 23 msgs · 535.2KB · claude-sonnet-41 Overview   2 Why   3 Activity   4 Related   5 Ai -why: matched text: Fix **Stripe** **webhook** **signature** verification   3 files · -2 cmdsFiles touched -src/webhooks/stripe.ts - 2CodexDebug checkout webhook retry handlingsrc/routes/webhooks.ts -weak 0%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·tests/webhooks/stripe-signature.test.ts -2026-05-18 · 23 msgs · 523.4KB · gpt-5.1-codex -why: matched text: Debug checkout **webhook** retry handling   3 files · 2 cmdsCommands run -pnpm test tests/webhooks/stripe-signature.test.ts -stripe listen --forward-to localhost:3000/api/webhooks/stripe - - - - - - - - - - - - - - - - - - - - - esc Close/Quit  ^o Settings ^k palette + + code-recall v0.2.5  8 sessions indexed | Claude 4, Codex 4 | latest 2026-05-18 +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +stripe webhook signature +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +Scope: All providers   Mode: hybrid   Visible:Claude 1Codex 1p provider  f filters  ? help  Ctrl+K commands + +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +2 of 2 results for "stripe webhook signature" in all providers +Fix Stripe webhook signature verification + 1ClaudeFix Stripe webhook signature verificationSession: Claude Code · Project: +strong 100%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·/Users/demo/Projects/payments-api · Activity: 2026-05-18 +2026-05-18 · 23 msgs · 535.2KB · claude-sonnet-41 Overview   2 Why   3 Activity   4 Related   5 Ai +why: matched text: Fix **Stripe** **webhook** **signature** verification   3 files · +2 cmdsFiles touched +src/webhooks/stripe.ts + 2CodexDebug checkout webhook retry handlingsrc/routes/webhooks.ts +weak 0%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·tests/webhooks/stripe-signature.test.ts +2026-05-18 · 23 msgs · 523.4KB · gpt-5.1-codex +why: matched text: Debug checkout **webhook** retry handling   3 files · 2 cmdsCommands run +pnpm test tests/webhooks/stripe-signature.test.ts +stripe listen --forward-to localhost:3000/api/webhooks/stripe + + + + + + + + + + + + + + + + + + + + + esc Close/Quit  ^o Settings ^k palette diff --git a/docs/assets/code-recall-ai-chat.svg b/docs/assets/code-recall-ai-chat.svg index ec83adc..024cc8b 100644 --- a/docs/assets/code-recall-ai-chat.svg +++ b/docs/assets/code-recall-ai-chat.svg @@ -19,222 +19,222 @@ font-weight: 700; } - .terminal-2453408022-matrix { + .terminal-2194147608-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-2453408022-title { + .terminal-2194147608-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-2453408022-r1 { fill: #c5c8c6 } -.terminal-2453408022-r2 { fill: #a0a0a0;font-weight: bold } -.terminal-2453408022-r3 { fill: #a0a0a0 } -.terminal-2453408022-r4 { fill: #121212 } -.terminal-2453408022-r5 { fill: #191919 } -.terminal-2453408022-r6 { fill: #e0e0e0 } -.terminal-2453408022-r7 { fill: #c9c9c9 } -.terminal-2453408022-r8 { fill: #494949 } -.terminal-2453408022-r9 { fill: #6f6f6f } -.terminal-2453408022-r10 { fill: #656565 } -.terminal-2453408022-r11 { fill: #e0e0e0;font-weight: bold } -.terminal-2453408022-r12 { fill: #b9b9b9 } -.terminal-2453408022-r13 { fill: #acacac } -.terminal-2453408022-r14 { fill: #c3c3c3 } -.terminal-2453408022-r15 { fill: #999999 } -.terminal-2453408022-r16 { fill: #3b3b3b } -.terminal-2453408022-r17 { fill: #9e9e9e } -.terminal-2453408022-r18 { fill: #797979 } -.terminal-2453408022-r19 { fill: #b0b0b0;font-weight: bold } -.terminal-2453408022-r20 { fill: #515151 } + .terminal-2194147608-r1 { fill: #c5c8c6 } +.terminal-2194147608-r2 { fill: #a0a0a0;font-weight: bold } +.terminal-2194147608-r3 { fill: #a0a0a0 } +.terminal-2194147608-r4 { fill: #121212 } +.terminal-2194147608-r5 { fill: #191919 } +.terminal-2194147608-r6 { fill: #e0e0e0 } +.terminal-2194147608-r7 { fill: #c9c9c9 } +.terminal-2194147608-r8 { fill: #494949 } +.terminal-2194147608-r9 { fill: #6f6f6f } +.terminal-2194147608-r10 { fill: #656565 } +.terminal-2194147608-r11 { fill: #e0e0e0;font-weight: bold } +.terminal-2194147608-r12 { fill: #b9b9b9 } +.terminal-2194147608-r13 { fill: #acacac } +.terminal-2194147608-r14 { fill: #c3c3c3 } +.terminal-2194147608-r15 { fill: #999999 } +.terminal-2194147608-r16 { fill: #3b3b3b } +.terminal-2194147608-r17 { fill: #9e9e9e } +.terminal-2194147608-r18 { fill: #797979 } +.terminal-2194147608-r19 { fill: #b0b0b0;font-weight: bold } +.terminal-2194147608-r20 { fill: #515151 } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - code-recall v0.2.4 + code-recall v0.2.5 - + - - code-recall v0.2.4  8 sessions indexed | Claude 4, Codex 4 | latest 2026-05-18 -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -stripe webhook signature -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -Scope: All providers   Mode: hybrid   Visible:Claude 1Codex 1p provider  f filters  ? help  Ctrl+K commands - -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -2 of 2 results for "stripe webhook signature" in all providers -Fix Stripe webhook signature verification - 1ClaudeFix Stripe webhook signature verificationSession: Claude Code · Project: -strong 100%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·/Users/demo/Projects/payments-api · Activity: 2026-05-18 -2026-05-18 · 23 msgs · 535.2KB · claude-sonnet-41 Overview   2 Why   3 Activity   4 Related   5 Ai -why: matched text: Fix **Stripe** **webhook** **signature** verification   3 files · -2 cmdsTranscript chat -Assistant provider: Claude Code - 2CodexDebug checkout webhook retry handling -weak 0%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·You: What changed and what should I verify before resuming? -2026-05-18 · 23 msgs · 523.4KB · gpt-5.1-codex -why: matched text: Debug checkout **webhook** retry handling   3 files · 2 cmdsClaude Code: Session demo-claude-001 switched Stripe -verification to the raw request body, added timestamp -tolerance, and covered valid, tampered, and replayed -signatures. Resume with `claude --resume -claude-demo-claude-001`, then run `pnpm test -tests/webhooks/stripe-signature.test.ts` and the Stripe CLI -forwarding command. - - - - - - - - - - - - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -Ask this transcript... e.g. what did we conclude about cost -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - - esc Close/Quit  ^o Settings ^k palette + + code-recall v0.2.5  8 sessions indexed | Claude 4, Codex 4 | latest 2026-05-18 +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +stripe webhook signature +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +Scope: All providers   Mode: hybrid   Visible:Claude 1Codex 1p provider  f filters  ? help  Ctrl+K commands + +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +2 of 2 results for "stripe webhook signature" in all providers +Fix Stripe webhook signature verification + 1ClaudeFix Stripe webhook signature verificationSession: Claude Code · Project: +strong 100%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·/Users/demo/Projects/payments-api · Activity: 2026-05-18 +2026-05-18 · 23 msgs · 535.2KB · claude-sonnet-41 Overview   2 Why   3 Activity   4 Related   5 Ai +why: matched text: Fix **Stripe** **webhook** **signature** verification   3 files · +2 cmdsTranscript chat +Assistant provider: Claude Code + 2CodexDebug checkout webhook retry handling +weak 0%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·You: What changed and what should I verify before resuming? +2026-05-18 · 23 msgs · 523.4KB · gpt-5.1-codex +why: matched text: Debug checkout **webhook** retry handling   3 files · 2 cmdsClaude Code: Session demo-claude-001 switched Stripe +verification to the raw request body, added timestamp +tolerance, and covered valid, tampered, and replayed +signatures. Resume with `claude --resume +claude-demo-claude-001`, then run `pnpm test +tests/webhooks/stripe-signature.test.ts` and the Stripe CLI +forwarding command. + + + + + + + + + + + + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +Ask this transcript... e.g. what did we conclude about cost +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + + esc Close/Quit  ^o Settings ^k palette diff --git a/docs/assets/code-recall-demo.gif b/docs/assets/code-recall-demo.gif index b2cb9cb..75cc257 100644 Binary files a/docs/assets/code-recall-demo.gif and b/docs/assets/code-recall-demo.gif differ diff --git a/docs/assets/code-recall-related.svg b/docs/assets/code-recall-related.svg index e9fab79..c3f65f4 100644 --- a/docs/assets/code-recall-related.svg +++ b/docs/assets/code-recall-related.svg @@ -19,220 +19,220 @@ font-weight: 700; } - .terminal-3877256817-matrix { + .terminal-3102359155-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-3877256817-title { + .terminal-3102359155-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-3877256817-r1 { fill: #c5c8c6 } -.terminal-3877256817-r2 { fill: #a0a0a0;font-weight: bold } -.terminal-3877256817-r3 { fill: #a0a0a0 } -.terminal-3877256817-r4 { fill: #121212 } -.terminal-3877256817-r5 { fill: #656565 } -.terminal-3877256817-r6 { fill: #e0e0e0 } -.terminal-3877256817-r7 { fill: #c9c9c9 } -.terminal-3877256817-r8 { fill: #494949 } -.terminal-3877256817-r9 { fill: #6f6f6f } -.terminal-3877256817-r10 { fill: #e0e0e0;font-weight: bold } -.terminal-3877256817-r11 { fill: #b9b9b9 } -.terminal-3877256817-r12 { fill: #acacac } -.terminal-3877256817-r13 { fill: #c3c3c3 } -.terminal-3877256817-r14 { fill: #999999 } -.terminal-3877256817-r15 { fill: #3b3b3b } -.terminal-3877256817-r16 { fill: #9e9e9e } -.terminal-3877256817-r17 { fill: #b0b0b0;font-weight: bold } -.terminal-3877256817-r18 { fill: #515151 } + .terminal-3102359155-r1 { fill: #c5c8c6 } +.terminal-3102359155-r2 { fill: #a0a0a0;font-weight: bold } +.terminal-3102359155-r3 { fill: #a0a0a0 } +.terminal-3102359155-r4 { fill: #121212 } +.terminal-3102359155-r5 { fill: #656565 } +.terminal-3102359155-r6 { fill: #e0e0e0 } +.terminal-3102359155-r7 { fill: #c9c9c9 } +.terminal-3102359155-r8 { fill: #494949 } +.terminal-3102359155-r9 { fill: #6f6f6f } +.terminal-3102359155-r10 { fill: #e0e0e0;font-weight: bold } +.terminal-3102359155-r11 { fill: #b9b9b9 } +.terminal-3102359155-r12 { fill: #acacac } +.terminal-3102359155-r13 { fill: #c3c3c3 } +.terminal-3102359155-r14 { fill: #999999 } +.terminal-3102359155-r15 { fill: #3b3b3b } +.terminal-3102359155-r16 { fill: #9e9e9e } +.terminal-3102359155-r17 { fill: #b0b0b0;font-weight: bold } +.terminal-3102359155-r18 { fill: #515151 } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - code-recall v0.2.4 + code-recall v0.2.5 - + - - code-recall v0.2.4  8 sessions indexed | Claude 4, Codex 4 | latest 2026-05-18 -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -stripe webhook signature -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -Scope: All providers   Mode: hybrid   Visible:Claude 1Codex 1p provider  f filters  ? help  Ctrl+K commands - -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -2 of 2 results for "stripe webhook signature" in all providers -Fix Stripe webhook signature verification - 1ClaudeFix Stripe webhook signature verificationSession: Claude Code · Project: -strong 100%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·/Users/demo/Projects/payments-api · Activity: 2026-05-18 -2026-05-18 · 23 msgs · 535.2KB · claude-sonnet-41 Overview   2 Why   3 Activity   4 Related   5 Ai -why: matched text: Fix **Stripe** **webhook** **signature** verification   3 files · -2 cmdsRelated sessions -Debug checkout webhook retry handling shared files: 1 - 2CodexDebug checkout webhook retry handling -weak 0%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature · -2026-05-18 · 23 msgs · 523.4KB · gpt-5.1-codex -why: matched text: Debug checkout **webhook** retry handling   3 files · 2 cmds - - - - - - - - - - - - - - - - - - - - - - - esc Close/Quit  ^o Settings ^k palette + + code-recall v0.2.5  8 sessions indexed | Claude 4, Codex 4 | latest 2026-05-18 +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +stripe webhook signature +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +Scope: All providers   Mode: hybrid   Visible:Claude 1Codex 1p provider  f filters  ? help  Ctrl+K commands + +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +2 of 2 results for "stripe webhook signature" in all providers +Fix Stripe webhook signature verification + 1ClaudeFix Stripe webhook signature verificationSession: Claude Code · Project: +strong 100%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·/Users/demo/Projects/payments-api · Activity: 2026-05-18 +2026-05-18 · 23 msgs · 535.2KB · claude-sonnet-41 Overview   2 Why   3 Activity   4 Related   5 Ai +why: matched text: Fix **Stripe** **webhook** **signature** verification   3 files · +2 cmdsRelated sessions +Debug checkout webhook retry handling shared files: 1 + 2CodexDebug checkout webhook retry handling +weak 0%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature · +2026-05-18 · 23 msgs · 523.4KB · gpt-5.1-codex +why: matched text: Debug checkout **webhook** retry handling   3 files · 2 cmds + + + + + + + + + + + + + + + + + + + + + + + esc Close/Quit  ^o Settings ^k palette diff --git a/docs/assets/code-recall-search.svg b/docs/assets/code-recall-search.svg index fe277d6..6d63004 100644 --- a/docs/assets/code-recall-search.svg +++ b/docs/assets/code-recall-search.svg @@ -19,220 +19,220 @@ font-weight: 700; } - .terminal-2006882672-matrix { + .terminal-1550293362-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-2006882672-title { + .terminal-1550293362-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-2006882672-r1 { fill: #c5c8c6 } -.terminal-2006882672-r2 { fill: #a0a0a0;font-weight: bold } -.terminal-2006882672-r3 { fill: #a0a0a0 } -.terminal-2006882672-r4 { fill: #121212 } -.terminal-2006882672-r5 { fill: #656565 } -.terminal-2006882672-r6 { fill: #e0e0e0 } -.terminal-2006882672-r7 { fill: #c9c9c9 } -.terminal-2006882672-r8 { fill: #494949 } -.terminal-2006882672-r9 { fill: #6f6f6f } -.terminal-2006882672-r10 { fill: #e0e0e0;font-weight: bold } -.terminal-2006882672-r11 { fill: #b9b9b9 } -.terminal-2006882672-r12 { fill: #acacac } -.terminal-2006882672-r13 { fill: #c3c3c3 } -.terminal-2006882672-r14 { fill: #3b3b3b } -.terminal-2006882672-r15 { fill: #9e9e9e } -.terminal-2006882672-r16 { fill: #999999 } -.terminal-2006882672-r17 { fill: #b0b0b0;font-weight: bold } -.terminal-2006882672-r18 { fill: #515151 } + .terminal-1550293362-r1 { fill: #c5c8c6 } +.terminal-1550293362-r2 { fill: #a0a0a0;font-weight: bold } +.terminal-1550293362-r3 { fill: #a0a0a0 } +.terminal-1550293362-r4 { fill: #121212 } +.terminal-1550293362-r5 { fill: #656565 } +.terminal-1550293362-r6 { fill: #e0e0e0 } +.terminal-1550293362-r7 { fill: #c9c9c9 } +.terminal-1550293362-r8 { fill: #494949 } +.terminal-1550293362-r9 { fill: #6f6f6f } +.terminal-1550293362-r10 { fill: #e0e0e0;font-weight: bold } +.terminal-1550293362-r11 { fill: #b9b9b9 } +.terminal-1550293362-r12 { fill: #acacac } +.terminal-1550293362-r13 { fill: #c3c3c3 } +.terminal-1550293362-r14 { fill: #3b3b3b } +.terminal-1550293362-r15 { fill: #9e9e9e } +.terminal-1550293362-r16 { fill: #999999 } +.terminal-1550293362-r17 { fill: #b0b0b0;font-weight: bold } +.terminal-1550293362-r18 { fill: #515151 } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - code-recall v0.2.4 + code-recall v0.2.5 - + - - code-recall v0.2.4  8 sessions indexed | Claude 4, Codex 4 | latest 2026-05-18 -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -stripe webhook signature -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -Scope: All providers   Mode: hybrid   Visible:Claude 1Codex 1p provider  f filters  ? help  Ctrl+K commands - -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -2 of 2 results for "stripe webhook signature" in all providers -Fix Stripe webhook signature verification - 1ClaudeFix Stripe webhook signature verificationSession: Claude Code · Project: -strong 100%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·/Users/demo/Projects/payments-api · Activity: 2026-05-18 -2026-05-18 · 23 msgs · 535.2KB · claude-sonnet-41 Overview   2 Why   3 Activity   4 Related   5 Ai -why: matched text: Fix **Stripe** **webhook** **signature** verification   3 files · -2 cmdsScore: strong (100%) -Resume:claude --resume claude-demo-claude-001 - 2CodexDebug checkout webhook retry handlingProvider capabilities: resume, model, branch, files, commands, -weak 0%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·transcript -2026-05-18 · 23 msgs · 523.4KB · gpt-5.1-codexModel: claude-sonnet-4 -why: matched text: Debug checkout **webhook** retry handling   3 files · 2 cmdsBranch: fix/stripe-webhook-signature -Messages: 23 -Source: Claude transcript · -/Users/demo/.code-agent-history/demo-claude-001.jsonl - -Started -Production webhooks are failing signature verification after a -framework upgrade. - -Left off -Added raw body parsing and replay tests for Stripe webhook -signature checks. - - - - - - - - - - - - esc Close/Quit  ^o Settings ^k palette + + code-recall v0.2.5  8 sessions indexed | Claude 4, Codex 4 | latest 2026-05-18 +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +stripe webhook signature +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +Scope: All providers   Mode: hybrid   Visible:Claude 1Codex 1p provider  f filters  ? help  Ctrl+K commands + +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +2 of 2 results for "stripe webhook signature" in all providers +Fix Stripe webhook signature verification + 1ClaudeFix Stripe webhook signature verificationSession: Claude Code · Project: +strong 100%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·/Users/demo/Projects/payments-api · Activity: 2026-05-18 +2026-05-18 · 23 msgs · 535.2KB · claude-sonnet-41 Overview   2 Why   3 Activity   4 Related   5 Ai +why: matched text: Fix **Stripe** **webhook** **signature** verification   3 files · +2 cmdsScore: strong (100%) +Resume:claude --resume claude-demo-claude-001 + 2CodexDebug checkout webhook retry handlingProvider capabilities: resume, model, branch, files, commands, +weak 0%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·transcript +2026-05-18 · 23 msgs · 523.4KB · gpt-5.1-codexModel: claude-sonnet-4 +why: matched text: Debug checkout **webhook** retry handling   3 files · 2 cmdsBranch: fix/stripe-webhook-signature +Messages: 23 +Source: Claude transcript · +/Users/demo/.code-agent-history/demo-claude-001.jsonl + +Started +Production webhooks are failing signature verification after a +framework upgrade. + +Left off +Added raw body parsing and replay tests for Stripe webhook +signature checks. + + + + + + + + + + + + esc Close/Quit  ^o Settings ^k palette diff --git a/docs/assets/code-recall-why.svg b/docs/assets/code-recall-why.svg index 21794ae..c4dbbf6 100644 --- a/docs/assets/code-recall-why.svg +++ b/docs/assets/code-recall-why.svg @@ -19,220 +19,220 @@ font-weight: 700; } - .terminal-527427427-matrix { + .terminal-31254373-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-527427427-title { + .terminal-31254373-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-527427427-r1 { fill: #c5c8c6 } -.terminal-527427427-r2 { fill: #a0a0a0;font-weight: bold } -.terminal-527427427-r3 { fill: #a0a0a0 } -.terminal-527427427-r4 { fill: #121212 } -.terminal-527427427-r5 { fill: #656565 } -.terminal-527427427-r6 { fill: #e0e0e0 } -.terminal-527427427-r7 { fill: #c9c9c9 } -.terminal-527427427-r8 { fill: #494949 } -.terminal-527427427-r9 { fill: #6f6f6f } -.terminal-527427427-r10 { fill: #e0e0e0;font-weight: bold } -.terminal-527427427-r11 { fill: #b9b9b9 } -.terminal-527427427-r12 { fill: #acacac } -.terminal-527427427-r13 { fill: #c3c3c3 } -.terminal-527427427-r14 { fill: #3b3b3b } -.terminal-527427427-r15 { fill: #9e9e9e } -.terminal-527427427-r16 { fill: #999999 } -.terminal-527427427-r17 { fill: #b0b0b0;font-weight: bold } -.terminal-527427427-r18 { fill: #515151 } + .terminal-31254373-r1 { fill: #c5c8c6 } +.terminal-31254373-r2 { fill: #a0a0a0;font-weight: bold } +.terminal-31254373-r3 { fill: #a0a0a0 } +.terminal-31254373-r4 { fill: #121212 } +.terminal-31254373-r5 { fill: #656565 } +.terminal-31254373-r6 { fill: #e0e0e0 } +.terminal-31254373-r7 { fill: #c9c9c9 } +.terminal-31254373-r8 { fill: #494949 } +.terminal-31254373-r9 { fill: #6f6f6f } +.terminal-31254373-r10 { fill: #e0e0e0;font-weight: bold } +.terminal-31254373-r11 { fill: #b9b9b9 } +.terminal-31254373-r12 { fill: #acacac } +.terminal-31254373-r13 { fill: #c3c3c3 } +.terminal-31254373-r14 { fill: #3b3b3b } +.terminal-31254373-r15 { fill: #9e9e9e } +.terminal-31254373-r16 { fill: #999999 } +.terminal-31254373-r17 { fill: #b0b0b0;font-weight: bold } +.terminal-31254373-r18 { fill: #515151 } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - code-recall v0.2.4 + code-recall v0.2.5 - + - - code-recall v0.2.4  8 sessions indexed | Claude 4, Codex 4 | latest 2026-05-18 -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -stripe webhook signature -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -Scope: All providers   Mode: hybrid   Visible:Claude 1Codex 1p provider  f filters  ? help  Ctrl+K commands - -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -2 of 2 results for "stripe webhook signature" in all providers -Fix Stripe webhook signature verification - 1ClaudeFix Stripe webhook signature verificationSession: Claude Code · Project: -strong 100%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·/Users/demo/Projects/payments-api · Activity: 2026-05-18 -2026-05-18 · 23 msgs · 535.2KB · claude-sonnet-41 Overview   2 Why   3 Activity   4 Related   5 Ai -why: matched text: Fix **Stripe** **webhook** **signature** verification   3 files · -2 cmdsWhy this result matched -Primary reason: matched text: Fix **Stripe** **webhook** - 2CodexDebug checkout webhook retry handling**signature** verification -weak 0%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·Keyword signal: rank 0.000 -2026-05-18 · 23 msgs · 523.4KB · gpt-5.1-codex -why: matched text: Debug checkout **webhook** retry handling   3 files · 2 cmdsMatched evidence -Fix **Stripe** **webhook** **signature** verification -Production **webhooks** are failing **signature** -verification after a framework upgrade. -Added raw body parsing and replay tests for **Stripe** -**webhook** **signature** checks. -Debugged **Stripe** **webhook** **signature** validation. The -middleware parsed JSON before constructing the event, so the -signed payload bytes no longer... -Edited: src/webhooks/stripe.ts - - - - - - - - - - - - - - esc Close/Quit  ^o Settings ^k palette + + code-recall v0.2.5  8 sessions indexed | Claude 4, Codex 4 | latest 2026-05-18 +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +stripe webhook signature +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +Scope: All providers   Mode: hybrid   Visible:Claude 1Codex 1p provider  f filters  ? help  Ctrl+K commands + +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +2 of 2 results for "stripe webhook signature" in all providers +Fix Stripe webhook signature verification + 1ClaudeFix Stripe webhook signature verificationSession: Claude Code · Project: +strong 100%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·/Users/demo/Projects/payments-api · Activity: 2026-05-18 +2026-05-18 · 23 msgs · 535.2KB · claude-sonnet-41 Overview   2 Why   3 Activity   4 Related   5 Ai +why: matched text: Fix **Stripe** **webhook** **signature** verification   3 files · +2 cmdsWhy this result matched +Primary reason: matched text: Fix **Stripe** **webhook** + 2CodexDebug checkout webhook retry handling**signature** verification +weak 0%/Users/demo/Projects/payments-api · fix/stripe-webhook-signature ·Keyword signal: rank 0.000 +2026-05-18 · 23 msgs · 523.4KB · gpt-5.1-codex +why: matched text: Debug checkout **webhook** retry handling   3 files · 2 cmdsMatched evidence +Fix **Stripe** **webhook** **signature** verification +Production **webhooks** are failing **signature** +verification after a framework upgrade. +Added raw body parsing and replay tests for **Stripe** +**webhook** **signature** checks. +Debugged **Stripe** **webhook** **signature** validation. The +middleware parsed JSON before constructing the event, so the +signed payload bytes no longer... +Edited: src/webhooks/stripe.ts + + + + + + + + + + + + + + esc Close/Quit  ^o Settings ^k palette diff --git a/pyproject.toml b/pyproject.toml index ea49818..ab279c5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "code-recall" -version = "0.2.4" +version = "0.2.5" description = "Semantic search across local coding-agent sessions. Find past conversations by intent, not just keywords." readme = "README.md" license = "MIT" diff --git a/src/code_recall/__init__.py b/src/code_recall/__init__.py index c9faf10..ed7cdbb 100644 --- a/src/code_recall/__init__.py +++ b/src/code_recall/__init__.py @@ -1,6 +1,6 @@ """code-recall: Semantic search across local coding-agent sessions.""" -__version__ = "0.2.4" +__version__ = "0.2.5" def has_semantic() -> bool: diff --git a/src/code_recall/db.py b/src/code_recall/db.py index 2c4febb..9336a5a 100644 --- a/src/code_recall/db.py +++ b/src/code_recall/db.py @@ -448,13 +448,24 @@ def setup_vec_table(conn: sqlite3.Connection) -> None: """Create the vector table for semantic search. Requires sqlite-vec.""" if not load_vec_extension(conn): return + + # Dim is sourced from the active embedder so the table and embeddings + # stay in lockstep when the model changes. If an existing chunks_vec + # table has the wrong dim, drop it — the indexer will re-embed all + # chunks on the next run. + row = conn.execute( + "SELECT sql FROM sqlite_master WHERE type='table' AND name='chunks_vec'" + ).fetchone() + if row and not _chunks_vec_uses_current_dim(row["sql"]): + conn.execute("DROP TABLE chunks_vec") + + dim = _current_embedding_dim() conn.execute( - """CREATE VIRTUAL TABLE IF NOT EXISTS chunks_vec USING vec0( + f"""CREATE VIRTUAL TABLE IF NOT EXISTS chunks_vec USING vec0( chunk_rowid INTEGER PRIMARY KEY, - embedding float[384] distance_metric=cosine + embedding float[{dim}] distance_metric=cosine )""" ) - # Drop old sessions_vec if migrating from v1 try: conn.execute("DROP TABLE IF EXISTS sessions_vec") except Exception: @@ -462,9 +473,23 @@ def setup_vec_table(conn: sqlite3.Connection) -> None: conn.commit() +def _current_embedding_dim() -> int: + """Return the active embedding dimension without loading model weights.""" + from code_recall.embedder import Embedder + + return Embedder.DIM + + +def _chunks_vec_uses_current_dim(sql: str | None) -> bool: + """Return whether an existing chunks_vec table matches the active embedder.""" + if not sql: + return False + return f"float[{_current_embedding_dim()}]" in sql + + def has_vec_table(conn: sqlite3.Connection) -> bool: - """Check if the vector table exists.""" + """Check if the vector table exists and matches the active embedder.""" row = conn.execute( - "SELECT name FROM sqlite_master WHERE type='table' AND name='chunks_vec'" + "SELECT sql FROM sqlite_master WHERE type='table' AND name='chunks_vec'" ).fetchone() - return row is not None + return row is not None and _chunks_vec_uses_current_dim(row["sql"]) diff --git a/src/code_recall/embedder.py b/src/code_recall/embedder.py index 421f0de..503be92 100644 --- a/src/code_recall/embedder.py +++ b/src/code_recall/embedder.py @@ -14,7 +14,8 @@ class Embedder: """Wrapper around FastEmbed for generating text embeddings.""" - MODEL = "BAAI/bge-small-en-v1.5" # 33MB, 384 dimensions, ONNX + MODEL = "nomic-ai/nomic-embed-text-v1.5-Q" # 130MB, 768d, 8K context, ONNX + DIM = 768 def __init__(self): from fastembed import TextEmbedding @@ -22,12 +23,14 @@ def __init__(self): self._model = TextEmbedding(model_name=self.MODEL) def embed(self, texts: list[str]) -> list["np.ndarray"]: - """Embed a batch of texts. Returns list of numpy arrays.""" - return list(self._model.embed(texts)) + """Embed a batch of documents (uses model's passage prefix).""" + # Cast to float32 — nomic returns float64, sqlite-vec stores float32. + return [arr.astype("float32", copy=False) for arr in self._model.passage_embed(texts)] def embed_single(self, text: str) -> "np.ndarray": - """Embed a single text string.""" - return list(self._model.embed([text]))[0] + """Embed a single query (uses model's query prefix).""" + arr = list(self._model.query_embed([text]))[0] + return arr.astype("float32", copy=False) class Reranker: @@ -37,7 +40,7 @@ class Reranker: cross-attention — much more accurate than bi-encoder similarity. """ - MODEL = "Xenova/ms-marco-MiniLM-L-6-v2" # 80MB, 18ms for 20 docs + MODEL = "jinaai/jina-reranker-v1-tiny-en" # 130MB, 8K context, ONNX def __init__(self): from fastembed.rerank.cross_encoder import TextCrossEncoder @@ -52,7 +55,6 @@ def rerank( Returns list of (original_index, score) sorted by score descending. """ scores = list(self._model.rerank(query, documents)) - # scores is a list of floats, one per document in original order indexed_scores = list(enumerate(scores)) indexed_scores.sort(key=lambda x: x[1], reverse=True) return indexed_scores @@ -85,15 +87,13 @@ def get_reranker(allow_download: bool = False) -> Reranker | None: return _reranker_instance if not allow_download: - # Check if model is already cached before loading try: from fastembed.common.utils import define_cache_dir cache = define_cache_dir() - # Look for the model in cache - model_dirs = list(cache.glob("*ms-marco*MiniLM*")) + model_dirs = list(cache.glob("*jina-reranker*tiny*")) if not model_dirs: - return None # Not downloaded yet — skip reranking + return None except Exception: pass diff --git a/src/code_recall/indexer.py b/src/code_recall/indexer.py index dfba8bb..ab291ef 100644 --- a/src/code_recall/indexer.py +++ b/src/code_recall/indexer.py @@ -445,9 +445,6 @@ def _generate_embeddings( if not rows: return 0 - if verbose: - print(f"\n Generating embeddings for {len(rows)} chunks...", file=sys.stderr) - # Prepare texts and IDs texts = [row["chunk_text"] for row in rows if row["chunk_text"].strip()] chunk_ids = [row["chunk_id"] for row in rows if row["chunk_text"].strip()] @@ -455,23 +452,51 @@ def _generate_embeddings( if not texts: return 0 - # Batch embed - embeddings = embedder.embed(texts) + # Embed in mini-batches so the user sees steady progress; one giant + # batched call produces a long silent stretch on heavier models. + batch_size = 64 + use_tqdm = verbose and sys.stderr.isatty() + progress = None + if use_tqdm: + try: + from tqdm import tqdm - # Store in vec table with periodic commits - for i, (chunk_id, embedding) in enumerate(zip(chunk_ids, embeddings)): - conn.execute( - "INSERT OR REPLACE INTO chunks_vec (chunk_rowid, embedding) VALUES (?, ?)", - (chunk_id, embedding.tobytes()), - ) - if (i + 1) % 50 == 0: - conn.commit() - if verbose: - print( - f"\r Embedded {i + 1}/{len(chunk_ids)} chunks...", - end="", - file=sys.stderr, - ) + progress = tqdm( + total=len(texts), + unit="chunk", + desc=" Embedding", + file=sys.stderr, + leave=True, + ) + except ImportError: + progress = None + elif verbose: + print(f"\n Generating embeddings for {len(texts)} chunks...", file=sys.stderr) + + embedded = 0 + for start in range(0, len(texts), batch_size): + batch_texts = texts[start : start + batch_size] + batch_ids = chunk_ids[start : start + batch_size] + batch_embeddings = embedder.embed(batch_texts) + for chunk_id, embedding in zip(batch_ids, batch_embeddings): + conn.execute( + "INSERT OR REPLACE INTO chunks_vec (chunk_rowid, embedding) VALUES (?, ?)", + (chunk_id, embedding.tobytes()), + ) + embedded += 1 + conn.commit() + if progress is not None: + progress.update(len(batch_texts)) + elif verbose: + print( + f"\r Embedded {embedded}/{len(texts)} chunks...", + end="", + file=sys.stderr, + ) + + if progress is not None: + progress.close() + elif verbose: + print(file=sys.stderr) - conn.commit() return len(chunk_ids) diff --git a/src/code_recall/utils.py b/src/code_recall/utils.py index ad4b463..ac150c7 100644 --- a/src/code_recall/utils.py +++ b/src/code_recall/utils.py @@ -805,7 +805,7 @@ def _dedupe(values: list[str]) -> list[str]: # Chunk configuration CHUNK_SIZE = 5 # messages per chunk CHUNK_OVERLAP = 1 # overlapping messages between chunks -MAX_CHUNK_CHARS = 2000 # max chars per chunk text +MAX_CHUNK_CHARS = 8000 # max chars per chunk (~2K tokens, well under embedder's 8K limit) def _build_fts_text( diff --git a/tests/test_db.py b/tests/test_db.py index f38c482..30da551 100644 --- a/tests/test_db.py +++ b/tests/test_db.py @@ -15,6 +15,7 @@ get_related_sessions, get_session_mtime, get_stats, + has_vec_table, upsert_chunks, upsert_graph_edges, upsert_session, @@ -164,6 +165,19 @@ def test_migrates_v3_database_before_provider_index(self, tmp_path): assert index_row is not None assert version == "4" + def test_has_vec_table_rejects_old_embedding_dimension(self, db_conn): + """Search should not use stale vector tables from older embedder dims.""" + db_conn.execute( + "CREATE TABLE chunks_vec (chunk_rowid INTEGER PRIMARY KEY, embedding float[384])" + ) + assert not has_vec_table(db_conn) + + db_conn.execute("DROP TABLE chunks_vec") + db_conn.execute( + "CREATE TABLE chunks_vec (chunk_rowid INTEGER PRIMARY KEY, embedding float[768])" + ) + assert has_vec_table(db_conn) + def test_chunks_columns(self, db_conn): cols = { row[1] diff --git a/uv.lock b/uv.lock index bbbb8cb..63001f5 100644 --- a/uv.lock +++ b/uv.lock @@ -160,7 +160,7 @@ wheels = [ [[package]] name = "code-recall" -version = "0.2.4" +version = "0.2.5" source = { editable = "." } [package.optional-dependencies]