create-academic-research 0.1.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/LICENSE +21 -0
- package/README.md +160 -0
- package/SECURITY.md +8 -0
- package/dist/bin/academic-research.d.ts +2 -0
- package/dist/bin/academic-research.js +3 -0
- package/dist/bin/create-academic-research.d.ts +2 -0
- package/dist/bin/create-academic-research.js +3 -0
- package/dist/src/capabilities.d.ts +54 -0
- package/dist/src/capabilities.js +487 -0
- package/dist/src/cli.d.ts +3 -0
- package/dist/src/cli.js +451 -0
- package/dist/src/files.d.ts +8 -0
- package/dist/src/files.js +44 -0
- package/dist/src/names.d.ts +3 -0
- package/dist/src/names.js +64 -0
- package/dist/src/project.d.ts +28 -0
- package/dist/src/project.js +229 -0
- package/dist/src/prompts.d.ts +18 -0
- package/dist/src/prompts.js +29 -0
- package/dist/src/runner.d.ts +12 -0
- package/dist/src/runner.js +22 -0
- package/dist/src/stack.d.ts +30 -0
- package/dist/src/stack.js +180 -0
- package/package.json +59 -0
- package/template/AGENTS.md +47 -0
- package/template/README.md +68 -0
- package/template/analysis_outputs/.gitkeep +0 -0
- package/template/artifacts/artifact-checklist.md +7 -0
- package/template/artifacts/cache/.gitkeep +0 -0
- package/template/artifacts/data/.gitkeep +0 -0
- package/template/artifacts/models/.gitkeep +0 -0
- package/template/artifacts/releases/.gitkeep +0 -0
- package/template/configs/agent-stack.yaml +5 -0
- package/template/configs/capabilities.yaml +4 -0
- package/template/configs/default.yaml +15 -0
- package/template/data/external/.gitkeep +0 -0
- package/template/data/interim/.gitkeep +0 -0
- package/template/data/processed/.gitkeep +0 -0
- package/template/data/raw/.gitkeep +0 -0
- package/template/debug_outputs/.gitkeep +0 -0
- package/template/docs/agent/capability-profile.md +6 -0
- package/template/docs/agent/mcp-setup.md +4 -0
- package/template/docs/agent/output-contracts.md +8 -0
- package/template/docs/agent/research-program.md +3 -0
- package/template/docs/data_dictionary/README.md +3 -0
- package/template/docs/ethics/data-governance.md +3 -0
- package/template/docs/methodology/evaluation-plan.md +3 -0
- package/template/docs/methodology/research-design.md +4 -0
- package/template/docs/methodology/threats-to-validity.md +3 -0
- package/template/docs/reproducibility/README.md +3 -0
- package/template/docs/venue/venue-strategy.md +3 -0
- package/template/experiments/registry.csv +1 -0
- package/template/experiments/templates/experiment-record.md +23 -0
- package/template/explore_outputs/.gitkeep +0 -0
- package/template/notebooks/README.md +5 -0
- package/template/outputs/figures/.gitkeep +0 -0
- package/template/outputs/models/.gitkeep +0 -0
- package/template/outputs/tables/.gitkeep +0 -0
- package/template/package.json +17 -0
- package/template/pyproject.toml +41 -0
- package/template/reports/paper/.gitkeep +0 -0
- package/template/reports/proposal/.gitkeep +0 -0
- package/template/reports/rebuttal/README.md +3 -0
- package/template/reports/reviews/README.md +3 -0
- package/template/reports/slides/.gitkeep +0 -0
- package/template/repro_outputs/.gitkeep +0 -0
- package/template/sota/gaps.md +9 -0
- package/template/sota/literature-matrix.csv +1 -0
- package/template/sota/prisma-flow.md +4 -0
- package/template/sota/screening-decisions.csv +1 -0
- package/template/sota/search-strategy.md +14 -0
- package/template/sota/synthesis.md +9 -0
- package/template/sources/assets/.gitkeep +0 -0
- package/template/sources/bib/citation-audit.csv +1 -0
- package/template/sources/bib/references.bib +1 -0
- package/template/sources/conversion-ledger.csv +1 -0
- package/template/sources/markdown/.gitkeep +0 -0
- package/template/sources/metadata/.gitkeep +0 -0
- package/template/sources/pdfs/.gitkeep +0 -0
- package/template/sources/source-ledger.csv +1 -0
- package/template/src/project_package/__init__.py +1 -0
- package/template/tests/test_project_structure.py +25 -0
- package/template/train_outputs/.gitkeep +0 -0
- package/template/wiki/claims/.gitkeep +0 -0
- package/template/wiki/concepts/.gitkeep +0 -0
- package/template/wiki/contradictions.md +3 -0
- package/template/wiki/decisions/.gitkeep +0 -0
- package/template/wiki/experiments/.gitkeep +0 -0
- package/template/wiki/index.md +9 -0
- package/template/wiki/log.md +1 -0
- package/template/wiki/methods/.gitkeep +0 -0
- package/template/wiki/open_questions.md +3 -0
- package/template/wiki/questions/.gitkeep +0 -0
- package/template/wiki/sources/.gitkeep +0 -0
- package/template/wiki/synthesis.md +3 -0
- package/template/wiki/templates/.gitkeep +0 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Vincenzo Imperati
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
# Create Academic Research
|
|
2
|
+
|
|
3
|
+
Create agent-ready academic research repositories with one command.
|
|
4
|
+
|
|
5
|
+
From the npm registry:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm create academic-research@latest my-project
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Equivalent explicit form:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npx create-academic-research@latest my-project
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
From GitHub:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npx --yes github:VincenzoImp/create-academic-research my-project
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
The generator creates a complete research repository, personalizes the project
|
|
24
|
+
name and Python package, configures project-local skills, writes MCP records,
|
|
25
|
+
and prepares a durable wiki/log structure for agentic academic work.
|
|
26
|
+
|
|
27
|
+
The wizard is discipline-general: it creates a clean structure for academic
|
|
28
|
+
research projects in any field. Its companion skill stack gives first-class
|
|
29
|
+
support to computer science research, including AI/ML, systems, HCI, security,
|
|
30
|
+
software engineering, databases, theory, robotics, IR, PL, graphics, and
|
|
31
|
+
adjacent interdisciplinary CS.
|
|
32
|
+
|
|
33
|
+
The generated repository is agent-neutral. By default the wizard records
|
|
34
|
+
`agent: auto`, lets the `skills` CLI detect the current local agent, and writes
|
|
35
|
+
generic MCP snippets. Use `--agent <name>` only when you want to force a
|
|
36
|
+
specific target recognized by the `skills` CLI, such as `claude-code`,
|
|
37
|
+
`cursor`, `windsurf`, or another supported local loader.
|
|
38
|
+
|
|
39
|
+
## Default Experience
|
|
40
|
+
|
|
41
|
+
By default, the wizard:
|
|
42
|
+
|
|
43
|
+
- creates the repository structure;
|
|
44
|
+
- configures project-local skills;
|
|
45
|
+
- enables the scholarly MCP records for `arxiv`, `semantic-scholar`, and
|
|
46
|
+
`openalex`;
|
|
47
|
+
- writes `configs/capabilities.yaml`;
|
|
48
|
+
- writes `docs/agent/capability-profile.md`;
|
|
49
|
+
- writes `docs/agent/generated/mcp.json` unless an explicit agent target is set;
|
|
50
|
+
- appends the onboarding event to `wiki/log.md`;
|
|
51
|
+
- does not install external MCP tools unless explicitly requested.
|
|
52
|
+
|
|
53
|
+
## Non-Interactive Create
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
npx create-academic-research@latest my-project --yes
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
For CI or local testing without installing skills:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
npx create-academic-research@latest my-project --yes --no-install-skills
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Project Lifecycle
|
|
66
|
+
|
|
67
|
+
Inside a generated project:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
npx academic-research doctor
|
|
71
|
+
npx academic-research rename --title "New Title" --slug new-title --package new_title
|
|
72
|
+
npx academic-research skills presets
|
|
73
|
+
npx academic-research skills install --preset default
|
|
74
|
+
npx academic-research skills list
|
|
75
|
+
npx academic-research skills status
|
|
76
|
+
npx academic-research skills remove source-ingestion
|
|
77
|
+
npx academic-research skills uninstall source-ingestion
|
|
78
|
+
npx academic-research skills update
|
|
79
|
+
npx academic-research mcp list
|
|
80
|
+
npx academic-research mcp enabled
|
|
81
|
+
npx academic-research mcp available
|
|
82
|
+
npx academic-research mcp commands arxiv
|
|
83
|
+
npx academic-research mcp enable arxiv openalex
|
|
84
|
+
npx academic-research mcp disable arxiv
|
|
85
|
+
npx academic-research mcp install arxiv
|
|
86
|
+
npx academic-research mcp uninstall arxiv
|
|
87
|
+
npx academic-research mcp doctor
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Command Model
|
|
91
|
+
|
|
92
|
+
Skills are project-local by default.
|
|
93
|
+
|
|
94
|
+
| Command | Meaning |
|
|
95
|
+
|---|---|
|
|
96
|
+
| `skills presets` | List available capability presets. |
|
|
97
|
+
| `skills install` | Install project-local skills for the selected preset and project agent. This does not change MCP records. |
|
|
98
|
+
| `skills list` | List skills found in project-local skill loader directories. |
|
|
99
|
+
| `skills status` | Show configured project preset, agent, scope, skill roots, unique skill ids, and installed copies. |
|
|
100
|
+
| `skills remove` / `skills uninstall` | Remove selected project-local skills. |
|
|
101
|
+
| `skills update` | Update project-local skill copies. |
|
|
102
|
+
|
|
103
|
+
MCP commands are split by side-effect:
|
|
104
|
+
|
|
105
|
+
| Command | Meaning |
|
|
106
|
+
|---|---|
|
|
107
|
+
| `mcp list` | List known MCP servers with enabled/available status. |
|
|
108
|
+
| `mcp enabled` | List only enabled MCP server ids. |
|
|
109
|
+
| `mcp available` | List the local MCP catalog. |
|
|
110
|
+
| `mcp commands` | Print external install commands without running them. |
|
|
111
|
+
| `mcp enable` | Enable an MCP server in project records and generated snippets. |
|
|
112
|
+
| `mcp disable` | Remove an MCP server from project records and generated snippets. |
|
|
113
|
+
| `mcp install` | Run the external tool install command for selected MCP servers. |
|
|
114
|
+
| `mcp uninstall` | Run the external uninstall command when one exists. |
|
|
115
|
+
| `mcp doctor` | Validate enabled MCP records and generated snippets. |
|
|
116
|
+
|
|
117
|
+
## Companion Skills
|
|
118
|
+
|
|
119
|
+
The generated project works best with:
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
npx -y skills add VincenzoImp/academic-research-skills --skill '*' --copy -y
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
The create wizard can install that project-local package automatically.
|
|
126
|
+
Those skills are portable `SKILL.md` instructions, but they require an
|
|
127
|
+
agent/runtime that can load skills or include the relevant instructions in
|
|
128
|
+
context. They are not automatic capabilities of every raw model API.
|
|
129
|
+
Use `--agent <agent>` for explicit multi-tool setup; reserve `--agent '*'` for
|
|
130
|
+
cases where you intentionally want every local agent loader populated.
|
|
131
|
+
|
|
132
|
+
## Validate This Package
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
npm install
|
|
136
|
+
npm run typecheck
|
|
137
|
+
npm test
|
|
138
|
+
npm run lint
|
|
139
|
+
npm pack --dry-run
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
## Release
|
|
143
|
+
|
|
144
|
+
Releases are tag-driven. Update `package.json` and `package-lock.json`, commit
|
|
145
|
+
the change, create `vX.Y.Z`, and push the tag:
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
git tag -a v0.1.0 -m "v0.1.0"
|
|
149
|
+
git push origin main v0.1.0
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Once the GitHub repository is public, the release workflow validates the tag
|
|
153
|
+
against the package version, runs CI, smoke-tests the generated project,
|
|
154
|
+
publishes `create-academic-research` to npm, and creates a GitHub Release with
|
|
155
|
+
generated notes. npm publishing is configured for trusted
|
|
156
|
+
publishing/provenance; configure npm trusted publishing for
|
|
157
|
+
`VincenzoImp/create-academic-research` and workflow file `release.yml`, or add
|
|
158
|
+
an `NPM_TOKEN` repository secret for token-based first publication. If a tag was
|
|
159
|
+
pushed while the repository was private, make the repository public and run the
|
|
160
|
+
`Release` workflow manually with the existing tag.
|
package/SECURITY.md
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# Security Policy
|
|
2
|
+
|
|
3
|
+
Do not put API keys, cookies, Overleaf tokens, browser sessions, private
|
|
4
|
+
reviewer material, or restricted datasets in generated project files.
|
|
5
|
+
|
|
6
|
+
MCP snippets generated by this package use environment-variable placeholders for
|
|
7
|
+
secrets. External MCP tool installation is explicit and separate from enabling
|
|
8
|
+
project-local MCP records.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { type Runner } from "./runner.js";
|
|
2
|
+
import { type McpToolCommandKey } from "./stack.js";
|
|
3
|
+
export declare const DEFAULT_AGENT = "auto";
|
|
4
|
+
export interface CapabilityState {
|
|
5
|
+
agent: string;
|
|
6
|
+
preset: string;
|
|
7
|
+
scope: "project-local";
|
|
8
|
+
mcp_servers: string[];
|
|
9
|
+
}
|
|
10
|
+
export interface InitializeCapabilitiesOptions {
|
|
11
|
+
preset?: string;
|
|
12
|
+
agent?: string;
|
|
13
|
+
mcpServers?: string[];
|
|
14
|
+
}
|
|
15
|
+
export interface CapabilityCommandResult {
|
|
16
|
+
ok: true;
|
|
17
|
+
count?: number;
|
|
18
|
+
servers?: string[];
|
|
19
|
+
}
|
|
20
|
+
export interface InstalledSkill {
|
|
21
|
+
name: string;
|
|
22
|
+
path: string;
|
|
23
|
+
root: string;
|
|
24
|
+
}
|
|
25
|
+
export interface McpDoctorResult {
|
|
26
|
+
ok: boolean;
|
|
27
|
+
errors: string[];
|
|
28
|
+
warnings: string[];
|
|
29
|
+
enabled: string[];
|
|
30
|
+
}
|
|
31
|
+
interface SkillInstallOptions {
|
|
32
|
+
agent?: string;
|
|
33
|
+
}
|
|
34
|
+
export declare function readCapabilities(root: string): Promise<CapabilityState>;
|
|
35
|
+
export declare function writeCapabilities(root: string, state: Partial<CapabilityState>): Promise<void>;
|
|
36
|
+
export declare function initializeCapabilities(root: string, options?: InitializeCapabilitiesOptions): Promise<void>;
|
|
37
|
+
export declare function buildSkillInstallCommands(root: string, preset?: string, options?: SkillInstallOptions): Promise<string[][]>;
|
|
38
|
+
export declare function installSkills(root: string, preset?: string, options?: SkillInstallOptions, runner?: Runner): Promise<CapabilityCommandResult>;
|
|
39
|
+
export declare function listInstalledSkills(root: string): Promise<InstalledSkill[]>;
|
|
40
|
+
export declare function removeSkills(root: string, skills: string[], runner?: Runner): Promise<CapabilityCommandResult>;
|
|
41
|
+
export declare function updateSkills(root: string, runner?: Runner): Promise<CapabilityCommandResult>;
|
|
42
|
+
export declare function enableMcpServers(root: string, servers: string[], options?: {
|
|
43
|
+
agent?: string;
|
|
44
|
+
}): Promise<CapabilityCommandResult>;
|
|
45
|
+
export declare function disableMcpServers(root: string, servers: string[], options?: {
|
|
46
|
+
agent?: string;
|
|
47
|
+
}): Promise<CapabilityCommandResult>;
|
|
48
|
+
export declare function mcpToolCommands(servers: string[], key?: McpToolCommandKey): string[][];
|
|
49
|
+
export declare function mcpToolCommandTexts(servers: string[], key?: McpToolCommandKey): string[];
|
|
50
|
+
export declare function installMcpTools(root: string, servers: string[], runner?: Runner): Promise<CapabilityCommandResult>;
|
|
51
|
+
export declare function uninstallMcpTools(root: string, servers: string[], runner?: Runner): Promise<CapabilityCommandResult>;
|
|
52
|
+
export declare function doctorMcpServers(root: string): Promise<McpDoctorResult>;
|
|
53
|
+
export declare function assertKnownMcpServers(servers: string[]): void;
|
|
54
|
+
export {};
|