@altnovatrail/contracts 0.7.9 → 0.8.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.
@@ -0,0 +1,1406 @@
1
+ // @generated by protoc-gen-es v2.16.0 with parameter "target=js+dts,import_extension=js"
2
+ // @generated from file novatrail/api/v1/attempt.proto (package novatrail.api.v1, syntax proto3)
3
+ /* eslint-disable */
4
+
5
+ // The checking of an attempt in the contract between `app` and `api`: the submission of the work
6
+ // and the verdict, the tutor's words and marks, hints, the solution shown, and "Done" on a task with
7
+ // a rubric. What each message means, what never reaches the device, and what a repeat with the same
8
+ // idempotency key answers are the rules of contracts/README.md, section 15.
9
+
10
+ import type { GenEnum, GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2";
11
+ import type { Message } from "@bufbuild/protobuf";
12
+ import type { CloseReason, Outcome } from "./cause_pb.js";
13
+ import type { AnswerSlotPlace, CropBox } from "../../observation/v1/observation_pb.js";
14
+
15
+ /**
16
+ * Describes the file novatrail/api/v1/attempt.proto.
17
+ */
18
+ export declare const file_novatrail_api_v1_attempt: GenFile;
19
+
20
+ /**
21
+ * The submission of a task with a verdict.
22
+ *
23
+ * @generated from message novatrail.api.v1.SubmitWorkRequest
24
+ */
25
+ export declare type SubmitWorkRequest = Message<"novatrail.api.v1.SubmitWorkRequest"> & {
26
+ /**
27
+ * The profile whose attempt it is.
28
+ *
29
+ * @generated from field: string profile_id = 1;
30
+ */
31
+ profileId: string;
32
+
33
+ /**
34
+ * The attempt.
35
+ *
36
+ * @generated from field: string attempt_id = 2;
37
+ */
38
+ attemptId: string;
39
+
40
+ /**
41
+ * The idempotency key of this action of the learner: `app` makes one for it, and sends it again
42
+ * with every repeat of it.
43
+ *
44
+ * @generated from field: string idempotency_key = 3;
45
+ */
46
+ idempotencyKey: string;
47
+
48
+ /**
49
+ * The handwriting for checking: absent when the task's answer slots are bound `choice` alone.
50
+ *
51
+ * @generated from field: novatrail.api.v1.Work work = 4;
52
+ */
53
+ work?: Work | undefined;
54
+
55
+ /**
56
+ * The options tapped, one for each answer slot bound `choice` that the learner tapped one of, in
57
+ * the task's order.
58
+ *
59
+ * @generated from field: repeated novatrail.api.v1.TappedChoice tapped_choices = 5;
60
+ */
61
+ tappedChoices: TappedChoice[];
62
+
63
+ /**
64
+ * The learner's own key and its provider: with a profile of its owner, when AI reads the work.
65
+ *
66
+ * @generated from field: novatrail.api.v1.OwnKey own_key = 6;
67
+ */
68
+ ownKey?: OwnKey | undefined;
69
+
70
+ /**
71
+ * The offset of the device's clock from UTC, in minutes: with a request on platform AI alone.
72
+ *
73
+ * @generated from field: optional int32 clock_offset_minutes = 7;
74
+ */
75
+ clockOffsetMinutes?: number | undefined;
76
+ };
77
+
78
+ /**
79
+ * Describes the message novatrail.api.v1.SubmitWorkRequest.
80
+ * Use `create(SubmitWorkRequestSchema)` to create a new message.
81
+ */
82
+ export declare const SubmitWorkRequestSchema: GenMessage<SubmitWorkRequest>;
83
+
84
+ /**
85
+ * The verdict of a submission.
86
+ *
87
+ * @generated from message novatrail.api.v1.SubmitWorkResponse
88
+ */
89
+ export declare type SubmitWorkResponse = Message<"novatrail.api.v1.SubmitWorkResponse"> & {
90
+ /**
91
+ * Every item of the task, in the task's order, with its verdict.
92
+ *
93
+ * @generated from field: repeated novatrail.api.v1.ItemVerdict items = 1;
94
+ */
95
+ items: ItemVerdict[];
96
+
97
+ /**
98
+ * What the call of AI came to, when the answer slots that AI reads got "unchecked" by it: a
99
+ * failure of AI, a quota or a limit, no admission, or a refusal of the own key. A slot bound
100
+ * `choice` still has its verdict.
101
+ *
102
+ * @generated from field: novatrail.api.v1.Outcome outcome = 2;
103
+ */
104
+ outcome?: Outcome | undefined;
105
+
106
+ /**
107
+ * How many wrong answers the attempt has, this submission's too: a wrong answer is a submission
108
+ * with an answer slot "not_yet".
109
+ *
110
+ * @generated from field: int32 wrong_answers = 3;
111
+ */
112
+ wrongAnswers: number;
113
+
114
+ /**
115
+ * The solved task, when every item is correct and the attempt is closed `CLOSE_REASON_CORRECT`.
116
+ *
117
+ * @generated from field: novatrail.api.v1.SolvedTask solved = 4;
118
+ */
119
+ solved?: SolvedTask | undefined;
120
+ };
121
+
122
+ /**
123
+ * Describes the message novatrail.api.v1.SubmitWorkResponse.
124
+ * Use `create(SubmitWorkResponseSchema)` to create a new message.
125
+ */
126
+ export declare const SubmitWorkResponseSchema: GenMessage<SubmitWorkResponse>;
127
+
128
+ /**
129
+ * The submission of an essay.
130
+ *
131
+ * @generated from message novatrail.api.v1.SubmitEssayRequest
132
+ */
133
+ export declare type SubmitEssayRequest = Message<"novatrail.api.v1.SubmitEssayRequest"> & {
134
+ /**
135
+ * The profile whose attempt it is.
136
+ *
137
+ * @generated from field: string profile_id = 1;
138
+ */
139
+ profileId: string;
140
+
141
+ /**
142
+ * The attempt.
143
+ *
144
+ * @generated from field: string attempt_id = 2;
145
+ */
146
+ attemptId: string;
147
+
148
+ /**
149
+ * The idempotency key of this action of the learner.
150
+ *
151
+ * @generated from field: string idempotency_key = 3;
152
+ */
153
+ idempotencyKey: string;
154
+
155
+ /**
156
+ * The PNG of the crop of the sheet, without its `sheet_box`.
157
+ *
158
+ * @generated from field: bytes crop = 4;
159
+ */
160
+ crop: Uint8Array;
161
+
162
+ /**
163
+ * The learner's own key and its provider: with a profile of its owner.
164
+ *
165
+ * @generated from field: novatrail.api.v1.OwnKey own_key = 5;
166
+ */
167
+ ownKey?: OwnKey | undefined;
168
+
169
+ /**
170
+ * The offset of the device's clock from UTC, in minutes: with a request on platform AI alone.
171
+ *
172
+ * @generated from field: optional int32 clock_offset_minutes = 6;
173
+ */
174
+ clockOffsetMinutes?: number | undefined;
175
+ };
176
+
177
+ /**
178
+ * Describes the message novatrail.api.v1.SubmitEssayRequest.
179
+ * Use `create(SubmitEssayRequestSchema)` to create a new message.
180
+ */
181
+ export declare const SubmitEssayRequestSchema: GenMessage<SubmitEssayRequest>;
182
+
183
+ /**
184
+ * How a submission of an essay ended (R87). No verdict: an item with a rubric has none.
185
+ *
186
+ * @generated from message novatrail.api.v1.SubmitEssayResponse
187
+ */
188
+ export declare type SubmitEssayResponse = Message<"novatrail.api.v1.SubmitEssayResponse"> & {
189
+ /**
190
+ * How the submission ended.
191
+ *
192
+ * @generated from field: novatrail.api.v1.SubmissionEnd end = 1;
193
+ */
194
+ end: SubmissionEnd;
195
+
196
+ /**
197
+ * The text read, as it is written, when the essay was read: beside the feedback, and beside
198
+ * "unchecked" when the assessment gave none.
199
+ *
200
+ * @generated from field: optional string text = 2;
201
+ */
202
+ text?: string | undefined;
203
+
204
+ /**
205
+ * Why the essay could not be read, as a verdict's reason is written: "blank" or "illegible",
206
+ * beside `SUBMISSION_END_UNREADABLE` alone, and empty beside the others. The learner writes the
207
+ * sheet again.
208
+ *
209
+ * @generated from field: string reason = 3;
210
+ */
211
+ reason: string;
212
+
213
+ /**
214
+ * The words of the feedback, beside `SUBMISSION_END_FEEDBACK`: absent when they failed the leak
215
+ * check or the rule of feedback, and then `app` shows its own phrase, "no feedback this time".
216
+ *
217
+ * @generated from field: optional string feedback = 4;
218
+ */
219
+ feedback?: string | undefined;
220
+
221
+ /**
222
+ * What the call of AI came to, beside `SUBMISSION_END_UNCHECKED`: absent when the assessment
223
+ * assessed no criterion.
224
+ *
225
+ * @generated from field: novatrail.api.v1.Outcome outcome = 5;
226
+ */
227
+ outcome?: Outcome | undefined;
228
+
229
+ /**
230
+ * Why the attempt was closed while this submission went: `CLOSE_REASON_UNSPECIFIED` when it is
231
+ * still open. The feedback came all the same, from the memory of the request.
232
+ *
233
+ * @generated from field: novatrail.api.v1.CloseReason closed = 6;
234
+ */
235
+ closed: CloseReason;
236
+
237
+ /**
238
+ * The answer of a repeat with the same idempotency key: it holds neither the text read nor the
239
+ * words of the feedback, which are nowhere on the server.
240
+ *
241
+ * @generated from field: bool repeated = 7;
242
+ */
243
+ repeated: boolean;
244
+ };
245
+
246
+ /**
247
+ * Describes the message novatrail.api.v1.SubmitEssayResponse.
248
+ * Use `create(SubmitEssayResponseSchema)` to create a new message.
249
+ */
250
+ export declare const SubmitEssayResponseSchema: GenMessage<SubmitEssayResponse>;
251
+
252
+ /**
253
+ * "Done" on a task with a rubric.
254
+ *
255
+ * @generated from message novatrail.api.v1.DoneRequest
256
+ */
257
+ export declare type DoneRequest = Message<"novatrail.api.v1.DoneRequest"> & {
258
+ /**
259
+ * The profile whose attempt it is.
260
+ *
261
+ * @generated from field: string profile_id = 1;
262
+ */
263
+ profileId: string;
264
+
265
+ /**
266
+ * The attempt.
267
+ *
268
+ * @generated from field: string attempt_id = 2;
269
+ */
270
+ attemptId: string;
271
+ };
272
+
273
+ /**
274
+ * Describes the message novatrail.api.v1.DoneRequest.
275
+ * Use `create(DoneRequestSchema)` to create a new message.
276
+ */
277
+ export declare const DoneRequestSchema: GenMessage<DoneRequest>;
278
+
279
+ /**
280
+ * What "Done" gives: the task solved.
281
+ *
282
+ * @generated from message novatrail.api.v1.DoneResponse
283
+ */
284
+ export declare type DoneResponse = Message<"novatrail.api.v1.DoneResponse"> & {
285
+ /**
286
+ * The criteria of the rubric and the solution, if the task has one.
287
+ *
288
+ * @generated from field: novatrail.api.v1.SolvedTask solved = 1;
289
+ */
290
+ solved?: SolvedTask | undefined;
291
+ };
292
+
293
+ /**
294
+ * Describes the message novatrail.api.v1.DoneResponse.
295
+ * Use `create(DoneResponseSchema)` to create a new message.
296
+ */
297
+ export declare const DoneResponseSchema: GenMessage<DoneResponse>;
298
+
299
+ /**
300
+ * A request for the words of a rung.
301
+ *
302
+ * @generated from message novatrail.api.v1.GetRungWordsRequest
303
+ */
304
+ export declare type GetRungWordsRequest = Message<"novatrail.api.v1.GetRungWordsRequest"> & {
305
+ /**
306
+ * The profile whose attempt it is.
307
+ *
308
+ * @generated from field: string profile_id = 1;
309
+ */
310
+ profileId: string;
311
+
312
+ /**
313
+ * The attempt.
314
+ *
315
+ * @generated from field: string attempt_id = 2;
316
+ */
317
+ attemptId: string;
318
+
319
+ /**
320
+ * The idempotency key of this request.
321
+ *
322
+ * @generated from field: string idempotency_key = 3;
323
+ */
324
+ idempotencyKey: string;
325
+
326
+ /**
327
+ * How many wrong answers the attempt had when the submission came that the words are asked for:
328
+ * the `wrong_answers` of its answer.
329
+ *
330
+ * @generated from field: optional int32 wrong_answers = 4;
331
+ */
332
+ wrongAnswers?: number | undefined;
333
+
334
+ /**
335
+ * The work of that submission again: absent when the task's answer slots are bound `choice`
336
+ * alone.
337
+ *
338
+ * @generated from field: novatrail.api.v1.Work work = 5;
339
+ */
340
+ work?: Work | undefined;
341
+
342
+ /**
343
+ * The learner's own key and its provider: with a profile of its owner.
344
+ *
345
+ * @generated from field: novatrail.api.v1.OwnKey own_key = 6;
346
+ */
347
+ ownKey?: OwnKey | undefined;
348
+
349
+ /**
350
+ * The offset of the device's clock from UTC, in minutes: with a request on platform AI alone.
351
+ *
352
+ * @generated from field: optional int32 clock_offset_minutes = 7;
353
+ */
354
+ clockOffsetMinutes?: number | undefined;
355
+ };
356
+
357
+ /**
358
+ * Describes the message novatrail.api.v1.GetRungWordsRequest.
359
+ * Use `create(GetRungWordsRequestSchema)` to create a new message.
360
+ */
361
+ export declare const GetRungWordsRequestSchema: GenMessage<GetRungWordsRequest>;
362
+
363
+ /**
364
+ * The words of a rung.
365
+ *
366
+ * @generated from message novatrail.api.v1.GetRungWordsResponse
367
+ */
368
+ export declare type GetRungWordsResponse = Message<"novatrail.api.v1.GetRungWordsResponse"> & {
369
+ /**
370
+ * The rung, from 1 to 3.
371
+ *
372
+ * @generated from field: int32 rung = 1;
373
+ */
374
+ rung: number;
375
+
376
+ /**
377
+ * The tutor's words, whole, once they passed the leak check and the form check, or the rung's
378
+ * fallback text.
379
+ *
380
+ * @generated from field: string words = 2;
381
+ */
382
+ words: string;
383
+
384
+ /**
385
+ * The tutor's marks that the words come with, on the tutor's layer of the work sent.
386
+ *
387
+ * @generated from field: repeated novatrail.api.v1.Mark marks = 3;
388
+ */
389
+ marks: Mark[];
390
+
391
+ /**
392
+ * Why the words are the fallback text, when a call of AI came to an outcome. Absent when the
393
+ * model's words came, or when they failed a check.
394
+ *
395
+ * @generated from field: novatrail.api.v1.Outcome outcome = 4;
396
+ */
397
+ outcome?: Outcome | undefined;
398
+
399
+ /**
400
+ * The answer of a repeat, or of a request for the same wrong answer: the words the attempt keeps,
401
+ * without marks, which the server does not keep.
402
+ *
403
+ * @generated from field: bool repeated = 5;
404
+ */
405
+ repeated: boolean;
406
+ };
407
+
408
+ /**
409
+ * Describes the message novatrail.api.v1.GetRungWordsResponse.
410
+ * Use `create(GetRungWordsResponseSchema)` to create a new message.
411
+ */
412
+ export declare const GetRungWordsResponseSchema: GenMessage<GetRungWordsResponse>;
413
+
414
+ /**
415
+ * A request for the words after a correct answer.
416
+ *
417
+ * @generated from message novatrail.api.v1.GetCorrectAnswerWordsRequest
418
+ */
419
+ export declare type GetCorrectAnswerWordsRequest = Message<"novatrail.api.v1.GetCorrectAnswerWordsRequest"> & {
420
+ /**
421
+ * The profile whose attempt it is.
422
+ *
423
+ * @generated from field: string profile_id = 1;
424
+ */
425
+ profileId: string;
426
+
427
+ /**
428
+ * The attempt, which the correct answer has just closed.
429
+ *
430
+ * @generated from field: string attempt_id = 2;
431
+ */
432
+ attemptId: string;
433
+
434
+ /**
435
+ * The idempotency key of this request.
436
+ *
437
+ * @generated from field: string idempotency_key = 3;
438
+ */
439
+ idempotencyKey: string;
440
+
441
+ /**
442
+ * The work of the correct submission again: absent when the task's answer slots are bound
443
+ * `choice` alone.
444
+ *
445
+ * @generated from field: novatrail.api.v1.Work work = 4;
446
+ */
447
+ work?: Work | undefined;
448
+
449
+ /**
450
+ * The learner's own key and its provider: with a profile of its owner.
451
+ *
452
+ * @generated from field: novatrail.api.v1.OwnKey own_key = 5;
453
+ */
454
+ ownKey?: OwnKey | undefined;
455
+
456
+ /**
457
+ * The offset of the device's clock from UTC, in minutes: with a request on platform AI alone.
458
+ *
459
+ * @generated from field: optional int32 clock_offset_minutes = 6;
460
+ */
461
+ clockOffsetMinutes?: number | undefined;
462
+ };
463
+
464
+ /**
465
+ * Describes the message novatrail.api.v1.GetCorrectAnswerWordsRequest.
466
+ * Use `create(GetCorrectAnswerWordsRequestSchema)` to create a new message.
467
+ */
468
+ export declare const GetCorrectAnswerWordsRequestSchema: GenMessage<GetCorrectAnswerWordsRequest>;
469
+
470
+ /**
471
+ * The words after a correct answer.
472
+ *
473
+ * @generated from message novatrail.api.v1.GetCorrectAnswerWordsResponse
474
+ */
475
+ export declare type GetCorrectAnswerWordsResponse = Message<"novatrail.api.v1.GetCorrectAnswerWordsResponse"> & {
476
+ /**
477
+ * The tutor's words, whole, once they passed the leak check and the form check: absent when a
478
+ * call of AI gave none, or they failed a check.
479
+ *
480
+ * @generated from field: optional string words = 1;
481
+ */
482
+ words?: string | undefined;
483
+
484
+ /**
485
+ * What the call of AI came to, when it gave no words.
486
+ *
487
+ * @generated from field: novatrail.api.v1.Outcome outcome = 2;
488
+ */
489
+ outcome?: Outcome | undefined;
490
+
491
+ /**
492
+ * The answer of a repeat with the same idempotency key, which holds no words: the server keeps
493
+ * none.
494
+ *
495
+ * @generated from field: bool repeated = 3;
496
+ */
497
+ repeated: boolean;
498
+ };
499
+
500
+ /**
501
+ * Describes the message novatrail.api.v1.GetCorrectAnswerWordsResponse.
502
+ * Use `create(GetCorrectAnswerWordsResponseSchema)` to create a new message.
503
+ */
504
+ export declare const GetCorrectAnswerWordsResponseSchema: GenMessage<GetCorrectAnswerWordsResponse>;
505
+
506
+ /**
507
+ * "Explain differently".
508
+ *
509
+ * @generated from message novatrail.api.v1.ExplainDifferentlyRequest
510
+ */
511
+ export declare type ExplainDifferentlyRequest = Message<"novatrail.api.v1.ExplainDifferentlyRequest"> & {
512
+ /**
513
+ * The profile whose attempt it is.
514
+ *
515
+ * @generated from field: string profile_id = 1;
516
+ */
517
+ profileId: string;
518
+
519
+ /**
520
+ * The attempt.
521
+ *
522
+ * @generated from field: string attempt_id = 2;
523
+ */
524
+ attemptId: string;
525
+
526
+ /**
527
+ * The idempotency key of this action of the learner.
528
+ *
529
+ * @generated from field: string idempotency_key = 3;
530
+ */
531
+ idempotencyKey: string;
532
+
533
+ /**
534
+ * The learner's own key and its provider: with a profile of its owner.
535
+ *
536
+ * @generated from field: novatrail.api.v1.OwnKey own_key = 4;
537
+ */
538
+ ownKey?: OwnKey | undefined;
539
+
540
+ /**
541
+ * The offset of the device's clock from UTC, in minutes: with a request on platform AI alone.
542
+ *
543
+ * @generated from field: optional int32 clock_offset_minutes = 5;
544
+ */
545
+ clockOffsetMinutes?: number | undefined;
546
+
547
+ /**
548
+ * How many wrong answers the attempt had when the words that the learner reads came: the
549
+ * `wrong_answers` of the submission whose rung they are.
550
+ *
551
+ * @generated from field: optional int32 wrong_answers = 6;
552
+ */
553
+ wrongAnswers?: number | undefined;
554
+ };
555
+
556
+ /**
557
+ * Describes the message novatrail.api.v1.ExplainDifferentlyRequest.
558
+ * Use `create(ExplainDifferentlyRequestSchema)` to create a new message.
559
+ */
560
+ export declare const ExplainDifferentlyRequestSchema: GenMessage<ExplainDifferentlyRequest>;
561
+
562
+ /**
563
+ * The words of the same rung, in other words.
564
+ *
565
+ * @generated from message novatrail.api.v1.ExplainDifferentlyResponse
566
+ */
567
+ export declare type ExplainDifferentlyResponse = Message<"novatrail.api.v1.ExplainDifferentlyResponse"> & {
568
+ /**
569
+ * The tutor's words, whole, once they passed the leak check and the form check, or the rung's
570
+ * fallback text.
571
+ *
572
+ * @generated from field: string words = 1;
573
+ */
574
+ words: string;
575
+
576
+ /**
577
+ * What the call came to, when the words are not the model's: a failure of AI, a refusal of the own
578
+ * key, or `CAUSE_NO_OTHER_WORDS` when they are the words the learner reads already.
579
+ *
580
+ * @generated from field: novatrail.api.v1.Outcome outcome = 2;
581
+ */
582
+ outcome?: Outcome | undefined;
583
+ };
584
+
585
+ /**
586
+ * Describes the message novatrail.api.v1.ExplainDifferentlyResponse.
587
+ * Use `create(ExplainDifferentlyResponseSchema)` to create a new message.
588
+ */
589
+ export declare const ExplainDifferentlyResponseSchema: GenMessage<ExplainDifferentlyResponse>;
590
+
591
+ /**
592
+ * "Hint".
593
+ *
594
+ * @generated from message novatrail.api.v1.GetHintRequest
595
+ */
596
+ export declare type GetHintRequest = Message<"novatrail.api.v1.GetHintRequest"> & {
597
+ /**
598
+ * The profile whose attempt it is.
599
+ *
600
+ * @generated from field: string profile_id = 1;
601
+ */
602
+ profileId: string;
603
+
604
+ /**
605
+ * The attempt.
606
+ *
607
+ * @generated from field: string attempt_id = 2;
608
+ */
609
+ attemptId: string;
610
+ };
611
+
612
+ /**
613
+ * Describes the message novatrail.api.v1.GetHintRequest.
614
+ * Use `create(GetHintRequestSchema)` to create a new message.
615
+ */
616
+ export declare const GetHintRequestSchema: GenMessage<GetHintRequest>;
617
+
618
+ /**
619
+ * What a hint asked for gives. "What is known and what to find" `app` shows from the open view of
620
+ * the task: they are open, and the server records nothing of them.
621
+ *
622
+ * @generated from message novatrail.api.v1.GetHintResponse
623
+ */
624
+ export declare type GetHintResponse = Message<"novatrail.api.v1.GetHintResponse"> & {
625
+ /**
626
+ * Before the first wrong answer, and on a task with a rubric, the task's techniques; after it, the
627
+ * current rung's words.
628
+ *
629
+ * @generated from oneof novatrail.api.v1.GetHintResponse.hint
630
+ */
631
+ hint: {
632
+ /**
633
+ * The task's techniques.
634
+ *
635
+ * @generated from field: novatrail.api.v1.Techniques techniques = 1;
636
+ */
637
+ value: Techniques;
638
+ case: "techniques";
639
+ } | {
640
+ /**
641
+ * The current rung's words.
642
+ *
643
+ * @generated from field: novatrail.api.v1.RungHint rung = 2;
644
+ */
645
+ value: RungHint;
646
+ case: "rung";
647
+ } | { case: undefined; value?: undefined };
648
+ };
649
+
650
+ /**
651
+ * Describes the message novatrail.api.v1.GetHintResponse.
652
+ * Use `create(GetHintResponseSchema)` to create a new message.
653
+ */
654
+ export declare const GetHintResponseSchema: GenMessage<GetHintResponse>;
655
+
656
+ /**
657
+ * The techniques of a task, which the server records as given at a step or on request.
658
+ *
659
+ * @generated from message novatrail.api.v1.Techniques
660
+ */
661
+ export declare type Techniques = Message<"novatrail.api.v1.Techniques"> & {
662
+ /**
663
+ * The IDs of the techniques, local IDs of the module's technique catalog: empty when the task
664
+ * names none, which is the answer that there is nothing to hint.
665
+ *
666
+ * @generated from field: repeated string technique_ids = 1;
667
+ */
668
+ techniqueIds: string[];
669
+ };
670
+
671
+ /**
672
+ * Describes the message novatrail.api.v1.Techniques.
673
+ * Use `create(TechniquesSchema)` to create a new message.
674
+ */
675
+ export declare const TechniquesSchema: GenMessage<Techniques>;
676
+
677
+ /**
678
+ * A rung's words that a hint asked for gives again, with no AI.
679
+ *
680
+ * @generated from message novatrail.api.v1.RungHint
681
+ */
682
+ export declare type RungHint = Message<"novatrail.api.v1.RungHint"> & {
683
+ /**
684
+ * The rung, from 1 to 3.
685
+ *
686
+ * @generated from field: int32 rung = 1;
687
+ */
688
+ rung: number;
689
+
690
+ /**
691
+ * The words the attempt keeps for the rung, or the rung's fallback text.
692
+ *
693
+ * @generated from field: string words = 2;
694
+ */
695
+ words: string;
696
+ };
697
+
698
+ /**
699
+ * Describes the message novatrail.api.v1.RungHint.
700
+ * Use `create(RungHintSchema)` to create a new message.
701
+ */
702
+ export declare const RungHintSchema: GenMessage<RungHint>;
703
+
704
+ /**
705
+ * The beginning of a solving step.
706
+ *
707
+ * @generated from message novatrail.api.v1.BeginStepRequest
708
+ */
709
+ export declare type BeginStepRequest = Message<"novatrail.api.v1.BeginStepRequest"> & {
710
+ /**
711
+ * The profile whose attempt it is.
712
+ *
713
+ * @generated from field: string profile_id = 1;
714
+ */
715
+ profileId: string;
716
+
717
+ /**
718
+ * The attempt.
719
+ *
720
+ * @generated from field: string attempt_id = 2;
721
+ */
722
+ attemptId: string;
723
+
724
+ /**
725
+ * The step's place among the task's solving steps, from 1.
726
+ *
727
+ * @generated from field: int32 step = 3;
728
+ */
729
+ step: number;
730
+ };
731
+
732
+ /**
733
+ * Describes the message novatrail.api.v1.BeginStepRequest.
734
+ * Use `create(BeginStepRequestSchema)` to create a new message.
735
+ */
736
+ export declare const BeginStepRequestSchema: GenMessage<BeginStepRequest>;
737
+
738
+ /**
739
+ * What the beginning of a step gives.
740
+ *
741
+ * @generated from message novatrail.api.v1.BeginStepResponse
742
+ */
743
+ export declare type BeginStepResponse = Message<"novatrail.api.v1.BeginStepResponse"> & {
744
+ /**
745
+ * The task's techniques.
746
+ *
747
+ * @generated from field: novatrail.api.v1.Techniques techniques = 1;
748
+ */
749
+ techniques?: Techniques | undefined;
750
+ };
751
+
752
+ /**
753
+ * Describes the message novatrail.api.v1.BeginStepResponse.
754
+ * Use `create(BeginStepResponseSchema)` to create a new message.
755
+ */
756
+ export declare const BeginStepResponseSchema: GenMessage<BeginStepResponse>;
757
+
758
+ /**
759
+ * A request to show the solution.
760
+ *
761
+ * @generated from message novatrail.api.v1.ShowSolutionRequest
762
+ */
763
+ export declare type ShowSolutionRequest = Message<"novatrail.api.v1.ShowSolutionRequest"> & {
764
+ /**
765
+ * The profile whose attempt it is.
766
+ *
767
+ * @generated from field: string profile_id = 1;
768
+ */
769
+ profileId: string;
770
+
771
+ /**
772
+ * The attempt.
773
+ *
774
+ * @generated from field: string attempt_id = 2;
775
+ */
776
+ attemptId: string;
777
+
778
+ /**
779
+ * The idempotency key of this action.
780
+ *
781
+ * @generated from field: string idempotency_key = 3;
782
+ */
783
+ idempotencyKey: string;
784
+
785
+ /**
786
+ * Whose action it is.
787
+ *
788
+ * @generated from field: novatrail.api.v1.Action action = 4;
789
+ */
790
+ action: Action;
791
+ };
792
+
793
+ /**
794
+ * Describes the message novatrail.api.v1.ShowSolutionRequest.
795
+ * Use `create(ShowSolutionRequestSchema)` to create a new message.
796
+ */
797
+ export declare const ShowSolutionRequestSchema: GenMessage<ShowSolutionRequest>;
798
+
799
+ /**
800
+ * The solution shown.
801
+ *
802
+ * @generated from message novatrail.api.v1.ShowSolutionResponse
803
+ */
804
+ export declare type ShowSolutionResponse = Message<"novatrail.api.v1.ShowSolutionResponse"> & {
805
+ /**
806
+ * The solved task.
807
+ *
808
+ * @generated from field: novatrail.api.v1.SolvedTask solved = 1;
809
+ */
810
+ solved?: SolvedTask | undefined;
811
+ };
812
+
813
+ /**
814
+ * Describes the message novatrail.api.v1.ShowSolutionResponse.
815
+ * Use `create(ShowSolutionResponseSchema)` to create a new message.
816
+ */
817
+ export declare const ShowSolutionResponseSchema: GenMessage<ShowSolutionResponse>;
818
+
819
+ /**
820
+ * The work for checking: a sheet's crop, or the crops of a workbook's filled boxes. Nothing of the
821
+ * writing history, of the context of the submission, of the groups of strokes or of the text of an
822
+ * item goes with it.
823
+ *
824
+ * @generated from message novatrail.api.v1.Work
825
+ */
826
+ export declare type Work = Message<"novatrail.api.v1.Work"> & {
827
+ /**
828
+ * Where the work was written.
829
+ *
830
+ * @generated from oneof novatrail.api.v1.Work.surface
831
+ */
832
+ surface: {
833
+ /**
834
+ * A handwriting sheet.
835
+ *
836
+ * @generated from field: novatrail.api.v1.SheetWork sheet = 1;
837
+ */
838
+ value: SheetWork;
839
+ case: "sheet";
840
+ } | {
841
+ /**
842
+ * A page of a workbook.
843
+ *
844
+ * @generated from field: novatrail.api.v1.WorkbookWork workbook = 2;
845
+ */
846
+ value: WorkbookWork;
847
+ case: "workbook";
848
+ } | { case: undefined; value?: undefined };
849
+ };
850
+
851
+ /**
852
+ * Describes the message novatrail.api.v1.Work.
853
+ * Use `create(WorkSchema)` to create a new message.
854
+ */
855
+ export declare const WorkSchema: GenMessage<Work>;
856
+
857
+ /**
858
+ * The work of a handwriting sheet.
859
+ *
860
+ * @generated from message novatrail.api.v1.SheetWork
861
+ */
862
+ export declare type SheetWork = Message<"novatrail.api.v1.SheetWork"> & {
863
+ /**
864
+ * The PNG of the crop of the visible strokes, without its `sheet_box`.
865
+ *
866
+ * @generated from field: bytes crop = 1;
867
+ */
868
+ crop: Uint8Array;
869
+ };
870
+
871
+ /**
872
+ * Describes the message novatrail.api.v1.SheetWork.
873
+ * Use `create(SheetWorkSchema)` to create a new message.
874
+ */
875
+ export declare const SheetWorkSchema: GenMessage<SheetWork>;
876
+
877
+ /**
878
+ * The work of a page of a workbook.
879
+ *
880
+ * @generated from message novatrail.api.v1.WorkbookWork
881
+ */
882
+ export declare type WorkbookWork = Message<"novatrail.api.v1.WorkbookWork"> & {
883
+ /**
884
+ * Each filled box, in the task's order. A box left empty sends nothing, and the draft, the
885
+ * writing outside the boxes, goes nowhere.
886
+ *
887
+ * @generated from field: repeated novatrail.api.v1.BoxCrop boxes = 1;
888
+ */
889
+ boxes: BoxCrop[];
890
+ };
891
+
892
+ /**
893
+ * Describes the message novatrail.api.v1.WorkbookWork.
894
+ * Use `create(WorkbookWorkSchema)` to create a new message.
895
+ */
896
+ export declare const WorkbookWorkSchema: GenMessage<WorkbookWork>;
897
+
898
+ /**
899
+ * The crop of one filled box.
900
+ *
901
+ * @generated from message novatrail.api.v1.BoxCrop
902
+ */
903
+ export declare type BoxCrop = Message<"novatrail.api.v1.BoxCrop"> & {
904
+ /**
905
+ * The box, by its place.
906
+ *
907
+ * @generated from field: novatrail.observation.v1.AnswerSlotPlace answer_slot = 1;
908
+ */
909
+ answerSlot?: AnswerSlotPlace | undefined;
910
+
911
+ /**
912
+ * The PNG of the crop of the box's strokes.
913
+ *
914
+ * @generated from field: bytes crop = 2;
915
+ */
916
+ crop: Uint8Array;
917
+ };
918
+
919
+ /**
920
+ * Describes the message novatrail.api.v1.BoxCrop.
921
+ * Use `create(BoxCropSchema)` to create a new message.
922
+ */
923
+ export declare const BoxCropSchema: GenMessage<BoxCrop>;
924
+
925
+ /**
926
+ * An option the learner tapped.
927
+ *
928
+ * @generated from message novatrail.api.v1.TappedChoice
929
+ */
930
+ export declare type TappedChoice = Message<"novatrail.api.v1.TappedChoice"> & {
931
+ /**
932
+ * The answer slot bound `choice`.
933
+ *
934
+ * @generated from field: novatrail.observation.v1.AnswerSlotPlace answer_slot = 1;
935
+ */
936
+ answerSlot?: AnswerSlotPlace | undefined;
937
+
938
+ /**
939
+ * The text of the option tapped, as the open view of the task writes it.
940
+ *
941
+ * @generated from field: string value = 2;
942
+ */
943
+ value: string;
944
+ };
945
+
946
+ /**
947
+ * Describes the message novatrail.api.v1.TappedChoice.
948
+ * Use `create(TappedChoiceSchema)` to create a new message.
949
+ */
950
+ export declare const TappedChoiceSchema: GenMessage<TappedChoice>;
951
+
952
+ /**
953
+ * The learner's own key at its provider, which the server holds in the memory of the request alone.
954
+ *
955
+ * @generated from message novatrail.api.v1.OwnKey
956
+ */
957
+ export declare type OwnKey = Message<"novatrail.api.v1.OwnKey"> & {
958
+ /**
959
+ * The provider, by its code in the admission table: "openai", "anthropic".
960
+ *
961
+ * @generated from field: string provider = 1;
962
+ */
963
+ provider: string;
964
+
965
+ /**
966
+ * The key, as the provider gave it.
967
+ *
968
+ * @generated from field: string key = 2;
969
+ */
970
+ key: string;
971
+ };
972
+
973
+ /**
974
+ * Describes the message novatrail.api.v1.OwnKey.
975
+ * Use `create(OwnKeySchema)` to create a new message.
976
+ */
977
+ export declare const OwnKeySchema: GenMessage<OwnKey>;
978
+
979
+ /**
980
+ * The verdict of an item.
981
+ *
982
+ * @generated from message novatrail.api.v1.ItemVerdict
983
+ */
984
+ export declare type ItemVerdict = Message<"novatrail.api.v1.ItemVerdict"> & {
985
+ /**
986
+ * The item's verdict, made of its answer slots': "correct", "not_yet", "unreadable" or
987
+ * "unchecked".
988
+ *
989
+ * @generated from field: string verdict = 1;
990
+ */
991
+ verdict: string;
992
+
993
+ /**
994
+ * Every answer slot of the item, in order.
995
+ *
996
+ * @generated from field: repeated novatrail.api.v1.AnswerSlotVerdict answer_slots = 2;
997
+ */
998
+ answerSlots: AnswerSlotVerdict[];
999
+ };
1000
+
1001
+ /**
1002
+ * Describes the message novatrail.api.v1.ItemVerdict.
1003
+ * Use `create(ItemVerdictSchema)` to create a new message.
1004
+ */
1005
+ export declare const ItemVerdictSchema: GenMessage<ItemVerdict>;
1006
+
1007
+ /**
1008
+ * The verdict of an answer slot, and what was read in it. The trap that a value shows is not here:
1009
+ * the tutor's words alone get it, in `api`.
1010
+ *
1011
+ * @generated from message novatrail.api.v1.AnswerSlotVerdict
1012
+ */
1013
+ export declare type AnswerSlotVerdict = Message<"novatrail.api.v1.AnswerSlotVerdict"> & {
1014
+ /**
1015
+ * The answer slot.
1016
+ *
1017
+ * @generated from field: novatrail.observation.v1.AnswerSlotPlace answer_slot = 1;
1018
+ */
1019
+ answerSlot?: AnswerSlotPlace | undefined;
1020
+
1021
+ /**
1022
+ * "correct", "not_yet", "unreadable" or "unchecked".
1023
+ *
1024
+ * @generated from field: string verdict = 2;
1025
+ */
1026
+ verdict: string;
1027
+
1028
+ /**
1029
+ * Why the verdict is "unreadable": "blank", "notation", "illegible", "ambiguous",
1030
+ * "no_final_answer" or "several_final_answers". Empty beside the others.
1031
+ *
1032
+ * @generated from field: string reason = 3;
1033
+ */
1034
+ reason: string;
1035
+
1036
+ /**
1037
+ * What was read in the slot, as the learner sees it, "Read: 6": the value of the observation, or
1038
+ * the text of the option tapped. Absent when nothing was read.
1039
+ *
1040
+ * @generated from field: optional string value = 4;
1041
+ */
1042
+ value?: string | undefined;
1043
+ };
1044
+
1045
+ /**
1046
+ * Describes the message novatrail.api.v1.AnswerSlotVerdict.
1047
+ * Use `create(AnswerSlotVerdictSchema)` to create a new message.
1048
+ */
1049
+ export declare const AnswerSlotVerdictSchema: GenMessage<AnswerSlotVerdict>;
1050
+
1051
+ /**
1052
+ * What reaches the device once the task is solved: its attempt closed by a correct answer, by the
1053
+ * solution shown, or by "Done".
1054
+ *
1055
+ * @generated from message novatrail.api.v1.SolvedTask
1056
+ */
1057
+ export declare type SolvedTask = Message<"novatrail.api.v1.SolvedTask"> & {
1058
+ /**
1059
+ * The key of each answer slot that has one, in the task's order: a slot whose check is a
1060
+ * predicate or a rubric has none.
1061
+ *
1062
+ * @generated from field: repeated novatrail.api.v1.AnswerSlotKey keys = 1;
1063
+ */
1064
+ keys: AnswerSlotKey[];
1065
+
1066
+ /**
1067
+ * The task's solution, the value of its field `solution` as JSON of the module format, of the
1068
+ * instance when the task is a template: empty when the task has none.
1069
+ *
1070
+ * @generated from field: bytes solution = 2;
1071
+ */
1072
+ solution: Uint8Array;
1073
+
1074
+ /**
1075
+ * The version of the module format the solution is written in, MAJOR.MINOR.
1076
+ *
1077
+ * @generated from field: string module_format_version = 3;
1078
+ */
1079
+ moduleFormatVersion: string;
1080
+
1081
+ /**
1082
+ * The criteria of a rubric, each its text, in order: on a task with a rubric alone, without the
1083
+ * marks of the assessment.
1084
+ *
1085
+ * @generated from field: repeated string criteria = 4;
1086
+ */
1087
+ criteria: string[];
1088
+ };
1089
+
1090
+ /**
1091
+ * Describes the message novatrail.api.v1.SolvedTask.
1092
+ * Use `create(SolvedTaskSchema)` to create a new message.
1093
+ */
1094
+ export declare const SolvedTaskSchema: GenMessage<SolvedTask>;
1095
+
1096
+ /**
1097
+ * The key of an answer slot.
1098
+ *
1099
+ * @generated from message novatrail.api.v1.AnswerSlotKey
1100
+ */
1101
+ export declare type AnswerSlotKey = Message<"novatrail.api.v1.AnswerSlotKey"> & {
1102
+ /**
1103
+ * The answer slot.
1104
+ *
1105
+ * @generated from field: novatrail.observation.v1.AnswerSlotPlace answer_slot = 1;
1106
+ */
1107
+ answerSlot?: AnswerSlotPlace | undefined;
1108
+
1109
+ /**
1110
+ * The key as the module format writes it, of the instance when the task is a template.
1111
+ *
1112
+ * @generated from field: string key = 2;
1113
+ */
1114
+ key: string;
1115
+ };
1116
+
1117
+ /**
1118
+ * Describes the message novatrail.api.v1.AnswerSlotKey.
1119
+ * Use `create(AnswerSlotKeySchema)` to create a new message.
1120
+ */
1121
+ export declare const AnswerSlotKeySchema: GenMessage<AnswerSlotKey>;
1122
+
1123
+ /**
1124
+ * A mark of the tutor on its layer of the canvas, over the learner's work. The program places it;
1125
+ * `app` gives it its name, which a screen reader reads, and it belongs to the words that bring it.
1126
+ *
1127
+ * @generated from message novatrail.api.v1.Mark
1128
+ */
1129
+ export declare type Mark = Message<"novatrail.api.v1.Mark"> & {
1130
+ /**
1131
+ * What the mark is.
1132
+ *
1133
+ * @generated from field: novatrail.api.v1.MarkKind kind = 1;
1134
+ */
1135
+ kind: MarkKind;
1136
+
1137
+ /**
1138
+ * Where the mark stands. A group's label comes only if the frames of the groups go with the work
1139
+ * (repositories 8, Т-31).
1140
+ *
1141
+ * @generated from oneof novatrail.api.v1.Mark.place
1142
+ */
1143
+ place: {
1144
+ /**
1145
+ * An answer slot by its place: on a workbook, the box, framed with its strokes.
1146
+ *
1147
+ * @generated from field: novatrail.observation.v1.AnswerSlotPlace answer_slot = 2;
1148
+ */
1149
+ value: AnswerSlotPlace;
1150
+ case: "answerSlot";
1151
+ } | {
1152
+ /**
1153
+ * A box on the crop the device sent, in whole thousandths: on a handwriting sheet alone.
1154
+ *
1155
+ * @generated from field: novatrail.observation.v1.CropBox crop_box = 3;
1156
+ */
1157
+ value: CropBox;
1158
+ case: "cropBox";
1159
+ } | { case: undefined; value?: undefined };
1160
+ };
1161
+
1162
+ /**
1163
+ * Describes the message novatrail.api.v1.Mark.
1164
+ * Use `create(MarkSchema)` to create a new message.
1165
+ */
1166
+ export declare const MarkSchema: GenMessage<Mark>;
1167
+
1168
+ /**
1169
+ * How a submission of an essay ended.
1170
+ *
1171
+ * @generated from enum novatrail.api.v1.SubmissionEnd
1172
+ */
1173
+ export enum SubmissionEnd {
1174
+ /**
1175
+ * Not named: never sent.
1176
+ *
1177
+ * @generated from enum value: SUBMISSION_END_UNSPECIFIED = 0;
1178
+ */
1179
+ UNSPECIFIED = 0,
1180
+
1181
+ /**
1182
+ * The essay was read and assessed by its rubric: the learner gets feedback.
1183
+ *
1184
+ * @generated from enum value: SUBMISSION_END_FEEDBACK = 1;
1185
+ */
1186
+ FEEDBACK = 1,
1187
+
1188
+ /**
1189
+ * The sheet is blank, or the essay cannot be read as a whole: it does not reach the assessment.
1190
+ *
1191
+ * @generated from enum value: SUBMISSION_END_UNREADABLE = 2;
1192
+ */
1193
+ UNREADABLE = 2,
1194
+
1195
+ /**
1196
+ * No check: a call of AI gave nothing, or the assessment assessed no criterion.
1197
+ *
1198
+ * @generated from enum value: SUBMISSION_END_UNCHECKED = 3;
1199
+ */
1200
+ UNCHECKED = 3,
1201
+ }
1202
+
1203
+ /**
1204
+ * Describes the enum novatrail.api.v1.SubmissionEnd.
1205
+ */
1206
+ export declare const SubmissionEndSchema: GenEnum<SubmissionEnd>;
1207
+
1208
+ /**
1209
+ * Whose action a request is: the server tells kinds of action apart, not people (R04 api).
1210
+ *
1211
+ * @generated from enum novatrail.api.v1.Action
1212
+ */
1213
+ export enum Action {
1214
+ /**
1215
+ * Not named: never sent.
1216
+ *
1217
+ * @generated from enum value: ACTION_UNSPECIFIED = 0;
1218
+ */
1219
+ UNSPECIFIED = 0,
1220
+
1221
+ /**
1222
+ * A learning action, by the learner's session.
1223
+ *
1224
+ * @generated from enum value: ACTION_LEARNING = 1;
1225
+ */
1226
+ LEARNING = 1,
1227
+
1228
+ /**
1229
+ * An action of an adult, behind the PIN of the section for adults.
1230
+ *
1231
+ * @generated from enum value: ACTION_ADULT = 2;
1232
+ */
1233
+ ADULT = 2,
1234
+ }
1235
+
1236
+ /**
1237
+ * Describes the enum novatrail.api.v1.Action.
1238
+ */
1239
+ export declare const ActionSchema: GenEnum<Action>;
1240
+
1241
+ /**
1242
+ * What a mark is.
1243
+ *
1244
+ * @generated from enum novatrail.api.v1.MarkKind
1245
+ */
1246
+ export enum MarkKind {
1247
+ /**
1248
+ * Not named: never sent.
1249
+ *
1250
+ * @generated from enum value: MARK_KIND_UNSPECIFIED = 0;
1251
+ */
1252
+ UNSPECIFIED = 0,
1253
+
1254
+ /**
1255
+ * A frame round the place.
1256
+ *
1257
+ * @generated from enum value: MARK_KIND_FRAME = 1;
1258
+ */
1259
+ FRAME = 1,
1260
+ }
1261
+
1262
+ /**
1263
+ * Describes the enum novatrail.api.v1.MarkKind.
1264
+ */
1265
+ export declare const MarkKindSchema: GenEnum<MarkKind>;
1266
+
1267
+ /**
1268
+ * The requests on an attempt of a task, as a learner and an adult act on it. Every method names
1269
+ * the profile and the attempt; one of another profile, or none, gets `CAUSE_NOT_FOUND`, and a
1270
+ * profile that is not the account's `CAUSE_NO_PROFILE`. A request whose form the contract refuses
1271
+ * — a field it needs left out, a place the task does not have, a method the task's kind does not
1272
+ * take — gets the code `invalid_argument` with no `Refusal`.
1273
+ *
1274
+ * @generated from service novatrail.api.v1.AttemptService
1275
+ */
1276
+ export declare const AttemptService: GenService<{
1277
+ /**
1278
+ * Sends the work of a task with a verdict for checking: the handwriting, the options tapped, or
1279
+ * both. The answer is the verdict of every item and answer slot, on the whole observation, and
1280
+ * what was read. Refusals: `CAUSE_ATTEMPT_CLOSED`, `CAUSE_KEY_NOT_FOR_PROFILE`,
1281
+ * `CAUSE_KEY_ALREADY_USED` and `CAUSE_STILL_GOING`. A call of AI that gives no reading is no
1282
+ * refusal: its slots get "unchecked", and the answer names the outcome. A repeat with the same
1283
+ * idempotency key gets the verdicts and the reading recorded, with no AI.
1284
+ *
1285
+ * @generated from rpc novatrail.api.v1.AttemptService.SubmitWork
1286
+ */
1287
+ submitWork: {
1288
+ methodKind: "unary";
1289
+ input: typeof SubmitWorkRequestSchema;
1290
+ output: typeof SubmitWorkResponseSchema;
1291
+ },
1292
+ /**
1293
+ * Sends the sheet of a task with a rubric, an essay, for its feedback: one request, reading and
1294
+ * assessment both. Refusals: `CAUSE_ATTEMPT_CLOSED`, before any call of AI,
1295
+ * `CAUSE_KEY_NOT_FOR_PROFILE`, `CAUSE_KEY_ALREADY_USED` and `CAUSE_STILL_GOING`. A repeat with
1296
+ * the same idempotency key gets how the submission ended, without the text read and the words of
1297
+ * the feedback: they are nowhere on the server.
1298
+ *
1299
+ * @generated from rpc novatrail.api.v1.AttemptService.SubmitEssay
1300
+ */
1301
+ submitEssay: {
1302
+ methodKind: "unary";
1303
+ input: typeof SubmitEssayRequestSchema;
1304
+ output: typeof SubmitEssayResponseSchema;
1305
+ },
1306
+ /**
1307
+ * "Done" on a task with a rubric: the learner ends the attempt, which is closed
1308
+ * `CLOSE_REASON_DONE`, and the task is solved. Refusals: `CAUSE_NO_SUBMISSION` and
1309
+ * `CAUSE_ATTEMPT_CLOSED` with another close reason; a repeat on an attempt closed by "Done" gets the
1310
+ * same answer. It carries no idempotency key: it repeats by the attempt's state.
1311
+ *
1312
+ * @generated from rpc novatrail.api.v1.AttemptService.Done
1313
+ */
1314
+ done: {
1315
+ methodKind: "unary";
1316
+ input: typeof DoneRequestSchema;
1317
+ output: typeof DoneResponseSchema;
1318
+ },
1319
+ /**
1320
+ * Asks for the words of the rung that a wrong answer gave, sending the work again: the server
1321
+ * keeps no crop. Refusals: `CAUSE_NOT_CURRENT`, `CAUSE_NO_RUNG`, `CAUSE_NO_MORE_WORDS`,
1322
+ * `CAUSE_ATTEMPT_CLOSED`, `CAUSE_KEY_NOT_FOR_PROFILE`, `CAUSE_KEY_ALREADY_USED` and
1323
+ * `CAUSE_STILL_GOING`. A call of AI that gives no words is no refusal: the answer holds the
1324
+ * rung's fallback text and names the outcome. A repeat with the same idempotency key, or a request
1325
+ * for the same wrong answer, gets the words the attempt keeps, with no AI and no marks.
1326
+ *
1327
+ * @generated from rpc novatrail.api.v1.AttemptService.GetRungWords
1328
+ */
1329
+ getRungWords: {
1330
+ methodKind: "unary";
1331
+ input: typeof GetRungWordsRequestSchema;
1332
+ output: typeof GetRungWordsResponseSchema;
1333
+ },
1334
+ /**
1335
+ * Asks for the tutor's words after a correct answer, sending the work again, once, on the attempt
1336
+ * that the answer has just closed. Refusals: `CAUSE_NO_MORE_WORDS`, also on an attempt that no
1337
+ * correct answer closed, `CAUSE_KEY_NOT_FOR_PROFILE`,
1338
+ * `CAUSE_KEY_ALREADY_USED` and `CAUSE_STILL_GOING`. A repeat with the same idempotency key gets
1339
+ * an answer without words: the server keeps none.
1340
+ *
1341
+ * @generated from rpc novatrail.api.v1.AttemptService.GetCorrectAnswerWords
1342
+ */
1343
+ getCorrectAnswerWords: {
1344
+ methodKind: "unary";
1345
+ input: typeof GetCorrectAnswerWordsRequestSchema;
1346
+ output: typeof GetCorrectAnswerWordsResponseSchema;
1347
+ },
1348
+ /**
1349
+ * "Explain differently": the words of the same rung in other words, one call of AI on a rung,
1350
+ * without the work, for the wrong answer it names. Refusals: `CAUSE_NOT_CURRENT`,
1351
+ * `CAUSE_ALREADY_ASKED`, `CAUSE_NO_RUNG`, `CAUSE_ATTEMPT_CLOSED`, `CAUSE_KEY_NOT_FOR_PROFILE`,
1352
+ * `CAUSE_KEY_ALREADY_USED` and `CAUSE_STILL_GOING`; on platform AI, `CAUSE_QUOTA`,
1353
+ * `CAUSE_PLATFORM_LIMIT` and `CAUSE_NOT_ADMITTED` too: it makes no call without the reserve of the
1354
+ * quota, and the right to it on the rung stays. A repeat with the same idempotency key gets the
1355
+ * words the attempt keeps, with no AI.
1356
+ *
1357
+ * @generated from rpc novatrail.api.v1.AttemptService.ExplainDifferently
1358
+ */
1359
+ explainDifferently: {
1360
+ methodKind: "unary";
1361
+ input: typeof ExplainDifferentlyRequestSchema;
1362
+ output: typeof ExplainDifferentlyResponseSchema;
1363
+ },
1364
+ /**
1365
+ * "Hint", a hint the learner asks for, without the work and with no AI: before the first wrong
1366
+ * answer, and on a task with a rubric, the IDs of the task's techniques; after it, the words of the
1367
+ * current rung. Refusals: `CAUSE_ATTEMPT_CLOSED`. It carries no idempotency key: it repeats by
1368
+ * the attempt's state.
1369
+ *
1370
+ * @generated from rpc novatrail.api.v1.AttemptService.GetHint
1371
+ */
1372
+ getHint: {
1373
+ methodKind: "unary";
1374
+ input: typeof GetHintRequestSchema;
1375
+ output: typeof GetHintResponseSchema;
1376
+ },
1377
+ /**
1378
+ * Begins a step of the task's solving steps whose `gives` gives techniques, in the mode "by
1379
+ * steps": the answer is the IDs of the task's techniques. "Step done" sends no request. Refusals:
1380
+ * `CAUSE_ATTEMPT_CLOSED`. It carries no idempotency key: it repeats by the attempt's state.
1381
+ *
1382
+ * @generated from rpc novatrail.api.v1.AttemptService.BeginStep
1383
+ */
1384
+ beginStep: {
1385
+ methodKind: "unary";
1386
+ input: typeof BeginStepRequestSchema;
1387
+ output: typeof BeginStepResponseSchema;
1388
+ },
1389
+ /**
1390
+ * Shows the solution, by a learning action or by an action of an adult, and closes the attempt
1391
+ * `CLOSE_REASON_SOLUTION_SHOWN`. A learning action needs the right `can_learn`, and an action of
1392
+ * an adult `can_manage`: a request without it gets the code `permission_denied`. The PIN of the
1393
+ * section for adults is a barrier of the interface, not of the server (R04 api). Refusals:
1394
+ * `CAUSE_ADULT_NEEDED`, `CAUSE_LADDER_NOT_PASSED`, by either kind of action,
1395
+ * `CAUSE_NO_SHOWING`, `CAUSE_ATTEMPT_CLOSED`, `CAUSE_KEY_ALREADY_USED` and
1396
+ * `CAUSE_STILL_GOING`. A repeat with the same idempotency key gets the solution again.
1397
+ *
1398
+ * @generated from rpc novatrail.api.v1.AttemptService.ShowSolution
1399
+ */
1400
+ showSolution: {
1401
+ methodKind: "unary";
1402
+ input: typeof ShowSolutionRequestSchema;
1403
+ output: typeof ShowSolutionResponseSchema;
1404
+ },
1405
+ }>;
1406
+