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.
Files changed (96) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +160 -0
  3. package/SECURITY.md +8 -0
  4. package/dist/bin/academic-research.d.ts +2 -0
  5. package/dist/bin/academic-research.js +3 -0
  6. package/dist/bin/create-academic-research.d.ts +2 -0
  7. package/dist/bin/create-academic-research.js +3 -0
  8. package/dist/src/capabilities.d.ts +54 -0
  9. package/dist/src/capabilities.js +487 -0
  10. package/dist/src/cli.d.ts +3 -0
  11. package/dist/src/cli.js +451 -0
  12. package/dist/src/files.d.ts +8 -0
  13. package/dist/src/files.js +44 -0
  14. package/dist/src/names.d.ts +3 -0
  15. package/dist/src/names.js +64 -0
  16. package/dist/src/project.d.ts +28 -0
  17. package/dist/src/project.js +229 -0
  18. package/dist/src/prompts.d.ts +18 -0
  19. package/dist/src/prompts.js +29 -0
  20. package/dist/src/runner.d.ts +12 -0
  21. package/dist/src/runner.js +22 -0
  22. package/dist/src/stack.d.ts +30 -0
  23. package/dist/src/stack.js +180 -0
  24. package/package.json +59 -0
  25. package/template/AGENTS.md +47 -0
  26. package/template/README.md +68 -0
  27. package/template/analysis_outputs/.gitkeep +0 -0
  28. package/template/artifacts/artifact-checklist.md +7 -0
  29. package/template/artifacts/cache/.gitkeep +0 -0
  30. package/template/artifacts/data/.gitkeep +0 -0
  31. package/template/artifacts/models/.gitkeep +0 -0
  32. package/template/artifacts/releases/.gitkeep +0 -0
  33. package/template/configs/agent-stack.yaml +5 -0
  34. package/template/configs/capabilities.yaml +4 -0
  35. package/template/configs/default.yaml +15 -0
  36. package/template/data/external/.gitkeep +0 -0
  37. package/template/data/interim/.gitkeep +0 -0
  38. package/template/data/processed/.gitkeep +0 -0
  39. package/template/data/raw/.gitkeep +0 -0
  40. package/template/debug_outputs/.gitkeep +0 -0
  41. package/template/docs/agent/capability-profile.md +6 -0
  42. package/template/docs/agent/mcp-setup.md +4 -0
  43. package/template/docs/agent/output-contracts.md +8 -0
  44. package/template/docs/agent/research-program.md +3 -0
  45. package/template/docs/data_dictionary/README.md +3 -0
  46. package/template/docs/ethics/data-governance.md +3 -0
  47. package/template/docs/methodology/evaluation-plan.md +3 -0
  48. package/template/docs/methodology/research-design.md +4 -0
  49. package/template/docs/methodology/threats-to-validity.md +3 -0
  50. package/template/docs/reproducibility/README.md +3 -0
  51. package/template/docs/venue/venue-strategy.md +3 -0
  52. package/template/experiments/registry.csv +1 -0
  53. package/template/experiments/templates/experiment-record.md +23 -0
  54. package/template/explore_outputs/.gitkeep +0 -0
  55. package/template/notebooks/README.md +5 -0
  56. package/template/outputs/figures/.gitkeep +0 -0
  57. package/template/outputs/models/.gitkeep +0 -0
  58. package/template/outputs/tables/.gitkeep +0 -0
  59. package/template/package.json +17 -0
  60. package/template/pyproject.toml +41 -0
  61. package/template/reports/paper/.gitkeep +0 -0
  62. package/template/reports/proposal/.gitkeep +0 -0
  63. package/template/reports/rebuttal/README.md +3 -0
  64. package/template/reports/reviews/README.md +3 -0
  65. package/template/reports/slides/.gitkeep +0 -0
  66. package/template/repro_outputs/.gitkeep +0 -0
  67. package/template/sota/gaps.md +9 -0
  68. package/template/sota/literature-matrix.csv +1 -0
  69. package/template/sota/prisma-flow.md +4 -0
  70. package/template/sota/screening-decisions.csv +1 -0
  71. package/template/sota/search-strategy.md +14 -0
  72. package/template/sota/synthesis.md +9 -0
  73. package/template/sources/assets/.gitkeep +0 -0
  74. package/template/sources/bib/citation-audit.csv +1 -0
  75. package/template/sources/bib/references.bib +1 -0
  76. package/template/sources/conversion-ledger.csv +1 -0
  77. package/template/sources/markdown/.gitkeep +0 -0
  78. package/template/sources/metadata/.gitkeep +0 -0
  79. package/template/sources/pdfs/.gitkeep +0 -0
  80. package/template/sources/source-ledger.csv +1 -0
  81. package/template/src/project_package/__init__.py +1 -0
  82. package/template/tests/test_project_structure.py +25 -0
  83. package/template/train_outputs/.gitkeep +0 -0
  84. package/template/wiki/claims/.gitkeep +0 -0
  85. package/template/wiki/concepts/.gitkeep +0 -0
  86. package/template/wiki/contradictions.md +3 -0
  87. package/template/wiki/decisions/.gitkeep +0 -0
  88. package/template/wiki/experiments/.gitkeep +0 -0
  89. package/template/wiki/index.md +9 -0
  90. package/template/wiki/log.md +1 -0
  91. package/template/wiki/methods/.gitkeep +0 -0
  92. package/template/wiki/open_questions.md +3 -0
  93. package/template/wiki/questions/.gitkeep +0 -0
  94. package/template/wiki/sources/.gitkeep +0 -0
  95. package/template/wiki/synthesis.md +3 -0
  96. 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,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import { main } from "../src/cli.js";
3
+ process.exitCode = await main(process.argv.slice(2), "lifecycle");
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import { main } from "../src/cli.js";
3
+ process.exitCode = await main(process.argv.slice(2), "create");
@@ -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 {};