qiongli 1.6.0 → 1.7.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 (75) hide show
  1. package/README.md +8 -2
  2. package/lib/cli.mjs +2 -0
  3. package/lib/installer.mjs +39 -11
  4. package/package.json +1 -1
  5. package/payload/qiongli-workflow/SKILL.md +2 -2
  6. package/payload/qiongli-workflow/VERSION +1 -1
  7. package/payload/qiongli-workflow/skills/registry.yaml +73 -73
  8. package/payload/subjects/accounting/complete/qiongli-workflow/SKILL.md +5 -5
  9. package/payload/subjects/accounting/complete/qiongli-workflow/VERSION +1 -1
  10. package/payload/subjects/accounting/complete/qiongli-workflow/skills/registry.yaml +73 -73
  11. package/payload/subjects/accounting/focused/qiongli-workflow/SKILL.md +5 -5
  12. package/payload/subjects/accounting/focused/qiongli-workflow/VERSION +1 -1
  13. package/payload/subjects/accounting/focused/qiongli-workflow/skills/registry.yaml +37 -37
  14. package/payload/subjects/business/complete/qiongli-workflow/SKILL.md +5 -5
  15. package/payload/subjects/business/complete/qiongli-workflow/VERSION +1 -1
  16. package/payload/subjects/business/complete/qiongli-workflow/skills/registry.yaml +73 -73
  17. package/payload/subjects/business/focused/qiongli-workflow/SKILL.md +5 -5
  18. package/payload/subjects/business/focused/qiongli-workflow/VERSION +1 -1
  19. package/payload/subjects/business/focused/qiongli-workflow/skills/registry.yaml +37 -37
  20. package/payload/subjects/core/complete/qiongli-workflow/SKILL.md +5 -5
  21. package/payload/subjects/core/complete/qiongli-workflow/VERSION +1 -1
  22. package/payload/subjects/core/complete/qiongli-workflow/skills/registry.yaml +73 -73
  23. package/payload/subjects/core/focused/qiongli-workflow/SKILL.md +5 -5
  24. package/payload/subjects/core/focused/qiongli-workflow/VERSION +1 -1
  25. package/payload/subjects/core/focused/qiongli-workflow/skills/registry.yaml +73 -73
  26. package/payload/subjects/economics/complete/qiongli-workflow/SKILL.md +5 -5
  27. package/payload/subjects/economics/complete/qiongli-workflow/VERSION +1 -1
  28. package/payload/subjects/economics/complete/qiongli-workflow/skills/registry.yaml +73 -73
  29. package/payload/subjects/economics/focused/qiongli-workflow/SKILL.md +5 -5
  30. package/payload/subjects/economics/focused/qiongli-workflow/VERSION +1 -1
  31. package/payload/subjects/economics/focused/qiongli-workflow/skills/registry.yaml +37 -37
  32. package/payload/subjects/economics-accounting/complete/qiongli-workflow/SKILL.md +5 -5
  33. package/payload/subjects/economics-accounting/complete/qiongli-workflow/VERSION +1 -1
  34. package/payload/subjects/economics-accounting/complete/qiongli-workflow/skills/registry.yaml +73 -73
  35. package/payload/subjects/economics-accounting/focused/qiongli-workflow/SKILL.md +5 -5
  36. package/payload/subjects/economics-accounting/focused/qiongli-workflow/VERSION +1 -1
  37. package/payload/subjects/economics-accounting/focused/qiongli-workflow/skills/registry.yaml +37 -37
  38. package/payload/subjects/finance/complete/qiongli-workflow/SKILL.md +5 -5
  39. package/payload/subjects/finance/complete/qiongli-workflow/VERSION +1 -1
  40. package/payload/subjects/finance/complete/qiongli-workflow/skills/registry.yaml +73 -73
  41. package/payload/subjects/finance/focused/qiongli-workflow/SKILL.md +5 -5
  42. package/payload/subjects/finance/focused/qiongli-workflow/VERSION +1 -1
  43. package/payload/subjects/finance/focused/qiongli-workflow/skills/registry.yaml +37 -37
  44. package/payload/subjects/geoeconomics/complete/qiongli-workflow/SKILL.md +5 -5
  45. package/payload/subjects/geoeconomics/complete/qiongli-workflow/VERSION +1 -1
  46. package/payload/subjects/geoeconomics/complete/qiongli-workflow/skills/registry.yaml +73 -73
  47. package/payload/subjects/geoeconomics/focused/qiongli-workflow/SKILL.md +5 -5
  48. package/payload/subjects/geoeconomics/focused/qiongli-workflow/VERSION +1 -1
  49. package/payload/subjects/geoeconomics/focused/qiongli-workflow/skills/registry.yaml +37 -37
  50. package/payload/subjects/political-economy/complete/qiongli-workflow/SKILL.md +5 -5
  51. package/payload/subjects/political-economy/complete/qiongli-workflow/VERSION +1 -1
  52. package/payload/subjects/political-economy/complete/qiongli-workflow/skills/registry.yaml +73 -73
  53. package/payload/subjects/political-economy/focused/qiongli-workflow/SKILL.md +5 -5
  54. package/payload/subjects/political-economy/focused/qiongli-workflow/VERSION +1 -1
  55. package/payload/subjects/political-economy/focused/qiongli-workflow/skills/registry.yaml +37 -37
  56. package/python-runtime/qiongli/__init__.py +1 -1
  57. package/python-runtime/qiongli/bridges/literature_mcp_tools.py +234 -0
  58. package/python-runtime/qiongli/bridges/mcp_cli.py +23 -7
  59. package/python-runtime/qiongli/bridges/mcp_client_config.py +465 -0
  60. package/python-runtime/qiongli/bridges/mcp_tool_handlers.py +11 -0
  61. package/python-runtime/qiongli/bridges/provider_config.py +9 -7
  62. package/python-runtime/qiongli/bridges/providers/arxiv_client.py +146 -0
  63. package/python-runtime/qiongli/bridges/providers/crossref_client.py +133 -0
  64. package/python-runtime/qiongli/bridges/providers/literature_query.py +23 -1
  65. package/python-runtime/qiongli/bridges/providers/openalex_client.py +116 -0
  66. package/python-runtime/qiongli/bridges/providers/pubmed_client.py +125 -0
  67. package/python-runtime/qiongli/cli.py +14 -1
  68. package/python-runtime/qiongli/setup_wizard.py +1 -1
  69. package/python-runtime/qiongli/subject_materializer.py +3 -3
  70. package/python-runtime/qiongli/universal_installer.py +67 -3
  71. package/python-runtime/scripts/build_plugin_artifacts.py +3 -3
  72. package/python-runtime/scripts/release_automation.sh +6 -0
  73. package/python-runtime/scripts/release_ready.sh +10 -0
  74. package/python-runtime/scripts/update_stable_download_sections.py +181 -0
  75. package/python-runtime/skills/registry.yaml +73 -73
package/README.md CHANGED
@@ -88,7 +88,9 @@ Advanced bridge commands such as `setup`, `doctor`, `task-run`, and `team-run` u
88
88
 
89
89
  ## MCP server
90
90
 
91
- Native Codex and Claude Code plugins can bundle the zero-dependency Node literature-provider MCP runtime for provider, status, and search tools. npm, pipx/pip, or bootstrap `full` remains the path for the Python-backed full CLI MCP server and orchestration tools.
91
+ `qiongli mcp serve --transport stdio` is the unified full CLI MCP server. It exposes literature provider tools plus orchestrator and task-run tools from one server. The zero-dependency Node literature-provider MCP bundled by plugins remains a marketplace/MCPB fallback for environments that cannot run the full CLI.
92
+
93
+ The Python CLI path (`qiongli install --profile full --target codex`) performs managed Codex MCP registration for the unified server. The npm asset installer stays conservative: explicit npm installs can report MCP guidance with `qiongli install --parts globals,mcp --dry-run`, but they do not rewrite client MCP config.
92
94
 
93
95
  The npm launcher also delegates MCP commands to the bundled Python bridge:
94
96
 
@@ -100,9 +102,13 @@ qiongli mcp config example --target claude-code --json
100
102
  qiongli mcp config example --target hermes --json
101
103
  ```
102
104
 
103
- The full CLI MCP server exposes provider tools plus orchestrator tools:
105
+ The full CLI MCP server exposes literature tools plus orchestrator tools:
104
106
 
107
+ - `qiongli_literature_status`
108
+ - `qiongli_literature_search`
109
+ - `qiongli_literature_export_evidence`
105
110
  - `qiongli_orchestrator_doctor`
111
+ - `qiongli_orchestrator_route`
106
112
  - `qiongli_task_plan`
107
113
  - `qiongli_task_run`
108
114
 
package/lib/cli.mjs CHANGED
@@ -41,6 +41,7 @@ export async function main(argv, {
41
41
  dryRun: parsed.options.dryRun,
42
42
  subject: parsed.options.subject,
43
43
  coverage: parsed.options.coverage,
44
+ parts: parsed.options.parts,
44
45
  });
45
46
  } catch (error) {
46
47
  stderr.write(`[qiongli] ${error.message}\n`);
@@ -177,6 +178,7 @@ Options:
177
178
  --subject core|economics|accounting|business|finance|economics-accounting
178
179
  --coverage complete|focused
179
180
  --mode copy|link
181
+ --parts globals,project,cli,mcp
180
182
  --overwrite
181
183
  --dry-run
182
184
  --no-doctor
package/lib/installer.mjs CHANGED
@@ -3,7 +3,7 @@ import os from 'node:os';
3
3
  import path from 'node:path';
4
4
 
5
5
  const TARGETS = ['codex', 'claude', 'antigravity', 'hermes'];
6
- const PARTS = ['globals', 'project', 'cli'];
6
+ const PARTS = ['globals', 'project', 'cli', 'mcp'];
7
7
  const LEGACY_SKILL_NAME = 'research-paper-workflow';
8
8
 
9
9
  export function resolveTargetPaths({ env = process.env } = {}) {
@@ -65,6 +65,7 @@ export function installSkills({
65
65
  dryRun = false,
66
66
  subject = 'core',
67
67
  coverage = 'complete',
68
+ parts = '',
68
69
  env = process.env,
69
70
  platform = process.platform,
70
71
  } = {}) {
@@ -80,22 +81,31 @@ export function installSkills({
80
81
  const sourceCoverage = readSkillCoverage(workflowSrc) || coverage;
81
82
  const actions = [];
82
83
  const legacyResidues = [];
84
+ const selectedParts = normalizeParts(parts);
85
+ const installGlobals = !selectedParts || selectedParts.includes('globals');
86
+ const installMcp = selectedParts?.includes('mcp') || false;
83
87
 
84
- for (const item of selectedTargets) {
85
- const dest = targetPaths[item];
86
- const legacyPath = path.join(path.dirname(dest), LEGACY_SKILL_NAME);
87
- if (fs.existsSync(legacyPath)) {
88
- const status = removeLegacySkillPath(legacyPath, LEGACY_SKILL_NAME, dryRun);
89
- legacyResidues.push({ target: item, legacyName: LEGACY_SKILL_NAME, path: legacyPath, status });
90
- }
88
+ if (installGlobals) {
89
+ for (const item of selectedTargets) {
90
+ const dest = targetPaths[item];
91
+ const legacyPath = path.join(path.dirname(dest), LEGACY_SKILL_NAME);
92
+ if (fs.existsSync(legacyPath)) {
93
+ const status = removeLegacySkillPath(legacyPath, LEGACY_SKILL_NAME, dryRun);
94
+ legacyResidues.push({ target: item, legacyName: LEGACY_SKILL_NAME, path: legacyPath, status });
95
+ }
91
96
 
92
- actions.push(copySkill({ src: workflowSrc, dest, mode, overwrite, dryRun, sourceVersion, sourceSubject, sourceCoverage }));
97
+ actions.push(copySkill({ src: workflowSrc, dest, mode, overwrite, dryRun, sourceVersion, sourceSubject, sourceCoverage }));
93
98
 
94
- if (item === 'claude' && actions.at(-1).status !== 'skip') {
95
- actions.push(...installWorkflowDiscovery({ target: item, skillDest: dest, dryRun, platform }));
99
+ if (item === 'claude' && actions.at(-1).status !== 'skip') {
100
+ actions.push(...installWorkflowDiscovery({ target: item, skillDest: dest, dryRun, platform }));
101
+ }
96
102
  }
97
103
  }
98
104
 
105
+ if (installMcp) {
106
+ actions.push(mcpGuidanceAction({ dryRun }));
107
+ }
108
+
99
109
  return { sourceVersion, sourceSubject, sourceCoverage, actions, legacyResidues, targetPaths };
100
110
  }
101
111
 
@@ -196,6 +206,15 @@ export function removeAssets({
196
206
  actions.push({ label: 'CLI', status: 'skip', path: '<npm package>', detail: 'remove with npm uninstall -g qiongli' });
197
207
  }
198
208
 
209
+ if (selectedParts.includes('mcp')) {
210
+ actions.push({
211
+ label: 'MCP',
212
+ status: 'manual',
213
+ path: '<client config>',
214
+ detail: 'Use qiongli remove --parts mcp through the Python CLI to remove managed MCP config',
215
+ });
216
+ }
217
+
199
218
  return { actions };
200
219
  }
201
220
 
@@ -378,6 +397,15 @@ function installWorkflowDiscovery({ target, skillDest, dryRun, platform }) {
378
397
  return actions;
379
398
  }
380
399
 
400
+ function mcpGuidanceAction({ dryRun }) {
401
+ return {
402
+ label: 'MCP',
403
+ status: dryRun ? 'dry-run' : 'manual',
404
+ path: '<client config>',
405
+ detail: 'Use qiongli mcp serve --transport stdio as the unified full MCP server',
406
+ };
407
+ }
408
+
381
409
  function removeWorkflowDiscovery({ target, skillDest, dryRun }) {
382
410
  if (target !== 'claude') {
383
411
  return [];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qiongli",
3
- "version": "1.6.0",
3
+ "version": "1.7.0",
4
4
  "description": "Qiongli academic research workflow installer and optional Python bridge runtime.",
5
5
  "author": {
6
6
  "name": "Jiaxin Peng",
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: qiongli
3
- description: Qiongli version: v1.6.0. Cross-platform academic research workflow for Codex, Claude / Claude Code, and CLI. Use for academic research lifecycle work: paper planning, literature review, paper reading, gap finding, study design, manuscript writing, statistics, analysis code, reproducibility, proofread, rebuttal, submission, presentation, and stage-aware grill / critique. Route natural academic requests even when the user does not explicitly invoke $qiongli or a slash command.
3
+ description: Qiongli version: v1.7.0. Cross-platform academic research workflow for Codex, Claude / Claude Code, and CLI. Use for academic research lifecycle work: paper planning, literature review, paper reading, gap finding, study design, manuscript writing, statistics, analysis code, reproducibility, proofread, rebuttal, submission, presentation, and stage-aware grill / critique. Route natural academic requests even when the user does not explicitly invoke $qiongli or a slash command.
4
4
  ---
5
5
 
6
6
  # Qiongli Academic Workflow
@@ -9,7 +9,7 @@ Run a model-agnostic paper workflow using shared Task IDs and artifact contracts
9
9
 
10
10
  This is a **self-contained skill package**. All assets needed for execution — workflows, skill specifications, output templates, standards, and agent roles — are bundled in subdirectories of this package. No external repo access is needed.
11
11
 
12
- Installed Qiongli workflow version: `v1.6.0`
12
+ Installed Qiongli workflow version: `v1.7.0`
13
13
 
14
14
  ## Quick Start
15
15
 
@@ -1 +1 @@
1
- v1.6.0
1
+ v1.7.0