repr-cli 0.2.16__py3-none-any.whl → 0.2.18__py3-none-any.whl

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 (49) hide show
  1. repr/__init__.py +1 -1
  2. repr/api.py +363 -62
  3. repr/auth.py +47 -38
  4. repr/change_synthesis.py +478 -0
  5. repr/cli.py +4306 -364
  6. repr/config.py +119 -11
  7. repr/configure.py +889 -0
  8. repr/cron.py +419 -0
  9. repr/dashboard/__init__.py +9 -0
  10. repr/dashboard/build.py +126 -0
  11. repr/dashboard/dist/assets/index-B-aCjaCw.js +384 -0
  12. repr/dashboard/dist/assets/index-BYFVbEev.css +1 -0
  13. repr/dashboard/dist/assets/index-BrrhyJFO.css +1 -0
  14. repr/dashboard/dist/assets/index-C7Gzxc4f.js +384 -0
  15. repr/dashboard/dist/assets/index-CQdMXo6g.js +391 -0
  16. repr/dashboard/dist/assets/index-CcEg74ts.js +270 -0
  17. repr/dashboard/dist/assets/index-Cerc-iA_.js +377 -0
  18. repr/dashboard/dist/assets/index-CjVcBW2L.css +1 -0
  19. repr/dashboard/dist/assets/index-Cs8ofFGd.js +384 -0
  20. repr/dashboard/dist/assets/index-Dfl3mR5E.js +377 -0
  21. repr/dashboard/dist/assets/index-DwN0SeMc.css +1 -0
  22. repr/dashboard/dist/assets/index-YFch_e0S.js +384 -0
  23. repr/dashboard/dist/favicon.svg +4 -0
  24. repr/dashboard/dist/index.html +14 -0
  25. repr/dashboard/manager.py +234 -0
  26. repr/dashboard/server.py +1489 -0
  27. repr/db.py +980 -0
  28. repr/hooks.py +3 -2
  29. repr/loaders/__init__.py +22 -0
  30. repr/loaders/base.py +156 -0
  31. repr/loaders/claude_code.py +287 -0
  32. repr/loaders/clawdbot.py +313 -0
  33. repr/loaders/gemini_antigravity.py +381 -0
  34. repr/mcp_server.py +1196 -0
  35. repr/models.py +503 -0
  36. repr/openai_analysis.py +25 -0
  37. repr/session_extractor.py +481 -0
  38. repr/storage.py +328 -0
  39. repr/story_synthesis.py +1296 -0
  40. repr/templates.py +68 -4
  41. repr/timeline.py +710 -0
  42. repr/tools.py +17 -8
  43. {repr_cli-0.2.16.dist-info → repr_cli-0.2.18.dist-info}/METADATA +48 -10
  44. repr_cli-0.2.18.dist-info/RECORD +58 -0
  45. {repr_cli-0.2.16.dist-info → repr_cli-0.2.18.dist-info}/WHEEL +1 -1
  46. {repr_cli-0.2.16.dist-info → repr_cli-0.2.18.dist-info}/entry_points.txt +1 -0
  47. repr_cli-0.2.16.dist-info/RECORD +0 -26
  48. {repr_cli-0.2.16.dist-info → repr_cli-0.2.18.dist-info}/licenses/LICENSE +0 -0
  49. {repr_cli-0.2.16.dist-info → repr_cli-0.2.18.dist-info}/top_level.txt +0 -0
repr/tools.py CHANGED
@@ -502,15 +502,16 @@ def get_commits_by_shas(
502
502
  except Exception:
503
503
  # Skip invalid SHAs
504
504
  continue
505
-
505
+
506
506
  # Skip merge commits (commits with more than one parent)
507
507
  if len(commit.parents) > 1:
508
508
  continue
509
-
509
+
510
510
  # Get files changed with diffs
511
511
  files = []
512
512
  parent = commit.parents[0] if commit.parents else None
513
-
513
+ file_stats = commit.stats.files # Per-file stats {path: {insertions, deletions, lines}}
514
+
514
515
  try:
515
516
  # Get diff for this commit
516
517
  if parent:
@@ -518,12 +519,12 @@ def get_commits_by_shas(
518
519
  else:
519
520
  # Initial commit - show all files as additions
520
521
  diffs = commit.diff(None, create_patch=True)
521
-
522
+
522
523
  for diff_item in list(diffs)[:max_files_per_commit]:
523
524
  file_path = diff_item.b_path or diff_item.a_path
524
525
  if not file_path:
525
526
  continue
526
-
527
+
527
528
  # Get the diff text
528
529
  diff_text = ""
529
530
  if diff_item.diff:
@@ -531,29 +532,37 @@ def get_commits_by_shas(
531
532
  diff_text = diff_item.diff.decode('utf-8', errors='ignore')
532
533
  except:
533
534
  diff_text = str(diff_item.diff)
534
-
535
+
535
536
  # Truncate diff if too long
536
537
  diff_lines = diff_text.split('\n')
537
538
  if len(diff_lines) > max_diff_lines_per_file:
538
539
  diff_text = '\n'.join(diff_lines[:max_diff_lines_per_file])
539
540
  diff_text += f"\n... ({len(diff_lines) - max_diff_lines_per_file} more lines)"
540
-
541
+
542
+ # Get per-file insertions/deletions
543
+ stats = file_stats.get(file_path, {})
544
+
541
545
  files.append({
542
546
  "path": file_path,
543
547
  "change_type": diff_item.change_type, # A=added, D=deleted, M=modified, R=renamed
544
548
  "diff": diff_text,
549
+ "insertions": stats.get("insertions", 0),
550
+ "deletions": stats.get("deletions", 0),
545
551
  })
546
552
  except (GitCommandError, Exception):
547
553
  # If we can't get diff, just include file list
548
554
  for filename in commit.stats.files.keys():
549
555
  if len(files) >= max_files_per_commit:
550
556
  break
557
+ stats = file_stats.get(filename, {})
551
558
  files.append({
552
559
  "path": filename,
553
560
  "change_type": "M",
554
561
  "diff": "",
562
+ "insertions": stats.get("insertions", 0),
563
+ "deletions": stats.get("deletions", 0),
555
564
  })
556
-
565
+
557
566
  commits.append({
558
567
  "sha": commit.hexsha[:8],
559
568
  "full_sha": commit.hexsha,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: repr-cli
3
- Version: 0.2.16
3
+ Version: 0.2.18
4
4
  Summary: A beautiful, privacy-first CLI that analyzes your code repositories and generates a compelling developer profile
5
5
  Author-email: Repr <hello@repr.dev>
6
6
  License: MIT License
@@ -49,6 +49,9 @@ Requires-Dist: httpx>=0.25.0
49
49
  Requires-Dist: openai>=1.0.0
50
50
  Requires-Dist: keyring>=24.0.0
51
51
  Requires-Dist: pydantic>=2.0.0
52
+ Requires-Dist: fastmcp<3,>=2.0.0
53
+ Requires-Dist: jinja2>=3.1.0
54
+ Requires-Dist: simple-term-menu>=1.6.0
52
55
  Provides-Extra: dev
53
56
  Requires-Dist: pytest>=7.0.0; extra == "dev"
54
57
  Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
@@ -56,17 +59,27 @@ Requires-Dist: black>=23.0.0; extra == "dev"
56
59
  Requires-Dist: ruff>=0.1.0; extra == "dev"
57
60
  Dynamic: license-file
58
61
 
62
+ <p align="center">
63
+ <strong>Official $REPR Links:</strong> <a href="https://bags.fm/5WsMLk8Zb8PWTXoHev7Ry6QDHNC2KSpY5x8R13GGBAGS">Bags.fm</a> · <a href="https://axiom.trade/t/5WsMLk8Zb8PWTXoHev7Ry6QDHNC2KSpY5x8R13GGBAGS">Axiom</a> · <a href="https://jup.ag/swap?sell=So11111111111111111111111111111111111111112&buy=5WsMLk8Zb8PWTXoHev7Ry6QDHNC2KSpY5x8R13GGBAGS">Jupiter</a> · <a href="https://photon-sol.tinyastro.io/en/lp/5WsMLk8Zb8PWTXoHev7Ry6QDHNC2KSpY5x8R13GGBAGS">Photon</a>
64
+ <br>
65
+ <strong>Official CA:</strong> <code>5WsMLk8Zb8PWTXoHev7Ry6QDHNC2KSpY5x8R13GGBAGS</code> (on Solana)
66
+ </p>
67
+
68
+
59
69
  # Repr CLI
60
70
 
61
- **Stop trying to remember what you did.** Your git history is already a career diary—repr unlocks it.
71
+ **The developer context layer.**
62
72
 
63
- Turn commits into professional narratives for interviews, performance reviews, and career growth. Local-first, privacy-focused, works offline.
73
+ Your git history is rich with context about what you build, how you think, and how you grow. repr captures that context and makes it available everywhere — to AI agents, to applications, to you.
74
+
75
+ **Use it however you need:** Interview prep, performance reviews, social content, AI agent context — these are all *lenses* into the same underlying data. Local-first, privacy-focused, works offline.
64
76
 
65
77
  [![PyPI version](https://img.shields.io/pypi/v/repr-cli.svg)](https://pypi.org/project/repr-cli/)
66
78
  [![Python versions](https://img.shields.io/pypi/pyversions/repr-cli.svg)](https://pypi.org/project/repr-cli/)
67
79
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
68
80
  [![Build](https://github.com/repr-app/cli/actions/workflows/build-release.yml/badge.svg)](https://github.com/repr-app/cli/actions/workflows/build-release.yml)
69
81
 
82
+
70
83
  ## Real Developers, Real Results
71
84
 
72
85
  > *"I used repr to prep for my Meta interview in 30 minutes. Turned 2 years of commits into 8 STAR-format stories. Nailed every behavioral question."*
@@ -78,17 +91,31 @@ Turn commits into professional narratives for interviews, performance reviews, a
78
91
  > *"I run repr in a fully air-gapped environment. Zero network calls, 100% local. It's the only tool I trust for this."*
79
92
  > **— Alex, Defense Contractor**
80
93
 
81
- ## Perfect For
94
+ ## Lenses (Ways to Use Your Context)
82
95
 
83
- - 🎯 **Interview Prep** — Generate STAR-format stories in 30 minutes instead of hours of commit archaeology
84
- - 📊 **Performance Reviews** — Turn 6 months of work into quantified impact with one command
85
- - 🚀 **Sprint Demos** — Professional changelogs for stakeholders in seconds
86
- - 👔 **Weekly 1-on-1s** — Show up with specific examples instead of vague "I worked on stuff"
87
- - 🔒 **Sensitive Work** — Air-gapped support for defense, healthcare, finance
88
- - 💼 **Engineering Managers** — Prep for team reviews with per-developer summaries
96
+ - 🤖 **AI Agent Context** — MCP server lets Claude Code, Cursor, and other agents know your work history
97
+ - 🎯 **Interview Prep** — Generate STAR-format stories in 30 minutes (interview lens)
98
+ - 📊 **Performance Reviews** — Turn 6 months of work into quantified impact (resume lens)
99
+ - 🚀 **Sprint Demos** — Professional changelogs for stakeholders (changelog lens)
100
+ - 📱 **Build in Public** — Social posts from your actual work (content lens)
101
+ - 🔒 **Proof of Work** — Verified credentials from real commits (proof lens)
102
+ - 💼 **Engineering Managers** — Team summaries and sprint recaps
89
103
 
90
104
  ## Why Repr
91
105
 
106
+ ### Context That Compounds
107
+
108
+ The longer you use repr, the richer your context becomes. By the time you need a resume, interview prep, or content — you have months of structured history ready to use. No other tool builds this persistent layer.
109
+
110
+ ### AI-Native
111
+
112
+ repr exposes your context via MCP (Model Context Protocol), so AI agents like Claude Code, Cursor, and Clawdbot can know your work history and patterns. Your coding assistant finally understands *you*.
113
+
114
+ ```bash
115
+ # Start MCP server for AI agents
116
+ repr mcp serve
117
+ ```
118
+
92
119
  ### Privacy First (Not an Afterthought)
93
120
 
94
121
  - ✅ **Local-first by default** — Your repos, diffs, and stories stay on your machine in `~/.repr/`
@@ -98,6 +125,16 @@ Turn commits into professional narratives for interviews, performance reviews, a
98
125
  - ✅ **OS keychain** — API keys never touch config files, stored in system keychain
99
126
  - ✅ **Zero telemetry** — No tracking, no analytics, no silent uploads
100
127
 
128
+ ### Story Engine (New in v0.2.16)
129
+
130
+ `repr` now synthesizes **Stories** from your commits — coherent narratives that capture WHY and HOW you built something, not just WHAT changed.
131
+
132
+ - **Generate**: Create stories from your commits with `repr generate`
133
+ - **Dashboard**: Explore your work in a premium dark-mode UI with `repr dashboard` (or `rp dashboard`)
134
+ - **MCP Integration**: AI agents can answer questions about your implementation details
135
+
136
+ [Read the Story Engine Documentation →](docs/STORY_ENGINE.md)
137
+
101
138
  ### Time Savings
102
139
 
103
140
  | Task | Without repr | With repr | Savings |
@@ -385,3 +422,4 @@ brew install repr
385
422
  repr init ~/code
386
423
  repr generate --local
387
424
  ```
425
+
@@ -0,0 +1,58 @@
1
+ repr/__init__.py,sha256=_YVX4f3_NtxGhDquXGSiaxkfAG2BdWZlB4MbobLsO74,447
2
+ repr/__main__.py,sha256=N7amYwdGB3yzk2ZJJbtH2hhESNkDuhDL11dDEm5Kl60,166
3
+ repr/api.py,sha256=rJRn_4xZXipdBFMrsZbQPWfZKfPLWJpTI0uYUyvjFhw,22814
4
+ repr/auth.py,sha256=TpqwqwZ3tAEolcSYu-zD8oHhzfwHALkauPP1xg5VTiY,12208
5
+ repr/change_synthesis.py,sha256=z7GmCeEHQFlnqLtKDGDvlM7p9MAWl_ByeIJstEVAhbU,15223
6
+ repr/cli.py,sha256=OFYq2oAqobX8uV14Pfz0k8upyoPVUALzDcoOrpueIoQ,225197
7
+ repr/config.py,sha256=S69hdgFdvcHoIO2zihuvsSAQf2Gp41JtC5GGlE4Cy78,34233
8
+ repr/configure.py,sha256=GnwjOC64F0uDD90IjA6LJNev8FlHHAHARuSLwBqI6k0,26860
9
+ repr/cron.py,sha256=Hvo9ssVmGn09dLIHKWqzorKkW7eXdLQnQlBzagTX2Ko,11402
10
+ repr/db.py,sha256=V5UIeCC-AdfxltCmHwXmNXWjJL9htvaKmsiga1OtrLc,37295
11
+ repr/discovery.py,sha256=2RYmJleqV7TbxIMMYP2izkEBUeKH7U1F-U4KAUlUNww,14816
12
+ repr/doctor.py,sha256=-ZyaRu_tb0vpT-ol7vLkgke68UQAxbpwqbubTJqbWsU,13443
13
+ repr/extractor.py,sha256=lGPN8gwTF_ZSezoQoPBMnf95nCJArGIteNiInfb39FM,10566
14
+ repr/hooks.py,sha256=1Kv1KR7b1YVKWt5soR1sg_eUKz6H61c8PchWJiM7X8w,20087
15
+ repr/keychain.py,sha256=CpKU3tjFZVEPgiHiplSAtBQFDPA6qOSovv4IXXgJXbY,6957
16
+ repr/llm.py,sha256=inABX2kwEhPnON7sjCzcTMZZeCf0k3G08LyrKsi6Sko,14637
17
+ repr/mcp_server.py,sha256=IhQM35bMD5c-6ASYIAa9VfnrvxzvFlZntUqkBm08Xqk,39752
18
+ repr/models.py,sha256=mQAkP1bBiAFPweC0OxU-UwKNLZkinvVYHB0KjItHt3Q,20093
19
+ repr/openai_analysis.py,sha256=FZY9pAlC2zdIjxxXxvZ2C3F65nqOp5OpXHS4Bu26jec,30527
20
+ repr/privacy.py,sha256=sN1tkoZjCDSwAjkQWeH6rHaLrtv727yT1HNHQ54GRis,9834
21
+ repr/session_extractor.py,sha256=t1rEyhndjxMREt3gfmcGBYzFGEwzt1kAYbmXPq-QbU8,17104
22
+ repr/storage.py,sha256=y_EYYKrUD2qNRKK2_vdjsIlPIq-IzfaNMUyj9aHofpQ,24223
23
+ repr/story_synthesis.py,sha256=3wV9v8PQkoaSEGBouDtC6q_ewRLNAdo4EXjRYl7g9OU,46443
24
+ repr/telemetry.py,sha256=M1NribTkiezpvweLrdbJxKDU2mlTe7frke6sUP0Yhiw,7000
25
+ repr/templates.py,sha256=5Z3vftQMn87ufvEVt0uWx_gagmvdZGoNxjD1Q9ZbS0w,11029
26
+ repr/timeline.py,sha256=z84PL_CfYikiNkz0oN4_glLxOQIQCeCUIGwXYvS6Dfk,22527
27
+ repr/tools.py,sha256=TK3Gwok9rUU-UnlkudvVVZXobCV2H0FkYx83OIXsMTs,21535
28
+ repr/ui.py,sha256=29pl_paJEWfCUu4GcDaePlmeWTQ0B3MFhD7de6LgJsM,6105
29
+ repr/updater.py,sha256=rybVVIxDk6RmKaswyKogVun8egVaonyH9nh_q2Rr0Vk,7335
30
+ repr/dashboard/__init__.py,sha256=gnS9cajkmGD-HFiYSDe5vKlzLOpsysicK-YU7TnpAMI,162
31
+ repr/dashboard/build.py,sha256=k01__9ECsdlsPR-0AAfv0p920VOUBQ68-xPkwF4o69g,3519
32
+ repr/dashboard/manager.py,sha256=HFRM2WUqvg3kzPx5K9AIdxWejMTTBEcd-zg8VCxtvaY,6879
33
+ repr/dashboard/server.py,sha256=bzh8WF2JrbxP7xIUjq4wrHiUEoLVi9RTf4RrYeamGyA,55319
34
+ repr/dashboard/dist/favicon.svg,sha256=_GU6Mv99D6MDjMP0TYIbtP1AJWoliAshDg-M47jdWjY,246
35
+ repr/dashboard/dist/index.html,sha256=PcdV2dKqNFOfuVrOmwgwPnszakLxyLYSyx_sIOsIe60,457
36
+ repr/dashboard/dist/assets/index-B-aCjaCw.js,sha256=v9vra_751KIpzs5z88UjcqyQ2cFYCH2wszJ32-X1aUw,154193
37
+ repr/dashboard/dist/assets/index-BYFVbEev.css,sha256=4oJsN21PA3lcgNF_Odx-3SalE0vU8Olot827hrB-Jrk,35198
38
+ repr/dashboard/dist/assets/index-BrrhyJFO.css,sha256=B0YN9FVh4hNlb5Sq-oZR8EvLTbj2boTit5VHYBgYYOs,30794
39
+ repr/dashboard/dist/assets/index-C7Gzxc4f.js,sha256=GyBY5jBflG97EhHLVcrqet2zUeE_KxejgHCUdmLBhiE,154295
40
+ repr/dashboard/dist/assets/index-CQdMXo6g.js,sha256=vT5yZHkZMx14hR2KLg07ecR0l7OVmqr9HvBiP-NLtiE,153831
41
+ repr/dashboard/dist/assets/index-CcEg74ts.js,sha256=3q45hpLvDBnr1BXgJqMsR0SR136wqq6LRsFFXxRFobc,131744
42
+ repr/dashboard/dist/assets/index-Cerc-iA_.js,sha256=SYypLBfj__-UvtdnH63TlQOqnrWJMNE3bfw162KWO74,145935
43
+ repr/dashboard/dist/assets/index-CjVcBW2L.css,sha256=A2-2av1DjlTaXSGCGwtZ5Re-9e_9evZXnPWEmObE4zo,35183
44
+ repr/dashboard/dist/assets/index-Cs8ofFGd.js,sha256=FXtpRH-rXtvkNI3NLSab7m-ammiL1fukhio9i4A8cFU,153438
45
+ repr/dashboard/dist/assets/index-Dfl3mR5E.js,sha256=2cJfa7nndn6gJUD4q0sUbfZ4bXGzWvVJJ_PGH94dvII,141440
46
+ repr/dashboard/dist/assets/index-DwN0SeMc.css,sha256=iOFXiTDPv_gcm81Bi1zlLayBKs-5xizz0zhgeK-_i-A,36564
47
+ repr/dashboard/dist/assets/index-YFch_e0S.js,sha256=0Zj1ogi_yAQo-19it1wuKySgdhXySLEHYszEJ-ukZgs,154295
48
+ repr/loaders/__init__.py,sha256=GJLT6NlrcMOg7C64cD8Yiu70rTMXqs2ayK-Iz9HpwOY,647
49
+ repr/loaders/base.py,sha256=AE9lFr8ZvPYt6KDwBTkNv3JF5A2QakVn9gA_ha77GLU,4308
50
+ repr/loaders/claude_code.py,sha256=sWAiQgNVWsdw9qUDcfHDBi5k6jBL7D8_SI3NAEsL-io,11106
51
+ repr/loaders/clawdbot.py,sha256=daKfTjI16tZrlwGUNaVOnLwxKyV6eW102CgIOu4mwAw,12064
52
+ repr/loaders/gemini_antigravity.py,sha256=_0HhtC1TwB2gSu20Bcco_W-V3Bt6v9O2iqOL6kIHQLU,13766
53
+ repr_cli-0.2.18.dist-info/licenses/LICENSE,sha256=tI16Ry3IQhjsde6weJ_in6czzWW2EF4Chz1uicyDLAA,1061
54
+ repr_cli-0.2.18.dist-info/METADATA,sha256=ntG6B0qQ8SrMx-bM6xWw8sIR3RIeqmhZruOC8bmXDDA,13387
55
+ repr_cli-0.2.18.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
56
+ repr_cli-0.2.18.dist-info/entry_points.txt,sha256=dlI-TCeDTW2rBC_nvOvMhwLihU4qsgD5r4Ot5BuVqSw,56
57
+ repr_cli-0.2.18.dist-info/top_level.txt,sha256=LNgPqdJPQnlicRve7uzI4a6rEUdcxHrNkUq_2w7eeiA,5
58
+ repr_cli-0.2.18.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.10.1)
2
+ Generator: setuptools (80.10.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,2 +1,3 @@
1
1
  [console_scripts]
2
2
  repr = repr.cli:app
3
+ rp = repr.cli:app
@@ -1,26 +0,0 @@
1
- repr/__init__.py,sha256=jraImidqaPxv03Uy76zPtnAcNnOl5KLZSXYBzxI85BI,446
2
- repr/__main__.py,sha256=N7amYwdGB3yzk2ZJJbtH2hhESNkDuhDL11dDEm5Kl60,166
3
- repr/api.py,sha256=SfcoGysf_G5tXegM-zk_Rzsh5Zs59ptzUlStWgrHXP0,13812
4
- repr/auth.py,sha256=xFtDRtdecT0T8ToTEpGinJoLf53zRQSdKSoPWjeyvoQ,12252
5
- repr/cli.py,sha256=BVPRkjcxf9J13z-gFNG35tTAp2_2kAFPcpuzS6BEQWo,91630
6
- repr/config.py,sha256=bxgOfsIAiTiYFclmEetPNRmrP1BcOn6z0rvo_rghdIc,30600
7
- repr/discovery.py,sha256=2RYmJleqV7TbxIMMYP2izkEBUeKH7U1F-U4KAUlUNww,14816
8
- repr/doctor.py,sha256=-ZyaRu_tb0vpT-ol7vLkgke68UQAxbpwqbubTJqbWsU,13443
9
- repr/extractor.py,sha256=lGPN8gwTF_ZSezoQoPBMnf95nCJArGIteNiInfb39FM,10566
10
- repr/hooks.py,sha256=Af78HiuxhN7OEu4npiZWoxFktuMlNUtSTjYgYDEzzFQ,20011
11
- repr/keychain.py,sha256=CpKU3tjFZVEPgiHiplSAtBQFDPA6qOSovv4IXXgJXbY,6957
12
- repr/llm.py,sha256=inABX2kwEhPnON7sjCzcTMZZeCf0k3G08LyrKsi6Sko,14637
13
- repr/openai_analysis.py,sha256=PE3UBTXcmJe-uwZUKR00PAfghGHIgsxHi1SWA15uRKM,28883
14
- repr/privacy.py,sha256=sN1tkoZjCDSwAjkQWeH6rHaLrtv727yT1HNHQ54GRis,9834
15
- repr/storage.py,sha256=rjHTBs-6tFds6Cb-hA9Ezdjrd-MS6pFCZ3E0tDTAdzg,15775
16
- repr/telemetry.py,sha256=M1NribTkiezpvweLrdbJxKDU2mlTe7frke6sUP0Yhiw,7000
17
- repr/templates.py,sha256=O9pONIkrfWR-JqIyRp6C7e_csnD50SgbJxNNTZSjWFg,7449
18
- repr/tools.py,sha256=opAWp34PY_8So9n_nYQQiF3OpokQsJebanhOdjX867Q,21130
19
- repr/ui.py,sha256=29pl_paJEWfCUu4GcDaePlmeWTQ0B3MFhD7de6LgJsM,6105
20
- repr/updater.py,sha256=rybVVIxDk6RmKaswyKogVun8egVaonyH9nh_q2Rr0Vk,7335
21
- repr_cli-0.2.16.dist-info/licenses/LICENSE,sha256=tI16Ry3IQhjsde6weJ_in6czzWW2EF4Chz1uicyDLAA,1061
22
- repr_cli-0.2.16.dist-info/METADATA,sha256=jgPfM4b5FYsxRGmRJCS0j_MTGtPfhd0-mdQO1FDZwEo,11396
23
- repr_cli-0.2.16.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
24
- repr_cli-0.2.16.dist-info/entry_points.txt,sha256=SJoKgNB-fRy6O2T_lztFr9T3ND_BQl0ijWxNW-J7dUU,38
25
- repr_cli-0.2.16.dist-info/top_level.txt,sha256=LNgPqdJPQnlicRve7uzI4a6rEUdcxHrNkUq_2w7eeiA,5
26
- repr_cli-0.2.16.dist-info/RECORD,,