eduevidence 5.2.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 (312) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +506 -0
  3. package/README.zh-CN.md +434 -0
  4. package/SKILL.md +195 -0
  5. package/bin/eduevidence.js +127 -0
  6. package/domains/education/manifest.json +183 -0
  7. package/domains/education/outcome_taxonomy.json +127 -0
  8. package/domains/manifest.json +26 -0
  9. package/domains/policy/frame.schema.json +234 -0
  10. package/domains/policy/manifest.json +10 -0
  11. package/domains/policy/methodology_checklist.json +109 -0
  12. package/domains/policy/outcome_taxonomy.json +53 -0
  13. package/domains/policy/references/causal-identification.md +45 -0
  14. package/domains/policy/references/cost-evidence.md +44 -0
  15. package/domains/policy/references/equity.md +42 -0
  16. package/domains/policy/references/evidence-hierarchy.md +41 -0
  17. package/domains/policy/references/implementation-evidence.md +47 -0
  18. package/eduevidence_cli.py +26 -0
  19. package/engine/__init__.py +11 -0
  20. package/engine/__pycache__/__init__.cpython-312.pyc +0 -0
  21. package/engine/__pycache__/analysis.cpython-312.pyc +0 -0
  22. package/engine/__pycache__/bias.cpython-312.pyc +0 -0
  23. package/engine/__pycache__/briefs.cpython-312.pyc +0 -0
  24. package/engine/__pycache__/capabilities.cpython-312.pyc +0 -0
  25. package/engine/__pycache__/citation_check.cpython-312.pyc +0 -0
  26. package/engine/__pycache__/contracts.cpython-312.pyc +0 -0
  27. package/engine/__pycache__/datasets.cpython-312.pyc +0 -0
  28. package/engine/__pycache__/events.cpython-312.pyc +0 -0
  29. package/engine/__pycache__/evidence_graph.cpython-312.pyc +0 -0
  30. package/engine/__pycache__/evidence_review.cpython-312.pyc +0 -0
  31. package/engine/__pycache__/evidencecore.cpython-312.pyc +0 -0
  32. package/engine/__pycache__/gap_lens.cpython-312.pyc +0 -0
  33. package/engine/__pycache__/gaps.cpython-312.pyc +0 -0
  34. package/engine/__pycache__/graph_store.cpython-312.pyc +0 -0
  35. package/engine/__pycache__/graph_validate.cpython-312.pyc +0 -0
  36. package/engine/__pycache__/ids.cpython-312.pyc +0 -0
  37. package/engine/__pycache__/library.cpython-312.pyc +0 -0
  38. package/engine/__pycache__/library_builtin.cpython-312.pyc +0 -0
  39. package/engine/__pycache__/living.cpython-312.pyc +0 -0
  40. package/engine/__pycache__/log.cpython-312.pyc +0 -0
  41. package/engine/__pycache__/meta_analysis.cpython-312.pyc +0 -0
  42. package/engine/__pycache__/meta_synthesis.cpython-312.pyc +0 -0
  43. package/engine/__pycache__/migration.cpython-312.pyc +0 -0
  44. package/engine/__pycache__/mode_router.cpython-312.pyc +0 -0
  45. package/engine/__pycache__/paths.cpython-312.pyc +0 -0
  46. package/engine/__pycache__/pilot.cpython-312.pyc +0 -0
  47. package/engine/__pycache__/planner.cpython-312.pyc +0 -0
  48. package/engine/__pycache__/project.cpython-312.pyc +0 -0
  49. package/engine/__pycache__/projections.cpython-312.pyc +0 -0
  50. package/engine/__pycache__/robustness.cpython-312.pyc +0 -0
  51. package/engine/__pycache__/run.cpython-312.pyc +0 -0
  52. package/engine/__pycache__/semantics.cpython-312.pyc +0 -0
  53. package/engine/__pycache__/study_design.cpython-312.pyc +0 -0
  54. package/engine/__pycache__/synthesis.cpython-312.pyc +0 -0
  55. package/engine/__pycache__/tribunal.cpython-312.pyc +0 -0
  56. package/engine/__pycache__/update.cpython-312.pyc +0 -0
  57. package/engine/__pycache__/versions.cpython-312.pyc +0 -0
  58. package/engine/analysis.py +308 -0
  59. package/engine/bias.py +178 -0
  60. package/engine/briefs.py +106 -0
  61. package/engine/capabilities.py +99 -0
  62. package/engine/citation_check.py +192 -0
  63. package/engine/contracts.py +117 -0
  64. package/engine/datasets.py +165 -0
  65. package/engine/events.py +67 -0
  66. package/engine/evidence_graph.py +571 -0
  67. package/engine/evidence_review.py +88 -0
  68. package/engine/evidencecore.py +182 -0
  69. package/engine/gap_lens.py +132 -0
  70. package/engine/gaps.py +169 -0
  71. package/engine/graph_store.py +335 -0
  72. package/engine/graph_validate.py +87 -0
  73. package/engine/ids.py +77 -0
  74. package/engine/library.py +268 -0
  75. package/engine/library_builtin.py +301 -0
  76. package/engine/living.py +671 -0
  77. package/engine/log.py +39 -0
  78. package/engine/meta_analysis.py +333 -0
  79. package/engine/meta_synthesis.py +111 -0
  80. package/engine/migration.py +397 -0
  81. package/engine/mode_router.py +72 -0
  82. package/engine/paths.py +15 -0
  83. package/engine/pilot.py +368 -0
  84. package/engine/planner.py +126 -0
  85. package/engine/project.py +118 -0
  86. package/engine/projections.py +240 -0
  87. package/engine/robustness.py +109 -0
  88. package/engine/run.py +85 -0
  89. package/engine/semantics.py +135 -0
  90. package/engine/study_design.py +87 -0
  91. package/engine/synthesis.py +187 -0
  92. package/engine/tribunal.py +408 -0
  93. package/engine/update.py +113 -0
  94. package/engine/versions.py +12 -0
  95. package/install.sh +510 -0
  96. package/integrations/__init__.py +1 -0
  97. package/integrations/__pycache__/__init__.cpython-312.pyc +0 -0
  98. package/integrations/__pycache__/agent_mcp.cpython-312.pyc +0 -0
  99. package/integrations/__pycache__/smart_web_fetch.cpython-312.pyc +0 -0
  100. package/integrations/agent_mcp.py +856 -0
  101. package/integrations/smart_web_fetch.py +59 -0
  102. package/package.json +50 -0
  103. package/pyproject.toml +55 -0
  104. package/references/applicability-policy.md +88 -0
  105. package/references/education-framing.md +132 -0
  106. package/references/effect_size_formulas.md +35 -0
  107. package/references/evaluation-design.md +111 -0
  108. package/references/evidence-quality.md +79 -0
  109. package/references/grade_framework.md +29 -0
  110. package/references/intervention-design.md +98 -0
  111. package/references/methodology-audit.md +103 -0
  112. package/references/outcome-taxonomy.md +106 -0
  113. package/references/retrieval-protocol.md +142 -0
  114. package/references/skeptic-protocol.md +93 -0
  115. package/references/social_science_pitfalls.md +48 -0
  116. package/references/source-validity.md +140 -0
  117. package/references/tribunal-policy.md +112 -0
  118. package/references/wwc_standards.md +29 -0
  119. package/retrieval/__init__.py +1 -0
  120. package/retrieval/__pycache__/__init__.cpython-312.pyc +0 -0
  121. package/retrieval/__pycache__/corpus_store.cpython-312.pyc +0 -0
  122. package/retrieval/__pycache__/dedupe.cpython-312.pyc +0 -0
  123. package/retrieval/__pycache__/failures.cpython-312.pyc +0 -0
  124. package/retrieval/__pycache__/fetch.cpython-312.pyc +0 -0
  125. package/retrieval/__pycache__/search.cpython-312.pyc +0 -0
  126. package/retrieval/__pycache__/source.cpython-312.pyc +0 -0
  127. package/retrieval/__pycache__/validate.cpython-312.pyc +0 -0
  128. package/retrieval/corpus_store.py +181 -0
  129. package/retrieval/dedupe.py +127 -0
  130. package/retrieval/failures.py +90 -0
  131. package/retrieval/fetch.py +435 -0
  132. package/retrieval/search.py +493 -0
  133. package/retrieval/source.py +160 -0
  134. package/retrieval/validate.py +257 -0
  135. package/schemas/agent-mcp-approval.schema.json +57 -0
  136. package/schemas/chart-spec.schema.json +88 -0
  137. package/schemas/cross-model-review.schema.json +28 -0
  138. package/schemas/education-frame.schema.json +106 -0
  139. package/schemas/evaluation.schema.json +35 -0
  140. package/schemas/evidence.schema.json +81 -0
  141. package/schemas/fetch-result.schema.json +119 -0
  142. package/schemas/intervention.schema.json +46 -0
  143. package/schemas/methodology.schema.json +102 -0
  144. package/schemas/report-result.schema.json +381 -0
  145. package/schemas/report-spec.schema.json +130 -0
  146. package/schemas/source.schema.json +311 -0
  147. package/schemas/v2/analysis-plan.schema.json +28 -0
  148. package/schemas/v2/analysis-run.schema.json +33 -0
  149. package/schemas/v2/claim.schema.json +26 -0
  150. package/schemas/v2/dataset-asset.schema.json +40 -0
  151. package/schemas/v2/decision-snapshot.schema.json +53 -0
  152. package/schemas/v2/evidence-link.schema.json +38 -0
  153. package/schemas/v2/finding.schema.json +47 -0
  154. package/schemas/v2/graph-revision.schema.json +30 -0
  155. package/schemas/v2/knowledge-gap.schema.json +40 -0
  156. package/schemas/v2/methodology-audit.schema.json +30 -0
  157. package/schemas/v2/outcome.schema.json +18 -0
  158. package/schemas/v2/project.schema.json +31 -0
  159. package/schemas/v2/research-intent.schema.json +24 -0
  160. package/schemas/v2/run.schema.json +43 -0
  161. package/schemas/v2/source.schema.json +24 -0
  162. package/schemas/v2/study-design.schema.json +67 -0
  163. package/schemas/v2/study.schema.json +37 -0
  164. package/schemas/v3/pilot-outcome.schema.json +132 -0
  165. package/schemas/v3/run-manifest.schema.json +193 -0
  166. package/schemas/v3/synthesis.schema.json +86 -0
  167. package/schemas/v4/drift-report.schema.json +66 -0
  168. package/schemas/v4/evidence-library.schema.json +42 -0
  169. package/schemas/v4/living-subscription.schema.json +55 -0
  170. package/schemas/v4/meta-analysis.schema.json +152 -0
  171. package/schemas/verdict.schema.json +56 -0
  172. package/scripts/__init__.py +0 -0
  173. package/scripts/__pycache__/__init__.cpython-312.pyc +0 -0
  174. package/scripts/__pycache__/benchmark.cpython-312.pyc +0 -0
  175. package/scripts/__pycache__/benchmark_evaluator.cpython-312.pyc +0 -0
  176. package/scripts/__pycache__/benchmark_judge.cpython-312.pyc +0 -0
  177. package/scripts/__pycache__/benchmark_routing.cpython-312.pyc +0 -0
  178. package/scripts/__pycache__/benchmark_v2.cpython-312.pyc +0 -0
  179. package/scripts/__pycache__/benchmark_v3.cpython-312.pyc +0 -0
  180. package/scripts/__pycache__/build_result.cpython-312.pyc +0 -0
  181. package/scripts/__pycache__/claim_audit.cpython-312.pyc +0 -0
  182. package/scripts/__pycache__/complexity_gate.cpython-312.pyc +0 -0
  183. package/scripts/__pycache__/compute_confidence.cpython-312.pyc +0 -0
  184. package/scripts/__pycache__/dashboard_server.cpython-312.pyc +0 -0
  185. package/scripts/__pycache__/did_regression.cpython-312.pyc +0 -0
  186. package/scripts/__pycache__/effect_calculator.cpython-312.pyc +0 -0
  187. package/scripts/__pycache__/evidence_matrix.cpython-312.pyc +0 -0
  188. package/scripts/__pycache__/evidence_score.cpython-312.pyc +0 -0
  189. package/scripts/__pycache__/evidence_semantics.cpython-312.pyc +0 -0
  190. package/scripts/__pycache__/fetch_benchmark.cpython-312.pyc +0 -0
  191. package/scripts/__pycache__/lint_report_layout.cpython-312.pyc +0 -0
  192. package/scripts/__pycache__/orchestrator.cpython-312.pyc +0 -0
  193. package/scripts/__pycache__/pre_verdict_gate.cpython-312.pyc +0 -0
  194. package/scripts/__pycache__/recompute_demo_quality.cpython-312.pyc +0 -0
  195. package/scripts/__pycache__/render_report.cpython-312.pyc +0 -0
  196. package/scripts/__pycache__/render_report_html.cpython-312.pyc +0 -0
  197. package/scripts/__pycache__/run_workspace.cpython-312.pyc +0 -0
  198. package/scripts/__pycache__/skill_lint.cpython-312.pyc +0 -0
  199. package/scripts/__pycache__/startup_probe.cpython-312.pyc +0 -0
  200. package/scripts/__pycache__/sync_killer_demo_report.cpython-312.pyc +0 -0
  201. package/scripts/__pycache__/test_adversarial_empirical.cpython-312-pytest-9.0.2.pyc +0 -0
  202. package/scripts/__pycache__/test_adversarial_empirical.cpython-312-pytest-9.1.1.pyc +0 -0
  203. package/scripts/__pycache__/validate_schema.cpython-312.pyc +0 -0
  204. package/scripts/audit_dois.py +292 -0
  205. package/scripts/bake_pack.sh +37 -0
  206. package/scripts/benchmark.py +183 -0
  207. package/scripts/benchmark_evaluator.py +371 -0
  208. package/scripts/benchmark_judge.py +535 -0
  209. package/scripts/benchmark_routing.py +120 -0
  210. package/scripts/benchmark_v2.py +304 -0
  211. package/scripts/benchmark_v3.py +552 -0
  212. package/scripts/build_esl_artifacts.py +1921 -0
  213. package/scripts/build_evidence_library.py +307 -0
  214. package/scripts/build_killer_demo.py +295 -0
  215. package/scripts/build_result.py +311 -0
  216. package/scripts/check_version_consistency.py +96 -0
  217. package/scripts/citation_check.py +123 -0
  218. package/scripts/claim_audit.py +157 -0
  219. package/scripts/complexity_gate.py +180 -0
  220. package/scripts/compute_confidence.py +176 -0
  221. package/scripts/dashboard_server.py +536 -0
  222. package/scripts/did_regression.py +315 -0
  223. package/scripts/effect_calculator.py +99 -0
  224. package/scripts/enrich_projects_human_and_lieflat.py +315 -0
  225. package/scripts/evidence_matrix.py +129 -0
  226. package/scripts/evidence_score.py +234 -0
  227. package/scripts/evidence_semantics.py +87 -0
  228. package/scripts/fetch_benchmark.py +177 -0
  229. package/scripts/generate_metrics.py +99 -0
  230. package/scripts/generate_new_projects.py +686 -0
  231. package/scripts/generate_promo.py +192 -0
  232. package/scripts/lint_report_layout.py +182 -0
  233. package/scripts/orchestrator.py +1456 -0
  234. package/scripts/pre_verdict_gate.py +513 -0
  235. package/scripts/quickstart.py +121 -0
  236. package/scripts/rebake_all_5themes.py +88 -0
  237. package/scripts/recompute_demo_quality.py +205 -0
  238. package/scripts/render_report.py +270 -0
  239. package/scripts/render_report_html.py +356 -0
  240. package/scripts/retraction_watch.py +110 -0
  241. package/scripts/run_workspace.py +337 -0
  242. package/scripts/serve_web.py +54 -0
  243. package/scripts/skill_lint.py +150 -0
  244. package/scripts/startup_probe.py +265 -0
  245. package/scripts/sync_killer_demo_report.py +270 -0
  246. package/scripts/test_adversarial_empirical.py +541 -0
  247. package/scripts/validate_schema.py +256 -0
  248. package/skill/agents/education-planner.md +80 -0
  249. package/skill/agents/evaluation-designer.md +74 -0
  250. package/skill/agents/evidence-analyst.md +106 -0
  251. package/skill/agents/evidence-judge.md +111 -0
  252. package/skill/agents/evidence-retriever.md +80 -0
  253. package/skill/agents/intervention-designer.md +82 -0
  254. package/skill/agents/method-reviewer.md +104 -0
  255. package/skill/agents/skeptic.md +89 -0
  256. package/skill/sub-skills/aihot-trend-analysis/SKILL.md +31 -0
  257. package/skill/sub-skills/contradiction-analysis/SKILL.md +17 -0
  258. package/skill/sub-skills/data-analysis/SKILL.md +23 -0
  259. package/skill/sub-skills/ethics-review/SKILL.md +25 -0
  260. package/skill/sub-skills/evidence-extraction/SKILL.md +19 -0
  261. package/skill/sub-skills/evidence-review/SKILL.md +18 -0
  262. package/skill/sub-skills/gap-analysis/SKILL.md +25 -0
  263. package/skill/sub-skills/literature-review/SKILL.md +21 -0
  264. package/skill/sub-skills/methodology-audit/SKILL.md +20 -0
  265. package/skill/sub-skills/report-generation/SKILL.md +51 -0
  266. package/skill/sub-skills/research-planning/SKILL.md +21 -0
  267. package/skill/sub-skills/study-design/SKILL.md +16 -0
  268. package/skill/task-briefs/adjudicate.md +17 -0
  269. package/skill/task-briefs/audit.md +15 -0
  270. package/skill/task-briefs/challenge.md +15 -0
  271. package/skill/task-briefs/evaluate.md +13 -0
  272. package/skill/task-briefs/extract.md +16 -0
  273. package/skill/task-briefs/frame.md +17 -0
  274. package/skill/task-briefs/intervene.md +14 -0
  275. package/skill/task-briefs/present.md +16 -0
  276. package/skill/task-briefs/retrieve.md +15 -0
  277. package/visualization/eduevidence-report/assets/base.css +337 -0
  278. package/visualization/eduevidence-report/motion/motion.css +157 -0
  279. package/visualization/eduevidence-report/motion/motion.js +107 -0
  280. package/visualization/eduevidence-report/references/bilingual-style.md +7 -0
  281. package/visualization/eduevidence-report/references/component-catalog.md +145 -0
  282. package/visualization/eduevidence-report/references/evidence-expansion.md +65 -0
  283. package/visualization/eduevidence-report/references/full-report-outline.md +86 -0
  284. package/visualization/eduevidence-report/references/layout-constraints.md +63 -0
  285. package/visualization/eduevidence-report/references/lieflat-composition.md +79 -0
  286. package/visualization/eduevidence-report/references/motion-system.md +31 -0
  287. package/visualization/eduevidence-report/schemas/adapter-envelope.schema.json +22 -0
  288. package/visualization/eduevidence-report/schemas/visual-layout.schema.json +87 -0
  289. package/visualization/eduevidence-report/scripts/__pycache__/adapter_contract.cpython-312.pyc +0 -0
  290. package/visualization/eduevidence-report/scripts/__pycache__/build_artifact_manifest.cpython-312.pyc +0 -0
  291. package/visualization/eduevidence-report/scripts/__pycache__/build_charts.cpython-312.pyc +0 -0
  292. package/visualization/eduevidence-report/scripts/__pycache__/build_figures.cpython-312.pyc +0 -0
  293. package/visualization/eduevidence-report/scripts/__pycache__/build_infographics.cpython-312.pyc +0 -0
  294. package/visualization/eduevidence-report/scripts/__pycache__/build_report.cpython-312.pyc +0 -0
  295. package/visualization/eduevidence-report/scripts/__pycache__/charts_data.cpython-312.pyc +0 -0
  296. package/visualization/eduevidence-report/scripts/__pycache__/lieflat_engine.cpython-312.pyc +0 -0
  297. package/visualization/eduevidence-report/scripts/__pycache__/zh_labels.cpython-312.pyc +0 -0
  298. package/visualization/eduevidence-report/scripts/adapter_contract.py +72 -0
  299. package/visualization/eduevidence-report/scripts/build_artifact_manifest.py +70 -0
  300. package/visualization/eduevidence-report/scripts/build_charts.py +283 -0
  301. package/visualization/eduevidence-report/scripts/build_figures.py +515 -0
  302. package/visualization/eduevidence-report/scripts/build_infographics.py +268 -0
  303. package/visualization/eduevidence-report/scripts/build_report.py +3211 -0
  304. package/visualization/eduevidence-report/scripts/charts_data.py +617 -0
  305. package/visualization/eduevidence-report/scripts/check_mobile_layout.js +220 -0
  306. package/visualization/eduevidence-report/scripts/lieflat_engine.py +852 -0
  307. package/visualization/eduevidence-report/scripts/zh_labels.py +245 -0
  308. package/visualization/eduevidence-report/themes/academic.css +94 -0
  309. package/visualization/eduevidence-report/themes/claude.css +96 -0
  310. package/visualization/eduevidence-report/themes/datalab-dark.css +147 -0
  311. package/visualization/eduevidence-report/themes/datalab.css +151 -0
  312. package/visualization/eduevidence-report/themes/presentation.css +140 -0
@@ -0,0 +1,127 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * EduEvidence npm CLI — wraps install.sh from the published package root.
4
+ *
5
+ * npm install -g eduevidence
6
+ * eduevidence skill # interactive host picker (default)
7
+ * eduevidence skill --host claude
8
+ * npx eduevidence skill --list-hosts
9
+ */
10
+ 'use strict';
11
+
12
+ const { spawnSync } = require('child_process');
13
+ const fs = require('fs');
14
+ const path = require('path');
15
+
16
+ const PKG_ROOT = path.resolve(__dirname, '..');
17
+ const INSTALL_SH = path.join(PKG_ROOT, 'install.sh');
18
+
19
+ function usage() {
20
+ console.log(`eduevidence ${readPkgVersion()} — Evidence-Based Education Decision Skill
21
+
22
+ Install (Python runtime + self-check):
23
+ eduevidence install [--dev] [--dry-run]
24
+
25
+ Install as AI Agent Skill:
26
+ eduevidence skill Interactive host picker
27
+ eduevidence skill --host <name> claude | codex | cursor | all | …
28
+ eduevidence skill --dest <dir> Custom skill root (creates <dir>/eduevidence/)
29
+ eduevidence skill --list-hosts Supported agents and install paths
30
+ eduevidence skill --dry-run Preview without writing
31
+
32
+ Legacy install.sh flags (also accepted):
33
+ eduevidence --skill [--host claude] [--dry-run]
34
+ eduevidence --list-hosts
35
+
36
+ Requires: bash, Python 3.10+ (for install / scripts)
37
+ Docs: https://github.com/37chengshan/eduevidence/blob/main/docs/install-guide.md
38
+ `);
39
+ }
40
+
41
+ function readPkgVersion() {
42
+ try {
43
+ const pkg = JSON.parse(
44
+ fs.readFileSync(path.join(PKG_ROOT, 'package.json'), 'utf8'),
45
+ );
46
+ return pkg.version || '';
47
+ } catch {
48
+ return '';
49
+ }
50
+ }
51
+
52
+ function runInstallSh(args) {
53
+ if (!fs.existsSync(INSTALL_SH)) {
54
+ console.error('ERROR: install.sh not found in package:', PKG_ROOT);
55
+ process.exit(1);
56
+ }
57
+ if (!fs.existsSync(path.join(PKG_ROOT, 'SKILL.md'))) {
58
+ console.error('ERROR: SKILL.md not found in package:', PKG_ROOT);
59
+ process.exit(1);
60
+ }
61
+
62
+ const result = spawnSync('bash', [INSTALL_SH, ...args], {
63
+ cwd: PKG_ROOT,
64
+ stdio: 'inherit',
65
+ env: process.env,
66
+ });
67
+ if (result.error) {
68
+ console.error('ERROR: failed to run install.sh:', result.error.message);
69
+ process.exit(1);
70
+ }
71
+ process.exit(result.status === null ? 1 : result.status);
72
+ }
73
+
74
+ function mapArgs(argv) {
75
+ if (argv.length === 0) {
76
+ usage();
77
+ return null;
78
+ }
79
+
80
+ const first = argv[0];
81
+ if (first === '-h' || first === '--help' || first === 'help') {
82
+ usage();
83
+ return null;
84
+ }
85
+
86
+ if (first === 'install') {
87
+ return argv.slice(1);
88
+ }
89
+
90
+ if (first === 'skill') {
91
+ const rest = argv.slice(1);
92
+ if (rest.includes('--list-hosts')) {
93
+ return ['--list-hosts'];
94
+ }
95
+ const out = ['--skill', '--skill-only'];
96
+ for (let i = 0; i < rest.length; i += 1) {
97
+ const arg = rest[i];
98
+ if (arg === '--host' || arg === '--dest') {
99
+ out.push(arg, rest[i + 1] ?? '');
100
+ i += 1;
101
+ continue;
102
+ }
103
+ if (arg === '--dry-run') {
104
+ out.push('--dry-run');
105
+ continue;
106
+ }
107
+ console.error(`ERROR: unknown skill flag: ${arg}`);
108
+ usage();
109
+ process.exit(1);
110
+ }
111
+ return out;
112
+ }
113
+
114
+ // Pass through legacy install.sh flags (--skill, --dev, --list-hosts, …).
115
+ return argv;
116
+ }
117
+
118
+ function main() {
119
+ const argv = process.argv.slice(2);
120
+ const mapped = mapArgs(argv);
121
+ if (mapped === null) {
122
+ process.exit(0);
123
+ }
124
+ runInstallSh(mapped);
125
+ }
126
+
127
+ main();
@@ -0,0 +1,183 @@
1
+ {
2
+ "domain": "education",
3
+ "name": "education(教育研究)",
4
+ "description": "education 域只是“指向现有契约”的注册:不新增任何逻辑路径,不引入新 schema / 新校验器 / 新方法学。引擎层 load_domain('education') 只做契约存在性校验;领域选择由主 agent 接 CLI 完成。",
5
+ "contracts_source": {
6
+ "frame_schema": "schemas/education-frame.schema.json(EducationResearchFrame,顶层 additionalProperties:false,required: question/decision_target)",
7
+ "outcome_taxonomy": "20 token 取自 schemas/evidence.schema.json 的 outcome_type enum;四类映射参考 engine/pilot.py _OUTCOME_CATEGORY",
8
+ "methodology_checklist": "15 项取自 skill/agents/method-reviewer.md;每项 status 枚举 met/partial/missing/not_applicable",
9
+ "golds_dir": "benchmarks/annotations(30 条人工金标 gold-Q*.json)",
10
+ "references_dir": "references(11 篇教育证据方法学文档)"
11
+ },
12
+ "frame_schema": "schemas/education-frame.schema.json",
13
+ "outcome_taxonomy": "domains/education/outcome_taxonomy.json",
14
+ "methodology_checklist": [
15
+ {
16
+ "id": "control_group",
17
+ "label_zh": "有无对照",
18
+ "description_zh": "是否设置对照/控制条件",
19
+ "statuses": [
20
+ "met",
21
+ "partial",
22
+ "missing",
23
+ "not_applicable"
24
+ ]
25
+ },
26
+ {
27
+ "id": "randomization",
28
+ "label_zh": "是否随机",
29
+ "description_zh": "被试/班级是否随机分配",
30
+ "statuses": [
31
+ "met",
32
+ "partial",
33
+ "missing",
34
+ "not_applicable"
35
+ ]
36
+ },
37
+ {
38
+ "id": "pre_test",
39
+ "label_zh": "有无前测",
40
+ "description_zh": "是否测量干预前基线",
41
+ "statuses": [
42
+ "met",
43
+ "partial",
44
+ "missing",
45
+ "not_applicable"
46
+ ]
47
+ },
48
+ {
49
+ "id": "post_test",
50
+ "label_zh": "有无后测",
51
+ "description_zh": "是否测量干预后即时结果",
52
+ "statuses": [
53
+ "met",
54
+ "partial",
55
+ "missing",
56
+ "not_applicable"
57
+ ]
58
+ },
59
+ {
60
+ "id": "retention_test",
61
+ "label_zh": "有无延迟/保持测试",
62
+ "description_zh": "是否有延迟保持测量",
63
+ "statuses": [
64
+ "met",
65
+ "partial",
66
+ "missing",
67
+ "not_applicable"
68
+ ]
69
+ },
70
+ {
71
+ "id": "transfer_test",
72
+ "label_zh": "有无迁移测试",
73
+ "description_zh": "是否有迁移/新情境测量",
74
+ "statuses": [
75
+ "met",
76
+ "partial",
77
+ "missing",
78
+ "not_applicable"
79
+ ]
80
+ },
81
+ {
82
+ "id": "sample_bias",
83
+ "label_zh": "样本偏差",
84
+ "description_zh": "样本是否具有代表性/存在偏差",
85
+ "statuses": [
86
+ "met",
87
+ "partial",
88
+ "missing",
89
+ "not_applicable"
90
+ ]
91
+ },
92
+ {
93
+ "id": "self_selection",
94
+ "label_zh": "自选择",
95
+ "description_zh": "被试是否自选进入条件组",
96
+ "statuses": [
97
+ "met",
98
+ "partial",
99
+ "missing",
100
+ "not_applicable"
101
+ ]
102
+ },
103
+ {
104
+ "id": "measurement_validity",
105
+ "label_zh": "测量效度",
106
+ "description_zh": "测量工具是否有效测量目标构念",
107
+ "statuses": [
108
+ "met",
109
+ "partial",
110
+ "missing",
111
+ "not_applicable"
112
+ ]
113
+ },
114
+ {
115
+ "id": "confounders",
116
+ "label_zh": "混杂变量",
117
+ "description_zh": "是否识别并控制混杂变量",
118
+ "statuses": [
119
+ "met",
120
+ "partial",
121
+ "missing",
122
+ "not_applicable"
123
+ ]
124
+ },
125
+ {
126
+ "id": "instructor_effect",
127
+ "label_zh": "教师效应",
128
+ "description_zh": "教师/授课者差异是否被控制",
129
+ "statuses": [
130
+ "met",
131
+ "partial",
132
+ "missing",
133
+ "not_applicable"
134
+ ]
135
+ },
136
+ {
137
+ "id": "novelty_effect",
138
+ "label_zh": "新奇效应",
139
+ "description_zh": "干预新奇性是否影响结果",
140
+ "statuses": [
141
+ "met",
142
+ "partial",
143
+ "missing",
144
+ "not_applicable"
145
+ ]
146
+ },
147
+ {
148
+ "id": "tool_version_effect",
149
+ "label_zh": "工具版本效应",
150
+ "description_zh": "AI 工具版本/配置是否明确固定",
151
+ "statuses": [
152
+ "met",
153
+ "partial",
154
+ "missing",
155
+ "not_applicable"
156
+ ]
157
+ },
158
+ {
159
+ "id": "ai_usage_policy",
160
+ "label_zh": "AI 使用规则是否明确",
161
+ "description_zh": "AI 使用边界是否在研究中明确定义",
162
+ "statuses": [
163
+ "met",
164
+ "partial",
165
+ "missing",
166
+ "not_applicable"
167
+ ]
168
+ },
169
+ {
170
+ "id": "dropout",
171
+ "label_zh": "流失率",
172
+ "description_zh": "流失率是否报告并处理",
173
+ "statuses": [
174
+ "met",
175
+ "partial",
176
+ "missing",
177
+ "not_applicable"
178
+ ]
179
+ }
180
+ ],
181
+ "golds_dir": "benchmarks/annotations",
182
+ "references_dir": "references"
183
+ }
@@ -0,0 +1,127 @@
1
+ {
2
+ "domain": "education",
3
+ "source": {
4
+ "tokens": "schemas/evidence.schema.json -> outcome_type enum(20 token)",
5
+ "categories": "engine/pilot.py -> _OUTCOME_CATEGORY(learning/task_performance/process/risk 四类)"
6
+ },
7
+ "categories": {
8
+ "learning": {
9
+ "name_zh": "学习效果",
10
+ "description_zh": "指向学习本身的持久改变:知识、理解、保持与迁移。任务完成表现不能自动等价为学习效果。"
11
+ },
12
+ "task_performance": {
13
+ "name_zh": "任务表现",
14
+ "description_zh": "任务完成的质量与效率(完成时间/准确率/代码质量/作业成绩),不等于学习效果。"
15
+ },
16
+ "process": {
17
+ "name_zh": "学习过程",
18
+ "description_zh": "过程性变量:参与、动机、认知负荷、求助行为与元认知。"
19
+ },
20
+ "risk": {
21
+ "name_zh": "风险",
22
+ "description_zh": "干预(如 AI 工具)可能带来的风险与负面结果:依赖、过度依赖、努力减少、迁移受损、诚信风险、虚假信心。"
23
+ }
24
+ },
25
+ "tokens": [
26
+ {
27
+ "id": "knowledge_gain",
28
+ "category": "learning",
29
+ "description_zh": "知识获得:知识量的增加(测验得分提升)"
30
+ },
31
+ {
32
+ "id": "concept_understanding",
33
+ "category": "learning",
34
+ "description_zh": "概念理解:对核心概念的深层理解"
35
+ },
36
+ {
37
+ "id": "retention",
38
+ "category": "learning",
39
+ "description_zh": "保持:延迟测试后仍能保持所学"
40
+ },
41
+ {
42
+ "id": "transfer",
43
+ "category": "learning",
44
+ "description_zh": "迁移:迁移到新情境/新问题"
45
+ },
46
+ {
47
+ "id": "independent_problem_solving",
48
+ "category": "learning",
49
+ "description_zh": "独立解题:无支持下独立解决问题"
50
+ },
51
+ {
52
+ "id": "completion_time",
53
+ "category": "task_performance",
54
+ "description_zh": "完成时间:任务完成速度"
55
+ },
56
+ {
57
+ "id": "accuracy",
58
+ "category": "task_performance",
59
+ "description_zh": "准确率:任务完成正确率"
60
+ },
61
+ {
62
+ "id": "code_quality",
63
+ "category": "task_performance",
64
+ "description_zh": "代码质量:代码可读性/结构/缺陷密度"
65
+ },
66
+ {
67
+ "id": "assignment_score",
68
+ "category": "task_performance",
69
+ "description_zh": "作业成绩:作业/测验得分"
70
+ },
71
+ {
72
+ "id": "engagement",
73
+ "category": "process",
74
+ "description_zh": "参与度:课堂/任务参与程度"
75
+ },
76
+ {
77
+ "id": "motivation",
78
+ "category": "process",
79
+ "description_zh": "动机:学习动机与自我效能"
80
+ },
81
+ {
82
+ "id": "cognitive_load",
83
+ "category": "process",
84
+ "description_zh": "认知负荷:任务过程中的认知负荷体验"
85
+ },
86
+ {
87
+ "id": "help_seeking",
88
+ "category": "process",
89
+ "description_zh": "求助行为:求助模式(对 AI/教师/同伴)"
90
+ },
91
+ {
92
+ "id": "metacognition",
93
+ "category": "process",
94
+ "description_zh": "元认知:元认知监控与学习策略"
95
+ },
96
+ {
97
+ "id": "ai_dependency",
98
+ "category": "risk",
99
+ "description_zh": "AI 依赖:对 AI 工具的依赖程度"
100
+ },
101
+ {
102
+ "id": "over_reliance",
103
+ "category": "risk",
104
+ "description_zh": "过度依赖:过度依赖 AI 完成任务"
105
+ },
106
+ {
107
+ "id": "reduced_effort",
108
+ "category": "risk",
109
+ "description_zh": "努力减少:学习投入/努力下降"
110
+ },
111
+ {
112
+ "id": "reduced_transfer",
113
+ "category": "risk",
114
+ "description_zh": "迁移受损:迁移能力受损"
115
+ },
116
+ {
117
+ "id": "academic_integrity_risk",
118
+ "category": "risk",
119
+ "description_zh": "学术诚信风险:抄袭/作弊等诚信风险"
120
+ },
121
+ {
122
+ "id": "false_confidence",
123
+ "category": "risk",
124
+ "description_zh": "虚假信心:未掌握却过度自信"
125
+ }
126
+ ]
127
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "version": "4.0.0",
3
+ "description": "EduEvidence v4 领域注册表(EvidenceCore 抽象第一步)。每个条目声明一个领域的契约:frame_schema(框架 schema)、outcome_taxonomy(结果分类)、methodology_checklist(方法学清单)、golds_dir(金标目录)与 references_dir(参考文献目录)。education 为“指向现有契约”的注册域,不新增任何逻辑路径;policy 为 v4 首个自带契约的独立领域。domain select(领域选择)由主 agent 接 CLI 完成,引擎层不自行选择领域。",
4
+ "domains": [
5
+ {
6
+ "id": "education",
7
+ "name": "education",
8
+ "description": "教育研究领域(注册域,零逻辑路径):框架复用 schemas/education-frame.schema.json(EducationResearchFrame),结果分类复用 evidence.schema.json 的 20 个 outcome_type token 并按 engine/pilot.py _OUTCOME_CATEGORY 归为四类,方法学清单复用 skill/agents/method-reviewer.md 的 15 项审查清单。",
9
+ "frame_schema": "schemas/education-frame.schema.json",
10
+ "outcome_taxonomy": "domains/education/outcome_taxonomy.json",
11
+ "methodology_checklist": "domains/education/manifest.json#/methodology_checklist",
12
+ "golds_dir": "benchmarks/annotations",
13
+ "references_dir": "references"
14
+ },
15
+ {
16
+ "id": "policy",
17
+ "name": "policy",
18
+ "description": "政策分析领域(v4 首个自带契约的独立领域):政策分析框架(decision_object/intervention/population/stakeholders/outcomes/context/scope,不含 education-frame 的 learner/course 概念)、5 类政策结果分类(policy_effectiveness/cost_effectiveness/equity/feasibility/implementation_risk)与 12 项政策证据质量清单。",
19
+ "frame_schema": "domains/policy/frame.schema.json",
20
+ "outcome_taxonomy": "domains/policy/outcome_taxonomy.json",
21
+ "methodology_checklist": "domains/policy/methodology_checklist.json",
22
+ "golds_dir": null,
23
+ "references_dir": "domains/policy/references"
24
+ }
25
+ ]
26
+ }
@@ -0,0 +1,234 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://github.com/37chengshan/eduevidence/domains/policy/frame.schema.json",
4
+ "title": "PolicyAnalysisFrame",
5
+ "description": "Structured framing of a policy analysis question (v4 policy domain). 政策分析框架:decision_object / intervention / population / stakeholders / outcomes / context / scope。刻意不使用 education-frame 的 learner/course 概念。扩展字段一律放在 extensions 内。",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "question",
10
+ "decision_object",
11
+ "intervention",
12
+ "population",
13
+ "outcomes"
14
+ ],
15
+ "properties": {
16
+ "question": {
17
+ "type": "string",
18
+ "minLength": 5,
19
+ "description": "政策分析问题,如 '是否应在公立高中全面推行无手机课堂政策?'"
20
+ },
21
+ "decision_object": {
22
+ "type": "string",
23
+ "enum": [
24
+ "adopt",
25
+ "modify",
26
+ "terminate",
27
+ "maintain",
28
+ "evaluate_impact"
29
+ ],
30
+ "description": "待决策的政策对象与动作:采纳 / 修改 / 终止 / 维持 / 评估影响。"
31
+ },
32
+ "intervention": {
33
+ "type": "object",
34
+ "additionalProperties": true,
35
+ "description": "待评估的政策干预本身(不是教学干预)。",
36
+ "properties": {
37
+ "policy_name": {
38
+ "type": "string",
39
+ "examples": [
40
+ "classroom_phone_ban"
41
+ ]
42
+ },
43
+ "policy_type": {
44
+ "type": "string",
45
+ "enum": [
46
+ "regulation",
47
+ "subsidy",
48
+ "tax_incentive",
49
+ "mandate",
50
+ "information_campaign",
51
+ "nudge",
52
+ "institutional_reform",
53
+ "other"
54
+ ]
55
+ },
56
+ "jurisdiction": {
57
+ "type": "string",
58
+ "examples": [
59
+ "public_high_schools",
60
+ "province_scope"
61
+ ]
62
+ },
63
+ "mechanism": {
64
+ "type": "string",
65
+ "description": "政策的作用机制/传导路径。"
66
+ },
67
+ "duration": {
68
+ "type": "string",
69
+ "examples": [
70
+ "3_years"
71
+ ]
72
+ },
73
+ "intensity": {
74
+ "type": "string",
75
+ "examples": [
76
+ "full_prohibition",
77
+ "partial"
78
+ ]
79
+ }
80
+ }
81
+ },
82
+ "population": {
83
+ "type": "object",
84
+ "additionalProperties": true,
85
+ "description": "政策针对的人群(不是 'learner' 学习者概念)。",
86
+ "properties": {
87
+ "target_group": {
88
+ "type": "string",
89
+ "examples": [
90
+ "public_high_school_students"
91
+ ]
92
+ },
93
+ "excluded_groups": {
94
+ "type": "string"
95
+ },
96
+ "scale": {
97
+ "type": "string",
98
+ "examples": [
99
+ "district_wide",
100
+ "national"
101
+ ]
102
+ }
103
+ }
104
+ },
105
+ "stakeholders": {
106
+ "type": "object",
107
+ "additionalProperties": true,
108
+ "description": "利益相关者:决策者、受益者、受影响方、实施者。",
109
+ "properties": {
110
+ "decision_maker": {
111
+ "type": "string",
112
+ "examples": [
113
+ "school_board",
114
+ "education_bureau"
115
+ ]
116
+ },
117
+ "beneficiaries": {
118
+ "type": "array",
119
+ "items": {
120
+ "type": "string"
121
+ }
122
+ },
123
+ "affected_parties": {
124
+ "type": "array",
125
+ "items": {
126
+ "type": "string"
127
+ }
128
+ },
129
+ "implementers": {
130
+ "type": "array",
131
+ "items": {
132
+ "type": "string"
133
+ }
134
+ }
135
+ }
136
+ },
137
+ "outcomes": {
138
+ "type": "object",
139
+ "additionalProperties": true,
140
+ "description": "政策结果(policy outcome taxonomy 五类)。",
141
+ "properties": {
142
+ "primary": {
143
+ "type": "array",
144
+ "items": {
145
+ "type": "string",
146
+ "enum": [
147
+ "policy_effectiveness",
148
+ "cost_effectiveness",
149
+ "equity",
150
+ "feasibility",
151
+ "implementation_risk"
152
+ ]
153
+ }
154
+ },
155
+ "secondary": {
156
+ "type": "array",
157
+ "items": {
158
+ "type": "string"
159
+ }
160
+ }
161
+ }
162
+ },
163
+ "context": {
164
+ "type": "object",
165
+ "additionalProperties": true,
166
+ "description": "政策情境:制度环境、历史沿革、政治条件。",
167
+ "properties": {
168
+ "policy_environment": {
169
+ "type": "string",
170
+ "examples": [
171
+ "provincial_education_budget_constraint"
172
+ ]
173
+ },
174
+ "prior_policy_history": {
175
+ "type": "string"
176
+ },
177
+ "political_conditions": {
178
+ "type": "string"
179
+ }
180
+ }
181
+ },
182
+ "scope": {
183
+ "type": "object",
184
+ "additionalProperties": true,
185
+ "description": "证据检索范围:时间窗、地理、证据类型。",
186
+ "properties": {
187
+ "time_range": {
188
+ "type": "string",
189
+ "examples": [
190
+ "2015-2025"
191
+ ]
192
+ },
193
+ "geography": {
194
+ "type": "string",
195
+ "examples": [
196
+ "CN",
197
+ "worldwide"
198
+ ]
199
+ },
200
+ "evidence_types": {
201
+ "type": "array",
202
+ "items": {
203
+ "type": "string"
204
+ }
205
+ }
206
+ }
207
+ },
208
+ "comparison": {
209
+ "type": "string",
210
+ "description": "对照/反事实条件,如 '无政策地区'、'政策实施前'。"
211
+ },
212
+ "inclusion_criteria": {
213
+ "type": "array",
214
+ "items": {
215
+ "type": "string"
216
+ }
217
+ },
218
+ "exclusion_criteria": {
219
+ "type": "array",
220
+ "items": {
221
+ "type": "string"
222
+ }
223
+ },
224
+ "success_condition": {
225
+ "type": "string",
226
+ "description": "什么算这项决策的成功结果。"
227
+ },
228
+ "extensions": {
229
+ "type": "object",
230
+ "description": "结构化扩展字段的统一容器。未列入本 schema 的字段必须放在这里,禁止在顶层新增属性。",
231
+ "additionalProperties": true
232
+ }
233
+ }
234
+ }