traceable-research-mcp 0.1.0__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.
- traceable_research_mcp-0.1.0/.agents/plugins/marketplace.json +17 -0
- traceable_research_mcp-0.1.0/.claude/settings.local.json +8 -0
- traceable_research_mcp-0.1.0/.claude-plugin/marketplace.json +17 -0
- traceable_research_mcp-0.1.0/.github/workflows/ci.yml +46 -0
- traceable_research_mcp-0.1.0/.gitignore +22 -0
- traceable_research_mcp-0.1.0/.superpowers/sdd/progress.md +3 -0
- traceable_research_mcp-0.1.0/.superpowers/sdd/task-0-brief.md +36 -0
- traceable_research_mcp-0.1.0/.superpowers/sdd/task-0-report.md +129 -0
- traceable_research_mcp-0.1.0/.superpowers/sdd/task-0-review.diff +2573 -0
- traceable_research_mcp-0.1.0/LICENSE +22 -0
- traceable_research_mcp-0.1.0/NOTICE +9 -0
- traceable_research_mcp-0.1.0/PKG-INFO +19 -0
- traceable_research_mcp-0.1.0/PUBLISHING.md +102 -0
- traceable_research_mcp-0.1.0/README.md +65 -0
- traceable_research_mcp-0.1.0/docs/superpowers/plans/2026-07-20-deep-research-toolkit.md +1482 -0
- traceable_research_mcp-0.1.0/docs//350/250/255/350/250/210/350/252/252/346/230/216.md +624 -0
- traceable_research_mcp-0.1.0/plugins/deep-research-toolkit/.claude-plugin/plugin.json +20 -0
- traceable_research_mcp-0.1.0/plugins/deep-research-toolkit/.codex-plugin/plugin.json +24 -0
- traceable_research_mcp-0.1.0/plugins/deep-research-toolkit/.mcp.json +13 -0
- traceable_research_mcp-0.1.0/plugins/deep-research-toolkit/skills/deep-research/SKILL.md +40 -0
- traceable_research_mcp-0.1.0/plugins/deep-research-toolkit/skills/deep-research/references/evidence-rules.md +22 -0
- traceable_research_mcp-0.1.0/pyproject.toml +51 -0
- traceable_research_mcp-0.1.0/src/deep_research/__init__.py +1 -0
- traceable_research_mcp-0.1.0/src/deep_research/cli.py +113 -0
- traceable_research_mcp-0.1.0/src/deep_research/config.py +46 -0
- traceable_research_mcp-0.1.0/src/deep_research/deduplicate.py +69 -0
- traceable_research_mcp-0.1.0/src/deep_research/errors.py +28 -0
- traceable_research_mcp-0.1.0/src/deep_research/evidence.py +56 -0
- traceable_research_mcp-0.1.0/src/deep_research/http.py +60 -0
- traceable_research_mcp-0.1.0/src/deep_research/jobs.py +56 -0
- traceable_research_mcp-0.1.0/src/deep_research/mcp/__init__.py +0 -0
- traceable_research_mcp-0.1.0/src/deep_research/mcp/server.py +182 -0
- traceable_research_mcp-0.1.0/src/deep_research/models.py +145 -0
- traceable_research_mcp-0.1.0/src/deep_research/normalize.py +30 -0
- traceable_research_mcp-0.1.0/src/deep_research/paths.py +63 -0
- traceable_research_mcp-0.1.0/src/deep_research/pdf.py +102 -0
- traceable_research_mcp-0.1.0/src/deep_research/pipeline.py +203 -0
- traceable_research_mcp-0.1.0/src/deep_research/providers/__init__.py +0 -0
- traceable_research_mcp-0.1.0/src/deep_research/providers/base.py +23 -0
- traceable_research_mcp-0.1.0/src/deep_research/providers/crossref.py +66 -0
- traceable_research_mcp-0.1.0/src/deep_research/providers/openalex.py +87 -0
- traceable_research_mcp-0.1.0/src/deep_research/providers/semantic_scholar.py +80 -0
- traceable_research_mcp-0.1.0/src/deep_research/providers/unpaywall.py +49 -0
- traceable_research_mcp-0.1.0/src/deep_research/reports/__init__.py +4 -0
- traceable_research_mcp-0.1.0/src/deep_research/reports/common.py +25 -0
- traceable_research_mcp-0.1.0/src/deep_research/reports/csv_export.py +45 -0
- traceable_research_mcp-0.1.0/src/deep_research/reports/docx_export.py +63 -0
- traceable_research_mcp-0.1.0/src/deep_research/reports/exporter.py +60 -0
- traceable_research_mcp-0.1.0/src/deep_research/reports/markdown.py +47 -0
- traceable_research_mcp-0.1.0/src/deep_research/reports/validate.py +44 -0
- traceable_research_mcp-0.1.0/src/deep_research/screening.py +58 -0
- traceable_research_mcp-0.1.0/src/deep_research/state.py +45 -0
- traceable_research_mcp-0.1.0/src/deep_research/storage.py +364 -0
- traceable_research_mcp-0.1.0/tests/__init__.py +0 -0
- traceable_research_mcp-0.1.0/tests/contract/__init__.py +0 -0
- traceable_research_mcp-0.1.0/tests/contract/test_mcp_tools.py +142 -0
- traceable_research_mcp-0.1.0/tests/contract/test_plugin_files.py +85 -0
- traceable_research_mcp-0.1.0/tests/fixtures/pdfs/two-page-text.pdf +0 -0
- traceable_research_mcp-0.1.0/tests/fixtures/provider_payloads/crossref.json +14 -0
- traceable_research_mcp-0.1.0/tests/fixtures/provider_payloads/openalex.json +19 -0
- traceable_research_mcp-0.1.0/tests/fixtures/provider_payloads/semantic_scholar.json +17 -0
- traceable_research_mcp-0.1.0/tests/fixtures/provider_payloads/unpaywall.json +8 -0
- traceable_research_mcp-0.1.0/tests/integration/__init__.py +0 -0
- traceable_research_mcp-0.1.0/tests/integration/helpers.py +45 -0
- traceable_research_mcp-0.1.0/tests/integration/test_online_smoke.py +45 -0
- traceable_research_mcp-0.1.0/tests/integration/test_pipeline.py +86 -0
- traceable_research_mcp-0.1.0/tests/integration/test_resume.py +86 -0
- traceable_research_mcp-0.1.0/tests/providers/__init__.py +0 -0
- traceable_research_mcp-0.1.0/tests/providers/helpers.py +19 -0
- traceable_research_mcp-0.1.0/tests/providers/test_crossref.py +39 -0
- traceable_research_mcp-0.1.0/tests/providers/test_openalex.py +84 -0
- traceable_research_mcp-0.1.0/tests/providers/test_semantic_scholar.py +44 -0
- traceable_research_mcp-0.1.0/tests/providers/test_unpaywall.py +47 -0
- traceable_research_mcp-0.1.0/tests/unit/__init__.py +0 -0
- traceable_research_mcp-0.1.0/tests/unit/test_config.py +39 -0
- traceable_research_mcp-0.1.0/tests/unit/test_deduplicate.py +26 -0
- traceable_research_mcp-0.1.0/tests/unit/test_evidence.py +52 -0
- traceable_research_mcp-0.1.0/tests/unit/test_models.py +28 -0
- traceable_research_mcp-0.1.0/tests/unit/test_normalize.py +26 -0
- traceable_research_mcp-0.1.0/tests/unit/test_paths.py +13 -0
- traceable_research_mcp-0.1.0/tests/unit/test_pdf.py +30 -0
- traceable_research_mcp-0.1.0/tests/unit/test_report_exports.py +113 -0
- traceable_research_mcp-0.1.0/tests/unit/test_report_validation.py +58 -0
- traceable_research_mcp-0.1.0/tests/unit/test_screening.py +25 -0
- traceable_research_mcp-0.1.0/tests/unit/test_state.py +12 -0
- traceable_research_mcp-0.1.0/tests/unit/test_storage.py +48 -0
- traceable_research_mcp-0.1.0/uv.lock +1147 -0
- traceable_research_mcp-0.1.0//346/223/215/344/275/234/350/252/252/346/230/216.md +177 -0
- traceable_research_mcp-0.1.0//350/252/252/346/230/216/346/233/270.md +465 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "deep-research-toolkit-local",
|
|
3
|
+
"plugins": [
|
|
4
|
+
{
|
|
5
|
+
"name": "deep-research-toolkit",
|
|
6
|
+
"description": "Traceable scholarly research tools exposed over MCP.",
|
|
7
|
+
"source": {
|
|
8
|
+
"type": "local",
|
|
9
|
+
"path": "./plugins/deep-research-toolkit"
|
|
10
|
+
},
|
|
11
|
+
"policy": {
|
|
12
|
+
"installation": "AVAILABLE",
|
|
13
|
+
"authentication": "ON_INSTALL"
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
|
|
3
|
+
"name": "deep-research-toolkit",
|
|
4
|
+
"description": "Traceable scholarly research tools exposed over MCP.",
|
|
5
|
+
"owner": {
|
|
6
|
+
"name": "Deep Research Toolkit contributors",
|
|
7
|
+
"url": "https://github.com/CYC2002tommy/Deep-Research-Agent"
|
|
8
|
+
},
|
|
9
|
+
"plugins": [
|
|
10
|
+
{
|
|
11
|
+
"name": "deep-research-toolkit",
|
|
12
|
+
"description": "Traceable literature review over free APIs with evidence-linked bilingual reports.",
|
|
13
|
+
"source": "./plugins/deep-research-toolkit",
|
|
14
|
+
"category": "productivity"
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
pull_request:
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
test:
|
|
9
|
+
strategy:
|
|
10
|
+
fail-fast: false
|
|
11
|
+
matrix:
|
|
12
|
+
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
13
|
+
python-version: ["3.11", "3.13"]
|
|
14
|
+
runs-on: ${{ matrix.os }}
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v4
|
|
17
|
+
- name: Install uv
|
|
18
|
+
uses: astral-sh/setup-uv@v5
|
|
19
|
+
with:
|
|
20
|
+
python-version: ${{ matrix.python-version }}
|
|
21
|
+
- name: Sync dependencies
|
|
22
|
+
run: uv sync --extra dev
|
|
23
|
+
- name: Ruff lint
|
|
24
|
+
run: uv run ruff check .
|
|
25
|
+
- name: Ruff format check
|
|
26
|
+
run: uv run ruff format --check .
|
|
27
|
+
- name: Mypy
|
|
28
|
+
run: uv run mypy src
|
|
29
|
+
- name: Tests
|
|
30
|
+
run: uv run pytest -m "not online" -q
|
|
31
|
+
|
|
32
|
+
build:
|
|
33
|
+
runs-on: ubuntu-latest
|
|
34
|
+
needs: test
|
|
35
|
+
steps:
|
|
36
|
+
- uses: actions/checkout@v4
|
|
37
|
+
- name: Install uv
|
|
38
|
+
uses: astral-sh/setup-uv@v5
|
|
39
|
+
with:
|
|
40
|
+
python-version: "3.11"
|
|
41
|
+
- name: Build wheel and sdist
|
|
42
|
+
run: uv build
|
|
43
|
+
- uses: actions/upload-artifact@v4
|
|
44
|
+
with:
|
|
45
|
+
name: dist
|
|
46
|
+
path: dist/*
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.pyc
|
|
4
|
+
.venv/
|
|
5
|
+
dist/
|
|
6
|
+
build/
|
|
7
|
+
*.egg-info/
|
|
8
|
+
|
|
9
|
+
# Partial writes
|
|
10
|
+
*.part
|
|
11
|
+
|
|
12
|
+
# Local research artifacts (reports/ and evidence/ are intentionally NOT ignored)
|
|
13
|
+
.deep-research/research.sqlite3
|
|
14
|
+
.deep-research/research.sqlite3-shm
|
|
15
|
+
.deep-research/research.sqlite3-wal
|
|
16
|
+
.deep-research/jobs/
|
|
17
|
+
.deep-research/sources/
|
|
18
|
+
.deep-research/cache/
|
|
19
|
+
.deep-research/quarantine/
|
|
20
|
+
|
|
21
|
+
# Local worktrees
|
|
22
|
+
.worktrees/
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
### Task 0: Initialize version control and preserve approved specifications
|
|
2
|
+
|
|
3
|
+
**Files:**
|
|
4
|
+
- Existing: docs/設計說明.md
|
|
5
|
+
- Existing: 說明書.md
|
|
6
|
+
- Existing: docs/superpowers/plans/2026-07-20-deep-research-toolkit.md
|
|
7
|
+
|
|
8
|
+
**Interfaces:**
|
|
9
|
+
- Produces: a main-branch Git repository with the approved documents as the
|
|
10
|
+
immutable implementation baseline.
|
|
11
|
+
|
|
12
|
+
- [ ] **Step 1: Initialize the repository**
|
|
13
|
+
|
|
14
|
+
Run:
|
|
15
|
+
|
|
16
|
+
git init -b main
|
|
17
|
+
|
|
18
|
+
Expected: Git reports an empty repository initialized on branch main.
|
|
19
|
+
|
|
20
|
+
- [ ] **Step 2: Verify the documentation baseline**
|
|
21
|
+
|
|
22
|
+
Run:
|
|
23
|
+
|
|
24
|
+
git status --short
|
|
25
|
+
|
|
26
|
+
Expected: the two specifications and this implementation plan appear as
|
|
27
|
+
untracked files; no product source files exist yet.
|
|
28
|
+
|
|
29
|
+
- [ ] **Step 3: Commit the approved documents**
|
|
30
|
+
|
|
31
|
+
Run:
|
|
32
|
+
|
|
33
|
+
git add docs/設計說明.md 說明書.md docs/superpowers/plans/2026-07-20-deep-research-toolkit.md
|
|
34
|
+
git commit -m "docs: define deep research toolkit"
|
|
35
|
+
|
|
36
|
+
Expected: commit succeeds and git status --short prints no output.
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# Task 0 Report — Initialize version control and preserve approved specifications
|
|
2
|
+
|
|
3
|
+
## Status
|
|
4
|
+
|
|
5
|
+
Completed successfully.
|
|
6
|
+
|
|
7
|
+
## Commands and results
|
|
8
|
+
|
|
9
|
+
1. `git init -b main`
|
|
10
|
+
- Result: initialized an empty Git repository on branch `main`.
|
|
11
|
+
2. `git status --short`
|
|
12
|
+
- Result: documentation and `.superpowers/` were untracked; no product source files existed.
|
|
13
|
+
3. `git add -- 'docs/設計說明.md' '說明書.md' 'docs/superpowers/plans/2026-07-20-deep-research-toolkit.md'`
|
|
14
|
+
- Result: staged exactly the three approved documentation files.
|
|
15
|
+
4. `git commit -m 'docs: define deep research toolkit'`
|
|
16
|
+
- Result: created root commit `844e317` (`docs: define deep research toolkit`).
|
|
17
|
+
5. `git status --short; git log -1 --oneline; git show --stat --oneline HEAD`
|
|
18
|
+
- Result: confirmed the expected commit and its three-file contents. The only remaining untracked path is `.superpowers/`.
|
|
19
|
+
|
|
20
|
+
## Files committed
|
|
21
|
+
|
|
22
|
+
- `docs/設計說明.md`
|
|
23
|
+
- `說明書.md`
|
|
24
|
+
- `docs/superpowers/plans/2026-07-20-deep-research-toolkit.md`
|
|
25
|
+
|
|
26
|
+
## Self-review
|
|
27
|
+
|
|
28
|
+
- Confirmed `main` is the repository's initial branch.
|
|
29
|
+
- Confirmed the root commit has subject `docs: define deep research toolkit`.
|
|
30
|
+
- Confirmed the commit contains exactly the three approved documents (2,545 inserted lines).
|
|
31
|
+
- Confirmed no `.superpowers/` scratch materials were staged or committed.
|
|
32
|
+
- Did not modify any approved Markdown document.
|
|
33
|
+
|
|
34
|
+
## Concerns
|
|
35
|
+
|
|
36
|
+
- `git status --short` remains non-empty because `.superpowers/` contains local planning/scratch files, including this report. These files were intentionally left untracked per the task requirements.
|
|
37
|
+
- Git emitted line-ending warnings indicating that files may be converted from LF to CRLF if Git rewrites them on this Windows workspace; the committed document content was not changed as part of this task.
|
|
38
|
+
|
|
39
|
+
## Fix Review
|
|
40
|
+
|
|
41
|
+
### Local-only scratch exclusion
|
|
42
|
+
|
|
43
|
+
Command:
|
|
44
|
+
|
|
45
|
+
```powershell
|
|
46
|
+
Add exactly `.superpowers/` to `.git/info/exclude`.
|
|
47
|
+
git status --short
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Output:
|
|
51
|
+
|
|
52
|
+
```text
|
|
53
|
+
(no output)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Result: `.superpowers/` is excluded only in the local Git metadata. No repository file, index entry, or commit was changed.
|
|
57
|
+
|
|
58
|
+
### Committed-blob verification
|
|
59
|
+
|
|
60
|
+
Command:
|
|
61
|
+
|
|
62
|
+
```powershell
|
|
63
|
+
$paths = @('docs/設計說明.md','說明書.md','docs/superpowers/plans/2026-07-20-deep-research-toolkit.md')
|
|
64
|
+
foreach ($p in $paths) {
|
|
65
|
+
$work = git hash-object -- $p
|
|
66
|
+
$head = git rev-parse "HEAD:$p"
|
|
67
|
+
Write-Output "$p`n working $work`n HEAD $head`n match $($work -eq $head)"
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Output:
|
|
72
|
+
|
|
73
|
+
```text
|
|
74
|
+
docs/設計說明.md
|
|
75
|
+
working 8afe6ea444006af485e703b1682738de199ed0d3
|
|
76
|
+
HEAD 8afe6ea444006af485e703b1682738de199ed0d3
|
|
77
|
+
match True
|
|
78
|
+
說明書.md
|
|
79
|
+
working ca8ea2527dbd64035d5e063ef86e48cb3350f380
|
|
80
|
+
HEAD ca8ea2527dbd64035d5e063ef86e48cb3350f380
|
|
81
|
+
match True
|
|
82
|
+
docs/superpowers/plans/2026-07-20-deep-research-toolkit.md
|
|
83
|
+
working 9369ef78c94923dcb51b41ade2cf3bfeb64354a7
|
|
84
|
+
HEAD 9369ef78c94923dcb51b41ade2cf3bfeb64354a7
|
|
85
|
+
match True
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Timestamp evidence
|
|
89
|
+
|
|
90
|
+
Command:
|
|
91
|
+
|
|
92
|
+
```powershell
|
|
93
|
+
git log -1 --format='commit %H%ncommit timestamp %ci'
|
|
94
|
+
Get-Item 'docs/設計說明.md','說明書.md','docs/superpowers/plans/2026-07-20-deep-research-toolkit.md' |
|
|
95
|
+
ForEach-Object { Write-Output "$($_.FullName)`n LastWriteTime $($_.LastWriteTime.ToString('yyyy-MM-dd HH:mm:ss K'))" }
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Output:
|
|
99
|
+
|
|
100
|
+
```text
|
|
101
|
+
commit 844e3174ad2c421874ccaf4adaa4a8fd2f340a36
|
|
102
|
+
commit timestamp 2026-07-20 01:39:59 +0800
|
|
103
|
+
...\docs\設計說明.md
|
|
104
|
+
LastWriteTime 2026-07-20 01:25:29 +08:00
|
|
105
|
+
...\說明書.md
|
|
106
|
+
LastWriteTime 2026-07-20 01:25:29 +08:00
|
|
107
|
+
...\docs\superpowers\plans\2026-07-20-deep-research-toolkit.md
|
|
108
|
+
LastWriteTime 2026-07-20 01:35:59 +08:00
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
The document LastWriteTime values precede the commit timestamp, and the blob hashes exactly match `HEAD`; Task 0 did not rewrite the approved Markdown files.
|
|
112
|
+
|
|
113
|
+
### Final commit state
|
|
114
|
+
|
|
115
|
+
Command:
|
|
116
|
+
|
|
117
|
+
```powershell
|
|
118
|
+
git status --porcelain=v1
|
|
119
|
+
git rev-parse HEAD
|
|
120
|
+
git log -1 --format='%s'
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Output:
|
|
124
|
+
|
|
125
|
+
```text
|
|
126
|
+
(no status output)
|
|
127
|
+
844e3174ad2c421874ccaf4adaa4a8fd2f340a36
|
|
128
|
+
docs: define deep research toolkit
|
|
129
|
+
```
|