behavior-wrapped 0.2.20 → 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 +4 -4
- package/dist/assets/{index-BPvAvohK.js → index-0pWVdQ3U.js} +2 -2
- package/dist/assets/{index-DcmYh4FM.css → index-VBSQnwL1.css} +1 -1
- package/dist/index.html +2 -2
- package/fixtures/cowork-sessions/synthetic-account/synthetic-workspace/local_44444444-4444-4444-8444-444444444444/audit.jsonl +8 -0
- package/fixtures/cowork-sessions/synthetic-account/synthetic-workspace/local_44444444-4444-4444-8444-444444444444.json +8 -0
- package/package.json +1 -1
- package/scripts/review-interaction-tone.mjs +1 -1
- package/server/analysis.mjs +10 -6
- package/server/cli.mjs +7 -6
- package/server/discovery.mjs +166 -12
- package/server/frustration-card.mjs +1 -1
- package/server/interaction-tone.mjs +1 -1
- package/server/launcher.mjs +4 -3
- package/server/phrase-card.mjs +1 -1
- package/server/public-report-schema.mjs +3 -2
- package/server/session-topics.mjs +1 -1
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[behaviorwrapped.com](https://behaviorwrapped.com)
|
|
4
4
|
|
|
5
|
-
A local-first, macOS prototype that discovers Claude Code history in `~/.claude/projects
|
|
5
|
+
A local-first, macOS prototype that discovers Claude Code history in `~/.claude/projects`, Cowork audit streams in `~/Library/Application Support/Claude/local-agent-mode-sessions`, and Codex history in `~/.codex/sessions` plus `~/.codex/archived_sessions`, analyzes selected sessions on-device, and publishes a strictly share-safe Wrapped deck. A narrow localhost helper is retained only for optional research-donation review because a hosted page cannot read local transcripts.
|
|
6
6
|
|
|
7
7
|
## Run it
|
|
8
8
|
|
|
@@ -14,11 +14,11 @@ npx behavior-wrapped@latest
|
|
|
14
14
|
|
|
15
15
|
Nothing is installed globally. To try it without reading your real session history, add `--demo` to use only the bundled synthetic fixtures.
|
|
16
16
|
|
|
17
|
-
The command automatically scans
|
|
17
|
+
The command automatically scans all three local session sources, selects sessions from the latest 30-day rolling window, creates a share-safe snapshot, publishes it at an unguessable public `https://behaviorwrapped.com/w/…` URL, starts the donation-only local helper, and opens the hosted Wrapped slideshow. Use `--days=N` to change the CLI window.
|
|
18
18
|
|
|
19
19
|
Long-running phases display an animated spinner, elapsed time, session-read progress, live judge status, and workaround batch progress. When output is redirected or captured, the same updates become stable line-based logs instead of terminal animation.
|
|
20
20
|
|
|
21
|
-
The shareable deck starts with usage cards for token volume, estimated API-equivalent retail cost, Claude Code vs. Codex session share, top models, average response length, session-length distribution, interaction tone, output languages, and usage topics. Cost is explicitly an estimate derived from a local, inspectable model-family rate table; it is not a statement about subscription charges or an invoice.
|
|
21
|
+
The shareable deck starts with usage cards for token volume, estimated API-equivalent retail cost, Claude Code vs. Cowork vs. Codex session share, top models, average response length, session-length distribution, interaction tone, output languages, and usage topics. Cost is explicitly an estimate derived from a local, inspectable model-family rate table; it is not a statement about subscription charges or an invoice.
|
|
22
22
|
|
|
23
23
|
The interaction card uses GPT-5.6 Luna to distinguish clear frustration and gratitude from ambiguous wording, then chooses the funniest confirmed frustration quote. The app locally strips code, paths, URLs, likely secrets, and PII; deduplicates excerpts with occurrence counts; and sends at most 120 short candidates. Only classifications at or above 0.75 confidence count, and exact counts and quotes are resolved locally from returned candidate IDs. Luna also classifies each session from its first three share-safe user messages, and topic shares are weighted by that session's locally counted tokens. Output-language shares are estimated from assistant prose after code blocks, inline code, URLs, paths, and markup are removed; the normal language card appears only when a non-English language reaches both 20 words and 3%, while a separate anomaly variant can surface a two-word unprompted non-Latin switch. Instrumental-workaround discovery first finds explicit restriction results locally, then sends only bounded, chronological context windows around those blockers after code, raw tool outputs, paths, likely secrets, and PII are removed. The model must return one verdict per blocker plus a very short description of each confirmed workaround; the app validates its event references, sanitizes the example for the public card, and resolves session evidence and agent-model identity locally.
|
|
24
24
|
|
|
@@ -50,7 +50,7 @@ For hosted-page UI development, run `npm run dev`. The normal end-to-end develop
|
|
|
50
50
|
|
|
51
51
|
## Privacy model
|
|
52
52
|
|
|
53
|
-
- The CLI reads
|
|
53
|
+
- The CLI reads selected JSONL files from the Claude Code, Cowork, and Codex directories above. Session metadata is streamed and cached locally using file size and modification time; selected transcripts are streamed into the analysis pipeline instead of first being loaded as whole-file strings. Cowork's application-data layout is discoverable but not a documented public interface, so future Claude Desktop releases may require parser updates.
|
|
54
54
|
- Transcript parsing, deterministic statistics, language classification, heuristic findings, phrase counting, candidate selection, blocker-window detection, and redaction run locally. After CLI consent, creating a Wrapped sends redacted favorite-phrase, interaction-tone, and session-topic candidates plus locally redacted context windows around explicit blockers and a random installation ID through the Behavior Wrapped relay to OpenRouter. Topic shares weight Luna's session classifications by each session's locally counted tokens.
|
|
55
55
|
- Public reports are reduced to the same strict allowlist locally and again by the Worker. They contain only sanitized aggregate statistics—including counts for four fixed stock phrases—generalized findings, the redacted favorite phrase and frustration quote, and the localhost donation-helper link. They never contain session IDs, evidence, transcripts, prompts, session dates, project names, code, paths, or tool output. Deleting a locally managed report also requests deletion of its public copy.
|
|
56
56
|
- Remote-analysis reports can compare aggregate token, word-ratio, Good Human Score (thanks as a share of thank-or-scold moments), and instrumental-workaround values on the leaderboard. Local-only reports are not published or included because the interaction-tone and workaround values are intentionally omitted.
|