@happyvertical/smrt-education 0.57.33 → 0.57.34
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/AGENTS.md +8 -1
- package/README.md +117 -13
- package/agents/catalog-sync.md +46 -0
- package/agents/photo-intake.md +249 -0
- package/agents/workbook-service.md +355 -0
- package/agents/workbook-test-matrix.md +74 -0
- package/dist/catalog-acquisition-service.d.ts.map +1 -1
- package/dist/catalog-capability.d.ts +21 -0
- package/dist/catalog-capability.d.ts.map +1 -0
- package/dist/catalog-contracts.d.ts +40 -0
- package/dist/catalog-contracts.d.ts.map +1 -1
- package/dist/catalog-database-sync-store.d.ts.map +1 -1
- package/dist/catalog-models.d.ts +5 -1
- package/dist/catalog-models.d.ts.map +1 -1
- package/dist/catalog-read-service.d.ts +2 -1
- package/dist/catalog-read-service.d.ts.map +1 -1
- package/dist/catalog-service.d.ts +5 -0
- package/dist/catalog-service.d.ts.map +1 -1
- package/dist/chunks/workbook-photo-service-1wcnf-Xf.js +27359 -0
- package/dist/chunks/workbook-photo-service-1wcnf-Xf.js.map +1 -0
- package/dist/index.d.ts +11 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +339 -24864
- package/dist/index.js.map +1 -1
- package/dist/ingestion.d.ts +37 -0
- package/dist/ingestion.d.ts.map +1 -1
- package/dist/ingestion.js +829 -20
- package/dist/ingestion.js.map +1 -1
- package/dist/learner-service.d.ts +15 -0
- package/dist/learner-service.d.ts.map +1 -1
- package/dist/manifest.json +4735 -6
- package/dist/smrt-knowledge.json +1760 -26
- package/dist/sources/public-illustrative-mathematics-adapter.d.ts.map +1 -1
- package/dist/sources/public-illustrative-mathematics-parser.d.ts.map +1 -1
- package/dist/submission-service.d.ts +38 -11
- package/dist/submission-service.d.ts.map +1 -1
- package/dist/workbook-answer-regions.d.ts +11 -0
- package/dist/workbook-answer-regions.d.ts.map +1 -0
- package/dist/workbook-contracts.d.ts +224 -0
- package/dist/workbook-contracts.d.ts.map +1 -0
- package/dist/workbook-layout.d.ts +13 -0
- package/dist/workbook-layout.d.ts.map +1 -0
- package/dist/workbook-models.d.ts +129 -0
- package/dist/workbook-models.d.ts.map +1 -0
- package/dist/workbook-photo-contracts.d.ts +56 -0
- package/dist/workbook-photo-contracts.d.ts.map +1 -0
- package/dist/workbook-photo-ingestion.d.ts +70 -0
- package/dist/workbook-photo-ingestion.d.ts.map +1 -0
- package/dist/workbook-photo-models.d.ts +63 -0
- package/dist/workbook-photo-models.d.ts.map +1 -0
- package/dist/workbook-photo-service.d.ts +72 -0
- package/dist/workbook-photo-service.d.ts.map +1 -0
- package/dist/workbook-service.d.ts +158 -0
- package/dist/workbook-service.d.ts.map +1 -0
- package/package.json +8 -8
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { OperationHandler } from '@happyvertical/smrt-ingestion/execution';
|
|
2
|
+
import { type IngestionScope, type IngestionService, type ReceiveInput } from '@happyvertical/smrt-ingestion/server';
|
|
3
|
+
import { processEducationAnalysis } from './ingestion.js';
|
|
4
|
+
import type { LearnerRequest } from './learner-service.js';
|
|
5
|
+
import { type WorkbookPhotoService } from './workbook-photo-service.js';
|
|
6
|
+
export declare const WORKBOOK_PHOTO_HANDLER = "@happyvertical/smrt-education:identify-workbook-photo";
|
|
7
|
+
/** Generation proposes material identity only; execution never writes educational outcomes. */
|
|
8
|
+
export declare function workbookPhotoIntakeHandlers(input: {
|
|
9
|
+
workbooks: WorkbookPhotoService;
|
|
10
|
+
request: LearnerRequest;
|
|
11
|
+
}): OperationHandler[];
|
|
12
|
+
/** Candidate freshness and authorization on ingestion's supplied executor. */
|
|
13
|
+
export declare function workbookPhotoIntakeTargetResolver(input: {
|
|
14
|
+
workbooks: WorkbookPhotoService;
|
|
15
|
+
request: LearnerRequest;
|
|
16
|
+
}): import('@happyvertical/smrt-ingestion/execution').IntakeExecutionOptions['assertTarget'];
|
|
17
|
+
/** Receive before asking for workbook selection; duplicate receipts repair interrupted copying. */
|
|
18
|
+
export declare function receiveWorkbookPhotoIntake(input: {
|
|
19
|
+
ingestion: IngestionService;
|
|
20
|
+
scope: Readonly<IngestionScope>;
|
|
21
|
+
workbooks: WorkbookPhotoService;
|
|
22
|
+
request: LearnerRequest;
|
|
23
|
+
receive: ReceiveInput;
|
|
24
|
+
}): Promise<{
|
|
25
|
+
receipt: import("@happyvertical/smrt-ingestion").ReceiptResult;
|
|
26
|
+
intake: null;
|
|
27
|
+
} | {
|
|
28
|
+
receipt: {
|
|
29
|
+
kind: "accepted" | "duplicate";
|
|
30
|
+
itemId: string;
|
|
31
|
+
receiptVersion: number;
|
|
32
|
+
};
|
|
33
|
+
intake: import("./workbook-photo-contracts.js").WorkbookPhotoIntakeView;
|
|
34
|
+
}>;
|
|
35
|
+
/** Recovery after a receive succeeded but the private education copy was interrupted. */
|
|
36
|
+
export declare function retainWorkbookPhotoReceipt(input: {
|
|
37
|
+
ingestion: IngestionService;
|
|
38
|
+
scope: Readonly<IngestionScope>;
|
|
39
|
+
workbooks: WorkbookPhotoService;
|
|
40
|
+
request: LearnerRequest;
|
|
41
|
+
itemId: string;
|
|
42
|
+
}): Promise<import("./workbook-photo-contracts.js").WorkbookPhotoIntakeView>;
|
|
43
|
+
/** Transfer immutable provider provenance; malformed/ambiguous/failed results stay pending. */
|
|
44
|
+
export declare function preserveWorkbookPhotoIdentification(input: {
|
|
45
|
+
ingestion: IngestionService;
|
|
46
|
+
scope: Readonly<IngestionScope>;
|
|
47
|
+
workbooks: WorkbookPhotoService;
|
|
48
|
+
request: LearnerRequest & {
|
|
49
|
+
intakeId: string;
|
|
50
|
+
};
|
|
51
|
+
}): Promise<import("./workbook-photo-contracts.js").WorkbookPhotoIntakeView>;
|
|
52
|
+
/** Existing durable extraction/interpretation dispatcher, followed by preservation. */
|
|
53
|
+
export declare function processWorkbookPhotoAnalysis(input: Parameters<typeof processEducationAnalysis>[0] & {
|
|
54
|
+
scope: Readonly<IngestionScope>;
|
|
55
|
+
workbooks: WorkbookPhotoService;
|
|
56
|
+
request: LearnerRequest & {
|
|
57
|
+
intakeId: string;
|
|
58
|
+
};
|
|
59
|
+
}): Promise<{
|
|
60
|
+
processing: {
|
|
61
|
+
kind: "unclaimed" | "extraction_incomplete" | "interpreted";
|
|
62
|
+
} | {
|
|
63
|
+
kind: "generation_queued";
|
|
64
|
+
revision: number;
|
|
65
|
+
};
|
|
66
|
+
intake: import("./workbook-photo-contracts.js").WorkbookPhotoIntakeView;
|
|
67
|
+
capture: import("./workbook-contracts.js").WorkbookAttemptView | null;
|
|
68
|
+
assessmentRequired: boolean;
|
|
69
|
+
}>;
|
|
70
|
+
//# sourceMappingURL=workbook-photo-ingestion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workbook-photo-ingestion.d.ts","sourceRoot":"","sources":["../src/workbook-photo-ingestion.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,gBAAgB,EAErB,KAAK,YAAY,EAClB,MAAM,sCAAsC,CAAC;AAG9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAM3D,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,6BAA6B,CAAC;AAGrC,eAAO,MAAM,sBAAsB,0DACsB,CAAC;AAsF1D,+FAA+F;AAC/F,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,SAAS,EAAE,oBAAoB,CAAC;IAChC,OAAO,EAAE,cAAc,CAAC;CACzB,GAAG,gBAAgB,EAAE,CA6GrB;AAID,8EAA8E;AAC9E,wBAAgB,iCAAiC,CAAC,KAAK,EAAE;IACvD,SAAS,EAAE,oBAAoB,CAAC;IAChC,OAAO,EAAE,cAAc,CAAC;CACzB,GAAG,OAAO,yCAAyC,EAAE,sBAAsB,CAAC,cAAc,CAAC,CAwB3F;AACD,mGAAmG;AACnG,wBAAsB,0BAA0B,CAAC,KAAK,EAAE;IACtD,SAAS,EAAE,gBAAgB,CAAC;IAC5B,KAAK,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IAChC,SAAS,EAAE,oBAAoB,CAAC;IAChC,OAAO,EAAE,cAAc,CAAC;IACxB,OAAO,EAAE,YAAY,CAAC;CACvB;;;;;;;;;;GAWA;AACD,yFAAyF;AACzF,wBAAsB,0BAA0B,CAAC,KAAK,EAAE;IACtD,SAAS,EAAE,gBAAgB,CAAC;IAC5B,KAAK,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IAChC,SAAS,EAAE,oBAAoB,CAAC;IAChC,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB,4EA2CA;AACD,+FAA+F;AAC/F,wBAAsB,mCAAmC,CAAC,KAAK,EAAE;IAC/D,SAAS,EAAE,gBAAgB,CAAC;IAC5B,KAAK,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IAChC,SAAS,EAAE,oBAAoB,CAAC;IAChC,OAAO,EAAE,cAAc,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CAChD,4EAsFA;AACD,uFAAuF;AACvF,wBAAsB,4BAA4B,CAChD,KAAK,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC,CAAC,CAAC,GAAG;IACtD,KAAK,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IAChC,SAAS,EAAE,oBAAoB,CAAC;IAChC,OAAO,EAAE,cAAc,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CAChD;;;;;;;;;;GA0BF"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { SmrtCollection, SmrtObject } from '@happyvertical/smrt-core';
|
|
2
|
+
/** Durable receipt before any course, enrollment or activity exists. */
|
|
3
|
+
export declare class WorkbookPhotoIntake extends SmrtObject {
|
|
4
|
+
tenantId: string;
|
|
5
|
+
learnerId: string;
|
|
6
|
+
delete(): Promise<void>;
|
|
7
|
+
itemId: string;
|
|
8
|
+
actorUserId: string;
|
|
9
|
+
contentDigest: string;
|
|
10
|
+
save(): Promise<this>;
|
|
11
|
+
constructor(options?: Record<string, unknown>);
|
|
12
|
+
}
|
|
13
|
+
export declare class WorkbookPhotoIntakeCollection extends SmrtCollection<WorkbookPhotoIntake> {
|
|
14
|
+
static readonly _itemClass: typeof WorkbookPhotoIntake;
|
|
15
|
+
}
|
|
16
|
+
/** Sole owner join for original photo intake files. */
|
|
17
|
+
export declare class WorkbookPhotoAsset extends SmrtObject {
|
|
18
|
+
tenantId: string;
|
|
19
|
+
learnerId: string;
|
|
20
|
+
delete(): Promise<void>;
|
|
21
|
+
intakeId: string;
|
|
22
|
+
assetId: string;
|
|
23
|
+
name: string;
|
|
24
|
+
mimeType: string;
|
|
25
|
+
sha256: string;
|
|
26
|
+
position: number;
|
|
27
|
+
constructor(options?: Record<string, unknown>);
|
|
28
|
+
save(): Promise<this>;
|
|
29
|
+
}
|
|
30
|
+
export declare class WorkbookPhotoAssetCollection extends SmrtCollection<WorkbookPhotoAsset> {
|
|
31
|
+
static readonly _itemClass: typeof WorkbookPhotoAsset;
|
|
32
|
+
}
|
|
33
|
+
/** Immutable provider/guardian/capture decision, retaining provenance and retry key. */
|
|
34
|
+
export declare class WorkbookPhotoDecision extends SmrtObject {
|
|
35
|
+
tenantId: string;
|
|
36
|
+
learnerId: string;
|
|
37
|
+
delete(): Promise<void>;
|
|
38
|
+
intakeId: string;
|
|
39
|
+
requestKey: string;
|
|
40
|
+
sequence: number;
|
|
41
|
+
actorUserId: string;
|
|
42
|
+
bodyJson: string;
|
|
43
|
+
constructor(options?: Record<string, unknown>);
|
|
44
|
+
save(): Promise<this>;
|
|
45
|
+
}
|
|
46
|
+
export declare class WorkbookPhotoDecisionCollection extends SmrtCollection<WorkbookPhotoDecision> {
|
|
47
|
+
static readonly _itemClass: typeof WorkbookPhotoDecision;
|
|
48
|
+
}
|
|
49
|
+
/** Versioned contextual metadata; never edits Workbook identity or learning evidence. */
|
|
50
|
+
export declare class WorkbookContextRevision extends SmrtObject {
|
|
51
|
+
tenantId: string;
|
|
52
|
+
learnerId: string;
|
|
53
|
+
delete(): Promise<void>;
|
|
54
|
+
workbookId: string;
|
|
55
|
+
decisionId: string;
|
|
56
|
+
metadataJson: string;
|
|
57
|
+
constructor(options?: Record<string, unknown>);
|
|
58
|
+
save(): Promise<this>;
|
|
59
|
+
}
|
|
60
|
+
export declare class WorkbookContextRevisionCollection extends SmrtCollection<WorkbookContextRevision> {
|
|
61
|
+
static readonly _itemClass: typeof WorkbookContextRevision;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=workbook-photo-models.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workbook-photo-models.d.ts","sourceRoot":"","sources":["../src/workbook-photo-models.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,cAAc,EACd,UAAU,EAEX,MAAM,0BAA0B,CAAC;AAyBlC,wEAAwE;AACxE,qBAMa,mBAAoB,SAAQ,UAAU;IACrC,QAAQ,SAAM;IACiB,SAAS,SAAM;IAC3C,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAGtC,MAAM,SAAM;IACZ,WAAW,SAAM;IACjB,aAAa,SAAM;IACJ,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;gBAIxB,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;CASlD;AACD,qBAAa,6BAA8B,SAAQ,cAAc,CAAC,mBAAmB,CAAC;IACpF,MAAM,CAAC,QAAQ,CAAC,UAAU,6BAAuB;CAClD;AACD,uDAAuD;AACvD,qBAMa,kBAAmB,SAAQ,UAAU;IACpC,QAAQ,SAAM;IACiB,SAAS,SAAM;IAC3C,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAGiB,QAAQ,SAAM;IAChB,OAAO,SAAM;IAClE,IAAI,SAAM;IACV,QAAQ,SAAM;IACd,MAAM,SAAM;IACZ,QAAQ,SAAK;gBACD,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IASlC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CA0BrC;AACD,qBAAa,4BAA6B,SAAQ,cAAc,CAAC,kBAAkB,CAAC;IAClF,MAAM,CAAC,QAAQ,CAAC,UAAU,4BAAsB;CACjD;AACD,wFAAwF;AACxF,qBAMa,qBAAsB,SAAQ,UAAU;IACvC,QAAQ,SAAM;IACiB,SAAS,SAAM;IAC3C,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAGiB,QAAQ,SAAM;IACrE,UAAU,SAAM;IAChB,QAAQ,SAAK;IACb,WAAW,SAAM;IACQ,QAAQ,SAAQ;gBAC7B,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IASlC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAYrC;AACD,qBAAa,+BAAgC,SAAQ,cAAc,CAAC,qBAAqB,CAAC;IACxF,MAAM,CAAC,QAAQ,CAAC,UAAU,+BAAyB;CACpD;AACD,yFAAyF;AACzF,qBAMa,uBAAwB,SAAQ,UAAU;IACzC,QAAQ,SAAM;IACiB,SAAS,SAAM;IAC3C,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAGM,UAAU,SAAM;IACH,UAAU,SAAM;IAChD,YAAY,SAAQ;gBACjC,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IASlC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAoBrC;AACD,qBAAa,iCAAkC,SAAQ,cAAc,CAAC,uBAAuB,CAAC;IAC5F,MAAM,CAAC,QAAQ,CAAC,UAAU,iCAA2B;CACtD"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { DatabaseInterface } from '@happyvertical/sql';
|
|
2
|
+
import type { CatalogAuthorizer } from './catalog-service.js';
|
|
3
|
+
import { type LearnerAuthorizer, type LearnerRequest } from './learner-service.js';
|
|
4
|
+
import type { SubmissionPage, SubmissionServiceOptions } from './submission-service.js';
|
|
5
|
+
import type { WorkbookAssessment, WorkbookAssistance } from './workbook-contracts.js';
|
|
6
|
+
import { type WorkbookPhotoIdentification, type WorkbookPhotoIntakeView, type WorkbookPhotoProposal, type WorkbookPhotoWorkbookView } from './workbook-photo-contracts.js';
|
|
7
|
+
import { WorkbookService } from './workbook-service.js';
|
|
8
|
+
/** Internal bridge capability, intentionally absent from package exports. */
|
|
9
|
+
export declare const preservePhotoProposal: unique symbol;
|
|
10
|
+
type PhotoRequest = LearnerRequest & {
|
|
11
|
+
intakeId: string;
|
|
12
|
+
};
|
|
13
|
+
/** Server-owned intake before assignment. All originals survive ingestion scratch expiry. */
|
|
14
|
+
export declare class WorkbookPhotoService extends WorkbookService {
|
|
15
|
+
private readonly photoOptions;
|
|
16
|
+
constructor(db: DatabaseInterface, authorize: LearnerAuthorizer, authorizeCatalog: CatalogAuthorizer, photoOptions: SubmissionServiceOptions & {
|
|
17
|
+
workbookVocabulary?: WorkbookAssessment['vocabulary'];
|
|
18
|
+
});
|
|
19
|
+
protected createTransactionService(db: DatabaseInterface): this;
|
|
20
|
+
authorizePhotoIntake(request: LearnerRequest): Promise<void>;
|
|
21
|
+
private lockPhoto;
|
|
22
|
+
private receipt;
|
|
23
|
+
private decisions;
|
|
24
|
+
private append;
|
|
25
|
+
retainWorkbookPhotoIntake(request: LearnerRequest & {
|
|
26
|
+
itemId: string;
|
|
27
|
+
pages: readonly SubmissionPage[];
|
|
28
|
+
}): Promise<WorkbookPhotoIntakeView>;
|
|
29
|
+
getWorkbookPhotoIntake(request: PhotoRequest): Promise<WorkbookPhotoIntakeView>;
|
|
30
|
+
/** Exact receipt lookup for processing/retry; inbox pagination grants no authority. */
|
|
31
|
+
getWorkbookPhotoIntakeByItem(request: LearnerRequest & {
|
|
32
|
+
itemId: string;
|
|
33
|
+
}): Promise<WorkbookPhotoIntakeView>;
|
|
34
|
+
listWorkbookPhotoIntakes(request: LearnerRequest, options?: {
|
|
35
|
+
newestFirst?: boolean;
|
|
36
|
+
}): Promise<WorkbookPhotoIntakeView[]>;
|
|
37
|
+
/** Authorized contextual catalog, including books identified from covers alone. */
|
|
38
|
+
listWorkbookPhotoWorkbooks(request: LearnerRequest): Promise<WorkbookPhotoWorkbookView[]>;
|
|
39
|
+
readWorkbookPhotoOriginal(request: PhotoRequest & {
|
|
40
|
+
assetId: string;
|
|
41
|
+
}): Promise<{
|
|
42
|
+
data: Uint8Array;
|
|
43
|
+
mimeType: string;
|
|
44
|
+
}>;
|
|
45
|
+
resolveWorkbookPhotoIntake(request: PhotoRequest & {
|
|
46
|
+
requestKey: string;
|
|
47
|
+
identification: WorkbookPhotoIdentification;
|
|
48
|
+
}): Promise<WorkbookPhotoIntakeView>;
|
|
49
|
+
private resolvePhoto;
|
|
50
|
+
/** Trusted server bridge only: proposal provenance must come from the public ingestion snapshot. */
|
|
51
|
+
[preservePhotoProposal](request: PhotoRequest & {
|
|
52
|
+
requestKey: string;
|
|
53
|
+
proposal: WorkbookPhotoProposal;
|
|
54
|
+
provenance: Record<string, unknown>;
|
|
55
|
+
sourceHashes: string[];
|
|
56
|
+
allowAutomaticResolution?: boolean;
|
|
57
|
+
}): Promise<WorkbookPhotoIntakeView>;
|
|
58
|
+
/** Exact authorized receipt history; filing does not move the stable work unit. */
|
|
59
|
+
getWorkbookPhotoTimeline(request: PhotoRequest & {
|
|
60
|
+
limit?: number;
|
|
61
|
+
cursor?: string;
|
|
62
|
+
revisionId?: string;
|
|
63
|
+
}): Promise<import("./workbook-contracts.js").WorkbookTimeline>;
|
|
64
|
+
captureWorkbookPhotoIntake(request: PhotoRequest & {
|
|
65
|
+
requestKey: string;
|
|
66
|
+
assistance?: WorkbookAssistance;
|
|
67
|
+
previousSubmissionId?: string;
|
|
68
|
+
completedWork?: boolean;
|
|
69
|
+
}): Promise<import("./workbook-contracts.js").WorkbookAttemptView>;
|
|
70
|
+
}
|
|
71
|
+
export {};
|
|
72
|
+
//# sourceMappingURL=workbook-photo-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workbook-photo-service.d.ts","sourceRoot":"","sources":["../src/workbook-photo-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import type { DatabaseInterface } from '@happyvertical/sql';
|
|
2
|
+
import type { CatalogAuthorizer } from './catalog-service.js';
|
|
3
|
+
import { type LearnerAuthorizer, type LearnerRequest } from './learner-service.js';
|
|
4
|
+
import { type SubmissionPage, SubmissionService, type SubmissionServiceOptions } from './submission-service.js';
|
|
5
|
+
import { type WorkbookActivityView, type WorkbookAssessment, type WorkbookAssistance, type WorkbookAttemptView, type WorkbookConceptSummary, type WorkbookPreservationState, type WorkbookRevisionView, type WorkbookTimeline } from './workbook-contracts.js';
|
|
6
|
+
type ActivityRequest = LearnerRequest & {
|
|
7
|
+
activityId: string;
|
|
8
|
+
};
|
|
9
|
+
type AttemptRequest = ActivityRequest & {
|
|
10
|
+
submissionId: string;
|
|
11
|
+
};
|
|
12
|
+
/** Actor-bound durable physical workbook workflow. No generated write surface. */
|
|
13
|
+
export declare class WorkbookService extends SubmissionService {
|
|
14
|
+
private readonly workbookOptions;
|
|
15
|
+
constructor(db: DatabaseInterface, authorize: LearnerAuthorizer, authorizeCatalog: CatalogAuthorizer, workbookOptions: SubmissionServiceOptions & {
|
|
16
|
+
workbookVocabulary?: WorkbookAssessment['vocabulary'];
|
|
17
|
+
});
|
|
18
|
+
protected createTransactionService(db: DatabaseInterface): this;
|
|
19
|
+
private serialize;
|
|
20
|
+
private activity;
|
|
21
|
+
private filingHead;
|
|
22
|
+
private activityView;
|
|
23
|
+
getWorkbookActivity(request: ActivityRequest): Promise<WorkbookActivityView>;
|
|
24
|
+
/** Receipt-bound technical routing only; the caller already owns the surrounding mutation. */
|
|
25
|
+
protected resolveUnfiledWorkbookActivityInScope(request: LearnerRequest & {
|
|
26
|
+
intakeId: string;
|
|
27
|
+
}, action?: 'education.learner.submit' | 'education.learner.plan'): Promise<WorkbookActivityView>;
|
|
28
|
+
/** Append a filing association without modifying capture policy or learning history. */
|
|
29
|
+
fileWorkbookWork(request: ActivityRequest & {
|
|
30
|
+
workbookId?: string;
|
|
31
|
+
newWorkbook?: {
|
|
32
|
+
title: string;
|
|
33
|
+
edition?: string;
|
|
34
|
+
workbookKey?: string;
|
|
35
|
+
};
|
|
36
|
+
canonicalActivityId?: string;
|
|
37
|
+
expectedRevisionId: string | null;
|
|
38
|
+
requestKey: string;
|
|
39
|
+
reason: string;
|
|
40
|
+
}): Promise<WorkbookActivityView>;
|
|
41
|
+
/** Explicit keys distinguish editions, repeated printed labels and page sides. */
|
|
42
|
+
resolveWorkbookActivity(request: LearnerRequest & {
|
|
43
|
+
workbookKey: string;
|
|
44
|
+
title: string;
|
|
45
|
+
edition?: string;
|
|
46
|
+
pageKey: string;
|
|
47
|
+
pageLabel: string;
|
|
48
|
+
}): Promise<WorkbookActivityView>;
|
|
49
|
+
/** Owning intake extension: caller validates evidence before upload-authorized creation. */
|
|
50
|
+
protected resolveWorkbookActivityInScope(request: LearnerRequest & {
|
|
51
|
+
workbookKey: string;
|
|
52
|
+
title: string;
|
|
53
|
+
edition?: string;
|
|
54
|
+
pageKey: string;
|
|
55
|
+
pageLabel: string;
|
|
56
|
+
}, action: 'education.learner.plan' | 'education.learner.submit'): Promise<WorkbookActivityView>;
|
|
57
|
+
listWorkbookActivities(request: LearnerRequest): Promise<WorkbookActivityView[]>;
|
|
58
|
+
setWorkbookFeedbackPolicy(request: ActivityRequest & {
|
|
59
|
+
expectedPolicyVersion: number;
|
|
60
|
+
reviewRequired: boolean;
|
|
61
|
+
}): Promise<WorkbookActivityView>;
|
|
62
|
+
private attempt;
|
|
63
|
+
private attemptView;
|
|
64
|
+
captureWorkbookWork(request: ActivityRequest & {
|
|
65
|
+
requestKey: string;
|
|
66
|
+
pages: readonly SubmissionPage[];
|
|
67
|
+
notes?: string;
|
|
68
|
+
previousSubmissionId?: string;
|
|
69
|
+
assistance?: WorkbookAssistance;
|
|
70
|
+
intakeItemId?: string;
|
|
71
|
+
}): Promise<WorkbookAttemptView>;
|
|
72
|
+
/** Trusted host lookup, preserving exact enrollment and actor authorization. */
|
|
73
|
+
getWorkbookAttemptBySubmission(request: LearnerRequest & {
|
|
74
|
+
enrollmentId: string;
|
|
75
|
+
submissionId: string;
|
|
76
|
+
}): Promise<WorkbookAttemptView | null>;
|
|
77
|
+
/** Authorized content-free preservation status; never exposes withheld marks. */
|
|
78
|
+
getWorkbookPreservationState(request: AttemptRequest): Promise<WorkbookPreservationState>;
|
|
79
|
+
/** Public data-only digest map used to preserve ingestion source anchors. */
|
|
80
|
+
getWorkbookSourceAnchors(request: AttemptRequest): Promise<{
|
|
81
|
+
assetId: string;
|
|
82
|
+
sha256: string;
|
|
83
|
+
pageCount: number;
|
|
84
|
+
}[]>;
|
|
85
|
+
/** Stable IDs only: historical prompts may themselves contain learner answers. */
|
|
86
|
+
getWorkbookQuestionIdentity(request: AttemptRequest): Promise<{
|
|
87
|
+
id: string;
|
|
88
|
+
}[]>;
|
|
89
|
+
/** Canonical transcriptions only for this exact capture, never its predecessor.
|
|
90
|
+
* A correction without its own revision receives IDs only. Both paths retain
|
|
91
|
+
* the same source/revision and full ancestry visibility checks as identity. */
|
|
92
|
+
getWorkbookQuestionContext(request: AttemptRequest & {
|
|
93
|
+
analysisRevision?: number;
|
|
94
|
+
}): Promise<{
|
|
95
|
+
kind: 'same_capture';
|
|
96
|
+
questions: {
|
|
97
|
+
id: string;
|
|
98
|
+
prompt: string;
|
|
99
|
+
}[];
|
|
100
|
+
} | {
|
|
101
|
+
kind: 'identity_only';
|
|
102
|
+
questions: {
|
|
103
|
+
id: string;
|
|
104
|
+
}[];
|
|
105
|
+
}>;
|
|
106
|
+
private revisionPayloadVisible;
|
|
107
|
+
private revisions;
|
|
108
|
+
private identityRevision;
|
|
109
|
+
/** Call after actor/resource authorization, only for own-learner projections.
|
|
110
|
+
* Semantic IDs are source content. A descendant release cannot publish a
|
|
111
|
+
* hidden ancestor; exact published ID sets keep old public snapshots usable. */
|
|
112
|
+
private questionIdentityVisible;
|
|
113
|
+
private validateAssessment;
|
|
114
|
+
private appendRevision;
|
|
115
|
+
recordWorkbookAnalysis(request: AttemptRequest & {
|
|
116
|
+
requestKey: string;
|
|
117
|
+
assessment: WorkbookAssessment;
|
|
118
|
+
}): Promise<WorkbookRevisionView>;
|
|
119
|
+
reviewWorkbookAssessment(request: AttemptRequest & {
|
|
120
|
+
revisionId: string;
|
|
121
|
+
expectedHeadId: string | null;
|
|
122
|
+
requestKey: string;
|
|
123
|
+
assessment?: WorkbookAssessment;
|
|
124
|
+
decisionReason?: string;
|
|
125
|
+
}): Promise<WorkbookRevisionView>;
|
|
126
|
+
releaseWorkbookFeedback(request: AttemptRequest & {
|
|
127
|
+
revisionId: string;
|
|
128
|
+
requestKey: string;
|
|
129
|
+
expectedHeadId: string | null;
|
|
130
|
+
}): Promise<{
|
|
131
|
+
id: string;
|
|
132
|
+
revisionId: string;
|
|
133
|
+
createdAt: Date;
|
|
134
|
+
actorUserId: string;
|
|
135
|
+
}>;
|
|
136
|
+
/** Record an authenticated own-learner render acknowledgment, never 'read'. */
|
|
137
|
+
acknowledgeWorkbookFeedbackDelivery(request: AttemptRequest & {
|
|
138
|
+
revisionId: string;
|
|
139
|
+
requestKey: string;
|
|
140
|
+
}): Promise<{
|
|
141
|
+
id: string;
|
|
142
|
+
revisionId: string;
|
|
143
|
+
actorUserId: string;
|
|
144
|
+
createdAt: Date;
|
|
145
|
+
}>;
|
|
146
|
+
getWorkbookTimeline(request: ActivityRequest & {
|
|
147
|
+
cursor?: string;
|
|
148
|
+
limit?: number;
|
|
149
|
+
revisionId?: string;
|
|
150
|
+
}): Promise<WorkbookTimeline>;
|
|
151
|
+
/** Descriptive guardian projection; corrections stay within one practice episode. */
|
|
152
|
+
getConceptEvidenceSummary(request: ActivityRequest): Promise<{
|
|
153
|
+
algorithmVersion: 'workbook-descriptive-v1';
|
|
154
|
+
concepts: WorkbookConceptSummary[];
|
|
155
|
+
}>;
|
|
156
|
+
}
|
|
157
|
+
export {};
|
|
158
|
+
//# sourceMappingURL=workbook-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workbook-service.d.ts","sourceRoot":"","sources":["../src/workbook-service.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@happyvertical/smrt-education",
|
|
3
|
-
"version": "0.57.
|
|
3
|
+
"version": "0.57.34",
|
|
4
4
|
"smrtJsdoc": "strict",
|
|
5
5
|
"description": "Tenant-aware learning catalog models and authorized catalog access for SMRT",
|
|
6
6
|
"type": "module",
|
|
@@ -25,18 +25,18 @@
|
|
|
25
25
|
}
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@happyvertical/smrt-assets": "0.57.
|
|
29
|
-
"@happyvertical/smrt-core": "0.57.
|
|
30
|
-
"@happyvertical/smrt-profiles": "0.57.
|
|
31
|
-
"@happyvertical/smrt-tenancy": "0.57.
|
|
32
|
-
"@happyvertical/smrt-users": "0.57.
|
|
28
|
+
"@happyvertical/smrt-assets": "0.57.34",
|
|
29
|
+
"@happyvertical/smrt-core": "0.57.34",
|
|
30
|
+
"@happyvertical/smrt-profiles": "0.57.34",
|
|
31
|
+
"@happyvertical/smrt-tenancy": "0.57.34",
|
|
32
|
+
"@happyvertical/smrt-users": "0.57.34",
|
|
33
33
|
"@happyvertical/files": "^0.108.0",
|
|
34
34
|
"@happyvertical/sql": "^0.108.0",
|
|
35
35
|
"pdf-lib": "1.17.1",
|
|
36
|
-
"@happyvertical/smrt-ingestion": "0.57.
|
|
36
|
+
"@happyvertical/smrt-ingestion": "0.57.34"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@happyvertical/smrt-vitest": "0.57.
|
|
39
|
+
"@happyvertical/smrt-vitest": "0.57.34",
|
|
40
40
|
"@types/node": "24.13.6",
|
|
41
41
|
"typescript": "6.0.3",
|
|
42
42
|
"vite": "8.1.6",
|