@qlm/learnlog-mcp 0.0.0-stage → 0.2.1
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/CHANGELOG.md +44 -0
- package/LICENSE +201 -0
- package/NOTICE +43 -0
- package/README.md +121 -2
- package/data/SOURCE_CORRECTION.md +9 -0
- package/data/THIRD_PARTY_DATA.md +148 -0
- package/data/examples/chain-tpc-clinical-v2-tampered.json +97 -0
- package/data/examples/chain-tpc-clinical-v2.json +95 -0
- package/data/examples/evidence-record-clean.json +173 -0
- package/data/examples/evidence-record-tampered.json +173 -0
- package/data/labpath-worlds.json +107 -0
- package/data/preprint/README.md +10 -0
- package/data/preprint/assistments_episodes.json +37 -0
- package/data/preprint/cross_source_episodes.json +63 -0
- package/data/provenance/oatutor.json +84 -0
- package/data/provenance/source-audit.json +69 -0
- package/data/provenance/tutormoments.json +91 -0
- package/data/samples/explicit-assistance-SYNTHETIC.jsonl +5 -0
- package/data/samples/oatutor-real-participants.csv +13 -0
- package/data/samples/sandpiper-SYNTHETIC.csv +9 -0
- package/data/samples/tutormoments-real-transcripts.jsonl +2 -0
- package/dist/bin.js +6 -0
- package/dist/episodes.js +488 -0
- package/dist/files.js +39 -0
- package/dist/package.js +14 -0
- package/dist/py.js +419 -0
- package/dist/respond.js +47 -0
- package/dist/sealed.js +31 -0
- package/dist/server.js +115 -0
- package/dist/stages.js +35 -0
- package/dist/tools/formats.js +35 -0
- package/dist/tools/inventory.js +179 -0
- package/dist/tools/learning-graph.js +111 -0
- package/dist/tools/misconceptions.js +54 -0
- package/dist/tools/preprint.js +241 -0
- package/dist/tools/qlm-datasets.js +56 -0
- package/dist/tools/transform.js +61 -0
- package/dist/tools/validate.js +47 -0
- package/dist/tools/verify-credential.js +155 -0
- package/dist/tools/verify-evidence.js +51 -0
- package/dist/tools/worlds.js +24 -0
- package/dist/transformer.js +92 -0
- package/dist/zip.js +71 -0
- package/package.json +66 -4
- package/skills/learnlog-assistments/SKILL.md +38 -0
- package/skills/learnlog-export-to-action/SKILL.md +31 -0
- package/skills/learnlog-learning-commons/SKILL.md +33 -0
- package/skills/learnlog-nto-sandpiper/SKILL.md +31 -0
- package/vendor/PROVENANCE.json +259 -0
- package/vendor/qlm-measure/checks.d.ts +24 -0
- package/vendor/qlm-measure/checks.js +42 -0
- package/vendor/qlm-measure/cli.d.ts +17 -0
- package/vendor/qlm-measure/cli.js +461 -0
- package/vendor/qlm-measure/rules.d.ts +10 -0
- package/vendor/qlm-measure/rules.js +46 -0
- package/vendor/qlm-measure/schemes/index.d.ts +133 -0
- package/vendor/qlm-measure/schemes/index.js +339 -0
- package/vendor/qlm-measure/schemes/node.d.ts +8 -0
- package/vendor/qlm-measure/schemes/node.js +15 -0
- package/vendor/qlm-measure/schemes/products.d.ts +38 -0
- package/vendor/qlm-measure/schemes/products.js +725 -0
- package/vendor/qlm-measure/verifier/hash.d.ts +27 -0
- package/vendor/qlm-measure/verifier/hash.js +163 -0
- package/vendor/qlm-measure/verifier/verify-record.d.ts +22 -0
- package/vendor/qlm-measure/verifier/verify-record.js +123 -0
- package/vendor/qlm-measure/verifier-v03.d.ts +24 -0
- package/vendor/qlm-measure/verifier-v03.js +205 -0
- package/vendor/transformer/LICENSE.txt +29 -0
- package/vendor/transformer/cross-source-analysis-data.d.mts +3 -0
- package/vendor/transformer/cross-source-analysis-data.mjs +238 -0
- package/vendor/transformer/engine.d.mts +61 -0
- package/vendor/transformer/engine.mjs +445 -0
- package/vendor/transformer/profiles.mjs +309 -0
- package/vendor/transformer/research-semantics.mjs +1453 -0
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
// Generated by scripts/build_cross_source_demo.py; aggregate facts only.
|
|
2
|
+
export default {
|
|
3
|
+
"schema_version": "1.0.0",
|
|
4
|
+
"analysis_id": "recorded-assistance-requests-20261018",
|
|
5
|
+
"executed_utc": "2026-10-20T20:35:45.816Z",
|
|
6
|
+
"distribution_scope": "research_aggregate_facts_only_no_raw_redistribution",
|
|
7
|
+
"metric": {
|
|
8
|
+
"id": "recorded_help_request_observations",
|
|
9
|
+
"label": "Recorded learner help-request observations",
|
|
10
|
+
"unit": "Source-native request-record occurrences in the selected published releases",
|
|
11
|
+
"common_definition": "A released source row records a learner asking the in-product assistance system for help; original request subtype and source remain separate strata.",
|
|
12
|
+
"arithmetic_claim": "Counts of eligible recorded observations are summed across disjoint source-release namespaces. This does not establish equivalence of pedagogy, request opportunities, intensity, capture coverage or populations."
|
|
13
|
+
},
|
|
14
|
+
"sources": [
|
|
15
|
+
{
|
|
16
|
+
"source_id": "zenodo.17551130",
|
|
17
|
+
"scope": "urn:learnlog:release:zenodo:17551130:v1:sha256:5527127f0a3c939601b17ef207ef8b34df7cad9159c9617f879efbf4e989d499",
|
|
18
|
+
"label": "JetBrains Academy next-step hint study",
|
|
19
|
+
"source_url": "https://zenodo.org/records/17551130",
|
|
20
|
+
"documentation_url": "https://arxiv.org/html/2511.06362v1",
|
|
21
|
+
"release": "Zenodo 17551130 v1 / ai_hints_interaction.zip",
|
|
22
|
+
"license": "CC-BY-4.0",
|
|
23
|
+
"commercial_demo_eligible": true,
|
|
24
|
+
"commercial_demo_scope": "Aggregate factual outputs only; learner content and event-level records excluded",
|
|
25
|
+
"input_sha256": "5527127f0a3c939601b17ef207ef8b34df7cad9159c9617f879efbf4e989d499",
|
|
26
|
+
"native_unit": "Native Log observations embedded in the released scenario HTML reports",
|
|
27
|
+
"mapping_basis": "Native Log labels 'Hint button is clicked' and 'Hint retry is clicked' record learner Get Hint/Retry requests; system 'Code hint requested' is excluded.",
|
|
28
|
+
"request_rule": "type == 'Log' and description in {'Hint button is clicked', 'Hint retry is clicked'}",
|
|
29
|
+
"identity_basis": "pinned archive SHA-256 + member path + zero-based eventsData ordinal; this is a release-occurrence locator, not an authoritative learner/request ID",
|
|
30
|
+
"native_input_count": 1060271,
|
|
31
|
+
"native_assistance_log_count": 5275,
|
|
32
|
+
"native_log_label_counts": {
|
|
33
|
+
"Code banner shown": 735,
|
|
34
|
+
"Code hint generated": 734,
|
|
35
|
+
"Code hint is accepted": 300,
|
|
36
|
+
"Code hint is cancelled": 18,
|
|
37
|
+
"Code hint requested": 1028,
|
|
38
|
+
"Dislike": 119,
|
|
39
|
+
"Error banner shown": 266,
|
|
40
|
+
"Error hint: An unexpected error occurred, please try again.": 265,
|
|
41
|
+
"Error hint: Please check your internet connection and try again!": 1,
|
|
42
|
+
"Hint banner is closed": 207,
|
|
43
|
+
"Hint button is clicked": 960,
|
|
44
|
+
"Hint retry is clicked": 90,
|
|
45
|
+
"Like": 94,
|
|
46
|
+
"Show code hint is clicked": 453,
|
|
47
|
+
"Text banner shown": 2,
|
|
48
|
+
"Text hint generated": 3
|
|
49
|
+
},
|
|
50
|
+
"source_file_count": 1050,
|
|
51
|
+
"assistance_request_observations": 1050,
|
|
52
|
+
"help_request_subtypes": [
|
|
53
|
+
{
|
|
54
|
+
"label": "Hint button is clicked",
|
|
55
|
+
"count": 960
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"label": "Hint retry is clicked",
|
|
59
|
+
"count": 90
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
"capture_coverage": {
|
|
63
|
+
"state": "unknown",
|
|
64
|
+
"reason": "Released observations are countable; complete real-world capture is not established."
|
|
65
|
+
},
|
|
66
|
+
"model_version": {
|
|
67
|
+
"state": "unknown",
|
|
68
|
+
"reason": "This mapping does not establish exact AI model versions."
|
|
69
|
+
},
|
|
70
|
+
"metric_eligibility": [
|
|
71
|
+
{
|
|
72
|
+
"metric_id": "recorded_help_request_observations",
|
|
73
|
+
"eligible": true,
|
|
74
|
+
"reason": "Native row plus documented candidate mapping supports a recorded learner help-request observation within this release."
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"metric_id": "actual_request_total",
|
|
78
|
+
"eligible": false,
|
|
79
|
+
"reason": "Unknown source capture completeness and release-selection mechanisms."
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"metric_id": "request_rate",
|
|
83
|
+
"eligible": false,
|
|
84
|
+
"reason": "No comparable exposure denominator is established."
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"metric_id": "request_to_display_rate",
|
|
88
|
+
"eligible": false,
|
|
89
|
+
"reason": "No authoritative cross-stage request-response links are established."
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"metric_id": "learning_effect",
|
|
93
|
+
"eligible": false,
|
|
94
|
+
"reason": "A descriptive assistance-log count is not an educational outcome or causal estimate."
|
|
95
|
+
}
|
|
96
|
+
]
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"source_id": "tutortrace.deployment8",
|
|
100
|
+
"scope": "urn:learnlog:release:tutortrace:bc7990370da18a611a122255ebc3e475bd8a3fc6:deployment8:sha256:09972201c16a9f6def7d1e25a9b9e6827994601d720a37696afb0927168befc8",
|
|
101
|
+
"label": "TutorTrace / IDETrace deployment 8",
|
|
102
|
+
"source_url": "https://github.com/divadbaroon/TutorTrace_dataset_and_benchmark/tree/bc7990370da18a611a122255ebc3e475bd8a3fc6",
|
|
103
|
+
"documentation_url": "https://vizpi.org/dataset",
|
|
104
|
+
"release": "bc7990370da18a611a122255ebc3e475bd8a3fc6 / dataset/raw_telemetry/deployment_8.json",
|
|
105
|
+
"license": "CC-BY-4.0 declared for dataset including raw telemetry",
|
|
106
|
+
"commercial_demo_eligible": true,
|
|
107
|
+
"commercial_demo_scope": "Aggregate factual outputs only; learner content and event-level records excluded",
|
|
108
|
+
"input_sha256": "09972201c16a9f6def7d1e25a9b9e6827994601d720a37696afb0927168befc8",
|
|
109
|
+
"native_unit": "One raw telemetry event with type CHAT_QUERY",
|
|
110
|
+
"mapping_basis": "The author README describes raw AI queries/responses and gives CHAT_QUERY as a chat query; the pinned author prepare_data.py includes CHAT_QUERY in QUERY_TYPES. Treat it as a submitted learner assistance query, not typing, generation or display.",
|
|
111
|
+
"request_rule": "type == 'CHAT_QUERY' in the events arrays of the pinned deployment-8 JSON object",
|
|
112
|
+
"identity_basis": "pinned file SHA-256 + top-level source record key + zero-based events ordinal; this is a private release-occurrence locator, not an authoritative learner/request ID",
|
|
113
|
+
"native_input_count": 30283,
|
|
114
|
+
"source_file_count": 1,
|
|
115
|
+
"native_event_label_counts": {
|
|
116
|
+
"CHAT_DELETE": 92,
|
|
117
|
+
"CHAT_PASTE": 10,
|
|
118
|
+
"CHAT_QUERY": 59,
|
|
119
|
+
"CHAT_RESPONSE": 59,
|
|
120
|
+
"CHAT_SELECT_INPUT": 1,
|
|
121
|
+
"CHAT_TYPE": 1218,
|
|
122
|
+
"CODE_COPY": 3,
|
|
123
|
+
"CODE_DELETE": 815,
|
|
124
|
+
"CODE_DELETE_SELECTION": 16,
|
|
125
|
+
"CODE_INDENT": 65,
|
|
126
|
+
"CODE_PASTE": 10,
|
|
127
|
+
"CODE_SELECT": 36,
|
|
128
|
+
"CODE_TYPE": 4635,
|
|
129
|
+
"CODE_UNDO": 6,
|
|
130
|
+
"MOUSE_CLICK": 1147,
|
|
131
|
+
"MOUSE_MOVE": 21195,
|
|
132
|
+
"PANEL_RESIZE": 14,
|
|
133
|
+
"SESSION_START": 42,
|
|
134
|
+
"TAB_STATE": 453,
|
|
135
|
+
"TASK_COPY": 36,
|
|
136
|
+
"TASK_SELECT": 29,
|
|
137
|
+
"TERMINAL_COPY": 1,
|
|
138
|
+
"TERMINAL_ERROR": 89,
|
|
139
|
+
"TERMINAL_OUTPUT": 3,
|
|
140
|
+
"TERMINAL_RUN": 136,
|
|
141
|
+
"TERMINAL_SELECT": 4,
|
|
142
|
+
"TEST_CASE_RESULT": 47,
|
|
143
|
+
"TEST_SELECT": 2,
|
|
144
|
+
"WINDOW_RESIZE": 60
|
|
145
|
+
},
|
|
146
|
+
"metadata_caveat": "Pinned Croissant declares CC-BY-4.0 for a dataset distribution including raw telemetry. Population descriptions conflict, so no verified learner-count claim is made. Commercial-demo eligibility is limited here to aggregate factual outputs. Research opt-in remains a data-access safeguard; no new ethics determination is implied.",
|
|
147
|
+
"assistance_request_observations": 59,
|
|
148
|
+
"help_request_subtypes": [
|
|
149
|
+
{
|
|
150
|
+
"label": "CHAT_QUERY",
|
|
151
|
+
"count": 59
|
|
152
|
+
}
|
|
153
|
+
],
|
|
154
|
+
"capture_coverage": {
|
|
155
|
+
"state": "unknown",
|
|
156
|
+
"reason": "Released observations are countable; complete real-world capture is not established."
|
|
157
|
+
},
|
|
158
|
+
"model_version": {
|
|
159
|
+
"state": "unknown",
|
|
160
|
+
"reason": "This mapping does not establish exact AI model versions."
|
|
161
|
+
},
|
|
162
|
+
"metric_eligibility": [
|
|
163
|
+
{
|
|
164
|
+
"metric_id": "recorded_help_request_observations",
|
|
165
|
+
"eligible": true,
|
|
166
|
+
"reason": "Native row plus documented candidate mapping supports a recorded learner help-request observation within this release."
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
"metric_id": "actual_request_total",
|
|
170
|
+
"eligible": false,
|
|
171
|
+
"reason": "Unknown source capture completeness and release-selection mechanisms."
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"metric_id": "request_rate",
|
|
175
|
+
"eligible": false,
|
|
176
|
+
"reason": "No comparable exposure denominator is established."
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"metric_id": "request_to_display_rate",
|
|
180
|
+
"eligible": false,
|
|
181
|
+
"reason": "No authoritative cross-stage request-response links are established."
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"metric_id": "learning_effect",
|
|
185
|
+
"eligible": false,
|
|
186
|
+
"reason": "A descriptive assistance-log count is not an educational outcome or causal estimate."
|
|
187
|
+
}
|
|
188
|
+
]
|
|
189
|
+
}
|
|
190
|
+
],
|
|
191
|
+
"aggregate": {
|
|
192
|
+
"source_count": 2,
|
|
193
|
+
"assistance_request_observations": 1109,
|
|
194
|
+
"actual_request_total": null,
|
|
195
|
+
"unique_cross_source_learners": null,
|
|
196
|
+
"request_rate": null,
|
|
197
|
+
"request_to_display_rate": null,
|
|
198
|
+
"learning_effect": null
|
|
199
|
+
},
|
|
200
|
+
"cumulative": [
|
|
201
|
+
{
|
|
202
|
+
"source_id": "zenodo.17551130",
|
|
203
|
+
"added_count": 1050,
|
|
204
|
+
"cumulative_count": 1050
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
"source_id": "tutortrace.deployment8",
|
|
208
|
+
"added_count": 59,
|
|
209
|
+
"cumulative_count": 1109
|
|
210
|
+
}
|
|
211
|
+
],
|
|
212
|
+
"pipeline_verification": {
|
|
213
|
+
"capture_profile_records": 1109,
|
|
214
|
+
"contract_validations": 1109,
|
|
215
|
+
"xapi_roundtrips": 1109,
|
|
216
|
+
"caliper_roundtrips": 1109,
|
|
217
|
+
"direct_native_baseline_matches": true,
|
|
218
|
+
"native_filter_count": 1109,
|
|
219
|
+
"carrier_aggregates_identical": true,
|
|
220
|
+
"order_and_batch_invariant": true,
|
|
221
|
+
"replay_idempotent": true,
|
|
222
|
+
"conflicting_duplicate_rejected": true,
|
|
223
|
+
"unknown_coverage_preserved": true,
|
|
224
|
+
"independent_human_mapping_review": false,
|
|
225
|
+
"live_lrs_interoperability_test": false,
|
|
226
|
+
"caliper_certification_test": false,
|
|
227
|
+
"private_row_artifacts_in_public_output": false
|
|
228
|
+
},
|
|
229
|
+
"limitations": [
|
|
230
|
+
"Candidate mappings are agent-authored and agent-audited; independent human mapping review remains pending.",
|
|
231
|
+
"The numerator describes selected public-release records, not all real-world requests or distinct real actions.",
|
|
232
|
+
"Identical content at different release positions remains separate; replay of the same pinned release position is deduplicated.",
|
|
233
|
+
"Release-selection mechanisms and capture completeness are unknown. Native event-time extrema are not source capture windows.",
|
|
234
|
+
"Importer creation timestamps and actors describe software record creation; no learner action time or actor is fabricated.",
|
|
235
|
+
"No learner-row, prompt or source-code payload is included in this aggregate JSON.",
|
|
236
|
+
"No causal effect, cross-product efficacy, measurement superiority, unique cross-source learners or adoption by named vendors is shown."
|
|
237
|
+
]
|
|
238
|
+
};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// Type declarations for the vendored engine.mjs. Written for this package (not copied from qlm-measure);
|
|
2
|
+
// they describe only the parts of the engine this package calls.
|
|
3
|
+
export interface Profile {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
mode: "dialogue" | "summary" | "assistance_events" | "annotated_dialogue";
|
|
8
|
+
status: string;
|
|
9
|
+
sampleName: string;
|
|
10
|
+
metrics: Record<string, string>;
|
|
11
|
+
source: {
|
|
12
|
+
kind: string;
|
|
13
|
+
url?: string;
|
|
14
|
+
downloadUrl?: string;
|
|
15
|
+
revision?: string;
|
|
16
|
+
license?: string;
|
|
17
|
+
licenseUrl?: string;
|
|
18
|
+
citation?: string;
|
|
19
|
+
selectionNote?: string;
|
|
20
|
+
limitations: string[];
|
|
21
|
+
sampleSha256?: string;
|
|
22
|
+
fixtureSha256?: string;
|
|
23
|
+
summary?: string;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export interface TransformRun {
|
|
27
|
+
profile: Profile;
|
|
28
|
+
semanticContract: Record<string, unknown>;
|
|
29
|
+
document: { file_schema: string; serialization_format: string; records: LearnlogRecord[] };
|
|
30
|
+
records: LearnlogRecord[];
|
|
31
|
+
checkpoint: Record<string, { seq: number; entry_hash: string }>;
|
|
32
|
+
sourceName: string;
|
|
33
|
+
sourceHash: string;
|
|
34
|
+
mappingHash: string;
|
|
35
|
+
sourceKind: "verified_public_sample" | "synthetic_fixture" | "unverified_user_input";
|
|
36
|
+
sourceVerified: boolean;
|
|
37
|
+
summary: {
|
|
38
|
+
inputRowCount: number;
|
|
39
|
+
rowCount: number;
|
|
40
|
+
recordCount: number;
|
|
41
|
+
eventCount: number;
|
|
42
|
+
unit: string;
|
|
43
|
+
eventTypes: Record<string, number>;
|
|
44
|
+
missingMetricCount: number;
|
|
45
|
+
assistanceUnknownCount: number;
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
export interface LearnlogRecord {
|
|
49
|
+
header: Record<string, unknown>;
|
|
50
|
+
event_schemas: string[];
|
|
51
|
+
entries: { seq: number; time: string; event_hash: string; prev_hash: string; entry_hash: string; event: { name: string; data: Record<string, unknown>; activity?: { id: string } } }[];
|
|
52
|
+
}
|
|
53
|
+
export const ALL_PROFILES: readonly Profile[];
|
|
54
|
+
/** ALL_PROFILES plus the engine-only adapters (sandpiper). */
|
|
55
|
+
export const ADAPTER_PROFILES: readonly Profile[];
|
|
56
|
+
export const ENGINE_VERSION: string;
|
|
57
|
+
export function getSample(id: string): string;
|
|
58
|
+
export function getSemanticContract(id: string): Record<string, unknown>;
|
|
59
|
+
export function parseStrictJSON(text: string): unknown;
|
|
60
|
+
export function transform(options: { profileId: string; text: string; tenant?: string; sourceName?: string }): Promise<TransformRun>;
|
|
61
|
+
export function verify(document: unknown, expectedHeads?: unknown): Promise<Record<string, { seq: number; entry_hash: string }>>;
|