cite-agent 1.3.9__py3-none-any.whl → 1.4.3__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.
- cite_agent/__init__.py +13 -13
- cite_agent/__version__.py +1 -1
- cite_agent/action_first_mode.py +150 -0
- cite_agent/adaptive_providers.py +413 -0
- cite_agent/archive_api_client.py +186 -0
- cite_agent/auth.py +0 -1
- cite_agent/auto_expander.py +70 -0
- cite_agent/cache.py +379 -0
- cite_agent/circuit_breaker.py +370 -0
- cite_agent/citation_network.py +377 -0
- cite_agent/cli.py +8 -16
- cite_agent/cli_conversational.py +113 -3
- cite_agent/confidence_calibration.py +381 -0
- cite_agent/deduplication.py +325 -0
- cite_agent/enhanced_ai_agent.py +689 -371
- cite_agent/error_handler.py +228 -0
- cite_agent/execution_safety.py +329 -0
- cite_agent/full_paper_reader.py +239 -0
- cite_agent/observability.py +398 -0
- cite_agent/offline_mode.py +348 -0
- cite_agent/paper_comparator.py +368 -0
- cite_agent/paper_summarizer.py +420 -0
- cite_agent/pdf_extractor.py +350 -0
- cite_agent/proactive_boundaries.py +266 -0
- cite_agent/quality_gate.py +442 -0
- cite_agent/request_queue.py +390 -0
- cite_agent/response_enhancer.py +257 -0
- cite_agent/response_formatter.py +458 -0
- cite_agent/response_pipeline.py +295 -0
- cite_agent/response_style_enhancer.py +259 -0
- cite_agent/self_healing.py +418 -0
- cite_agent/similarity_finder.py +524 -0
- cite_agent/streaming_ui.py +13 -9
- cite_agent/thinking_blocks.py +308 -0
- cite_agent/tool_orchestrator.py +416 -0
- cite_agent/trend_analyzer.py +540 -0
- cite_agent/unpaywall_client.py +226 -0
- {cite_agent-1.3.9.dist-info → cite_agent-1.4.3.dist-info}/METADATA +15 -1
- cite_agent-1.4.3.dist-info/RECORD +62 -0
- cite_agent-1.3.9.dist-info/RECORD +0 -32
- {cite_agent-1.3.9.dist-info → cite_agent-1.4.3.dist-info}/WHEEL +0 -0
- {cite_agent-1.3.9.dist-info → cite_agent-1.4.3.dist-info}/entry_points.txt +0 -0
- {cite_agent-1.3.9.dist-info → cite_agent-1.4.3.dist-info}/licenses/LICENSE +0 -0
- {cite_agent-1.3.9.dist-info → cite_agent-1.4.3.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Unpaywall Integration - Find Legal Open Access PDFs
|
|
4
|
+
Unpaywall.org provides free, legal access to millions of research papers
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import logging
|
|
8
|
+
from typing import Optional, Dict, Any
|
|
9
|
+
import aiohttp
|
|
10
|
+
import asyncio
|
|
11
|
+
|
|
12
|
+
logger = logging.getLogger(__name__)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class UnpaywallClient:
|
|
16
|
+
"""
|
|
17
|
+
Client for Unpaywall API - finds legal open access versions of papers
|
|
18
|
+
|
|
19
|
+
Unpaywall indexes 30M+ open access papers from:
|
|
20
|
+
- University repositories
|
|
21
|
+
- Author websites
|
|
22
|
+
- Preprint servers (arXiv, bioRxiv)
|
|
23
|
+
- Journal websites
|
|
24
|
+
|
|
25
|
+
Usage:
|
|
26
|
+
client = UnpaywallClient(email="your@email.edu")
|
|
27
|
+
pdf_url = await client.get_pdf_url(doi="10.1234/example")
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
BASE_URL = "https://api.unpaywall.org/v2"
|
|
31
|
+
|
|
32
|
+
def __init__(self, email: str = "research@cite-agent.com"):
|
|
33
|
+
"""
|
|
34
|
+
Initialize Unpaywall client
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
email: Your email (required by Unpaywall API for rate limiting)
|
|
38
|
+
"""
|
|
39
|
+
self.email = email
|
|
40
|
+
self.timeout = aiohttp.ClientTimeout(total=10)
|
|
41
|
+
|
|
42
|
+
async def get_pdf_url(self, doi: str) -> Optional[str]:
|
|
43
|
+
"""
|
|
44
|
+
Get free, legal PDF URL for a paper by DOI
|
|
45
|
+
|
|
46
|
+
Args:
|
|
47
|
+
doi: DOI of the paper (e.g., "10.1016/j.cell.2023.01.001")
|
|
48
|
+
|
|
49
|
+
Returns:
|
|
50
|
+
PDF URL if open access version exists, None otherwise
|
|
51
|
+
|
|
52
|
+
Example:
|
|
53
|
+
>>> client = UnpaywallClient()
|
|
54
|
+
>>> url = await client.get_pdf_url("10.1371/journal.pone.0000001")
|
|
55
|
+
>>> print(url)
|
|
56
|
+
'https://journals.plos.org/plosone/article/file?id=10.1371/...'
|
|
57
|
+
"""
|
|
58
|
+
try:
|
|
59
|
+
# Clean DOI
|
|
60
|
+
doi = doi.strip().replace("https://doi.org/", "")
|
|
61
|
+
|
|
62
|
+
url = f"{self.BASE_URL}/{doi}"
|
|
63
|
+
params = {"email": self.email}
|
|
64
|
+
|
|
65
|
+
async with aiohttp.ClientSession(timeout=self.timeout) as session:
|
|
66
|
+
async with session.get(url, params=params) as response:
|
|
67
|
+
if response.status == 404:
|
|
68
|
+
logger.debug(f"DOI not found in Unpaywall: {doi}")
|
|
69
|
+
return None
|
|
70
|
+
|
|
71
|
+
if response.status != 200:
|
|
72
|
+
logger.warning(f"Unpaywall API error {response.status} for DOI: {doi}")
|
|
73
|
+
return None
|
|
74
|
+
|
|
75
|
+
data = await response.json()
|
|
76
|
+
return self._extract_best_pdf_url(data)
|
|
77
|
+
|
|
78
|
+
except asyncio.TimeoutError:
|
|
79
|
+
logger.warning(f"Unpaywall timeout for DOI: {doi}")
|
|
80
|
+
return None
|
|
81
|
+
except Exception as e:
|
|
82
|
+
logger.error(f"Unpaywall error for DOI {doi}: {e}")
|
|
83
|
+
return None
|
|
84
|
+
|
|
85
|
+
async def get_full_metadata(self, doi: str) -> Optional[Dict[str, Any]]:
|
|
86
|
+
"""
|
|
87
|
+
Get full metadata including all OA locations
|
|
88
|
+
|
|
89
|
+
Returns:
|
|
90
|
+
{
|
|
91
|
+
'is_oa': bool,
|
|
92
|
+
'best_oa_location': {...},
|
|
93
|
+
'oa_locations': [...],
|
|
94
|
+
'doi': str,
|
|
95
|
+
'title': str,
|
|
96
|
+
'year': int,
|
|
97
|
+
...
|
|
98
|
+
}
|
|
99
|
+
"""
|
|
100
|
+
try:
|
|
101
|
+
doi = doi.strip().replace("https://doi.org/", "")
|
|
102
|
+
url = f"{self.BASE_URL}/{doi}"
|
|
103
|
+
params = {"email": self.email}
|
|
104
|
+
|
|
105
|
+
async with aiohttp.ClientSession(timeout=self.timeout) as session:
|
|
106
|
+
async with session.get(url, params=params) as response:
|
|
107
|
+
if response.status != 200:
|
|
108
|
+
return None
|
|
109
|
+
return await response.json()
|
|
110
|
+
|
|
111
|
+
except Exception as e:
|
|
112
|
+
logger.error(f"Unpaywall metadata error: {e}")
|
|
113
|
+
return None
|
|
114
|
+
|
|
115
|
+
def _extract_best_pdf_url(self, unpaywall_data: Dict[str, Any]) -> Optional[str]:
|
|
116
|
+
"""
|
|
117
|
+
Extract the best PDF URL from Unpaywall response
|
|
118
|
+
Preference: publisher version > accepted manuscript > submitted manuscript
|
|
119
|
+
"""
|
|
120
|
+
if not unpaywall_data.get('is_oa'):
|
|
121
|
+
return None
|
|
122
|
+
|
|
123
|
+
# Try best OA location first
|
|
124
|
+
best_location = unpaywall_data.get('best_oa_location')
|
|
125
|
+
if best_location:
|
|
126
|
+
pdf_url = best_location.get('url_for_pdf') or best_location.get('url')
|
|
127
|
+
if pdf_url and pdf_url.endswith('.pdf'):
|
|
128
|
+
return pdf_url
|
|
129
|
+
|
|
130
|
+
# Try all OA locations
|
|
131
|
+
oa_locations = unpaywall_data.get('oa_locations', [])
|
|
132
|
+
for location in oa_locations:
|
|
133
|
+
# Prefer publisher or repository versions
|
|
134
|
+
version = location.get('version', '')
|
|
135
|
+
if version in ('publishedVersion', 'acceptedVersion'):
|
|
136
|
+
pdf_url = location.get('url_for_pdf') or location.get('url')
|
|
137
|
+
if pdf_url:
|
|
138
|
+
return pdf_url
|
|
139
|
+
|
|
140
|
+
# Fallback: any PDF URL
|
|
141
|
+
for location in oa_locations:
|
|
142
|
+
pdf_url = location.get('url_for_pdf') or location.get('url')
|
|
143
|
+
if pdf_url:
|
|
144
|
+
return pdf_url
|
|
145
|
+
|
|
146
|
+
return None
|
|
147
|
+
|
|
148
|
+
async def batch_get_pdfs(self, dois: list[str]) -> Dict[str, Optional[str]]:
|
|
149
|
+
"""
|
|
150
|
+
Get PDF URLs for multiple DOIs in parallel
|
|
151
|
+
|
|
152
|
+
Args:
|
|
153
|
+
dois: List of DOIs
|
|
154
|
+
|
|
155
|
+
Returns:
|
|
156
|
+
Dict mapping DOI -> PDF URL (or None if not available)
|
|
157
|
+
|
|
158
|
+
Example:
|
|
159
|
+
>>> client = UnpaywallClient()
|
|
160
|
+
>>> dois = ["10.1371/journal.pone.0000001", "10.1038/s41586-023-06221-2"]
|
|
161
|
+
>>> results = await client.batch_get_pdfs(dois)
|
|
162
|
+
>>> print(results)
|
|
163
|
+
{
|
|
164
|
+
'10.1371/journal.pone.0000001': 'https://...',
|
|
165
|
+
'10.1038/s41586-023-06221-2': None # Paywalled
|
|
166
|
+
}
|
|
167
|
+
"""
|
|
168
|
+
tasks = [self.get_pdf_url(doi) for doi in dois]
|
|
169
|
+
results = await asyncio.gather(*tasks, return_exceptions=True)
|
|
170
|
+
|
|
171
|
+
output = {}
|
|
172
|
+
for doi, result in zip(dois, results):
|
|
173
|
+
if isinstance(result, Exception):
|
|
174
|
+
output[doi] = None
|
|
175
|
+
else:
|
|
176
|
+
output[doi] = result
|
|
177
|
+
|
|
178
|
+
return output
|
|
179
|
+
|
|
180
|
+
async def check_availability(self, doi: str) -> Dict[str, Any]:
|
|
181
|
+
"""
|
|
182
|
+
Check if paper is available and get status
|
|
183
|
+
|
|
184
|
+
Returns:
|
|
185
|
+
{
|
|
186
|
+
'is_available': bool,
|
|
187
|
+
'access_type': str, # 'open_access' | 'paywalled' | 'unknown'
|
|
188
|
+
'pdf_url': str | None,
|
|
189
|
+
'version': str | None, # 'publishedVersion' | 'acceptedVersion' | etc
|
|
190
|
+
'license': str | None
|
|
191
|
+
}
|
|
192
|
+
"""
|
|
193
|
+
metadata = await self.get_full_metadata(doi)
|
|
194
|
+
|
|
195
|
+
if not metadata:
|
|
196
|
+
return {
|
|
197
|
+
'is_available': False,
|
|
198
|
+
'access_type': 'unknown',
|
|
199
|
+
'pdf_url': None,
|
|
200
|
+
'version': None,
|
|
201
|
+
'license': None
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
is_oa = metadata.get('is_oa', False)
|
|
205
|
+
best_location = metadata.get('best_oa_location')
|
|
206
|
+
|
|
207
|
+
if is_oa and best_location:
|
|
208
|
+
return {
|
|
209
|
+
'is_available': True,
|
|
210
|
+
'access_type': 'open_access',
|
|
211
|
+
'pdf_url': self._extract_best_pdf_url(metadata),
|
|
212
|
+
'version': best_location.get('version'),
|
|
213
|
+
'license': best_location.get('license')
|
|
214
|
+
}
|
|
215
|
+
else:
|
|
216
|
+
return {
|
|
217
|
+
'is_available': False,
|
|
218
|
+
'access_type': 'paywalled',
|
|
219
|
+
'pdf_url': None,
|
|
220
|
+
'version': None,
|
|
221
|
+
'license': None
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
# Global instance
|
|
226
|
+
unpaywall = UnpaywallClient()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cite-agent
|
|
3
|
-
Version: 1.3
|
|
3
|
+
Version: 1.4.3
|
|
4
4
|
Summary: Terminal AI assistant for academic research with citation verification
|
|
5
5
|
Home-page: https://github.com/Spectating101/cite-agent
|
|
6
6
|
Author: Cite-Agent Team
|
|
@@ -194,6 +194,11 @@ cite-agent "我的p值是0.05,這顯著嗎?"
|
|
|
194
194
|
cite-agent "天空是藍色的嗎?"
|
|
195
195
|
```
|
|
196
196
|
|
|
197
|
+
#### Runtime Controls
|
|
198
|
+
|
|
199
|
+
- Responses render immediately—there’s no artificial typing delay.
|
|
200
|
+
- Press `Ctrl+C` while the agent is thinking or streaming to interrupt and ask a different question on the spot.
|
|
201
|
+
|
|
197
202
|
### Python API Reference
|
|
198
203
|
|
|
199
204
|
#### EnhancedNocturnalAgent
|
|
@@ -436,6 +441,15 @@ export NOCTURNAL_DEBUG=1
|
|
|
436
441
|
cite-agent "your query"
|
|
437
442
|
```
|
|
438
443
|
|
|
444
|
+
### Documentation
|
|
445
|
+
|
|
446
|
+
For developers and contributors:
|
|
447
|
+
- **[SYSTEM_STATUS.md](SYSTEM_STATUS.md)** - Current system status, test results, how to run
|
|
448
|
+
- **[ARCHITECTURE_EXPLAINED.md](ARCHITECTURE_EXPLAINED.md)** - Why the codebase is complex
|
|
449
|
+
- **[CHANGELOG.md](CHANGELOG.md)** - Version history and changes
|
|
450
|
+
- **[INSTALL.md](INSTALL.md)** - Detailed installation instructions
|
|
451
|
+
- **[TESTING.md](TESTING.md)** - How to run tests
|
|
452
|
+
|
|
439
453
|
### Support
|
|
440
454
|
|
|
441
455
|
- **Documentation**: [Full docs](https://docs.cite-agent.com)
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
cite_agent/__init__.py,sha256=HAm9GEsbvdyGpF0tV5vygG5RjSF9k7sDiyh4SO-QxKo,1634
|
|
2
|
+
cite_agent/__main__.py,sha256=6x3lltwG-iZHeQbN12rwvdkPDfd2Rmdk71tOOaC89Mw,179
|
|
3
|
+
cite_agent/__version__.py,sha256=BqOI5y46o1G1RWC9bF1DPL-YM68lGYPmZt1pn6FZFZs,22
|
|
4
|
+
cite_agent/account_client.py,sha256=yLuzhIJoIZuXHXGbaVMzDxRATQwcy-wiaLnUrDuwUhI,5725
|
|
5
|
+
cite_agent/action_first_mode.py,sha256=-ntbEzT1kdgjTKDmnoyS93LzEmfrxr0Pdu6QQ5aHqUo,5312
|
|
6
|
+
cite_agent/adaptive_providers.py,sha256=kfO-8fN9IyCE61zyDpQn3dck2h5ZgQ3ghLI2NnA2JUw,15740
|
|
7
|
+
cite_agent/agent_backend_only.py,sha256=H4DH4hmKhT0T3rQLAb2xnnJVjxl3pOZaljL9r6JndFY,6314
|
|
8
|
+
cite_agent/archive_api_client.py,sha256=Az0ts2LN9tzgeHMOkj2zXRAOqElIo4BGrzry8FwPsEA,5921
|
|
9
|
+
cite_agent/ascii_plotting.py,sha256=lk8BaECs6fmjtp4iH12G09-frlRehAN7HLhHt2crers,8570
|
|
10
|
+
cite_agent/auth.py,sha256=5EveDbJ_j5U78HmQE9CCkEwXT8hRCVg29wzTLB8KmM0,9793
|
|
11
|
+
cite_agent/auto_expander.py,sha256=xoHH8hX8th49TISQGyKPGLJk0Dn-KgKkbcXFPKvjMPw,2501
|
|
12
|
+
cite_agent/backend_only_client.py,sha256=WqLF8x7aXTro2Q3ehqKMsdCg53s6fNk9Hy86bGxqmmw,2561
|
|
13
|
+
cite_agent/cache.py,sha256=1fs97FAf6r-xGgUHQ3CCvhP5y0DDH86bUc0apMDUHBc,11591
|
|
14
|
+
cite_agent/circuit_breaker.py,sha256=igET6Sz0hHaRZlBjNJi6qp714Ng7VGCzq4Fpdv_8qqQ,13159
|
|
15
|
+
cite_agent/citation_network.py,sha256=EyFIeYdr8aHmxMUNPEnPH4DRe0ScTAp6Qn5T_xDmCLQ,13194
|
|
16
|
+
cite_agent/cli.py,sha256=yKXLEX2LliTZpvNdwf7EadfN7uwTUNw8O2KsBKQxHok,42741
|
|
17
|
+
cite_agent/cli_conversational.py,sha256=U3DiFE8Is8jZCQpR2fiMUGc7uJUAVALUOsTGusUSQBU,15002
|
|
18
|
+
cite_agent/cli_enhanced.py,sha256=EAaSw9qtiYRWUXF6_05T19GCXlz9cCSz6n41ASnXIPc,7407
|
|
19
|
+
cite_agent/cli_workflow.py,sha256=4oS_jW9D8ylovXbEFdsyLQONt4o0xxR4Xatfcc4tnBs,11641
|
|
20
|
+
cite_agent/confidence_calibration.py,sha256=3c5uHl_czs2xcO-COOco8t0WNPfuXgMHTHoSjOirxOc,12720
|
|
21
|
+
cite_agent/conversation_archive.py,sha256=FV1EpcYTc732Oc5oc7EbrpaxUQkSNxP-KCEKbr8k2GA,4965
|
|
22
|
+
cite_agent/dashboard.py,sha256=VGV5XQU1PnqvTsxfKMcue3j2ri_nvm9Be6O5aVays_w,10502
|
|
23
|
+
cite_agent/deduplication.py,sha256=eXMA65U7pO2tQWmRbrA1oFoYsSsPaSNVxFkt--rQnZg,9824
|
|
24
|
+
cite_agent/enhanced_ai_agent.py,sha256=xyGbyYuSC-3ZXPIpVPmQ1sYfVU57DDDX-ImSSXZjuvQ,259657
|
|
25
|
+
cite_agent/error_handler.py,sha256=fFNNzfOnicsbVkYNj-NZZj8JuFuVi_PzT_ig8ucG-30,9598
|
|
26
|
+
cite_agent/execution_safety.py,sha256=T6zS9_tmLwDa0aGGnGm06-T59KcS7o8PQpoBQkrrgy0,11732
|
|
27
|
+
cite_agent/full_paper_reader.py,sha256=3UWpahwu9d55HCpOwcLBJvjfoj2lBV8xm-atIsMBAEM,9019
|
|
28
|
+
cite_agent/observability.py,sha256=U8ha4jT7ih0dl6_tIlSr6xz68MHrR3N69xt4eBNveRg,14479
|
|
29
|
+
cite_agent/offline_mode.py,sha256=dfY4dzsHVC4VWdcIIS_5vB-w_DA3Cgmk-MoA4-rR_6g,10969
|
|
30
|
+
cite_agent/paper_comparator.py,sha256=RcHn2V07VOKP9yamCTbEiQbOfcFb2lXuZ672pnsd6q8,12631
|
|
31
|
+
cite_agent/paper_summarizer.py,sha256=uxJg1RupDMSgok5omAnBy3OH4MsXbauTljwklJum8ak,14220
|
|
32
|
+
cite_agent/pdf_extractor.py,sha256=-BElF6Vvl-XoZ3a_RwxIcs6Aqvp3UOpSapHGIJidTqA,12643
|
|
33
|
+
cite_agent/proactive_boundaries.py,sha256=r1UFzFuukHzPKi1Yp1PBRgE4HGRV8SLmDPZBn9ZiEDY,8129
|
|
34
|
+
cite_agent/project_detector.py,sha256=fPl5cLTy_oyufqrQ7RJ5IRVdofZoPqDRaQXW6tRtBJc,6086
|
|
35
|
+
cite_agent/quality_gate.py,sha256=LLVL7c-jVw5G7Iu7P6jazgtt-N5KHlVtmzVGiQBzEAM,15194
|
|
36
|
+
cite_agent/rate_limiter.py,sha256=-0fXx8Tl4zVB4O28n9ojU2weRo-FBF1cJo9Z5jC2LxQ,10908
|
|
37
|
+
cite_agent/request_queue.py,sha256=wvC4mNw-K39tnFiMun9Ii2icZ-1xnacbkfUiVU_-424,13684
|
|
38
|
+
cite_agent/response_enhancer.py,sha256=NwUkAMmbYhuW3JTAy2jz8CADdnviOPfkwYxm_a04pM4,9228
|
|
39
|
+
cite_agent/response_formatter.py,sha256=Do5VhqTHC7L7e-wBGgrySXCx8UlUVKjC_F9Qw6sP-fk,14108
|
|
40
|
+
cite_agent/response_pipeline.py,sha256=ktjOvfAHNlIMKi_Wn__-kzL60XfTZEtHt61YZybAWlA,10719
|
|
41
|
+
cite_agent/response_style_enhancer.py,sha256=6jKdP4HjJ3_BNi-ryAmmAh14VSQPqZ-cFRjBbaEQGB0,9577
|
|
42
|
+
cite_agent/self_healing.py,sha256=fkqprNNB47RFA7ZkgcqPbllHl2VlWl7r7Z9LLunV_3A,15145
|
|
43
|
+
cite_agent/session_manager.py,sha256=B0MXSOsXdhO3DlvTG7S8x6pmGlYEDvIZ-o8TZM23niQ,9444
|
|
44
|
+
cite_agent/setup_config.py,sha256=3m2e3gw0srEWA0OygdRo64r-8HK5ohyXfct0c__CF3s,16817
|
|
45
|
+
cite_agent/similarity_finder.py,sha256=AWQv4n_PnKB5CW9eTcp1Qcz53jz7MMhyM6i_2zT_E4Q,18219
|
|
46
|
+
cite_agent/streaming_ui.py,sha256=7MoiXvwzkoB8-TnvEU658gqKJgQVG_PuzNMCc9JH_iM,8005
|
|
47
|
+
cite_agent/telemetry.py,sha256=55kXdHvI24ZsEkbFtihcjIfJt2oiSXcEpLzTxQ3KCdQ,2916
|
|
48
|
+
cite_agent/thinking_blocks.py,sha256=Jseqv_y9VoV4KoVfQUSDDwd4orRPG6vnLq-aiqyXu3M,10375
|
|
49
|
+
cite_agent/tool_orchestrator.py,sha256=Bgd70gtvLOYEyx0prFiKR9EYRqsDZroJR0vJG2dxT80,13538
|
|
50
|
+
cite_agent/trend_analyzer.py,sha256=rdaAq0WN4DoJ6hTLOCKCavVXcuINBgrlug8OFQBzUO4,18900
|
|
51
|
+
cite_agent/ui.py,sha256=r1OAeY3NSeqhAjJYmEBH9CaennBuibFAz1Mur6YF80E,6134
|
|
52
|
+
cite_agent/unpaywall_client.py,sha256=sBw4ienLbzF8HMZw_hKHCiqFoXOVvOj-Jt5r1aBnmCs,7395
|
|
53
|
+
cite_agent/updater.py,sha256=udoAAN4gBKAvKDV7JTh2FJO_jIhNk9bby4x6n188MEY,8458
|
|
54
|
+
cite_agent/web_search.py,sha256=FZCuNO7MAITiOIbpPbJyt2bzbXPzQla-9amJpnMpW_4,6520
|
|
55
|
+
cite_agent/workflow.py,sha256=a0YC0Mzz4or1C5t2gZcuJBQ0uMOZrooaI8eLu2kkI0k,15086
|
|
56
|
+
cite_agent/workflow_integration.py,sha256=A9ua0DN5pRtuU0cAwrUTGvqt2SXKhEHQbrHx16EGnDM,10910
|
|
57
|
+
cite_agent-1.4.3.dist-info/licenses/LICENSE,sha256=XJkyO4IymhSUniN1ENY6lLrL2729gn_rbRlFK6_Hi9M,1074
|
|
58
|
+
cite_agent-1.4.3.dist-info/METADATA,sha256=5qRVIPffckAaInNqrnaZnkbapUrtUIcp_csKpCb-20I,12859
|
|
59
|
+
cite_agent-1.4.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
60
|
+
cite_agent-1.4.3.dist-info/entry_points.txt,sha256=bJ0u28nFIxQKH1PWQ2ak4PV-FAjhoxTC7YADEdDenFw,83
|
|
61
|
+
cite_agent-1.4.3.dist-info/top_level.txt,sha256=NNfD8pxDZzBK8tjDIpCs2BW9Va-OQ5qUFbEx0SgmyIE,11
|
|
62
|
+
cite_agent-1.4.3.dist-info/RECORD,,
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
cite_agent/__init__.py,sha256=wAXV2v8nNOmIAd0rh8196ItBl9hHWBVOBl5Re4VB77I,1645
|
|
2
|
-
cite_agent/__main__.py,sha256=6x3lltwG-iZHeQbN12rwvdkPDfd2Rmdk71tOOaC89Mw,179
|
|
3
|
-
cite_agent/__version__.py,sha256=SaWgUI6v92kVfF_Qdoxbfc38bwA34RuDGZmXMqa5g3c,22
|
|
4
|
-
cite_agent/account_client.py,sha256=yLuzhIJoIZuXHXGbaVMzDxRATQwcy-wiaLnUrDuwUhI,5725
|
|
5
|
-
cite_agent/agent_backend_only.py,sha256=H4DH4hmKhT0T3rQLAb2xnnJVjxl3pOZaljL9r6JndFY,6314
|
|
6
|
-
cite_agent/ascii_plotting.py,sha256=lk8BaECs6fmjtp4iH12G09-frlRehAN7HLhHt2crers,8570
|
|
7
|
-
cite_agent/auth.py,sha256=YtoGXKwcLkZQbop37iYYL9BzRWBRPlt_D9p71VGViS4,9833
|
|
8
|
-
cite_agent/backend_only_client.py,sha256=WqLF8x7aXTro2Q3ehqKMsdCg53s6fNk9Hy86bGxqmmw,2561
|
|
9
|
-
cite_agent/cli.py,sha256=edXwkxOvDJgQBJr5L2w5fREzqxi10-Iti5Es5gV7pmU,43249
|
|
10
|
-
cite_agent/cli_conversational.py,sha256=RAmgRNRyB8gQ8QLvWU-Tt23j2lmA34rQNT5F3_7SOq0,11141
|
|
11
|
-
cite_agent/cli_enhanced.py,sha256=EAaSw9qtiYRWUXF6_05T19GCXlz9cCSz6n41ASnXIPc,7407
|
|
12
|
-
cite_agent/cli_workflow.py,sha256=4oS_jW9D8ylovXbEFdsyLQONt4o0xxR4Xatfcc4tnBs,11641
|
|
13
|
-
cite_agent/conversation_archive.py,sha256=FV1EpcYTc732Oc5oc7EbrpaxUQkSNxP-KCEKbr8k2GA,4965
|
|
14
|
-
cite_agent/dashboard.py,sha256=VGV5XQU1PnqvTsxfKMcue3j2ri_nvm9Be6O5aVays_w,10502
|
|
15
|
-
cite_agent/enhanced_ai_agent.py,sha256=kXtZjcpGU6pXnC209BluOgytVEftwVB5Pcbxe3Y6-XY,243565
|
|
16
|
-
cite_agent/project_detector.py,sha256=fPl5cLTy_oyufqrQ7RJ5IRVdofZoPqDRaQXW6tRtBJc,6086
|
|
17
|
-
cite_agent/rate_limiter.py,sha256=-0fXx8Tl4zVB4O28n9ojU2weRo-FBF1cJo9Z5jC2LxQ,10908
|
|
18
|
-
cite_agent/session_manager.py,sha256=B0MXSOsXdhO3DlvTG7S8x6pmGlYEDvIZ-o8TZM23niQ,9444
|
|
19
|
-
cite_agent/setup_config.py,sha256=3m2e3gw0srEWA0OygdRo64r-8HK5ohyXfct0c__CF3s,16817
|
|
20
|
-
cite_agent/streaming_ui.py,sha256=N6TWOo7GVQ_Ynfw73JCfrdGcLIU-PwbS3GbsHQHegmg,7810
|
|
21
|
-
cite_agent/telemetry.py,sha256=55kXdHvI24ZsEkbFtihcjIfJt2oiSXcEpLzTxQ3KCdQ,2916
|
|
22
|
-
cite_agent/ui.py,sha256=r1OAeY3NSeqhAjJYmEBH9CaennBuibFAz1Mur6YF80E,6134
|
|
23
|
-
cite_agent/updater.py,sha256=udoAAN4gBKAvKDV7JTh2FJO_jIhNk9bby4x6n188MEY,8458
|
|
24
|
-
cite_agent/web_search.py,sha256=FZCuNO7MAITiOIbpPbJyt2bzbXPzQla-9amJpnMpW_4,6520
|
|
25
|
-
cite_agent/workflow.py,sha256=a0YC0Mzz4or1C5t2gZcuJBQ0uMOZrooaI8eLu2kkI0k,15086
|
|
26
|
-
cite_agent/workflow_integration.py,sha256=A9ua0DN5pRtuU0cAwrUTGvqt2SXKhEHQbrHx16EGnDM,10910
|
|
27
|
-
cite_agent-1.3.9.dist-info/licenses/LICENSE,sha256=XJkyO4IymhSUniN1ENY6lLrL2729gn_rbRlFK6_Hi9M,1074
|
|
28
|
-
cite_agent-1.3.9.dist-info/METADATA,sha256=G7UmQPgIHXxS-6hgiWml8L7U23XsLb7JlB0nh0NVxo4,12231
|
|
29
|
-
cite_agent-1.3.9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
30
|
-
cite_agent-1.3.9.dist-info/entry_points.txt,sha256=bJ0u28nFIxQKH1PWQ2ak4PV-FAjhoxTC7YADEdDenFw,83
|
|
31
|
-
cite_agent-1.3.9.dist-info/top_level.txt,sha256=NNfD8pxDZzBK8tjDIpCs2BW9Va-OQ5qUFbEx0SgmyIE,11
|
|
32
|
-
cite_agent-1.3.9.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|