@plasius/learning 0.2.25 → 0.4.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/README.md +41 -0
- package/dist/chunk-OXWMIHYI.js +6076 -0
- package/dist/chunk-OXWMIHYI.js.map +1 -0
- package/dist/course-authoring-DImvrK5r.d.cts +514 -0
- package/dist/course-authoring-DImvrK5r.d.ts +514 -0
- package/dist/courses/robot-maze-dash.cjs +355 -0
- package/dist/courses/robot-maze-dash.cjs.map +1 -0
- package/dist/courses/robot-maze-dash.d.cts +6 -0
- package/dist/courses/robot-maze-dash.d.ts +6 -0
- package/dist/courses/robot-maze-dash.js +196 -0
- package/dist/courses/robot-maze-dash.js.map +1 -0
- package/dist/index.cjs +726 -467
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +60 -413
- package/dist/index.d.ts +60 -413
- package/dist/index.js +145 -5903
- package/dist/index.js.map +1 -1
- package/package.json +6 -1
|
@@ -0,0 +1,514 @@
|
|
|
1
|
+
/** Version-one module categories supported by the learning catalog. */
|
|
2
|
+
type ModuleCategoryV1 = "game" | "robot" | "vibe" | "web-app";
|
|
3
|
+
/** Commercial states deliberately separate pilot grants from public checkout. */
|
|
4
|
+
type CommercialStateV1 = "pilot-grant-only" | "fixed-price" | "retired";
|
|
5
|
+
/** The four deterministic assessment dimensions and their product meanings. */
|
|
6
|
+
type AssessmentDimensionV1 = "structure" | "behaviour" | "resilience" | "safety";
|
|
7
|
+
type ScoreBandV1 = "keep-exploring" | "nearly-there" | "mission-complete" | "mastered";
|
|
8
|
+
type CourseMaterialAudienceV1 = "learner" | "facilitator";
|
|
9
|
+
type CourseMaterialKindV1 = "child-guide" | "mission-cards" | "starter-project" | "asset-pack" | "printable" | "facilitator-guide" | "answer-key" | "protected-tests" | "hardware-guide";
|
|
10
|
+
type ModuleAgentRoleV1 = "assessor" | "debugger" | "fix-guide" | "concept-explainer";
|
|
11
|
+
type HardwareModeV1 = "none" | "optional" | "physical-first";
|
|
12
|
+
type HardwareVerificationStatusV1 = "not-applicable" | "pending-bench-test" | "verified";
|
|
13
|
+
/** A material record contains metadata only; storage and signed URLs are adapter concerns. */
|
|
14
|
+
interface CourseMaterialV1 {
|
|
15
|
+
id: string;
|
|
16
|
+
kind: CourseMaterialKindV1;
|
|
17
|
+
audience: CourseMaterialAudienceV1;
|
|
18
|
+
title?: string;
|
|
19
|
+
}
|
|
20
|
+
/** Learner and facilitator materials are deliberately separated. */
|
|
21
|
+
interface CourseMaterialsManifestV1 {
|
|
22
|
+
version: string;
|
|
23
|
+
learner: CourseMaterialV1[];
|
|
24
|
+
facilitator: CourseMaterialV1[];
|
|
25
|
+
}
|
|
26
|
+
/** A physical item disclosed before a Guardian creates a purchase quote. */
|
|
27
|
+
interface HardwareItemV1 {
|
|
28
|
+
id: string;
|
|
29
|
+
label: string;
|
|
30
|
+
quantity: number;
|
|
31
|
+
requirement: "required" | "optional";
|
|
32
|
+
exactSpecification: string;
|
|
33
|
+
adultOnly: boolean;
|
|
34
|
+
stage: "core" | "servo" | "rover" | "sensor" | "camera";
|
|
35
|
+
}
|
|
36
|
+
/** Immutable hardware and preparation disclosure for a module version. */
|
|
37
|
+
interface HardwareRequirementManifestV1 {
|
|
38
|
+
requirementsVersion: string;
|
|
39
|
+
mode: HardwareModeV1;
|
|
40
|
+
hardwareIncluded: false;
|
|
41
|
+
simulatorAvailable: boolean;
|
|
42
|
+
verificationStatus: HardwareVerificationStatusV1;
|
|
43
|
+
publicSaleBlocked: boolean;
|
|
44
|
+
preparationMinutes: number;
|
|
45
|
+
items: HardwareItemV1[];
|
|
46
|
+
warnings: string[];
|
|
47
|
+
supportedPlatforms: string[];
|
|
48
|
+
}
|
|
49
|
+
/** One short, observable learning goal inside a mission. */
|
|
50
|
+
interface LearningGoalV1 {
|
|
51
|
+
id: string;
|
|
52
|
+
statement: string;
|
|
53
|
+
evidence: "assessment" | "explanation" | "adult-signoff";
|
|
54
|
+
}
|
|
55
|
+
/** A 15–25 minute unit following learn, predict, build, assess and explain. */
|
|
56
|
+
interface MissionV1 {
|
|
57
|
+
id: string;
|
|
58
|
+
title: string;
|
|
59
|
+
estimatedMinutes: number;
|
|
60
|
+
concepts: string[];
|
|
61
|
+
goals: LearningGoalV1[];
|
|
62
|
+
sideAdventure: string;
|
|
63
|
+
}
|
|
64
|
+
/** One objective source of points in an assessment rubric. */
|
|
65
|
+
interface AssessmentCriterionV1 {
|
|
66
|
+
id: string;
|
|
67
|
+
label: string;
|
|
68
|
+
dimension: AssessmentDimensionV1;
|
|
69
|
+
points: number;
|
|
70
|
+
mandatory: boolean;
|
|
71
|
+
visibility: "visible" | "protected";
|
|
72
|
+
}
|
|
73
|
+
/** The immutable assessment authority for a module challenge. */
|
|
74
|
+
interface AssessmentRubricV1 {
|
|
75
|
+
version: string;
|
|
76
|
+
completionScore: 80;
|
|
77
|
+
criteria: AssessmentCriterionV1[];
|
|
78
|
+
}
|
|
79
|
+
interface AssessmentCheckResultV1 {
|
|
80
|
+
criterionId: string;
|
|
81
|
+
passed: boolean;
|
|
82
|
+
sourceLocation?: {
|
|
83
|
+
fileId?: string;
|
|
84
|
+
blockId?: string;
|
|
85
|
+
startLine?: number;
|
|
86
|
+
endLine?: number;
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
interface AssessmentResultV1 {
|
|
90
|
+
score: number;
|
|
91
|
+
band: ScoreBandV1;
|
|
92
|
+
completed: boolean;
|
|
93
|
+
passedCriterionIds: string[];
|
|
94
|
+
failedCriterionIds: string[];
|
|
95
|
+
failedMandatoryCriterionIds: string[];
|
|
96
|
+
}
|
|
97
|
+
/** A constrained module-agent role; score and reward authority are always false. */
|
|
98
|
+
interface ModuleAgentDefinitionV1 {
|
|
99
|
+
id: string;
|
|
100
|
+
role: ModuleAgentRoleV1;
|
|
101
|
+
evidenceBound: true;
|
|
102
|
+
maySuggestSingleFix: boolean;
|
|
103
|
+
mayAssignScore: false;
|
|
104
|
+
mayAwardReward: false;
|
|
105
|
+
mayPublish: false;
|
|
106
|
+
mayControlHardware: false;
|
|
107
|
+
}
|
|
108
|
+
/** Structured feedback that a deterministic or AI-backed adapter may return. */
|
|
109
|
+
interface ModuleAgentFeedbackV1 {
|
|
110
|
+
role: ModuleAgentRoleV1;
|
|
111
|
+
assessmentScore: number;
|
|
112
|
+
passedGoalIds: string[];
|
|
113
|
+
failedGoalIds: string[];
|
|
114
|
+
explanation: string;
|
|
115
|
+
expectedBehaviour: string;
|
|
116
|
+
suggestedExperiment?: string;
|
|
117
|
+
sourceLocation?: AssessmentCheckResultV1["sourceLocation"];
|
|
118
|
+
scoreAuthority: "deterministic-assessment";
|
|
119
|
+
}
|
|
120
|
+
/** Ordinary Token subunits used as a pilot shadow or fixed price. */
|
|
121
|
+
interface ModuleReferencePriceV1 {
|
|
122
|
+
/** Reference copy only; this is never a cash balance or redemption promise. */
|
|
123
|
+
currency: "GBP";
|
|
124
|
+
/** Canonical GBP minor units. */
|
|
125
|
+
minorUnits: string;
|
|
126
|
+
basis: "nominal-reference";
|
|
127
|
+
cashRedemptionAllowed: false;
|
|
128
|
+
}
|
|
129
|
+
interface ModulePricingV1 {
|
|
130
|
+
state: CommercialStateV1;
|
|
131
|
+
tokenSubunits: string;
|
|
132
|
+
referencePrice?: ModuleReferencePriceV1;
|
|
133
|
+
includesMaterials: true;
|
|
134
|
+
includesAssessmentRetries: true;
|
|
135
|
+
includesAgents: true;
|
|
136
|
+
includesHostingAllowance: boolean;
|
|
137
|
+
}
|
|
138
|
+
interface BadgeDefinitionV1 {
|
|
139
|
+
id: string;
|
|
140
|
+
title: string;
|
|
141
|
+
evidence: "mission-score" | "module-score" | "adult-physical-signoff";
|
|
142
|
+
tradeable: false;
|
|
143
|
+
tokenConvertible: false;
|
|
144
|
+
}
|
|
145
|
+
/** Immutable package export selected by the catalog without importing it. */
|
|
146
|
+
declare const EXTERNAL_LEARNING_CONTENT_REFERENCE_VERSION_V1: "1";
|
|
147
|
+
interface ExternalLearningContentReferenceV1 {
|
|
148
|
+
/** Exact public package name; ranges and aliases are not permitted. */
|
|
149
|
+
packageName: string;
|
|
150
|
+
/** Exact semantic version without a range operator. */
|
|
151
|
+
packageVersion: string;
|
|
152
|
+
/** Named ESM/CJS export containing the immutable content manifest. */
|
|
153
|
+
exportName: string;
|
|
154
|
+
/** Exact schema version declared by the referenced exported manifest. */
|
|
155
|
+
schemaVersion: string;
|
|
156
|
+
/** Lower-case SHA-256 of the canonical exported manifest JSON. */
|
|
157
|
+
sha256: string;
|
|
158
|
+
}
|
|
159
|
+
/** One immutable, independently sellable module version. */
|
|
160
|
+
interface LearningModuleVersionV1 {
|
|
161
|
+
id: string;
|
|
162
|
+
slug: string;
|
|
163
|
+
version: string;
|
|
164
|
+
contentRevision: string;
|
|
165
|
+
title: string;
|
|
166
|
+
category: ModuleCategoryV1;
|
|
167
|
+
summary: string;
|
|
168
|
+
estimatedMinutes: number;
|
|
169
|
+
tools: string[];
|
|
170
|
+
concepts: string[];
|
|
171
|
+
selfContained: true;
|
|
172
|
+
prerequisiteModuleIds: string[];
|
|
173
|
+
pricing: ModulePricingV1;
|
|
174
|
+
materials: CourseMaterialsManifestV1;
|
|
175
|
+
hardware: HardwareRequirementManifestV1;
|
|
176
|
+
missions: MissionV1[];
|
|
177
|
+
assessment: AssessmentRubricV1;
|
|
178
|
+
agents: ModuleAgentDefinitionV1[];
|
|
179
|
+
badges: BadgeDefinitionV1[];
|
|
180
|
+
/** Optional separately released content implementation pinned by digest. */
|
|
181
|
+
externalContent?: ExternalLearningContentReferenceV1;
|
|
182
|
+
}
|
|
183
|
+
/** A versioned path is a recommendation and never a paid prerequisite chain. */
|
|
184
|
+
interface LearningPathVersionV1 {
|
|
185
|
+
id: string;
|
|
186
|
+
slug: string;
|
|
187
|
+
version: string;
|
|
188
|
+
title: string;
|
|
189
|
+
description: string;
|
|
190
|
+
catalogState: "pilot" | "public" | "retired";
|
|
191
|
+
publicLaunchAtomic: true;
|
|
192
|
+
featureFlag: string;
|
|
193
|
+
modules: LearningModuleVersionV1[];
|
|
194
|
+
}
|
|
195
|
+
/** Entitlement records bind a subject to an immutable module version. */
|
|
196
|
+
interface ModuleEntitlementV1 {
|
|
197
|
+
entitlementId: string;
|
|
198
|
+
subjectAccountId: string;
|
|
199
|
+
moduleId: string;
|
|
200
|
+
moduleVersion: string;
|
|
201
|
+
source: "pilot-grant" | "module-allowance-purchase" | "support-grant" | "admin-test-grant";
|
|
202
|
+
state: "pending" | "active" | "revoked";
|
|
203
|
+
economyTransactionId?: string;
|
|
204
|
+
grantedAt: string;
|
|
205
|
+
}
|
|
206
|
+
interface AttemptEvidenceV1 {
|
|
207
|
+
attemptId: string;
|
|
208
|
+
moduleId: string;
|
|
209
|
+
moduleVersion: string;
|
|
210
|
+
assessment: AssessmentResultV1;
|
|
211
|
+
sourceDigest: string;
|
|
212
|
+
recordedAt: string;
|
|
213
|
+
adultPhysicalSignoff?: {
|
|
214
|
+
signedByActorAccountId: string;
|
|
215
|
+
checklistVersion: string;
|
|
216
|
+
signedAt: string;
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
interface GuardianAiConsentV1 {
|
|
220
|
+
actorAccountId: string;
|
|
221
|
+
subjectAccountId: string;
|
|
222
|
+
policyVersion: string;
|
|
223
|
+
state: "granted" | "withdrawn";
|
|
224
|
+
recordedAt: string;
|
|
225
|
+
}
|
|
226
|
+
/** A static project snapshot is immutable and separately approved for publishing. */
|
|
227
|
+
interface PublishedStaticProjectSnapshotV1 {
|
|
228
|
+
snapshotId: string;
|
|
229
|
+
subjectAccountId: string;
|
|
230
|
+
moduleId: string;
|
|
231
|
+
sourceDigest: string;
|
|
232
|
+
randomSlug: string;
|
|
233
|
+
guardianApprovalId: string;
|
|
234
|
+
state: "pending-review" | "published" | "expired" | "unpublished";
|
|
235
|
+
expiresAt: string;
|
|
236
|
+
}
|
|
237
|
+
/** Canonical learner journey shared by interactive and printable adapters. */
|
|
238
|
+
declare const MISSION_AUTHORING_CONTRACT_VERSION_V1: "1.0.0";
|
|
239
|
+
type MissionStageKindV1 = "learn" | "predict" | "build" | "run" | "assess" | "inspect" | "fix" | "explain" | "reward";
|
|
240
|
+
type MissionArtifactKindV1 = "starter-code" | "starter-assets" | "sample-data" | "printable" | "facilitator-note" | "answer-key" | "protected-test";
|
|
241
|
+
/** Metadata only: storage and authorized delivery remain adapter concerns. */
|
|
242
|
+
interface MissionArtifactReferenceV1 {
|
|
243
|
+
id: string;
|
|
244
|
+
kind: MissionArtifactKindV1;
|
|
245
|
+
audience: CourseMaterialAudienceV1;
|
|
246
|
+
solutionBearing: boolean;
|
|
247
|
+
}
|
|
248
|
+
interface MissionReadinessCheckV1 {
|
|
249
|
+
id: string;
|
|
250
|
+
prompt: string;
|
|
251
|
+
scored: false;
|
|
252
|
+
}
|
|
253
|
+
interface MissionStageCardV1 {
|
|
254
|
+
kind: MissionStageKindV1;
|
|
255
|
+
instruction: string;
|
|
256
|
+
artifactIds: string[];
|
|
257
|
+
}
|
|
258
|
+
interface MissionAuthoringGoalV1 {
|
|
259
|
+
id: string;
|
|
260
|
+
statement: string;
|
|
261
|
+
visibility: "visible" | "protected";
|
|
262
|
+
criterionIds: string[];
|
|
263
|
+
completionRequired: boolean;
|
|
264
|
+
aiRequired: boolean;
|
|
265
|
+
}
|
|
266
|
+
type MissionInteractionModeV1 = "keyboard" | "pointer" | "drag" | "audio" | "colour" | "motion" | "text" | "shape" | "symbol" | "reduced-motion";
|
|
267
|
+
interface MissionInteractionRequirementV1 {
|
|
268
|
+
id: string;
|
|
269
|
+
description: string;
|
|
270
|
+
primaryMode: MissionInteractionModeV1;
|
|
271
|
+
alternativeIds: string[];
|
|
272
|
+
}
|
|
273
|
+
interface MissionAccessibilityAlternativeV1 {
|
|
274
|
+
id: string;
|
|
275
|
+
modes: MissionInteractionModeV1[];
|
|
276
|
+
equivalentOutcome: true;
|
|
277
|
+
description: string;
|
|
278
|
+
}
|
|
279
|
+
type MissionEvidenceKindV1 = "assessment-result" | "learner-explanation" | "project-snapshot" | "adult-signoff";
|
|
280
|
+
type MissionEvidenceRetentionV1 = "attempt" | "entitlement" | "adult-signoff";
|
|
281
|
+
interface MissionEvidenceRequirementV1 {
|
|
282
|
+
id: string;
|
|
283
|
+
goalIds: string[];
|
|
284
|
+
kind: MissionEvidenceKindV1;
|
|
285
|
+
retention: MissionEvidenceRetentionV1;
|
|
286
|
+
containsPersonalData: false;
|
|
287
|
+
}
|
|
288
|
+
interface MissionSideAdventureV1 {
|
|
289
|
+
id: string;
|
|
290
|
+
prompt: string;
|
|
291
|
+
completionRequired: false;
|
|
292
|
+
}
|
|
293
|
+
interface MissionRewardBindingV1 {
|
|
294
|
+
id: string;
|
|
295
|
+
badgeId: string;
|
|
296
|
+
goalIds: string[];
|
|
297
|
+
deterministic: true;
|
|
298
|
+
random: false;
|
|
299
|
+
tokenConvertible: false;
|
|
300
|
+
}
|
|
301
|
+
interface MissionFunctionParameterV1 {
|
|
302
|
+
name: string;
|
|
303
|
+
type: string;
|
|
304
|
+
description: string;
|
|
305
|
+
}
|
|
306
|
+
/** Learner-safe documentation for one bounded host or simulator function. */
|
|
307
|
+
interface MissionFunctionReferenceV1 {
|
|
308
|
+
id: string;
|
|
309
|
+
signature: string;
|
|
310
|
+
summary: string;
|
|
311
|
+
parameters: MissionFunctionParameterV1[];
|
|
312
|
+
effect: string;
|
|
313
|
+
example: string;
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* One learner-safe change proposal. A mission may expose a diff for a single
|
|
317
|
+
* authored artifact and always leaves the final accept/reject decision to the
|
|
318
|
+
* learner. Live AI is an optional adapter concern, never a completion input.
|
|
319
|
+
*/
|
|
320
|
+
interface MissionBoundedSuggestionV1 {
|
|
321
|
+
id: string;
|
|
322
|
+
source: "authored-fallback";
|
|
323
|
+
intent: string;
|
|
324
|
+
constraints: string[];
|
|
325
|
+
permittedArtifactId: string;
|
|
326
|
+
originalSnippet: string;
|
|
327
|
+
replacementSnippet: string;
|
|
328
|
+
explanationPrompt: string;
|
|
329
|
+
aiOptional: false;
|
|
330
|
+
learnerApprovalRequired: true;
|
|
331
|
+
alternatives: ["accept", "reject"];
|
|
332
|
+
}
|
|
333
|
+
/** The only mission projection safe to return to a learner. */
|
|
334
|
+
interface LearnerMissionAuthoringV1 {
|
|
335
|
+
estimatedMinutes: number;
|
|
336
|
+
stages: MissionStageCardV1[];
|
|
337
|
+
readinessChecks: MissionReadinessCheckV1[];
|
|
338
|
+
artifacts: MissionArtifactReferenceV1[];
|
|
339
|
+
goals: MissionAuthoringGoalV1[];
|
|
340
|
+
interactions: MissionInteractionRequirementV1[];
|
|
341
|
+
accessibilityAlternatives: MissionAccessibilityAlternativeV1[];
|
|
342
|
+
evidenceRequirements: MissionEvidenceRequirementV1[];
|
|
343
|
+
sideAdventures: MissionSideAdventureV1[];
|
|
344
|
+
rewardBindings: MissionRewardBindingV1[];
|
|
345
|
+
functionReference?: MissionFunctionReferenceV1[];
|
|
346
|
+
boundedSuggestion?: MissionBoundedSuggestionV1;
|
|
347
|
+
}
|
|
348
|
+
/** Protected authoring data must never be projected through learner APIs. */
|
|
349
|
+
interface FacilitatorMissionAuthoringV1 {
|
|
350
|
+
artifacts: MissionArtifactReferenceV1[];
|
|
351
|
+
protectedGoals: MissionAuthoringGoalV1[];
|
|
352
|
+
prompts: string[];
|
|
353
|
+
}
|
|
354
|
+
type MissionHardwareAcquisitionScopeV1 = "complete-path" | "incremental";
|
|
355
|
+
/** Per-item verification authority for a physical mission disclosure. */
|
|
356
|
+
interface MissionHardwareComponentDisclosureV1 {
|
|
357
|
+
itemId: string;
|
|
358
|
+
quantity: number;
|
|
359
|
+
acquisitionScope: MissionHardwareAcquisitionScopeV1;
|
|
360
|
+
verificationStatus: HardwareVerificationStatusV1;
|
|
361
|
+
compatibilityClaimed: boolean;
|
|
362
|
+
physicalCompletionEligible: boolean;
|
|
363
|
+
}
|
|
364
|
+
/** Adult and simulator boundaries that consuming workspaces must preserve. */
|
|
365
|
+
interface MissionPhysicalSafeguardsV1 {
|
|
366
|
+
adultAssemblyRequired: true;
|
|
367
|
+
adultAcknowledgementRequiredForExport: true;
|
|
368
|
+
websiteMayControlHardware: false;
|
|
369
|
+
simulatorCompletionAvailable: true;
|
|
370
|
+
simulatedBadgeId: string;
|
|
371
|
+
physicalBadgeId: string;
|
|
372
|
+
physicalBadgeRequiresAdultSignoff: true;
|
|
373
|
+
adultAssemblySteps: string[];
|
|
374
|
+
powerRequirements: string[];
|
|
375
|
+
cableRequirements: string[];
|
|
376
|
+
softwarePrerequisites: string[];
|
|
377
|
+
warnings: string[];
|
|
378
|
+
unrelatedHardwareNotRequired: string[];
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Additive mission-level projection of one immutable catalog hardware manifest.
|
|
382
|
+
* It distinguishes the complete reusable path kit from this module's additions.
|
|
383
|
+
*/
|
|
384
|
+
interface MissionHardwareDisclosureV1 {
|
|
385
|
+
requirementsVersion: string;
|
|
386
|
+
hardwareIncluded: false;
|
|
387
|
+
completePathItemIds: string[];
|
|
388
|
+
incrementalItemIds: string[];
|
|
389
|
+
components: MissionHardwareComponentDisclosureV1[];
|
|
390
|
+
safeguards: MissionPhysicalSafeguardsV1;
|
|
391
|
+
}
|
|
392
|
+
/** Additive authoring detail keyed to one immutable catalog mission. */
|
|
393
|
+
interface MissionAuthoringBundleV1 {
|
|
394
|
+
version: string;
|
|
395
|
+
moduleId: string;
|
|
396
|
+
moduleVersion: string;
|
|
397
|
+
missionId: string;
|
|
398
|
+
learner: LearnerMissionAuthoringV1;
|
|
399
|
+
facilitator: FacilitatorMissionAuthoringV1;
|
|
400
|
+
hardware?: MissionHardwareDisclosureV1;
|
|
401
|
+
}
|
|
402
|
+
interface MissionAuthoringValidationIssueV1 {
|
|
403
|
+
code: "bundle-version-mismatch" | "module-reference-mismatch" | "mission-reference-mismatch" | "invalid-duration" | "missing-stage" | "duplicate-stage" | "stage-order" | "missing-readiness-check" | "scored-readiness-check" | "missing-starter-artifact" | "learner-artifact-leak" | "facilitator-artifact-leak" | "unknown-artifact" | "duplicate-id" | "missing-visible-goal" | "missing-protected-goal" | "invalid-goal-projection" | "duplicate-goal-id" | "unknown-criterion" | "criterion-visibility-mismatch" | "rubric-total" | "rubric-dimension-total" | "duplicate-criterion-id" | "missing-mandatory-safety" | "missing-safety-evidence" | "ai-dependent-completion" | "inaccessible-interaction" | "unknown-accessibility-alternative" | "non-equivalent-accessibility-alternative" | "missing-evidence" | "unknown-evidence-goal" | "personal-data-evidence" | "missing-side-adventure" | "mandatory-side-adventure" | "invalid-reward" | "hardware-module-mismatch" | "hardware-requirements-version-mismatch" | "hardware-item-mismatch" | "hardware-verification-claim" | "unsafe-physical-export" | "invalid-hardware-reward" | "invalid-function-reference" | "invalid-bounded-suggestion";
|
|
404
|
+
message: string;
|
|
405
|
+
path: string;
|
|
406
|
+
}
|
|
407
|
+
interface LearningValidationIssueV1 {
|
|
408
|
+
code: "duplicate-module-id" | "duplicate-module-slug" | "module-not-self-contained" | "paid-prerequisite" | "missing-materials" | "facilitator-material-leak" | "learner-material-leak" | "invalid-token-subunits" | "invalid-reference-price" | "rubric-total" | "rubric-dimension-total" | "duplicate-criterion-id" | "missing-mandatory-safety" | "missing-hardware-items" | "invalid-agent-authority" | "missing-missions" | "invalid-external-content-reference";
|
|
409
|
+
message: string;
|
|
410
|
+
moduleId?: string;
|
|
411
|
+
path: string;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
/** Stable activity order for complete courses; legacy authoring remains immutable. */
|
|
415
|
+
declare const LEARNING_COURSE_STAGE_ORDER: readonly ["learn", "predict", "build", "run", "assess", "inspect", "fix", "explain", "reward"];
|
|
416
|
+
declare const LEARNING_COURSE_LIMITS: Readonly<{
|
|
417
|
+
missions: 6;
|
|
418
|
+
stagesPerMission: 9;
|
|
419
|
+
projectFiles: 8;
|
|
420
|
+
sourceCharactersPerFile: 64000;
|
|
421
|
+
sourceCharactersPerProject: 96000;
|
|
422
|
+
}>;
|
|
423
|
+
type LearningProjectLanguageV1 = "javascript" | "python" | "cpp" | "html" | "css" | "blocks" | "json";
|
|
424
|
+
interface LearningProjectFileV1 {
|
|
425
|
+
path: string;
|
|
426
|
+
source: string;
|
|
427
|
+
}
|
|
428
|
+
interface LearningProjectV1 {
|
|
429
|
+
files: LearningProjectFileV1[];
|
|
430
|
+
}
|
|
431
|
+
interface LearningCourseStageV1 {
|
|
432
|
+
id: string;
|
|
433
|
+
kind: MissionStageKindV1;
|
|
434
|
+
title: string;
|
|
435
|
+
instruction: string;
|
|
436
|
+
help: string;
|
|
437
|
+
}
|
|
438
|
+
interface LearningCourseMissionV1 {
|
|
439
|
+
id: string;
|
|
440
|
+
title: string;
|
|
441
|
+
concepts: string[];
|
|
442
|
+
estimatedMinutes: number;
|
|
443
|
+
goals: string[];
|
|
444
|
+
assessmentId: string;
|
|
445
|
+
stages: LearningCourseStageV1[];
|
|
446
|
+
extension: string;
|
|
447
|
+
}
|
|
448
|
+
/** Learner-safe content only. Protected scenarios and solutions are host-owned. */
|
|
449
|
+
interface LearningCourseV1 {
|
|
450
|
+
schemaVersion: "1";
|
|
451
|
+
moduleId: string;
|
|
452
|
+
moduleVersion: string;
|
|
453
|
+
slug: string;
|
|
454
|
+
title: string;
|
|
455
|
+
summary: string;
|
|
456
|
+
runtimeId: string;
|
|
457
|
+
category: ModuleCategoryV1;
|
|
458
|
+
estimatedMinutes: number;
|
|
459
|
+
completionAssessmentId: string;
|
|
460
|
+
projectFiles: {
|
|
461
|
+
path: string;
|
|
462
|
+
language: LearningProjectLanguageV1;
|
|
463
|
+
maximumCharacters: number;
|
|
464
|
+
}[];
|
|
465
|
+
starterProject: LearningProjectV1;
|
|
466
|
+
reference: {
|
|
467
|
+
name: string;
|
|
468
|
+
signature: string;
|
|
469
|
+
description: string;
|
|
470
|
+
example: string;
|
|
471
|
+
}[];
|
|
472
|
+
missions: LearningCourseMissionV1[];
|
|
473
|
+
completionBadge: {
|
|
474
|
+
id: string;
|
|
475
|
+
title: string;
|
|
476
|
+
};
|
|
477
|
+
}
|
|
478
|
+
/** The only learner-owned save inputs. Progress/evidence are never draft authority. */
|
|
479
|
+
interface LearningCourseDraftV1 {
|
|
480
|
+
schemaVersion: "1";
|
|
481
|
+
moduleVersion: string;
|
|
482
|
+
activeStageId: string;
|
|
483
|
+
project: LearningProjectV1;
|
|
484
|
+
}
|
|
485
|
+
type LearningSaveSlotIdV1 = "auto" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9";
|
|
486
|
+
interface LearningCourseValidationIssueV1 {
|
|
487
|
+
code: "invalid-manifest" | "mission-count" | "stage-order" | "duplicate-id" | "incomplete-content" | "invalid-project";
|
|
488
|
+
path: string;
|
|
489
|
+
}
|
|
490
|
+
/** Errors contain no source, learner text or caller-supplied identifiers. */
|
|
491
|
+
declare class LearningCourseInputError extends Error {
|
|
492
|
+
constructor();
|
|
493
|
+
}
|
|
494
|
+
/** Validate every file against the declared editable set; never preserve extra fields. */
|
|
495
|
+
declare function parseLearningProject(course: Pick<LearningCourseV1, "projectFiles">, value: unknown): LearningProjectV1;
|
|
496
|
+
/** Parse untrusted saves without accepting identity, scores, completion or evidence. */
|
|
497
|
+
declare function parseLearningCourseDraft(course: LearningCourseV1, value: unknown): LearningCourseDraftV1;
|
|
498
|
+
/** An account owns one autosave and nine explicitly managed slots per course version. */
|
|
499
|
+
declare function parseLearningSaveSlotId(value: unknown): LearningSaveSlotIdV1;
|
|
500
|
+
/** Structural publication gate. Working runtime/curriculum acceptance is additional. */
|
|
501
|
+
declare function validateLearningCourse(value: unknown): LearningCourseValidationIssueV1[];
|
|
502
|
+
/** Validate an external learner manifest and detach it from the supplied object. */
|
|
503
|
+
declare function parseLearningCourse(value: unknown): LearningCourseV1;
|
|
504
|
+
|
|
505
|
+
/** Formative checks are learner-visible teaching material, not protected assessments. */
|
|
506
|
+
interface CoursePracticeQuestion {
|
|
507
|
+
stageId: string;
|
|
508
|
+
question: string;
|
|
509
|
+
choices: [string, string, string];
|
|
510
|
+
correctChoice: 0 | 1 | 2;
|
|
511
|
+
feedback: string;
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
export { type MissionHardwareDisclosureV1 as $, type AssessmentRubricV1 as A, type BadgeDefinitionV1 as B, type CoursePracticeQuestion as C, type LearningGoalV1 as D, type ExternalLearningContentReferenceV1 as E, type FacilitatorMissionAuthoringV1 as F, type GuardianAiConsentV1 as G, type HardwareItemV1 as H, type LearningProjectFileV1 as I, type LearningProjectLanguageV1 as J, type LearningProjectV1 as K, type LearningCourseV1 as L, type MissionAuthoringBundleV1 as M, type LearningSaveSlotIdV1 as N, MISSION_AUTHORING_CONTRACT_VERSION_V1 as O, type MissionAccessibilityAlternativeV1 as P, type MissionArtifactKindV1 as Q, type MissionArtifactReferenceV1 as R, type MissionAuthoringGoalV1 as S, type MissionBoundedSuggestionV1 as T, type MissionEvidenceKindV1 as U, type MissionEvidenceRequirementV1 as V, type MissionEvidenceRetentionV1 as W, type MissionFunctionParameterV1 as X, type MissionFunctionReferenceV1 as Y, type MissionHardwareAcquisitionScopeV1 as Z, type MissionHardwareComponentDisclosureV1 as _, type AssessmentCheckResultV1 as a, type MissionInteractionModeV1 as a0, type MissionInteractionRequirementV1 as a1, type MissionPhysicalSafeguardsV1 as a2, type MissionReadinessCheckV1 as a3, type MissionRewardBindingV1 as a4, type MissionSideAdventureV1 as a5, type MissionStageCardV1 as a6, type MissionStageKindV1 as a7, type MissionV1 as a8, type ModuleAgentDefinitionV1 as a9, type ModuleAgentFeedbackV1 as aa, type ModuleAgentRoleV1 as ab, type ModuleCategoryV1 as ac, type ModuleEntitlementV1 as ad, type ModulePricingV1 as ae, type ModuleReferencePriceV1 as af, type PublishedStaticProjectSnapshotV1 as ag, type ScoreBandV1 as ah, parseLearningCourse as ai, parseLearningCourseDraft as aj, parseLearningProject as ak, parseLearningSaveSlotId as al, validateLearningCourse as am, type AssessmentResultV1 as b, type LearningModuleVersionV1 as c, type LearningPathVersionV1 as d, type LearningValidationIssueV1 as e, type MissionAuthoringValidationIssueV1 as f, type AssessmentCriterionV1 as g, type AssessmentDimensionV1 as h, type AttemptEvidenceV1 as i, type CommercialStateV1 as j, type CourseMaterialAudienceV1 as k, type CourseMaterialKindV1 as l, type CourseMaterialV1 as m, type CourseMaterialsManifestV1 as n, EXTERNAL_LEARNING_CONTENT_REFERENCE_VERSION_V1 as o, type HardwareModeV1 as p, type HardwareRequirementManifestV1 as q, type HardwareVerificationStatusV1 as r, LEARNING_COURSE_LIMITS as s, LEARNING_COURSE_STAGE_ORDER as t, type LearnerMissionAuthoringV1 as u, type LearningCourseDraftV1 as v, LearningCourseInputError as w, type LearningCourseMissionV1 as x, type LearningCourseStageV1 as y, type LearningCourseValidationIssueV1 as z };
|