@research-copilot/plugin 1.1.15
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/LICENSE +21 -0
- package/README.md +82 -0
- package/dist/.claude-plugin/plugin.json +11 -0
- package/dist/.codex-plugin/plugin.toml +9 -0
- package/dist/.cursor-plugin/plugin.json +9 -0
- package/dist/.gemini-plugin/plugin.json +11 -0
- package/dist/.opencode-plugin/plugin.json +11 -0
- package/dist/.windsurf-plugin/plugin.json +11 -0
- package/dist/README.md +57 -0
- package/dist/agents/rc-experiment.md +203 -0
- package/dist/agents/rc-ideation.md +224 -0
- package/dist/agents/rc-literature.md +228 -0
- package/dist/agents/rc-plan.md +189 -0
- package/dist/agents/rc-polisher.md +166 -0
- package/dist/agents/rc-rebuttal.md +194 -0
- package/dist/agents/rc-reviewer.md +187 -0
- package/dist/agents/rc-update-spec.md +231 -0
- package/dist/agents/rc-verify.md +234 -0
- package/dist/agents/rc-writer.md +161 -0
- package/dist/skills/experiment-design/SKILL.md +331 -0
- package/dist/skills/full-research-workflow/SKILL.md +363 -0
- package/dist/skills/literature-search/SKILL.md +244 -0
- package/dist/skills/paper-polish/SKILL.md +320 -0
- package/dist/skills/sanity-check/SKILL.md +449 -0
- package/dist/skills/submission-sprint/SKILL.md +361 -0
- package/package.json +35 -0
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: submission-sprint
|
|
3
|
+
description: Pre-submission optimization loop (review → fix → review). Use before final submission to close all P0 gaps.
|
|
4
|
+
triggers:
|
|
5
|
+
- "submission sprint"
|
|
6
|
+
- "pre-submit check"
|
|
7
|
+
- "final optimization"
|
|
8
|
+
- "close all gaps"
|
|
9
|
+
- "prepare for submission"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Submission Sprint
|
|
13
|
+
|
|
14
|
+
Iterative review-fix loop until all P0 (priority 0) gaps are closed. Runs multiple optimization cycles before final submission.
|
|
15
|
+
|
|
16
|
+
## When to Use
|
|
17
|
+
|
|
18
|
+
Use this skill when:
|
|
19
|
+
- User asks to "run submission sprint"
|
|
20
|
+
- Paper is ready for final pre-submission optimization
|
|
21
|
+
- User wants to "close all gaps before submission"
|
|
22
|
+
- Paper polishing is complete and needs final quality check
|
|
23
|
+
|
|
24
|
+
Do NOT use when:
|
|
25
|
+
- Paper is still being drafted (too early)
|
|
26
|
+
- User wants a single review pass (use review skills)
|
|
27
|
+
- Only specific issues need fixing (handle directly)
|
|
28
|
+
|
|
29
|
+
## Task-First Protocol
|
|
30
|
+
|
|
31
|
+
Before starting, check if sprint task exists:
|
|
32
|
+
|
|
33
|
+
```powershell
|
|
34
|
+
# Check for existing sprint task
|
|
35
|
+
$taskFile = "C:\PythonProject\research_copilot\.rc\tasks\submission-sprint.json"
|
|
36
|
+
if (Test-Path $taskFile) {
|
|
37
|
+
$task = Get-Content $taskFile | ConvertFrom-Json
|
|
38
|
+
Write-Host "Found existing sprint task: iteration $($task.current_iteration)"
|
|
39
|
+
} else {
|
|
40
|
+
Write-Host "No existing task. Will create one."
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Create task if needed:
|
|
45
|
+
|
|
46
|
+
```powershell
|
|
47
|
+
# Create submission sprint task
|
|
48
|
+
$paperFile = "paper_polished.tex" # Or user-specified file
|
|
49
|
+
rc task create --type sprint --paper $paperFile --max-iterations 5 --output .rc/tasks/submission-sprint.json
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Auto-Context Loading
|
|
53
|
+
|
|
54
|
+
Read all context files before starting loop:
|
|
55
|
+
|
|
56
|
+
```powershell
|
|
57
|
+
# Load task context
|
|
58
|
+
$taskFile = "C:\PythonProject\research_copilot\.rc\tasks\submission-sprint.json"
|
|
59
|
+
if (Test-Path $taskFile) {
|
|
60
|
+
$task = Get-Content $taskFile | ConvertFrom-Json
|
|
61
|
+
Write-Host "Paper file: $($task.paper_file)"
|
|
62
|
+
Write-Host "Max iterations: $($task.max_iterations)"
|
|
63
|
+
|
|
64
|
+
# Load PRD for research requirements
|
|
65
|
+
$prdFile = "C:\PythonProject\research_copilot\.rc\prd.md"
|
|
66
|
+
if (Test-Path $prdFile) {
|
|
67
|
+
$prd = Get-Content $prdFile -Raw
|
|
68
|
+
Write-Host "PRD loaded"
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
# Load venue specification
|
|
72
|
+
$venueFile = "C:\PythonProject\research_copilot\.rc\venue\spec.json"
|
|
73
|
+
if (Test-Path $venueFile) {
|
|
74
|
+
$venue = Get-Content $venueFile | ConvertFrom-Json
|
|
75
|
+
Write-Host "Venue: $($venue.name)"
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
# Load previous review if exists
|
|
79
|
+
$reviewFile = "C:\PythonProject\research_copilot\.rc\sprint\review_latest.json"
|
|
80
|
+
if (Test-Path $reviewFile) {
|
|
81
|
+
$review = Get-Content $reviewFile | ConvertFrom-Json
|
|
82
|
+
Write-Host "Previous review found: $($review.p0_count) P0 gaps"
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Loop Logic
|
|
88
|
+
|
|
89
|
+
Iterative review-fix cycle:
|
|
90
|
+
|
|
91
|
+
```powershell
|
|
92
|
+
# Initialize loop
|
|
93
|
+
$iteration = 1
|
|
94
|
+
$maxIterations = 5
|
|
95
|
+
$p0Count = 999 # Start with high number
|
|
96
|
+
|
|
97
|
+
Write-Host "Starting Submission Sprint..."
|
|
98
|
+
|
|
99
|
+
while ($p0Count -gt 0 -and $iteration -le $maxIterations) {
|
|
100
|
+
Write-Host "`n=== Iteration $iteration/$maxIterations ==="
|
|
101
|
+
|
|
102
|
+
# Step 1: Review paper
|
|
103
|
+
Write-Host "Step 1: Reviewing paper..."
|
|
104
|
+
rc task start sprint-review-$iteration
|
|
105
|
+
|
|
106
|
+
# Dispatch to reviewer agent with comprehensive prompt
|
|
107
|
+
Write-Host "Dispatching to @rc-reviewer agent..."
|
|
108
|
+
|
|
109
|
+
# Agent reviews for:
|
|
110
|
+
# - P0 (blocking): Missing citations, logic gaps, incorrect claims
|
|
111
|
+
# - P1 (important): Clarity issues, weak motivation, missing details
|
|
112
|
+
# - P2 (nice-to-have): Style improvements, minor wording
|
|
113
|
+
|
|
114
|
+
# Wait for review completion
|
|
115
|
+
$status = rc task status sprint-review-$iteration
|
|
116
|
+
Write-Host "Review status: $status"
|
|
117
|
+
|
|
118
|
+
# Load review results
|
|
119
|
+
$reviewFile = "C:\PythonProject\research_copilot\.rc\sprint\review_$iteration.json"
|
|
120
|
+
if (-not (Test-Path $reviewFile)) {
|
|
121
|
+
Write-Host "ERROR: Review file not generated"
|
|
122
|
+
break
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
$review = Get-Content $reviewFile | ConvertFrom-Json
|
|
126
|
+
$p0Count = ($review.gaps | Where-Object { $_.priority -eq "P0" }).Count
|
|
127
|
+
$p1Count = ($review.gaps | Where-Object { $_.priority -eq "P1" }).Count
|
|
128
|
+
|
|
129
|
+
Write-Host "Gaps found: $p0Count P0, $p1Count P1"
|
|
130
|
+
|
|
131
|
+
# Mark review task complete
|
|
132
|
+
rc task complete sprint-review-$iteration
|
|
133
|
+
|
|
134
|
+
# Step 2: Check termination condition
|
|
135
|
+
if ($p0Count -eq 0) {
|
|
136
|
+
Write-Host "✓ All P0 gaps closed!"
|
|
137
|
+
|
|
138
|
+
if ($p1Count -le 2) {
|
|
139
|
+
Write-Host "✓ P1 gaps acceptable (≤2)"
|
|
140
|
+
Write-Host "Submission sprint complete!"
|
|
141
|
+
break
|
|
142
|
+
} else {
|
|
143
|
+
Write-Host "WARNING: $p1Count P1 gaps remain (target: ≤2)"
|
|
144
|
+
Write-Host "Consider one more iteration for P1 gaps"
|
|
145
|
+
}
|
|
146
|
+
break
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
# Step 3: Create fix tasks for P0 gaps
|
|
150
|
+
Write-Host "Step 2: Creating fix tasks for P0 gaps..."
|
|
151
|
+
|
|
152
|
+
$p0Gaps = $review.gaps | Where-Object { $_.priority -eq "P0" }
|
|
153
|
+
$fixTasks = @()
|
|
154
|
+
|
|
155
|
+
foreach ($gap in $p0Gaps) {
|
|
156
|
+
$fixTaskId = "sprint-fix-$iteration-$($gap.id)"
|
|
157
|
+
|
|
158
|
+
rc task create `
|
|
159
|
+
--type fix `
|
|
160
|
+
--title "Fix P0 gap: $($gap.title)" `
|
|
161
|
+
--description "$($gap.description)" `
|
|
162
|
+
--location "$($gap.location)" `
|
|
163
|
+
--output ".rc/tasks/$fixTaskId.json"
|
|
164
|
+
|
|
165
|
+
$fixTasks += $fixTaskId
|
|
166
|
+
Write-Host "Created fix task: $fixTaskId"
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
# Step 4: Execute all fix tasks
|
|
170
|
+
Write-Host "Step 3: Executing fix tasks..."
|
|
171
|
+
|
|
172
|
+
foreach ($fixTaskId in $fixTasks) {
|
|
173
|
+
Write-Host "Fixing: $fixTaskId"
|
|
174
|
+
rc task start $fixTaskId
|
|
175
|
+
|
|
176
|
+
# Dispatch to fixer agent
|
|
177
|
+
# Agent reads gap context and applies targeted fix
|
|
178
|
+
|
|
179
|
+
rc task complete $fixTaskId
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
Write-Host "✓ All P0 fixes applied"
|
|
183
|
+
|
|
184
|
+
# Step 5: Increment iteration
|
|
185
|
+
$iteration++
|
|
186
|
+
|
|
187
|
+
# Save iteration state
|
|
188
|
+
$stateFile = "C:\PythonProject\research_copilot\.rc\sprint\state.json"
|
|
189
|
+
@{
|
|
190
|
+
current_iteration = $iteration
|
|
191
|
+
p0_count = $p0Count
|
|
192
|
+
p1_count = $p1Count
|
|
193
|
+
} | ConvertTo-Json | Out-File -FilePath $stateFile -Encoding utf8
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
# Final status
|
|
197
|
+
if ($p0Count -eq 0) {
|
|
198
|
+
Write-Host "`n✓ Submission sprint SUCCESS"
|
|
199
|
+
Write-Host "Paper ready for final sanity check"
|
|
200
|
+
} else {
|
|
201
|
+
Write-Host "`nWARNING: Sprint ended with $p0Count P0 gaps remaining"
|
|
202
|
+
Write-Host "Max iterations ($maxIterations) reached"
|
|
203
|
+
}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
## Termination Condition
|
|
207
|
+
|
|
208
|
+
Loop exits when:
|
|
209
|
+
|
|
210
|
+
1. **Success**: `P0_COUNT = 0` AND `P1_COUNT ≤ 2`
|
|
211
|
+
2. **Max iterations**: Reached `max_iterations` (default: 5)
|
|
212
|
+
3. **Error**: Review or fix task fails
|
|
213
|
+
|
|
214
|
+
## Quality Gates
|
|
215
|
+
|
|
216
|
+
Before marking sprint complete:
|
|
217
|
+
|
|
218
|
+
```powershell
|
|
219
|
+
# Quality gate checks
|
|
220
|
+
$passed = $true
|
|
221
|
+
|
|
222
|
+
# Gate 1: Zero P0 gaps
|
|
223
|
+
$reviewFile = "C:\PythonProject\research_copilot\.rc\sprint\review_latest.json"
|
|
224
|
+
if (Test-Path $reviewFile) {
|
|
225
|
+
$review = Get-Content $reviewFile | ConvertFrom-Json
|
|
226
|
+
$p0Count = ($review.gaps | Where-Object { $_.priority -eq "P0" }).Count
|
|
227
|
+
|
|
228
|
+
if ($p0Count -gt 0) {
|
|
229
|
+
Write-Host "FAIL: $p0Count P0 gaps remain"
|
|
230
|
+
$passed = $false
|
|
231
|
+
}
|
|
232
|
+
} else {
|
|
233
|
+
Write-Host "FAIL: No review file found"
|
|
234
|
+
$passed = $false
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
# Gate 2: P1 gaps acceptable
|
|
238
|
+
if (Test-Path $reviewFile) {
|
|
239
|
+
$p1Count = ($review.gaps | Where-Object { $_.priority -eq "P1" }).Count
|
|
240
|
+
|
|
241
|
+
if ($p1Count -gt 2) {
|
|
242
|
+
Write-Host "WARNING: $p1Count P1 gaps remain (target: ≤2)"
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
# Gate 3: Paper still compiles
|
|
247
|
+
$paperFile = "paper_polished.tex"
|
|
248
|
+
if (Test-Path $paperFile) {
|
|
249
|
+
$compileResult = pdflatex -interaction=nonstopmode $paperFile 2>&1
|
|
250
|
+
if ($LASTEXITCODE -ne 0) {
|
|
251
|
+
Write-Host "FAIL: LaTeX compilation failed after fixes"
|
|
252
|
+
$passed = $false
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
if ($passed) {
|
|
257
|
+
Write-Host "All quality gates passed"
|
|
258
|
+
rc task complete submission-sprint
|
|
259
|
+
} else {
|
|
260
|
+
Write-Host "Quality gates failed - manual review needed"
|
|
261
|
+
}
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
## Report Format
|
|
265
|
+
|
|
266
|
+
Generate final report after sprint completes:
|
|
267
|
+
|
|
268
|
+
```markdown
|
|
269
|
+
# Submission Sprint Report
|
|
270
|
+
|
|
271
|
+
**Paper**: {paper_file}
|
|
272
|
+
**Date**: {date}
|
|
273
|
+
**Iterations**: {iteration_count}
|
|
274
|
+
**Final Status**: {READY / NEEDS_WORK}
|
|
275
|
+
|
|
276
|
+
## Iteration Summary
|
|
277
|
+
|
|
278
|
+
| Iteration | P0 Gaps | P1 Gaps | Fixes Applied |
|
|
279
|
+
|-----------|---------|---------|---------------|
|
|
280
|
+
| 1 | 8 | 12 | 8 |
|
|
281
|
+
| 2 | 3 | 10 | 3 |
|
|
282
|
+
| 3 | 0 | 5 | 0 |
|
|
283
|
+
|
|
284
|
+
## P0 Gaps Closed
|
|
285
|
+
|
|
286
|
+
1. **Missing citation for Baseline-X** (§3.2)
|
|
287
|
+
- Fixed: Added \cite{baseline-x-2023}
|
|
288
|
+
|
|
289
|
+
2. **Logic gap in novelty claim** (§1)
|
|
290
|
+
- Fixed: Added explicit comparison to prior work
|
|
291
|
+
|
|
292
|
+
3. **Inconsistent metric definition** (§4.1)
|
|
293
|
+
- Fixed: Aligned formula with implementation
|
|
294
|
+
|
|
295
|
+
[... all P0 gaps listed ...]
|
|
296
|
+
|
|
297
|
+
## Remaining P1 Gaps
|
|
298
|
+
|
|
299
|
+
1. **Weak motivation in §1** (line 45-48)
|
|
300
|
+
- Suggestion: Strengthen with real-world application
|
|
301
|
+
|
|
302
|
+
2. **Missing ablation detail** (§4.3)
|
|
303
|
+
- Suggestion: Add table showing component contributions
|
|
304
|
+
|
|
305
|
+
## Quality Gate Results
|
|
306
|
+
|
|
307
|
+
✓ P0 gaps: 0 (target: 0)
|
|
308
|
+
⚠ P1 gaps: 2 (target: ≤2)
|
|
309
|
+
✓ LaTeX compiles: Yes
|
|
310
|
+
✓ Page limit: 9/10 pages
|
|
311
|
+
✓ All figures referenced
|
|
312
|
+
|
|
313
|
+
## Files Generated
|
|
314
|
+
|
|
315
|
+
- `.rc/sprint/review_1.json`: First review results
|
|
316
|
+
- `.rc/sprint/review_2.json`: Second review results
|
|
317
|
+
- `.rc/sprint/review_3.json`: Final review results
|
|
318
|
+
- `.rc/sprint/state.json`: Sprint state tracking
|
|
319
|
+
- `.rc/sprint/report.md`: This report
|
|
320
|
+
|
|
321
|
+
## Next Steps
|
|
322
|
+
|
|
323
|
+
- [ ] Run sanity-check skill for final audit
|
|
324
|
+
- [ ] Generate submission package
|
|
325
|
+
- [ ] Upload to venue submission system
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
## Error Recovery
|
|
329
|
+
|
|
330
|
+
If sprint fails or gets stuck:
|
|
331
|
+
|
|
332
|
+
```powershell
|
|
333
|
+
# Check sprint state
|
|
334
|
+
$stateFile = "C:\PythonProject\research_copilot\.rc\sprint\state.json"
|
|
335
|
+
if (Test-Path $stateFile) {
|
|
336
|
+
$state = Get-Content $stateFile | ConvertFrom-Json
|
|
337
|
+
Write-Host "Sprint stuck at iteration $($state.current_iteration)"
|
|
338
|
+
Write-Host "P0 gaps: $($state.p0_count)"
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
# Review latest gaps manually
|
|
342
|
+
$reviewFile = "C:\PythonProject\research_copilot\.rc\sprint\review_latest.json"
|
|
343
|
+
if (Test-Path $reviewFile) {
|
|
344
|
+
$review = Get-Content $reviewFile | ConvertFrom-Json
|
|
345
|
+
$p0Gaps = $review.gaps | Where-Object { $_.priority -eq "P0" }
|
|
346
|
+
|
|
347
|
+
Write-Host "`nRemaining P0 gaps:"
|
|
348
|
+
foreach ($gap in $p0Gaps) {
|
|
349
|
+
Write-Host "- $($gap.title) ($($gap.location))"
|
|
350
|
+
Write-Host " $($gap.description)"
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
# Reset sprint if needed
|
|
355
|
+
Write-Host "`nTo reset sprint: Remove-Item .rc/sprint/* -Force"
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
## Example Usage
|
|
359
|
+
|
|
360
|
+
```
|
|
361
|
+
User: "Run submission sprint to close all gaps"
|
package/package.json
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@research-copilot/plugin",
|
|
3
|
+
"version": "1.1.15",
|
|
4
|
+
"description": "Research Copilot plugin for Claude Code - AI research automation skills and agents",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist"
|
|
10
|
+
],
|
|
11
|
+
"keywords": [
|
|
12
|
+
"claude-code",
|
|
13
|
+
"plugin",
|
|
14
|
+
"research",
|
|
15
|
+
"ai",
|
|
16
|
+
"automation"
|
|
17
|
+
],
|
|
18
|
+
"author": "ldm2060",
|
|
19
|
+
"license": "MIT",
|
|
20
|
+
"repository": {
|
|
21
|
+
"type": "git",
|
|
22
|
+
"url": "https://github.com/ldm2060/research_copilot.git",
|
|
23
|
+
"directory": "packages/plugin"
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"tsx": "^4.19.0"
|
|
27
|
+
},
|
|
28
|
+
"publishConfig": {
|
|
29
|
+
"access": "public"
|
|
30
|
+
},
|
|
31
|
+
"scripts": {
|
|
32
|
+
"build": "tsx build.ts",
|
|
33
|
+
"dev": "pnpm build && pnpm link"
|
|
34
|
+
}
|
|
35
|
+
}
|