jtdearmon commited on
Commit
6b1b673
·
verified ·
1 Parent(s): 138705b

Deploy SAT & ACT Learning Lab 1.7.0

Browse files
Files changed (7) hide show
  1. DEPLOYMENT_NOTES.md +118 -18
  2. README.md +103 -18
  3. THIRD_PARTY_NOTICES.md +1210 -0
  4. app.py +0 -0
  5. release_manifest.json +163 -47
  6. requirements.txt +644 -18
  7. runtime.txt +1 -2
DEPLOYMENT_NOTES.md CHANGED
@@ -1,4 +1,4 @@
1
- # Deployment notes — SAT & ACT Learning Lab 1.4.2
2
 
3
  Target private Space: `DearmonAnalytics/SAT_ACT_Learning_Lab`
4
 
@@ -6,7 +6,7 @@ Turso database: `dearmon-sat-act-learning-lab`
6
 
7
  Schema namespace: `sat_act_learning_lab_v1`
8
 
9
- Encrypted-source secret: `SAT_ACT_APP_FERNET_V1_4_2_DEA36E04D801_0690259EE725`
10
 
11
  ## Runtime contract
12
 
@@ -41,6 +41,16 @@ Encrypted-source secret: `SAT_ACT_APP_FERNET_V1_4_2_DEA36E04D801_0690259EE725`
41
  capped at four hours; sign-out or restart still erases it immediately.
42
  - Instructor-wide access requires a strong secret with no fallback.
43
  - Core scored questions and answer keys are deterministic and model-independent.
 
 
 
 
 
 
 
 
 
 
44
  - The Printable Exam Builder requires an active demo or signed-in learner so
45
  every generated file is vault-owned, then produces separate matched
46
  student/key PDFs from selected or learner-missed topics. Optional AI overflow
@@ -48,7 +58,7 @@ Encrypted-source secret: `SAT_ACT_APP_FERNET_V1_4_2_DEA36E04D801_0690259EE725`
48
  topic batches and eight items per build,
49
  independently reviewed, print-only, and locked until the active learner has
50
  completed every built-in question type for that exact topic. It never enters
51
- mastery, readiness, routing, diagnostics, or simulation scoring.
52
  - Break It Apart is a deterministic, provider-independent, post-miss reasoning
53
  DAG. It is available after every incorrect practice grade and for every
54
  missed objective item reviewed after a completed simulation—never before
@@ -75,12 +85,17 @@ Encrypted-source secret: `SAT_ACT_APP_FERNET_V1_4_2_DEA36E04D801_0690259EE725`
75
  browser state, public variables, logs, receipts, or health output.
76
  - `/healthz` reports the release/source digest and boolean configuration status
77
  without returning credentials, learner identifiers, or answers.
 
 
 
 
 
78
 
79
  ## Configuration
80
 
81
  Core secrets are `OPENAI_API_KEY`, `TURSO_DATABASE_URL`, `TURSO_AUTH_TOKEN`,
82
  `LEARNER_ID_HMAC_SECRET`, `INSTRUCTOR_EXPORT_SECRET`, and
83
- `SAT_ACT_APP_FERNET_V1_4_2_DEA36E04D801_0690259EE725`. Live avatar video additionally uses optional
84
  `SIMLI_API_KEY`.
85
 
86
  Email recovery uses `AUTH_RECOVERY_EMAIL_ENABLED`, `AUTH_SMTP_HOST`,
@@ -97,18 +112,27 @@ Release runtime defaults include `ACCOUNT_AUTH_ENABLED=1`,
97
  `ASK_PROFESSOR_SIMLI_DEFAULT=0`. Printable supplemental generation defaults to
98
  `OPENAI_OVERFLOW_MODEL=gpt-5-mini` and
99
  `OPENAI_OVERFLOW_REVIEW_MODEL=gpt-5-mini`; Learning Diagnostic synthesis
100
- defaults to `OPENAI_DIAGNOSTIC_MODEL=gpt-5-mini`. Face IDs and the pinned Simli client module are
101
- listed in `environment.example` used to prepare this deployment.
 
 
102
 
103
- ## v1.4.2 upgrade gate
 
 
 
 
 
 
 
104
 
105
- Finish or explicitly abandon every active timed simulation from an earlier
106
- release before installing v1.4.2. Checkpoints are intentionally bound to
107
- app/source/form versions and cannot be resumed across this release. Back up
108
- Turso, preserve `LEARNER_ID_HMAC_SECRET`, and retain prior Fernet secrets and
109
- rollback commits needed through acceptance testing.
110
 
111
- Acceptance testing for v1.4.2 must verify the exact Dearmon Analytics paper,
112
  ink, blue, teal, and coral palette; compact 1,240-pixel workspace; bundled
113
  same-origin Inter, Source Serif 4, and Geist Mono; and one crisp DA gradient rule
114
  across the compact chooser and three shadow-free horizontal Practice rails.
@@ -128,6 +152,33 @@ word surfaces must remain.
128
  Near-white mastered topic tiles intentionally retain dark text for WCAG
129
  contrast.
130
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
131
  Acceptance must also verify that post-explanation follow-ups are hidden before
132
  grading and limited to the owning attempt; both diagnostic coverage bars use
133
  distinct topics; the report gate requires strict majority coverage in Reading
@@ -136,22 +187,29 @@ signals; invalid/provider-failed reports do not unlock anything; and completed
136
  reports can be pulled and used to open graduated Guided Examples and separate
137
  Targeted Practice.
138
 
139
- Progress & Reports must render exactly two mastery wheels for SAT and ACT,
140
  retain every curriculum topic including unassessed topics, and keep attempt
141
  depth independent from accuracy color. Verify that one correct attempt has a
142
  shallower evidence ring than four correct attempts, untouched topics never show
143
  0%, ACT Reading/Language combines English and Reading, exact-data tables remain
144
  usable without color or hover, and signed-out/revoked sessions expose no learner
145
- aggregates. Practice and completed-simulation evidence may count; diagnostic
146
  and review attempts must not inflate the dashboard.
147
 
 
 
 
 
 
 
 
148
  The release builder continues to generate the versioned Fernet key
149
  automatically, store it under `release/private/`, validate it, and reuse it for
150
  safe retries without prompting the deployer operator.
151
 
152
  ## Key lifecycle and rollback
153
 
154
- The current loader reads only `SAT_ACT_APP_FERNET_V1_4_2_DEA36E04D801_0690259EE725`. A later release must generate a
155
  new versioned, fingerprinted secret name. The deployer adds that secret before
156
  the repository commit and retains earlier keys. Roll back by reverting the
157
  Space repository to the prior commit recorded in `deployment_receipt.json`.
@@ -161,5 +219,47 @@ Do not delete an earlier Fernet key until its rollback revision is retired.
161
 
162
  This independent practice lab is not affiliated with or endorsed by College
163
  Board or ACT, Inc. SAT and ACT are their respective owners' trademarks. The
164
- lab contains original practice material only; diagnostic results are not
165
- official scores.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Deployment notes — SAT & ACT Learning Lab 1.7.0
2
 
3
  Target private Space: `DearmonAnalytics/SAT_ACT_Learning_Lab`
4
 
 
6
 
7
  Schema namespace: `sat_act_learning_lab_v1`
8
 
9
+ Encrypted-source secret: `SAT_ACT_APP_FERNET_V1_7_0_5047BDC914D0_431E91CA28D4`
10
 
11
  ## Runtime contract
12
 
 
41
  capped at four hours; sign-out or restart still erases it immediately.
42
  - Instructor-wide access requires a strong secret with no fallback.
43
  - Core scored questions and answer keys are deterministic and model-independent.
44
+ - Every shipped authored question resolver has a versioned eight-level skill
45
+ profile with complete ancestor/prerequisite closure and an explicit scoring
46
+ role. The immutable release gate covers exactly 1,983 profiles and fails
47
+ closed on an unknown node, missing level, incomplete closure, cycle, or
48
+ scoring-role conflict.
49
+ - Raw objective results remain authoritative. A deterministic estimator reports
50
+ a separate, explicitly unofficial SAT/ACT practice-score point, plausible
51
+ interval, evidence sufficiency, and confidence. Optional ACT Science is
52
+ separate from the English/Math/Reading Composite; ACT Writing remains human
53
+ reviewed. Pretest/EFT and AI print-only items cannot enter the estimate.
54
  - The Printable Exam Builder requires an active demo or signed-in learner so
55
  every generated file is vault-owned, then produces separate matched
56
  student/key PDFs from selected or learner-missed topics. Optional AI overflow
 
58
  topic batches and eight items per build,
59
  independently reviewed, print-only, and locked until the active learner has
60
  completed every built-in question type for that exact topic. It never enters
61
+ skill evidence, mastery, readiness, routing, diagnostics, or score estimates.
62
  - Break It Apart is a deterministic, provider-independent, post-miss reasoning
63
  DAG. It is available after every incorrect practice grade and for every
64
  missed objective item reviewed after a completed simulation—never before
 
85
  browser state, public variables, logs, receipts, or health output.
86
  - `/healthz` reports the release/source digest and boolean configuration status
87
  without returning credentials, learner identifiers, or answers.
88
+ - Tracking schema 1.3.0 is additive: versioned hierarchy nodes/edges, question
89
+ profiles/members, and immutable instance bindings join to existing attempts
90
+ and learning signals while account, mastery, recovery, diagnostic, and exam
91
+ rows remain intact. A missing signal remains no evidence. Historical attempts
92
+ without trusted profiles are not assigned invented fine-grained evidence.
93
 
94
  ## Configuration
95
 
96
  Core secrets are `OPENAI_API_KEY`, `TURSO_DATABASE_URL`, `TURSO_AUTH_TOKEN`,
97
  `LEARNER_ID_HMAC_SECRET`, `INSTRUCTOR_EXPORT_SECRET`, and
98
+ `SAT_ACT_APP_FERNET_V1_7_0_5047BDC914D0_431E91CA28D4`. Live avatar video additionally uses optional
99
  `SIMLI_API_KEY`.
100
 
101
  Email recovery uses `AUTH_RECOVERY_EMAIL_ENABLED`, `AUTH_SMTP_HOST`,
 
112
  `ASK_PROFESSOR_SIMLI_DEFAULT=0`. Printable supplemental generation defaults to
113
  `OPENAI_OVERFLOW_MODEL=gpt-5-mini` and
114
  `OPENAI_OVERFLOW_REVIEW_MODEL=gpt-5-mini`; Learning Diagnostic synthesis
115
+ defaults to `OPENAI_DIAGNOSTIC_MODEL=gpt-5-mini`. Face IDs, the same-origin
116
+ packaged Simli client route, and transport settings are listed in
117
+ `environment.example` used to prepare this deployment. Remote avatar-client
118
+ module overrides are intentionally rejected.
119
 
120
+ Version 1.7.0 uses immutable item/timing/scoring snapshots and explicit recovery
121
+ compatibility contracts. Resume only a saved contract that is explicitly supported;
122
+ legacy checkpoints follow the tested compatibility allowlist. Incompatible work
123
+ stays blocked and requires an approved transition or learner choice, never silent
124
+ regeneration/abandonment. Back up only inside the authorized hosting boundary,
125
+ preserve identity/source keys, and retain current audit/tombstones/holds/revocations.
126
+ Rollback requires compatible data and a new reviewed release manifest; it cannot
127
+ restore expired/revoked access or overwrite legitimate new learner work.
128
 
129
+ The owner kit ships no decryption key or production data. Its first local build
130
+ creates the matching source key/payload. Deployment defaults to local dry-run;
131
+ only explicit --execute plus DEPLOY opens remote changes. Python 3.12.13 is the
132
+ validated application patch; the Python 3.12 provider family alone does not prove
133
+ patch availability. Actual startup fails if the required patch is unavailable.
134
 
135
+ Acceptance testing for v1.7.0 must verify the exact Dearmon Analytics paper,
136
  ink, blue, teal, and coral palette; compact 1,240-pixel workspace; bundled
137
  same-origin Inter, Source Serif 4, and Geist Mono; and one crisp DA gradient rule
138
  across the compact chooser and three shadow-free horizontal Practice rails.
 
152
  Near-white mastered topic tiles intentionally retain dark text for WCAG
153
  contrast.
154
 
155
+ Live-avatar acceptance must verify that `/_simli/client.mjs` returns JavaScript
156
+ with `X-Content-Type-Options: nosniff`, contains no API key, and starts without
157
+ requesting `esm.sh`. A forced video-start failure must leave text tutoring and
158
+ spoken replies usable without displaying a raw module-loader exception. The
159
+ deployed package must retain `THIRD_PARTY_NOTICES.md` and its manifest hash.
160
+
161
+ Skill/scoring acceptance must enumerate exactly 1,983 stable authored profiles:
162
+ 1,832 ordinary deterministic template profiles (including 1,780 objective and
163
+ 52 ACT Writing essay families), 145 immutable ACT passage-bank items, and 6
164
+ dedicated order-of-operations remediation templates. Every profile must resolve
165
+ all eight levels and its full closure. The 1,925 potentially objective-score-
166
+ eligible profiles must be distinguishable from the essay and other unscored
167
+ roles. Verify that SAT pretest and ACT EFT questions do not affect raw scored
168
+ counts or estimates; ACT Science does not affect the Composite; ACT Writing is
169
+ returned for human review; and AI supplemental PDF items cannot enter attempts,
170
+ hierarchy evidence, or scoring. Score output must keep raw counts separate, set
171
+ `official_score=false`, expose interval/evidence/confidence fields, and label
172
+ partial or insufficient data. A completed session must retain the nested
173
+ `estimated_scores` object in `result_json` while its separate `raw_score` column
174
+ continues to mean raw accuracy; scoped exports must preserve the disclosure
175
+ without creating an official-score column.
176
+
177
+ Schema acceptance must upgrade an earlier database additively to tracking 1.3.0,
178
+ preserve legacy rows, write one idempotent profile/skill-evidence set with its
179
+ owning attempt, reject unknown hierarchy IDs, and omit invented skill evidence
180
+ for pre-profile historical attempts.
181
+
182
  Acceptance must also verify that post-explanation follow-ups are hidden before
183
  grading and limited to the owning attempt; both diagnostic coverage bars use
184
  distinct topics; the report gate requires strict majority coverage in Reading
 
187
  reports can be pulled and used to open graduated Guided Examples and separate
188
  Targeted Practice.
189
 
190
+ Progress & Reports must render three mastery wheels for SAT and ACT,
191
  retain every curriculum topic including unassessed topics, and keep attempt
192
  depth independent from accuracy color. Verify that one correct attempt has a
193
  shallower evidence ring than four correct attempts, untouched topics never show
194
  0%, ACT Reading/Language combines English and Reading, exact-data tables remain
195
  usable without color or hover, and signed-out/revoked sessions expose no learner
196
+ aggregates. Practice, completed-simulation and completed-adaptive evidence may count; diagnostic
197
  and review attempts must not inflate the dashboard.
198
 
199
+ Verify that the third wheel and the Skill Taxonomy Graph below the topic graph
200
+ use cumulative correct/attempted tagged questions. Per-entry score-loss details
201
+ must include format-specific blind guessing (25% for four-choice questions,
202
+ no assumed credit for typed answers), while observed accuracy remains raw.
203
+ The complete catalog download must retain all taxonomy entries, including
204
+ unavailable estimates, and state that overlapping losses must not be added.
205
+
206
  The release builder continues to generate the versioned Fernet key
207
  automatically, store it under `release/private/`, validate it, and reuse it for
208
  safe retries without prompting the deployer operator.
209
 
210
  ## Key lifecycle and rollback
211
 
212
+ The current loader reads only `SAT_ACT_APP_FERNET_V1_7_0_5047BDC914D0_431E91CA28D4`. A later release must generate a
213
  new versioned, fingerprinted secret name. The deployer adds that secret before
214
  the repository commit and retains earlier keys. Roll back by reverting the
215
  Space repository to the prior commit recorded in `deployment_receipt.json`.
 
219
 
220
  This independent practice lab is not affiliated with or endorsed by College
221
  Board or ACT, Inc. SAT and ACT are their respective owners' trademarks. The
222
+ lab contains original practice material only; raw diagnostics and separate
223
+ practice-score estimates are not official scores.
224
+
225
+
226
+ ## Adaptive Test and Normal Test
227
+
228
+ Adaptive Test generates a 10-, 20-, or 30-question SAT/ACT assessment with
229
+ question-by-question selection and difficulty updates. Evidence-adjusted content
230
+ weakness is combined with the largest single applicable modeled score
231
+ opportunity; generic process nodes and overlapping gain sums are excluded.
232
+ Calibration probes cover selected sections when history is sparse. The full
233
+ answer review and study priorities appear at completion.
234
+
235
+ Normal Test · Exam Simulation preserves the standard blueprint, timing, optional
236
+ ACT sections and SAT module routing. Saved weakness priorities do not alter its
237
+ assembly. Adaptive samples have a distinct tracking mode and cannot supply a
238
+ normal scaled score. Completed adaptive attempts do count toward raw cumulative
239
+ mastery charts and subsequent adaptive selection.
240
+
241
+ Acceptance must verify ownership/revocation, stale double-submit rejection, no
242
+ feedback before completion, completion-only attempt/mastery persistence with separate encrypted unfinished-test checkpoints, retry without duplicate
243
+ attempts, unchanged normal-test assembly, and explicit exclusion of adaptive
244
+ rows from ordinary scale-score estimates. Authenticated unfinished adaptive state now has encrypted same-version recovery
245
+ checkpoints. Verify the saved checkpoint boundary, stale revision rejection and
246
+ remote durability; unsaved browser input is not recovered. The normal-exam
247
+ recovery path retains its existing version/owner checks.
248
+
249
+ ## Diagnostic prerequisite and database upgrade
250
+
251
+ The diagnostic must be fully completed and saved before adaptive testing unlocks for the same learner and exam. Partial responses, older practice or demo sample history cannot unlock it. Normal testing remains available independently. The latest completed diagnostic seeds adaptive priorities alongside eligible practice history, with its actual item-level guessing adjustment preserved.
252
+
253
+ Tracking schema 1.5.0 retains additive checkpoint storage and completed learner history.
254
+ Run repeat-safe migrations and an authorized host-side backup before deployment.
255
+ Current immutable recovery contracts preserve compatible work across releases;
256
+ unsupported historical contracts remain blocked for an explicit transition.
257
+ Keep security decision stores and reviewer revocations independent of database rollback.
258
+
259
+ ## Institutional controls and OMES readiness
260
+
261
+ The institutional profile blocks unapproved student processing and external AI/Simli services. It disables public signup, demos and legacy PIN entry and implements OIDC code/PKCE, explicit MFA assertion checks, provisioned issuer/subject identity, individual staff roles/class scopes and server-side ownership guards. Recovery email requires verified TLS. Accessible chart tables, keyboard improvements and owned diagnostic exports are included; framework analytics remains disabled.
262
+
263
+ Read the source package's `docs/OMES_PLATFORM_READINESS.md`, `docs/INSTITUTIONAL_IDENTITY.md`, `docs/SECURITY_IMPLEMENTATION.md` and `docs/ASSESSMENT_RECOVERY.md`. Use `deployment/institutional/README.md` for a new approved container deployment. The institutional HF updater only updates a preprovisioned approved target with protected roster and persistent storage. Code/configuration does not establish State-approved MFA, completed human accessibility/ACR acceptance, educator signoff on standards alignment, actual U.S. hosting/encryption/backup evidence, signed IT terms or supplier/AI authorization. Run the redacted preflight and obtain the actual applicable external records before covered performance.
264
+
265
+ Tracking schema is 1.5.0. Authenticated diagnostic/adaptive checkpoints now survive supported same-version restarts; recovery validates the learner, exact release/source compatibility and checkpoint revision. Unsaved browser input is outside that boundary. Production acceptance must separately prove remote durability, restored keys/database and provider backups. Consumer accounts remain available in consumer mode; institutional use requires its own approved OIDC roster and dedicated deployment/database.
README.md CHANGED
@@ -14,9 +14,10 @@ short_description: Dynamic SAT/ACT practice, mastery, and reasoning graphs
14
 
15
  # Dearmon Analytics SAT & ACT Learning Lab
16
 
17
- Release `1.4.2` provides original dynamic practice for current SAT and
18
- ACT skill blueprints, a four-level topic graph, individual mastery tracking,
19
- targeted practice, and test-like diagnostic sessions. It adds username/password
 
20
  accounts, secure recovery, an isolated one-click demo, and the embedded teaching
21
  avatar layer used by the Dearmon Analytics Business Calculus platform. Release
22
  1.2.0 introduced deterministic post-miss **Break It Apart** attribute graphs.
@@ -24,8 +25,8 @@ Signed-in students can also download their complete personalized Topic Graph as
24
  a branded PNG, printable PDF, accessible hierarchy-and-concepts CSV, and
25
  verification manifest; demo sessions remain nonexportable.
26
 
27
- Release 1.4.2 uses the exact Dearmon Analytics paper, ink, blue, teal, and coral
28
- system in a compact 1,240-pixel workspace. Bundled Inter, Source Serif 4, and
29
  Geist Mono fonts are served from same-origin routes. The compact test chooser
30
  and closely stacked Section → Domain → Narrow Topic rails use one restrained DA
31
  gradient rule, flat accessible controls, and shadow-free surfaces. Practice
@@ -44,7 +45,35 @@ printable exam/answer-key PDFs so raw LaTeX is never the learner-facing
44
  fallback. The collapsed item-specific Concepts Needed swim lane, complete
45
  analogous worked examples, separate hints, and mastery whitening remain.
46
 
47
- Release 1.4.2 retains one OpenAI-assisted follow-up beneath each graded
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
  explanation and a signed-in cross-question Learning Diagnostic. The diagnostic
49
  unlocks only after strict majority coverage of both Reading and Math for the
50
  same exam. It sends OpenAI only allowlisted aggregate performance evidence—not
@@ -54,7 +83,7 @@ retained report unlocks deterministic Guided Examples from basic to complex and
54
  specific Targeted Practice; those workspaces remain disabled before the gate
55
  and report are complete.
56
 
57
- Progress & Reports includes two responsive hierarchical mastery wheels. SAT
58
  shows Reading and Writing plus Math; ACT combines English and Reading as
59
  Reading/Language and shows Math separately. Domain and narrow-topic angles stay
60
  fixed to the curriculum, radial depth shows scored attempts toward four, and
@@ -62,15 +91,24 @@ color independently shows raw accuracy. Untouched topics say Unassessed rather
62
  than 0%. Exact native tables provide the same aggregate data for keyboard,
63
  touch, print, and assistive-technology access.
64
 
 
 
 
 
 
 
 
65
  The Printable Exam Builder requires an active demo or signed-in learner so
66
  every generated file has a cleanup owner. It creates a clean Dearmon
67
  Analytics-branded student PDF and a separate answer-key PDF from selected or
68
  previously missed topics.
69
- Both carry the same random form code. Core scored questions and their answer
70
- keys are deterministic. After the active learner has completed every built-in
 
71
  question type for an exact topic, explicit opt-in can create separately labeled,
72
  independently reviewed AI supplemental items for printing only. They never
73
- decide correctness or alter mastery, readiness, routing, or simulation scores.
 
74
 
75
  After every incorrectly graded practice question, and for every missed
76
  objective item reviewed after a completed simulation, Break It Apart constructs
@@ -88,7 +126,7 @@ attribute-level mastery or retention records.
88
  This private Space uses the separate Turso database
89
  `dearmon-sat-act-learning-lab` and schema namespace
90
  `sat_act_learning_lab_v1`. Its encrypted application uses the versioned Space
91
- secret `SAT_ACT_APP_FERNET_V1_4_2_DEA36E04D801_0690259EE725`.
92
 
93
  Required Space secrets are `OPENAI_API_KEY`, `TURSO_DATABASE_URL`,
94
  `TURSO_AUTH_TOKEN`, `LEARNER_ID_HMAC_SECRET`, `INSTRUCTOR_EXPORT_SECRET`, and
@@ -104,6 +142,13 @@ source of real-world claims. The Simli key remains server-side and must never
104
  appear in HTML, browser state, logs, public variables, or `/healthz`. Text
105
  tutoring remains available when Simli is absent or unavailable.
106
 
 
 
 
 
 
 
 
107
  Username passwords are stored as independently salted scrypt records. Account
108
  lockouts persist in the database, password changes revoke earlier sessions,
109
  and verified legacy name/class/PIN profiles can be converted without moving
@@ -130,13 +175,20 @@ controls, and retention policies.
130
 
131
  ## Upgrade note
132
 
133
- Before replacing any earlier release with v1.4.2, every active timed simulation
134
- must be finished or explicitly abandoned. Saved forms are bound to the app
135
- version and encrypted-source fingerprint, so v1.4.2 intentionally rejects older
136
- checkpoints. Preserve `LEARNER_ID_HMAC_SECRET` and retain every prior versioned
137
- Fernet secret and rollback commit needed through acceptance testing. The build
138
- still generates its new Fernet key automatically, stores it under
139
- `release/private/`, and reuses the validated key without prompting.
 
 
 
 
 
 
 
140
 
141
  ## Independent practice-content notice
142
 
@@ -145,3 +197,36 @@ with, endorsed by, or sponsored by College Board or ACT, Inc. SAT is a
145
  trademark of College Board; ACT is a trademark of ACT, Inc. All practice
146
  questions, passages, data, explanations, and figures in this lab are original
147
  content. Practice results are diagnostic and are not official scores.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
 
15
  # Dearmon Analytics SAT & ACT Learning Lab
16
 
17
+ Release `1.7.0` provides original dynamic practice for current SAT and
18
+ ACT skill blueprints, a complete eight-level question-skill hierarchy,
19
+ individual mastery tracking, targeted practice, and test-like diagnostic
20
+ sessions with separate raw results and unofficial practice-score estimates. It adds username/password
21
  accounts, secure recovery, an isolated one-click demo, and the embedded teaching
22
  avatar layer used by the Dearmon Analytics Business Calculus platform. Release
23
  1.2.0 introduced deterministic post-miss **Break It Apart** attribute graphs.
 
25
  a branded PNG, printable PDF, accessible hierarchy-and-concepts CSV, and
26
  verification manifest; demo sessions remain nonexportable.
27
 
28
+ Release 1.7.0 retains the exact Dearmon Analytics paper, ink, blue, teal, and
29
+ coral system established in v1.4.4 for the compact 1,240-pixel workspace. Bundled Inter, Source Serif 4, and
30
  Geist Mono fonts are served from same-origin routes. The compact test chooser
31
  and closely stacked Section → Domain → Narrow Topic rails use one restrained DA
32
  gradient rule, flat accessible controls, and shadow-free surfaces. Practice
 
45
  fallback. The collapsed item-specific Concepts Needed swim lane, complete
46
  analogous worked examples, separate hints, and mastery whitening remain.
47
 
48
+ Release 1.7.0 assigns all 1,983 trusted built-in question profiles their full
49
+ Exam → Section → Official Domain → Official Skill Family → Narrow Exam
50
+ Target → Prerequisite Bundle → Atomic Skill → Observable Failure Attribute
51
+ path. Each stable profile contains its complete ancestor and transitive-
52
+ prerequisite closure, format/context tags, and explicit scoring role. Unknown
53
+ or incomplete profiles fail closed. A single miss is never treated as proof of
54
+ a foundational gap; retained reports require repeated independent evidence.
55
+ The coverage set is 1,832 deterministic template profiles (1,780 objective and
56
+ 52 ACT Writing essay families), 145 immutable ACT passage-bank items, and 6
57
+ dedicated order-of-operations remediation templates; 1,925 profiles are
58
+ potentially objective-score eligible after their enclosing activity rules.
59
+
60
+ Tracking schema 1.3.0 is additive: it adds versioned hierarchy nodes/edges,
61
+ question profiles/members, and immutable question-instance bindings. Per-attempt skill
62
+ opportunities join those bindings to the existing attempts and learning
63
+ signals; a missing signal stays missing. Earlier learner, mastery, recovery,
64
+ and diagnostic records remain compatible, and historical rows are not assigned
65
+ fine-grained evidence that they did not originally retain.
66
+
67
+ The deterministic score estimator preserves raw correct/incorrect/omitted
68
+ counts, then separately presents clearly unofficial SAT section/total or ACT
69
+ section/Composite estimates, plausible intervals, evidence sufficiency, and
70
+ confidence. The ACT Composite uses English, Math, and Reading; optional Science
71
+ is reported separately, and optional Writing remains human reviewed. Hidden
72
+ pretest/EFT items and AI supplemental printable items are excluded. Fewer than
73
+ eight observed items or less than one quarter of a standard section remains a
74
+ preliminary, very-low-confidence result below the reporting threshold.
75
+
76
+ Release 1.7.0 retains one OpenAI-assisted follow-up beneath each graded
77
  explanation and a signed-in cross-question Learning Diagnostic. The diagnostic
78
  unlocks only after strict majority coverage of both Reading and Math for the
79
  same exam. It sends OpenAI only allowlisted aggregate performance evidence—not
 
83
  specific Targeted Practice; those workspaces remain disabled before the gate
84
  and report are complete.
85
 
86
+ Progress & Reports includes three responsive hierarchical mastery wheels. SAT
87
  shows Reading and Writing plus Math; ACT combines English and Reading as
88
  Reading/Language and shows Math separately. Domain and narrow-topic angles stay
89
  fixed to the curriculum, radial depth shows scored attempts toward four, and
 
91
  than 0%. Exact native tables provide the same aggregate data for keyboard,
92
  touch, print, and assistive-technology access.
93
 
94
+ The third wheel shows topic/skill mastery, with cumulative correct tagged
95
+ questions divided by attempts. The Skill Taxonomy Graph sits below the topic
96
+ graph. Both display per-entry potential score loss, allowing blind-guessing
97
+ credit (25% for four choices; no assumed credit for typed answers). A complete
98
+ CSV/JSON catalog explains the modeled question mix and reports expected correct
99
+ answers retained. These conditional losses overlap and must not be added.
100
+
101
  The Printable Exam Builder requires an active demo or signed-in learner so
102
  every generated file has a cleanup owner. It creates a clean Dearmon
103
  Analytics-branded student PDF and a separate answer-key PDF from selected or
104
  previously missed topics.
105
+ Both carry the same random form code. Core scored questions, their complete
106
+ skill profiles, their answer keys, and score eligibility are deterministic.
107
+ After the active learner has completed every built-in
108
  question type for an exact topic, explicit opt-in can create separately labeled,
109
  independently reviewed AI supplemental items for printing only. They never
110
+ decide correctness or alter skill evidence, mastery, readiness, routing,
111
+ diagnostics, or score estimates.
112
 
113
  After every incorrectly graded practice question, and for every missed
114
  objective item reviewed after a completed simulation, Break It Apart constructs
 
126
  This private Space uses the separate Turso database
127
  `dearmon-sat-act-learning-lab` and schema namespace
128
  `sat_act_learning_lab_v1`. Its encrypted application uses the versioned Space
129
+ secret `SAT_ACT_APP_FERNET_V1_7_0_5047BDC914D0_431E91CA28D4`.
130
 
131
  Required Space secrets are `OPENAI_API_KEY`, `TURSO_DATABASE_URL`,
132
  `TURSO_AUTH_TOKEN`, `LEARNER_ID_HMAC_SECRET`, `INSTRUCTOR_EXPORT_SECRET`, and
 
142
  appear in HTML, browser state, logs, public variables, or `/healthz`. Text
143
  tutoring remains available when Simli is absent or unavailable.
144
 
145
+ The Simli 3.0.2 browser client is packaged with this release and served from
146
+ the same-origin `/_simli/client.mjs` route with integrity verification and safe
147
+ response headers. The browser does not import the avatar client from `esm.sh`
148
+ or another runtime CDN. If video startup fails, the learner can continue with
149
+ text tutoring or spoken replies. The bundled dependency licenses are retained
150
+ in [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md).
151
+
152
  Username passwords are stored as independently salted scrypt records. Account
153
  lockouts persist in the database, password changes revoke earlier sessions,
154
  and verified legacy name/class/PIN profiles can be converted without moving
 
175
 
176
  ## Upgrade note
177
 
178
+ Version 1.7.0 uses immutable item/timing/scoring snapshots and explicit recovery
179
+ compatibility contracts. Resume only a saved contract that is explicitly supported;
180
+ legacy checkpoints follow the tested compatibility allowlist. Incompatible work
181
+ stays blocked and requires an approved transition or learner choice, never silent
182
+ regeneration/abandonment. Back up only inside the authorized hosting boundary,
183
+ preserve identity/source keys, and retain current audit/tombstones/holds/revocations.
184
+ Rollback requires compatible data and a new reviewed release manifest; it cannot
185
+ restore expired/revoked access or overwrite legitimate new learner work.
186
+
187
+ The owner kit ships no decryption key or production data. Its first local build
188
+ creates the matching source key/payload. Deployment defaults to local dry-run;
189
+ only explicit --execute plus DEPLOY opens remote changes. Python 3.12.13 is the
190
+ validated application patch; the Python 3.12 provider family alone does not prove
191
+ patch availability. Actual startup fails if the required patch is unavailable.
192
 
193
  ## Independent practice-content notice
194
 
 
197
  trademark of College Board; ACT is a trademark of ACT, Inc. All practice
198
  questions, passages, data, explanations, and figures in this lab are original
199
  content. Practice results are diagnostic and are not official scores.
200
+
201
+
202
+ ## Two ways to test
203
+
204
+ **Adaptive Test** prioritizes personal content weaknesses with high modeled
205
+ score opportunities, adjusting the next question and difficulty after every
206
+ answer. Choose 10, 20 or 30 questions; results include answer review and ranked
207
+ study priorities after completion. Blind guessing and sparse evidence are
208
+ accounted for. These are conditional study priorities, not guaranteed gains.
209
+
210
+ **Normal Test · Exam Simulation** follows the standard timed blueprint, including
211
+ SAT module routing, independently of saved weakness priorities. Targeted adaptive
212
+ accuracy is kept separate from normal score estimates. Completed adaptive work
213
+ is saved to cumulative mastery. Signed-in unfinished adaptive tests have
214
+ encrypted recovery checkpoints; use the saved recovery boundary after reconnecting.
215
+
216
+ ## Diagnostic prerequisite and database upgrade
217
+
218
+ The diagnostic must be fully completed and saved before adaptive testing unlocks for the same learner and exam. Partial responses, older practice or demo sample history cannot unlock it. Normal testing remains available independently. The latest completed diagnostic seeds adaptive priorities alongside eligible practice history, with its actual item-level guessing adjustment preserved.
219
+
220
+ Tracking schema 1.5.0 retains additive checkpoint storage and completed learner history.
221
+ Run repeat-safe migrations and an authorized host-side backup before deployment.
222
+ Current immutable recovery contracts preserve compatible work across releases;
223
+ unsupported historical contracts remain blocked for an explicit transition.
224
+ Keep security decision stores and reviewer revocations independent of database rollback.
225
+
226
+ ## Institutional controls and OMES readiness
227
+
228
+ The institutional profile blocks unapproved student processing and external AI/Simli services. It disables public signup, demos and legacy PIN entry and implements OIDC code/PKCE, explicit MFA assertion checks, provisioned issuer/subject identity, individual staff roles/class scopes and server-side ownership guards. Recovery email requires verified TLS. Accessible chart tables, keyboard improvements and owned diagnostic exports are included; framework analytics remains disabled.
229
+
230
+ Read the source package's `docs/OMES_PLATFORM_READINESS.md`, `docs/INSTITUTIONAL_IDENTITY.md`, `docs/SECURITY_IMPLEMENTATION.md` and `docs/ASSESSMENT_RECOVERY.md`. Use `deployment/institutional/README.md` for a new approved container deployment. The institutional HF updater only updates a preprovisioned approved target with protected roster and persistent storage. Code/configuration does not establish State-approved MFA, completed human accessibility/ACR acceptance, educator signoff on standards alignment, actual U.S. hosting/encryption/backup evidence, signed IT terms or supplier/AI authorization. Run the redacted preflight and obtain the actual applicable external records before covered performance.
231
+
232
+ Tracking schema is 1.5.0. Authenticated diagnostic/adaptive checkpoints now survive supported same-version restarts; recovery validates the learner, exact release/source compatibility and checkpoint revision. Unsaved browser input is outside that boundary. Production acceptance must separately prove remote durability, restored keys/database and provider backups. Consumer accounts remain available in consumer mode; institutional use requires its own approved OIDC roster and dedicated deployment/database.
THIRD_PARTY_NOTICES.md ADDED
@@ -0,0 +1,1210 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Third-party notices
2
+
3
+ The SAT & ACT Learning Lab packages the official `simli-client` 3.0.2 browser
4
+ client as an integrity-checked, same-origin ECMAScript module. The bundle is
5
+ built from the package's lowercase `dist/client.js` entry because the 3.0.2
6
+ root entry refers to `dist/Client.js`, which fails on case-sensitive systems.
7
+ No Simli key, face credential, session token, learner data, or deployment
8
+ secret is included in the bundle.
9
+
10
+ The bundle contains the following packages under their upstream licenses:
11
+
12
+ | Package | Version | License |
13
+ |---|---:|---|
14
+ | `simli-client` | 3.0.2 | MIT |
15
+ | `@bufbuild/protobuf` | 1.10.1 | Apache-2.0 AND BSD-3-Clause |
16
+ | `@livekit/mutex` | 1.1.1 | Apache-2.0 |
17
+ | `@livekit/protocol` | 1.50.4 | Apache-2.0 |
18
+ | `livekit-client` | 2.22.1 | Apache-2.0 |
19
+ | `rxjs` | 7.8.2 | Apache-2.0 |
20
+ | `webrtc-adapter` | 9.0.6 | BSD-3-Clause |
21
+ | `tslib` | 2.8.1 | 0BSD |
22
+ | `events` | 3.3.0 | MIT |
23
+ | `jose` | 6.2.10 | MIT |
24
+ | `loglevel` | 1.9.2 | MIT |
25
+ | `machina` | 7.0.1 | MIT |
26
+ | `sdp` | 3.2.2 | MIT |
27
+ | `sdp-transform` | 2.15.0 | MIT |
28
+ | `typed-emitter` | 2.1.0 | MIT |
29
+
30
+ Upstream source and license texts are available from the respective npm
31
+ packages and repositories. In particular:
32
+
33
+ - Simli client: <https://github.com/simliai/simli-client>
34
+ - LiveKit client: <https://github.com/livekit/client-sdk-js>
35
+ - RxJS: <https://github.com/ReactiveX/rxjs>
36
+ - WebRTC adapter: <https://github.com/webrtcHacks/adapter>
37
+
38
+ `simli-client` 3.0.2 carries the following MIT notice:
39
+
40
+ > Copyright (c) 2024 AnasMations
41
+ >
42
+ > Permission is hereby granted, free of charge, to any person obtaining a copy
43
+ > of this software and associated documentation files (the "Software"), to
44
+ > deal in the Software without restriction, including without limitation the
45
+ > rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
46
+ > sell copies of the Software, and to permit persons to whom the Software is
47
+ > furnished to do so, subject to the following conditions:
48
+ >
49
+ > The above copyright notice and this permission notice shall be included in
50
+ > all copies or substantial portions of the Software.
51
+ >
52
+ > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
53
+ > IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
54
+ > FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
55
+ > AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
56
+ > LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
57
+ > OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
58
+ > THE SOFTWARE.
59
+
60
+ ## Complete bundled dependency license texts
61
+
62
+ The texts below are copied verbatim from the installed package artifacts used to build the audited bundle.
63
+
64
+ ### `@bufbuild/protobuf` 1.10.1
65
+
66
+ Copyright 2021-2024 Buf Technologies, Inc. Package source headers identify the Apache License, Version 2.0; package metadata declares `(Apache-2.0 AND BSD-3-Clause)`. The complete Apache-2.0 and BSD-3-Clause texts are reproduced in the sections below.
67
+
68
+ ### `@livekit/mutex` 1.1.1
69
+
70
+ ```text
71
+
72
+ Apache License
73
+ Version 2.0, January 2004
74
+ http://www.apache.org/licenses/
75
+
76
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
77
+
78
+ 1. Definitions.
79
+
80
+ "License" shall mean the terms and conditions for use, reproduction,
81
+ and distribution as defined by Sections 1 through 9 of this document.
82
+
83
+ "Licensor" shall mean the copyright owner or entity authorized by
84
+ the copyright owner that is granting the License.
85
+
86
+ "Legal Entity" shall mean the union of the acting entity and all
87
+ other entities that control, are controlled by, or are under common
88
+ control with that entity. For the purposes of this definition,
89
+ "control" means (i) the power, direct or indirect, to cause the
90
+ direction or management of such entity, whether by contract or
91
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
92
+ outstanding shares, or (iii) beneficial ownership of such entity.
93
+
94
+ "You" (or "Your") shall mean an individual or Legal Entity
95
+ exercising permissions granted by this License.
96
+
97
+ "Source" form shall mean the preferred form for making modifications,
98
+ including but not limited to software source code, documentation
99
+ source, and configuration files.
100
+
101
+ "Object" form shall mean any form resulting from mechanical
102
+ transformation or translation of a Source form, including but
103
+ not limited to compiled object code, generated documentation,
104
+ and conversions to other media types.
105
+
106
+ "Work" shall mean the work of authorship, whether in Source or
107
+ Object form, made available under the License, as indicated by a
108
+ copyright notice that is included in or attached to the work
109
+ (an example is provided in the Appendix below).
110
+
111
+ "Derivative Works" shall mean any work, whether in Source or Object
112
+ form, that is based on (or derived from) the Work and for which the
113
+ editorial revisions, annotations, elaborations, or other modifications
114
+ represent, as a whole, an original work of authorship. For the purposes
115
+ of this License, Derivative Works shall not include works that remain
116
+ separable from, or merely link (or bind by name) to the interfaces of,
117
+ the Work and Derivative Works thereof.
118
+
119
+ "Contribution" shall mean any work of authorship, including
120
+ the original version of the Work and any modifications or additions
121
+ to that Work or Derivative Works thereof, that is intentionally
122
+ submitted to Licensor for inclusion in the Work by the copyright owner
123
+ or by an individual or Legal Entity authorized to submit on behalf of
124
+ the copyright owner. For the purposes of this definition, "submitted"
125
+ means any form of electronic, verbal, or written communication sent
126
+ to the Licensor or its representatives, including but not limited to
127
+ communication on electronic mailing lists, source code control systems,
128
+ and issue tracking systems that are managed by, or on behalf of, the
129
+ Licensor for the purpose of discussing and improving the Work, but
130
+ excluding communication that is conspicuously marked or otherwise
131
+ designated in writing by the copyright owner as "Not a Contribution."
132
+
133
+ "Contributor" shall mean Licensor and any individual or Legal Entity
134
+ on behalf of whom a Contribution has been received by Licensor and
135
+ subsequently incorporated within the Work.
136
+
137
+ 2. Grant of Copyright License. Subject to the terms and conditions of
138
+ this License, each Contributor hereby grants to You a perpetual,
139
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
140
+ copyright license to reproduce, prepare Derivative Works of,
141
+ publicly display, publicly perform, sublicense, and distribute the
142
+ Work and such Derivative Works in Source or Object form.
143
+
144
+ 3. Grant of Patent License. Subject to the terms and conditions of
145
+ this License, each Contributor hereby grants to You a perpetual,
146
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
147
+ (except as stated in this section) patent license to make, have made,
148
+ use, offer to sell, sell, import, and otherwise transfer the Work,
149
+ where such license applies only to those patent claims licensable
150
+ by such Contributor that are necessarily infringed by their
151
+ Contribution(s) alone or by combination of their Contribution(s)
152
+ with the Work to which such Contribution(s) was submitted. If You
153
+ institute patent litigation against any entity (including a
154
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
155
+ or a Contribution incorporated within the Work constitutes direct
156
+ or contributory patent infringement, then any patent licenses
157
+ granted to You under this License for that Work shall terminate
158
+ as of the date such litigation is filed.
159
+
160
+ 4. Redistribution. You may reproduce and distribute copies of the
161
+ Work or Derivative Works thereof in any medium, with or without
162
+ modifications, and in Source or Object form, provided that You
163
+ meet the following conditions:
164
+
165
+ (a) You must give any other recipients of the Work or
166
+ Derivative Works a copy of this License; and
167
+
168
+ (b) You must cause any modified files to carry prominent notices
169
+ stating that You changed the files; and
170
+
171
+ (c) You must retain, in the Source form of any Derivative Works
172
+ that You distribute, all copyright, patent, trademark, and
173
+ attribution notices from the Source form of the Work,
174
+ excluding those notices that do not pertain to any part of
175
+ the Derivative Works; and
176
+
177
+ (d) If the Work includes a "NOTICE" text file as part of its
178
+ distribution, then any Derivative Works that You distribute must
179
+ include a readable copy of the attribution notices contained
180
+ within such NOTICE file, excluding those notices that do not
181
+ pertain to any part of the Derivative Works, in at least one
182
+ of the following places: within a NOTICE text file distributed
183
+ as part of the Derivative Works; within the Source form or
184
+ documentation, if provided along with the Derivative Works; or,
185
+ within a display generated by the Derivative Works, if and
186
+ wherever such third-party notices normally appear. The contents
187
+ of the NOTICE file are for informational purposes only and
188
+ do not modify the License. You may add Your own attribution
189
+ notices within Derivative Works that You distribute, alongside
190
+ or as an addendum to the NOTICE text from the Work, provided
191
+ that such additional attribution notices cannot be construed
192
+ as modifying the License.
193
+
194
+ You may add Your own copyright statement to Your modifications and
195
+ may provide additional or different license terms and conditions
196
+ for use, reproduction, or distribution of Your modifications, or
197
+ for any such Derivative Works as a whole, provided Your use,
198
+ reproduction, and distribution of the Work otherwise complies with
199
+ the conditions stated in this License.
200
+
201
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
202
+ any Contribution intentionally submitted for inclusion in the Work
203
+ by You to the Licensor shall be under the terms and conditions of
204
+ this License, without any additional terms or conditions.
205
+ Notwithstanding the above, nothing herein shall supersede or modify
206
+ the terms of any separate license agreement you may have executed
207
+ with Licensor regarding such Contributions.
208
+
209
+ 6. Trademarks. This License does not grant permission to use the trade
210
+ names, trademarks, service marks, or product names of the Licensor,
211
+ except as required for reasonable and customary use in describing the
212
+ origin of the Work and reproducing the content of the NOTICE file.
213
+
214
+ 7. Disclaimer of Warranty. Unless required by applicable law or
215
+ agreed to in writing, Licensor provides the Work (and each
216
+ Contributor provides its Contributions) on an "AS IS" BASIS,
217
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
218
+ implied, including, without limitation, any warranties or conditions
219
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
220
+ PARTICULAR PURPOSE. You are solely responsible for determining the
221
+ appropriateness of using or redistributing the Work and assume any
222
+ risks associated with Your exercise of permissions under this License.
223
+
224
+ 8. Limitation of Liability. In no event and under no legal theory,
225
+ whether in tort (including negligence), contract, or otherwise,
226
+ unless required by applicable law (such as deliberate and grossly
227
+ negligent acts) or agreed to in writing, shall any Contributor be
228
+ liable to You for damages, including any direct, indirect, special,
229
+ incidental, or consequential damages of any character arising as a
230
+ result of this License or out of the use or inability to use the
231
+ Work (including but not limited to damages for loss of goodwill,
232
+ work stoppage, computer failure or malfunction, or any and all
233
+ other commercial damages or losses), even if such Contributor
234
+ has been advised of the possibility of such damages.
235
+
236
+ 9. Accepting Warranty or Additional Liability. While redistributing
237
+ the Work or Derivative Works thereof, You may choose to offer,
238
+ and charge a fee for, acceptance of support, warranty, indemnity,
239
+ or other liability obligations and/or rights consistent with this
240
+ License. However, in accepting such obligations, You may act only
241
+ on Your own behalf and on Your sole responsibility, not on behalf
242
+ of any other Contributor, and only if You agree to indemnify,
243
+ defend, and hold each Contributor harmless for any liability
244
+ incurred by, or claims asserted against, such Contributor by reason
245
+ of your accepting any such warranty or additional liability.
246
+ ```
247
+
248
+ ### `@livekit/protocol` 1.50.4
249
+
250
+ ```text
251
+
252
+ Apache License
253
+ Version 2.0, January 2004
254
+ http://www.apache.org/licenses/
255
+
256
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
257
+
258
+ 1. Definitions.
259
+
260
+ "License" shall mean the terms and conditions for use, reproduction,
261
+ and distribution as defined by Sections 1 through 9 of this document.
262
+
263
+ "Licensor" shall mean the copyright owner or entity authorized by
264
+ the copyright owner that is granting the License.
265
+
266
+ "Legal Entity" shall mean the union of the acting entity and all
267
+ other entities that control, are controlled by, or are under common
268
+ control with that entity. For the purposes of this definition,
269
+ "control" means (i) the power, direct or indirect, to cause the
270
+ direction or management of such entity, whether by contract or
271
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
272
+ outstanding shares, or (iii) beneficial ownership of such entity.
273
+
274
+ "You" (or "Your") shall mean an individual or Legal Entity
275
+ exercising permissions granted by this License.
276
+
277
+ "Source" form shall mean the preferred form for making modifications,
278
+ including but not limited to software source code, documentation
279
+ source, and configuration files.
280
+
281
+ "Object" form shall mean any form resulting from mechanical
282
+ transformation or translation of a Source form, including but
283
+ not limited to compiled object code, generated documentation,
284
+ and conversions to other media types.
285
+
286
+ "Work" shall mean the work of authorship, whether in Source or
287
+ Object form, made available under the License, as indicated by a
288
+ copyright notice that is included in or attached to the work
289
+ (an example is provided in the Appendix below).
290
+
291
+ "Derivative Works" shall mean any work, whether in Source or Object
292
+ form, that is based on (or derived from) the Work and for which the
293
+ editorial revisions, annotations, elaborations, or other modifications
294
+ represent, as a whole, an original work of authorship. For the purposes
295
+ of this License, Derivative Works shall not include works that remain
296
+ separable from, or merely link (or bind by name) to the interfaces of,
297
+ the Work and Derivative Works thereof.
298
+
299
+ "Contribution" shall mean any work of authorship, including
300
+ the original version of the Work and any modifications or additions
301
+ to that Work or Derivative Works thereof, that is intentionally
302
+ submitted to Licensor for inclusion in the Work by the copyright owner
303
+ or by an individual or Legal Entity authorized to submit on behalf of
304
+ the copyright owner. For the purposes of this definition, "submitted"
305
+ means any form of electronic, verbal, or written communication sent
306
+ to the Licensor or its representatives, including but not limited to
307
+ communication on electronic mailing lists, source code control systems,
308
+ and issue tracking systems that are managed by, or on behalf of, the
309
+ Licensor for the purpose of discussing and improving the Work, but
310
+ excluding communication that is conspicuously marked or otherwise
311
+ designated in writing by the copyright owner as "Not a Contribution."
312
+
313
+ "Contributor" shall mean Licensor and any individual or Legal Entity
314
+ on behalf of whom a Contribution has been received by Licensor and
315
+ subsequently incorporated within the Work.
316
+
317
+ 2. Grant of Copyright License. Subject to the terms and conditions of
318
+ this License, each Contributor hereby grants to You a perpetual,
319
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
320
+ copyright license to reproduce, prepare Derivative Works of,
321
+ publicly display, publicly perform, sublicense, and distribute the
322
+ Work and such Derivative Works in Source or Object form.
323
+
324
+ 3. Grant of Patent License. Subject to the terms and conditions of
325
+ this License, each Contributor hereby grants to You a perpetual,
326
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
327
+ (except as stated in this section) patent license to make, have made,
328
+ use, offer to sell, sell, import, and otherwise transfer the Work,
329
+ where such license applies only to those patent claims licensable
330
+ by such Contributor that are necessarily infringed by their
331
+ Contribution(s) alone or by combination of their Contribution(s)
332
+ with the Work to which such Contribution(s) was submitted. If You
333
+ institute patent litigation against any entity (including a
334
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
335
+ or a Contribution incorporated within the Work constitutes direct
336
+ or contributory patent infringement, then any patent licenses
337
+ granted to You under this License for that Work shall terminate
338
+ as of the date such litigation is filed.
339
+
340
+ 4. Redistribution. You may reproduce and distribute copies of the
341
+ Work or Derivative Works thereof in any medium, with or without
342
+ modifications, and in Source or Object form, provided that You
343
+ meet the following conditions:
344
+
345
+ (a) You must give any other recipients of the Work or
346
+ Derivative Works a copy of this License; and
347
+
348
+ (b) You must cause any modified files to carry prominent notices
349
+ stating that You changed the files; and
350
+
351
+ (c) You must retain, in the Source form of any Derivative Works
352
+ that You distribute, all copyright, patent, trademark, and
353
+ attribution notices from the Source form of the Work,
354
+ excluding those notices that do not pertain to any part of
355
+ the Derivative Works; and
356
+
357
+ (d) If the Work includes a "NOTICE" text file as part of its
358
+ distribution, then any Derivative Works that You distribute must
359
+ include a readable copy of the attribution notices contained
360
+ within such NOTICE file, excluding those notices that do not
361
+ pertain to any part of the Derivative Works, in at least one
362
+ of the following places: within a NOTICE text file distributed
363
+ as part of the Derivative Works; within the Source form or
364
+ documentation, if provided along with the Derivative Works; or,
365
+ within a display generated by the Derivative Works, if and
366
+ wherever such third-party notices normally appear. The contents
367
+ of the NOTICE file are for informational purposes only and
368
+ do not modify the License. You may add Your own attribution
369
+ notices within Derivative Works that You distribute, alongside
370
+ or as an addendum to the NOTICE text from the Work, provided
371
+ that such additional attribution notices cannot be construed
372
+ as modifying the License.
373
+
374
+ You may add Your own copyright statement to Your modifications and
375
+ may provide additional or different license terms and conditions
376
+ for use, reproduction, or distribution of Your modifications, or
377
+ for any such Derivative Works as a whole, provided Your use,
378
+ reproduction, and distribution of the Work otherwise complies with
379
+ the conditions stated in this License.
380
+
381
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
382
+ any Contribution intentionally submitted for inclusion in the Work
383
+ by You to the Licensor shall be under the terms and conditions of
384
+ this License, without any additional terms or conditions.
385
+ Notwithstanding the above, nothing herein shall supersede or modify
386
+ the terms of any separate license agreement you may have executed
387
+ with Licensor regarding such Contributions.
388
+
389
+ 6. Trademarks. This License does not grant permission to use the trade
390
+ names, trademarks, service marks, or product names of the Licensor,
391
+ except as required for reasonable and customary use in describing the
392
+ origin of the Work and reproducing the content of the NOTICE file.
393
+
394
+ 7. Disclaimer of Warranty. Unless required by applicable law or
395
+ agreed to in writing, Licensor provides the Work (and each
396
+ Contributor provides its Contributions) on an "AS IS" BASIS,
397
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
398
+ implied, including, without limitation, any warranties or conditions
399
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
400
+ PARTICULAR PURPOSE. You are solely responsible for determining the
401
+ appropriateness of using or redistributing the Work and assume any
402
+ risks associated with Your exercise of permissions under this License.
403
+
404
+ 8. Limitation of Liability. In no event and under no legal theory,
405
+ whether in tort (including negligence), contract, or otherwise,
406
+ unless required by applicable law (such as deliberate and grossly
407
+ negligent acts) or agreed to in writing, shall any Contributor be
408
+ liable to You for damages, including any direct, indirect, special,
409
+ incidental, or consequential damages of any character arising as a
410
+ result of this License or out of the use or inability to use the
411
+ Work (including but not limited to damages for loss of goodwill,
412
+ work stoppage, computer failure or malfunction, or any and all
413
+ other commercial damages or losses), even if such Contributor
414
+ has been advised of the possibility of such damages.
415
+
416
+ 9. Accepting Warranty or Additional Liability. While redistributing
417
+ the Work or Derivative Works thereof, You may choose to offer,
418
+ and charge a fee for, acceptance of support, warranty, indemnity,
419
+ or other liability obligations and/or rights consistent with this
420
+ License. However, in accepting such obligations, You may act only
421
+ on Your own behalf and on Your sole responsibility, not on behalf
422
+ of any other Contributor, and only if You agree to indemnify,
423
+ defend, and hold each Contributor harmless for any liability
424
+ incurred by, or claims asserted against, such Contributor by reason
425
+ of your accepting any such warranty or additional liability.
426
+
427
+ END OF TERMS AND CONDITIONS
428
+
429
+ APPENDIX: How to apply the Apache License to your work.
430
+
431
+ To apply the Apache License to your work, attach the following
432
+ boilerplate notice, with the fields enclosed by brackets "[]"
433
+ replaced with your own identifying information. (Don't include
434
+ the brackets!) The text should be enclosed in the appropriate
435
+ comment syntax for the file format. We also recommend that a
436
+ file or class name and description of purpose be included on the
437
+ same "printed page" as the copyright notice for easier
438
+ identification within third-party archives.
439
+
440
+ Copyright [yyyy] [name of copyright owner]
441
+
442
+ Licensed under the Apache License, Version 2.0 (the "License");
443
+ you may not use this file except in compliance with the License.
444
+ You may obtain a copy of the License at
445
+
446
+ http://www.apache.org/licenses/LICENSE-2.0
447
+
448
+ Unless required by applicable law or agreed to in writing, software
449
+ distributed under the License is distributed on an "AS IS" BASIS,
450
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
451
+ See the License for the specific language governing permissions and
452
+ limitations under the License.
453
+ ```
454
+
455
+ ### `livekit-client` 2.22.1
456
+
457
+ ```text
458
+
459
+ Apache License
460
+ Version 2.0, January 2004
461
+ http://www.apache.org/licenses/
462
+
463
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
464
+
465
+ 1. Definitions.
466
+
467
+ "License" shall mean the terms and conditions for use, reproduction,
468
+ and distribution as defined by Sections 1 through 9 of this document.
469
+
470
+ "Licensor" shall mean the copyright owner or entity authorized by
471
+ the copyright owner that is granting the License.
472
+
473
+ "Legal Entity" shall mean the union of the acting entity and all
474
+ other entities that control, are controlled by, or are under common
475
+ control with that entity. For the purposes of this definition,
476
+ "control" means (i) the power, direct or indirect, to cause the
477
+ direction or management of such entity, whether by contract or
478
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
479
+ outstanding shares, or (iii) beneficial ownership of such entity.
480
+
481
+ "You" (or "Your") shall mean an individual or Legal Entity
482
+ exercising permissions granted by this License.
483
+
484
+ "Source" form shall mean the preferred form for making modifications,
485
+ including but not limited to software source code, documentation
486
+ source, and configuration files.
487
+
488
+ "Object" form shall mean any form resulting from mechanical
489
+ transformation or translation of a Source form, including but
490
+ not limited to compiled object code, generated documentation,
491
+ and conversions to other media types.
492
+
493
+ "Work" shall mean the work of authorship, whether in Source or
494
+ Object form, made available under the License, as indicated by a
495
+ copyright notice that is included in or attached to the work
496
+ (an example is provided in the Appendix below).
497
+
498
+ "Derivative Works" shall mean any work, whether in Source or Object
499
+ form, that is based on (or derived from) the Work and for which the
500
+ editorial revisions, annotations, elaborations, or other modifications
501
+ represent, as a whole, an original work of authorship. For the purposes
502
+ of this License, Derivative Works shall not include works that remain
503
+ separable from, or merely link (or bind by name) to the interfaces of,
504
+ the Work and Derivative Works thereof.
505
+
506
+ "Contribution" shall mean any work of authorship, including
507
+ the original version of the Work and any modifications or additions
508
+ to that Work or Derivative Works thereof, that is intentionally
509
+ submitted to Licensor for inclusion in the Work by the copyright owner
510
+ or by an individual or Legal Entity authorized to submit on behalf of
511
+ the copyright owner. For the purposes of this definition, "submitted"
512
+ means any form of electronic, verbal, or written communication sent
513
+ to the Licensor or its representatives, including but not limited to
514
+ communication on electronic mailing lists, source code control systems,
515
+ and issue tracking systems that are managed by, or on behalf of, the
516
+ Licensor for the purpose of discussing and improving the Work, but
517
+ excluding communication that is conspicuously marked or otherwise
518
+ designated in writing by the copyright owner as "Not a Contribution."
519
+
520
+ "Contributor" shall mean Licensor and any individual or Legal Entity
521
+ on behalf of whom a Contribution has been received by Licensor and
522
+ subsequently incorporated within the Work.
523
+
524
+ 2. Grant of Copyright License. Subject to the terms and conditions of
525
+ this License, each Contributor hereby grants to You a perpetual,
526
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
527
+ copyright license to reproduce, prepare Derivative Works of,
528
+ publicly display, publicly perform, sublicense, and distribute the
529
+ Work and such Derivative Works in Source or Object form.
530
+
531
+ 3. Grant of Patent License. Subject to the terms and conditions of
532
+ this License, each Contributor hereby grants to You a perpetual,
533
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
534
+ (except as stated in this section) patent license to make, have made,
535
+ use, offer to sell, sell, import, and otherwise transfer the Work,
536
+ where such license applies only to those patent claims licensable
537
+ by such Contributor that are necessarily infringed by their
538
+ Contribution(s) alone or by combination of their Contribution(s)
539
+ with the Work to which such Contribution(s) was submitted. If You
540
+ institute patent litigation against any entity (including a
541
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
542
+ or a Contribution incorporated within the Work constitutes direct
543
+ or contributory patent infringement, then any patent licenses
544
+ granted to You under this License for that Work shall terminate
545
+ as of the date such litigation is filed.
546
+
547
+ 4. Redistribution. You may reproduce and distribute copies of the
548
+ Work or Derivative Works thereof in any medium, with or without
549
+ modifications, and in Source or Object form, provided that You
550
+ meet the following conditions:
551
+
552
+ (a) You must give any other recipients of the Work or
553
+ Derivative Works a copy of this License; and
554
+
555
+ (b) You must cause any modified files to carry prominent notices
556
+ stating that You changed the files; and
557
+
558
+ (c) You must retain, in the Source form of any Derivative Works
559
+ that You distribute, all copyright, patent, trademark, and
560
+ attribution notices from the Source form of the Work,
561
+ excluding those notices that do not pertain to any part of
562
+ the Derivative Works; and
563
+
564
+ (d) If the Work includes a "NOTICE" text file as part of its
565
+ distribution, then any Derivative Works that You distribute must
566
+ include a readable copy of the attribution notices contained
567
+ within such NOTICE file, excluding those notices that do not
568
+ pertain to any part of the Derivative Works, in at least one
569
+ of the following places: within a NOTICE text file distributed
570
+ as part of the Derivative Works; within the Source form or
571
+ documentation, if provided along with the Derivative Works; or,
572
+ within a display generated by the Derivative Works, if and
573
+ wherever such third-party notices normally appear. The contents
574
+ of the NOTICE file are for informational purposes only and
575
+ do not modify the License. You may add Your own attribution
576
+ notices within Derivative Works that You distribute, alongside
577
+ or as an addendum to the NOTICE text from the Work, provided
578
+ that such additional attribution notices cannot be construed
579
+ as modifying the License.
580
+
581
+ You may add Your own copyright statement to Your modifications and
582
+ may provide additional or different license terms and conditions
583
+ for use, reproduction, or distribution of Your modifications, or
584
+ for any such Derivative Works as a whole, provided Your use,
585
+ reproduction, and distribution of the Work otherwise complies with
586
+ the conditions stated in this License.
587
+
588
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
589
+ any Contribution intentionally submitted for inclusion in the Work
590
+ by You to the Licensor shall be under the terms and conditions of
591
+ this License, without any additional terms or conditions.
592
+ Notwithstanding the above, nothing herein shall supersede or modify
593
+ the terms of any separate license agreement you may have executed
594
+ with Licensor regarding such Contributions.
595
+
596
+ 6. Trademarks. This License does not grant permission to use the trade
597
+ names, trademarks, service marks, or product names of the Licensor,
598
+ except as required for reasonable and customary use in describing the
599
+ origin of the Work and reproducing the content of the NOTICE file.
600
+
601
+ 7. Disclaimer of Warranty. Unless required by applicable law or
602
+ agreed to in writing, Licensor provides the Work (and each
603
+ Contributor provides its Contributions) on an "AS IS" BASIS,
604
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
605
+ implied, including, without limitation, any warranties or conditions
606
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
607
+ PARTICULAR PURPOSE. You are solely responsible for determining the
608
+ appropriateness of using or redistributing the Work and assume any
609
+ risks associated with Your exercise of permissions under this License.
610
+
611
+ 8. Limitation of Liability. In no event and under no legal theory,
612
+ whether in tort (including negligence), contract, or otherwise,
613
+ unless required by applicable law (such as deliberate and grossly
614
+ negligent acts) or agreed to in writing, shall any Contributor be
615
+ liable to You for damages, including any direct, indirect, special,
616
+ incidental, or consequential damages of any character arising as a
617
+ result of this License or out of the use or inability to use the
618
+ Work (including but not limited to damages for loss of goodwill,
619
+ work stoppage, computer failure or malfunction, or any and all
620
+ other commercial damages or losses), even if such Contributor
621
+ has been advised of the possibility of such damages.
622
+
623
+ 9. Accepting Warranty or Additional Liability. While redistributing
624
+ the Work or Derivative Works thereof, You may choose to offer,
625
+ and charge a fee for, acceptance of support, warranty, indemnity,
626
+ or other liability obligations and/or rights consistent with this
627
+ License. However, in accepting such obligations, You may act only
628
+ on Your own behalf and on Your sole responsibility, not on behalf
629
+ of any other Contributor, and only if You agree to indemnify,
630
+ defend, and hold each Contributor harmless for any liability
631
+ incurred by, or claims asserted against, such Contributor by reason
632
+ of your accepting any such warranty or additional liability.
633
+ ```
634
+
635
+ ### `rxjs` 7.8.2
636
+
637
+ ```text
638
+ Apache License
639
+ Version 2.0, January 2004
640
+ http://www.apache.org/licenses/
641
+
642
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
643
+
644
+ 1. Definitions.
645
+
646
+ "License" shall mean the terms and conditions for use, reproduction,
647
+ and distribution as defined by Sections 1 through 9 of this document.
648
+
649
+ "Licensor" shall mean the copyright owner or entity authorized by
650
+ the copyright owner that is granting the License.
651
+
652
+ "Legal Entity" shall mean the union of the acting entity and all
653
+ other entities that control, are controlled by, or are under common
654
+ control with that entity. For the purposes of this definition,
655
+ "control" means (i) the power, direct or indirect, to cause the
656
+ direction or management of such entity, whether by contract or
657
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
658
+ outstanding shares, or (iii) beneficial ownership of such entity.
659
+
660
+ "You" (or "Your") shall mean an individual or Legal Entity
661
+ exercising permissions granted by this License.
662
+
663
+ "Source" form shall mean the preferred form for making modifications,
664
+ including but not limited to software source code, documentation
665
+ source, and configuration files.
666
+
667
+ "Object" form shall mean any form resulting from mechanical
668
+ transformation or translation of a Source form, including but
669
+ not limited to compiled object code, generated documentation,
670
+ and conversions to other media types.
671
+
672
+ "Work" shall mean the work of authorship, whether in Source or
673
+ Object form, made available under the License, as indicated by a
674
+ copyright notice that is included in or attached to the work
675
+ (an example is provided in the Appendix below).
676
+
677
+ "Derivative Works" shall mean any work, whether in Source or Object
678
+ form, that is based on (or derived from) the Work and for which the
679
+ editorial revisions, annotations, elaborations, or other modifications
680
+ represent, as a whole, an original work of authorship. For the purposes
681
+ of this License, Derivative Works shall not include works that remain
682
+ separable from, or merely link (or bind by name) to the interfaces of,
683
+ the Work and Derivative Works thereof.
684
+
685
+ "Contribution" shall mean any work of authorship, including
686
+ the original version of the Work and any modifications or additions
687
+ to that Work or Derivative Works thereof, that is intentionally
688
+ submitted to Licensor for inclusion in the Work by the copyright owner
689
+ or by an individual or Legal Entity authorized to submit on behalf of
690
+ the copyright owner. For the purposes of this definition, "submitted"
691
+ means any form of electronic, verbal, or written communication sent
692
+ to the Licensor or its representatives, including but not limited to
693
+ communication on electronic mailing lists, source code control systems,
694
+ and issue tracking systems that are managed by, or on behalf of, the
695
+ Licensor for the purpose of discussing and improving the Work, but
696
+ excluding communication that is conspicuously marked or otherwise
697
+ designated in writing by the copyright owner as "Not a Contribution."
698
+
699
+ "Contributor" shall mean Licensor and any individual or Legal Entity
700
+ on behalf of whom a Contribution has been received by Licensor and
701
+ subsequently incorporated within the Work.
702
+
703
+ 2. Grant of Copyright License. Subject to the terms and conditions of
704
+ this License, each Contributor hereby grants to You a perpetual,
705
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
706
+ copyright license to reproduce, prepare Derivative Works of,
707
+ publicly display, publicly perform, sublicense, and distribute the
708
+ Work and such Derivative Works in Source or Object form.
709
+
710
+ 3. Grant of Patent License. Subject to the terms and conditions of
711
+ this License, each Contributor hereby grants to You a perpetual,
712
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
713
+ (except as stated in this section) patent license to make, have made,
714
+ use, offer to sell, sell, import, and otherwise transfer the Work,
715
+ where such license applies only to those patent claims licensable
716
+ by such Contributor that are necessarily infringed by their
717
+ Contribution(s) alone or by combination of their Contribution(s)
718
+ with the Work to which such Contribution(s) was submitted. If You
719
+ institute patent litigation against any entity (including a
720
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
721
+ or a Contribution incorporated within the Work constitutes direct
722
+ or contributory patent infringement, then any patent licenses
723
+ granted to You under this License for that Work shall terminate
724
+ as of the date such litigation is filed.
725
+
726
+ 4. Redistribution. You may reproduce and distribute copies of the
727
+ Work or Derivative Works thereof in any medium, with or without
728
+ modifications, and in Source or Object form, provided that You
729
+ meet the following conditions:
730
+
731
+ (a) You must give any other recipients of the Work or
732
+ Derivative Works a copy of this License; and
733
+
734
+ (b) You must cause any modified files to carry prominent notices
735
+ stating that You changed the files; and
736
+
737
+ (c) You must retain, in the Source form of any Derivative Works
738
+ that You distribute, all copyright, patent, trademark, and
739
+ attribution notices from the Source form of the Work,
740
+ excluding those notices that do not pertain to any part of
741
+ the Derivative Works; and
742
+
743
+ (d) If the Work includes a "NOTICE" text file as part of its
744
+ distribution, then any Derivative Works that You distribute must
745
+ include a readable copy of the attribution notices contained
746
+ within such NOTICE file, excluding those notices that do not
747
+ pertain to any part of the Derivative Works, in at least one
748
+ of the following places: within a NOTICE text file distributed
749
+ as part of the Derivative Works; within the Source form or
750
+ documentation, if provided along with the Derivative Works; or,
751
+ within a display generated by the Derivative Works, if and
752
+ wherever such third-party notices normally appear. The contents
753
+ of the NOTICE file are for informational purposes only and
754
+ do not modify the License. You may add Your own attribution
755
+ notices within Derivative Works that You distribute, alongside
756
+ or as an addendum to the NOTICE text from the Work, provided
757
+ that such additional attribution notices cannot be construed
758
+ as modifying the License.
759
+
760
+ You may add Your own copyright statement to Your modifications and
761
+ may provide additional or different license terms and conditions
762
+ for use, reproduction, or distribution of Your modifications, or
763
+ for any such Derivative Works as a whole, provided Your use,
764
+ reproduction, and distribution of the Work otherwise complies with
765
+ the conditions stated in this License.
766
+
767
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
768
+ any Contribution intentionally submitted for inclusion in the Work
769
+ by You to the Licensor shall be under the terms and conditions of
770
+ this License, without any additional terms or conditions.
771
+ Notwithstanding the above, nothing herein shall supersede or modify
772
+ the terms of any separate license agreement you may have executed
773
+ with Licensor regarding such Contributions.
774
+
775
+ 6. Trademarks. This License does not grant permission to use the trade
776
+ names, trademarks, service marks, or product names of the Licensor,
777
+ except as required for reasonable and customary use in describing the
778
+ origin of the Work and reproducing the content of the NOTICE file.
779
+
780
+ 7. Disclaimer of Warranty. Unless required by applicable law or
781
+ agreed to in writing, Licensor provides the Work (and each
782
+ Contributor provides its Contributions) on an "AS IS" BASIS,
783
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
784
+ implied, including, without limitation, any warranties or conditions
785
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
786
+ PARTICULAR PURPOSE. You are solely responsible for determining the
787
+ appropriateness of using or redistributing the Work and assume any
788
+ risks associated with Your exercise of permissions under this License.
789
+
790
+ 8. Limitation of Liability. In no event and under no legal theory,
791
+ whether in tort (including negligence), contract, or otherwise,
792
+ unless required by applicable law (such as deliberate and grossly
793
+ negligent acts) or agreed to in writing, shall any Contributor be
794
+ liable to You for damages, including any direct, indirect, special,
795
+ incidental, or consequential damages of any character arising as a
796
+ result of this License or out of the use or inability to use the
797
+ Work (including but not limited to damages for loss of goodwill,
798
+ work stoppage, computer failure or malfunction, or any and all
799
+ other commercial damages or losses), even if such Contributor
800
+ has been advised of the possibility of such damages.
801
+
802
+ 9. Accepting Warranty or Additional Liability. While redistributing
803
+ the Work or Derivative Works thereof, You may choose to offer,
804
+ and charge a fee for, acceptance of support, warranty, indemnity,
805
+ or other liability obligations and/or rights consistent with this
806
+ License. However, in accepting such obligations, You may act only
807
+ on Your own behalf and on Your sole responsibility, not on behalf
808
+ of any other Contributor, and only if You agree to indemnify,
809
+ defend, and hold each Contributor harmless for any liability
810
+ incurred by, or claims asserted against, such Contributor by reason
811
+ of your accepting any such warranty or additional liability.
812
+
813
+ END OF TERMS AND CONDITIONS
814
+
815
+ APPENDIX: How to apply the Apache License to your work.
816
+
817
+ To apply the Apache License to your work, attach the following
818
+ boilerplate notice, with the fields enclosed by brackets "[]"
819
+ replaced with your own identifying information. (Don't include
820
+ the brackets!) The text should be enclosed in the appropriate
821
+ comment syntax for the file format. We also recommend that a
822
+ file or class name and description of purpose be included on the
823
+ same "printed page" as the copyright notice for easier
824
+ identification within third-party archives.
825
+
826
+ Copyright (c) 2015-2018 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors
827
+
828
+ Licensed under the Apache License, Version 2.0 (the "License");
829
+ you may not use this file except in compliance with the License.
830
+ You may obtain a copy of the License at
831
+
832
+ http://www.apache.org/licenses/LICENSE-2.0
833
+
834
+ Unless required by applicable law or agreed to in writing, software
835
+ distributed under the License is distributed on an "AS IS" BASIS,
836
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
837
+ See the License for the specific language governing permissions and
838
+ limitations under the License.
839
+ ```
840
+
841
+ ### `webrtc-adapter` 9.0.6
842
+
843
+ ```text
844
+ Copyright (c) 2014, The WebRTC project authors. All rights reserved.
845
+ Copyright (c) 2018, The adapter.js project authors. All rights reserved.
846
+
847
+ Redistribution and use in source and binary forms, with or without
848
+ modification, are permitted provided that the following conditions are
849
+ met:
850
+
851
+ * Redistributions of source code must retain the above copyright
852
+ notice, this list of conditions and the following disclaimer.
853
+
854
+ * Redistributions in binary form must reproduce the above copyright
855
+ notice, this list of conditions and the following disclaimer in
856
+ the documentation and/or other materials provided with the
857
+ distribution.
858
+
859
+ * Neither the name of Google nor the names of its contributors may
860
+ be used to endorse or promote products derived from this software
861
+ without specific prior written permission.
862
+
863
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
864
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
865
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
866
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
867
+ HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
868
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
869
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
870
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
871
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
872
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
873
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
874
+ ```
875
+
876
+ ### `tslib` 2.8.1
877
+
878
+ ```text
879
+ Copyright (c) Microsoft Corporation.
880
+
881
+ Permission to use, copy, modify, and/or distribute this software for any
882
+ purpose with or without fee is hereby granted.
883
+
884
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
885
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
886
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
887
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
888
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
889
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
890
+ PERFORMANCE OF THIS SOFTWARE.
891
+ ```
892
+
893
+ ### `events` 3.3.0
894
+
895
+ ```text
896
+ MIT
897
+
898
+ Copyright Joyent, Inc. and other Node contributors.
899
+
900
+ Permission is hereby granted, free of charge, to any person obtaining a
901
+ copy of this software and associated documentation files (the
902
+ "Software"), to deal in the Software without restriction, including
903
+ without limitation the rights to use, copy, modify, merge, publish,
904
+ distribute, sublicense, and/or sell copies of the Software, and to permit
905
+ persons to whom the Software is furnished to do so, subject to the
906
+ following conditions:
907
+
908
+ The above copyright notice and this permission notice shall be included
909
+ in all copies or substantial portions of the Software.
910
+
911
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
912
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
913
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
914
+ NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
915
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
916
+ OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
917
+ USE OR OTHER DEALINGS IN THE SOFTWARE.
918
+ ```
919
+
920
+ ### `jose` 6.2.10
921
+
922
+ ```text
923
+ The MIT License (MIT)
924
+
925
+ Copyright (c) 2018 Filip Skokan
926
+
927
+ Permission is hereby granted, free of charge, to any person obtaining a copy
928
+ of this software and associated documentation files (the "Software"), to deal
929
+ in the Software without restriction, including without limitation the rights
930
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
931
+ copies of the Software, and to permit persons to whom the Software is
932
+ furnished to do so, subject to the following conditions:
933
+
934
+ The above copyright notice and this permission notice shall be included in all
935
+ copies or substantial portions of the Software.
936
+
937
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
938
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
939
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
940
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
941
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
942
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
943
+ SOFTWARE.
944
+ ```
945
+
946
+ ### `loglevel` 1.9.2
947
+
948
+ ```text
949
+ Copyright (c) 2013 Tim Perry
950
+
951
+ Permission is hereby granted, free of charge, to any person
952
+ obtaining a copy of this software and associated documentation
953
+ files (the "Software"), to deal in the Software without
954
+ restriction, including without limitation the rights to use,
955
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
956
+ copies of the Software, and to permit persons to whom the
957
+ Software is furnished to do so, subject to the following
958
+ conditions:
959
+
960
+ The above copyright notice and this permission notice shall be
961
+ included in all copies or substantial portions of the Software.
962
+
963
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
964
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
965
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
966
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
967
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
968
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
969
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
970
+ OTHER DEALINGS IN THE SOFTWARE.
971
+ ```
972
+
973
+ ### `machina` 7.0.1
974
+
975
+ ```text
976
+ Copyright (c) 2011-2023 Jim Cowart (MIT License)
977
+
978
+ Permission is hereby granted, free of charge, to any person
979
+ obtaining a copy of this software and associated documentation
980
+ files (the "Software"), to deal in the Software without
981
+ restriction, including without limitation the rights to use,
982
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
983
+ copies of the Software, and to permit persons to whom the
984
+ Software is furnished to do so, subject to the following
985
+ conditions:
986
+
987
+ The above copyright notice and this permission notice shall be
988
+ included in all copies or substantial portions of the Software.
989
+
990
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
991
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
992
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
993
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
994
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
995
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
996
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
997
+ OTHER DEALINGS IN THE SOFTWARE.
998
+
999
+ See http://opensource.org/licenses/MIT for more details.
1000
+
1001
+ --------------------------------------------------------------------
1002
+ Also available under GPL 2.0
1003
+ Copyright (c) 2011-2015 Jim Cowart (GPL-2.0 License)
1004
+
1005
+ This program is free software; you can redistribute it and/or modify
1006
+ it under the terms of the GNU General Public License as published by
1007
+ the Free Software Foundation; either version 2 of the License, or (at
1008
+ your option) any later version.
1009
+
1010
+ This program is distributed in the hope that it will be useful, but
1011
+ WITHOUT ANY WARRANTY; without even the implied warranty of
1012
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1013
+ General Public License for more details.
1014
+
1015
+ See http://opensource.org/licenses/GPL-2.0 for more details
1016
+
1017
+ --------------------------------------------------------------------
1018
+
1019
+ The extend function included in machina was very heavily borrowed
1020
+ from the backbone.js project, which can be found at http://backbonejs.org.
1021
+ Due to its origin, the backbone license is included below as well.
1022
+
1023
+ Copyright (c) 2010-2012 Jeremy Ashkenas, DocumentCloud
1024
+
1025
+ Permission is hereby granted, free of charge, to any person
1026
+ obtaining a copy of this software and associated documentation
1027
+ files (the "Software"), to deal in the Software without
1028
+ restriction, including without limitation the rights to use,
1029
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
1030
+ copies of the Software, and to permit persons to whom the
1031
+ Software is furnished to do so, subject to the following
1032
+ conditions:
1033
+
1034
+ The above copyright notice and this permission notice shall be
1035
+ included in all copies or substantial portions of the Software.
1036
+
1037
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
1038
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
1039
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
1040
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
1041
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
1042
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
1043
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
1044
+ OTHER DEALINGS IN THE SOFTWARE.
1045
+ ```
1046
+
1047
+ ### `sdp` 3.2.2
1048
+
1049
+ ```text
1050
+ Copyright (c) 2017 Philipp Hancke
1051
+
1052
+ Permission is hereby granted, free of charge, to any person obtaining a copy
1053
+ of this software and associated documentation files (the "Software"), to deal
1054
+ in the Software without restriction, including without limitation the rights
1055
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
1056
+ copies of the Software, and to permit persons to whom the Software is
1057
+ furnished to do so, subject to the following conditions:
1058
+
1059
+ The above copyright notice and this permission notice shall be included in all
1060
+ copies or substantial portions of the Software.
1061
+
1062
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1063
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1064
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
1065
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1066
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
1067
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
1068
+ SOFTWARE.
1069
+ ```
1070
+
1071
+ ### `sdp-transform` 2.15.0
1072
+
1073
+ ```text
1074
+ (The MIT License)
1075
+
1076
+ Copyright (c) 2013 Eirik Albrigtsen
1077
+
1078
+ Permission is hereby granted, free of charge, to any person obtaining
1079
+ a copy of this software and associated documentation files (the
1080
+ 'Software'), to deal in the Software without restriction, including
1081
+ without limitation the rights to use, copy, modify, merge, publish,
1082
+ distribute, sublicense, and/or sell copies of the Software, and to
1083
+ permit persons to whom the Software is furnished to do so, subject to
1084
+ the following conditions:
1085
+
1086
+ The above copyright notice and this permission notice shall be
1087
+ included in all copies or substantial portions of the Software.
1088
+
1089
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
1090
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
1091
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
1092
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
1093
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
1094
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
1095
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1096
+ ```
1097
+
1098
+ ### `typed-emitter` 2.1.0
1099
+
1100
+ ```text
1101
+ The MIT License (MIT)
1102
+
1103
+ Copyright (c) 2018 Andy Wermke
1104
+
1105
+ Permission is hereby granted, free of charge, to any person obtaining a copy
1106
+ of this software and associated documentation files (the "Software"), to deal
1107
+ in the Software without restriction, including without limitation the rights
1108
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
1109
+ copies of the Software, and to permit persons to whom the Software is
1110
+ furnished to do so, subject to the following conditions:
1111
+
1112
+ The above copyright notice and this permission notice shall be included in
1113
+ all copies or substantial portions of the Software.
1114
+
1115
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1116
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1117
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
1118
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1119
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
1120
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
1121
+ THE SOFTWARE.
1122
+ ```
1123
+
1124
+ ## Python dependency notices for release 1.7.0
1125
+
1126
+ The license texts linked below were copied from the installed, locked distributions used for this release. They include Authlib, joserfc and httpx2 as actually installed. Runtime and development/build scope are distinguished. These records do not change third-party license terms or establish legal compatibility.
1127
+
1128
+ | Package | Version | Scope | License evidence |
1129
+ |---|---|---|---|
1130
+ | annotated-doc | 0.0.5 | release-runtime | MIT; [ee27fe45-LICENSE](docs/ip/python_licenses/annotated-doc-0.0.5/ee27fe45-LICENSE) |
1131
+ | annotated-types | 0.8.0 | release-runtime | MIT; [289bfef3-LICENSE](docs/ip/python_licenses/annotated-types-0.8.0/289bfef3-LICENSE) |
1132
+ | anyio | 4.14.2 | release-runtime | MIT; [9ef47b44-LICENSE](docs/ip/python_licenses/anyio-4.14.2/9ef47b44-LICENSE) |
1133
+ | Authlib | 1.8.0 | release-runtime | License :: OSI Approved :: BSD License; [0dcb0ec2-LICENSE](docs/ip/python_licenses/authlib-1.8.0/0dcb0ec2-LICENSE) |
1134
+ | brotli | 1.2.0 | release-runtime | Metadata/texts; see manifest; [5927d884-LICENSE](docs/ip/python_licenses/brotli-1.2.0/5927d884-LICENSE) |
1135
+ | certifi | 2026.7.22 | release-runtime | License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0); [c1aedbaa-LICENSE](docs/ip/python_licenses/certifi-2026.7.22/c1aedbaa-LICENSE) |
1136
+ | cffi | 2.1.1 | release-runtime | MIT-0; [2e2d841f-LICENSE](docs/ip/python_licenses/cffi-2.1.1/2e2d841f-LICENSE) |
1137
+ | charset-normalizer | 3.5.1 | release-runtime | Metadata/texts; see manifest; [28e1644c-LICENSE](docs/ip/python_licenses/charset-normalizer-3.5.1/28e1644c-LICENSE) |
1138
+ | click | 8.5.0 | release-runtime | BSD-3-Clause; [1c294ee0-LICENSE.txt](docs/ip/python_licenses/click-8.5.0/1c294ee0-LICENSE.txt) |
1139
+ | contourpy | 1.3.3 | release-runtime | License :: OSI Approved :: BSD License; [19fd8c3d-LICENSE](docs/ip/python_licenses/contourpy-1.3.3/19fd8c3d-LICENSE) |
1140
+ | cryptography | 50.0.1 | release-runtime | Apache-2.0 OR BSD-3-Clause; [385b4da6-LICENSE](docs/ip/python_licenses/cryptography-50.0.1/385b4da6-LICENSE), [db31d16a-LICENSE.APACHE](docs/ip/python_licenses/cryptography-50.0.1/db31d16a-LICENSE.APACHE), [04b8f74b-LICENSE.BSD](docs/ip/python_licenses/cryptography-50.0.1/04b8f74b-LICENSE.BSD) |
1141
+ | cycler | 0.12.1 | release-runtime | License :: OSI Approved :: BSD License; [4e2f52aa-LICENSE](docs/ip/python_licenses/cycler-0.12.1/4e2f52aa-LICENSE) |
1142
+ | distro | 1.9.0 | release-runtime | License :: OSI Approved :: Apache Software License; [c84a90c8-LICENSE](docs/ip/python_licenses/distro-1.9.0/c84a90c8-LICENSE) |
1143
+ | fastapi | 0.141.1 | release-runtime | MIT; [a1502cf3-LICENSE](docs/ip/python_licenses/fastapi-0.141.1/a1502cf3-LICENSE) |
1144
+ | filelock | 3.32.4 | release-runtime | MIT; [04755112-LICENSE](docs/ip/python_licenses/filelock-3.32.4/04755112-LICENSE) |
1145
+ | fonttools | 4.64.0 | release-runtime | Metadata/texts; see manifest; [bef658bc-LICENSE](docs/ip/python_licenses/fonttools-4.64.0/bef658bc-LICENSE), [b30aa28f-LICENSE.external](docs/ip/python_licenses/fonttools-4.64.0/b30aa28f-LICENSE.external) |
1146
+ | fsspec | 2026.7.0 | release-runtime | BSD-3-Clause; [0f926ee2-LICENSE](docs/ip/python_licenses/fsspec-2026.7.0/0f926ee2-LICENSE) |
1147
+ | gradio | 6.24.0 | release-runtime | Apache-2.0; [6e5caf40-LICENSE](docs/ip/python_licenses/gradio-6.24.0/6e5caf40-LICENSE), [98eb6b65-LICENSE](docs/ip/python_licenses/gradio-6.24.0/98eb6b65-LICENSE), [d0379463-LICENSE](docs/ip/python_licenses/gradio-6.24.0/d0379463-LICENSE), [36e4ed03-LICENSE](docs/ip/python_licenses/gradio-6.24.0/36e4ed03-LICENSE), [e08e302c-LICENSE](docs/ip/python_licenses/gradio-6.24.0/e08e302c-LICENSE) |
1148
+ | gradio_client | 2.6.0 | release-runtime | Apache-2.0; [Canonical Apache License 2.0](docs/ip/python_licenses/gradio-client-2.6.0/APACHE-LICENSE-2.0.txt) paired with exact package license metadata; [provenance](docs/ip/gradio_client_license_provenance.json). No package-specific NOTICE was found in wheel/source distribution. |
1149
+ | groovy | 0.1.2 | release-runtime | License :: OSI Approved :: MIT License; [aa1c57ec-LICENSE](docs/ip/python_licenses/groovy-0.1.2/aa1c57ec-LICENSE) |
1150
+ | h11 | 0.16.0 | release-runtime | License :: OSI Approved :: MIT License; [39d084ff-LICENSE.txt](docs/ip/python_licenses/h11-0.16.0/39d084ff-LICENSE.txt) |
1151
+ | hf-gradio | 0.4.1 | release-runtime | MIT; [75958bf5-LICENSE](docs/ip/python_licenses/hf-gradio-0.4.1/75958bf5-LICENSE) |
1152
+ | hf-xet | 1.6.0 | release-runtime | Apache-2.0; [42ca6e26-LICENSE](docs/ip/python_licenses/hf-xet-1.6.0/42ca6e26-LICENSE) |
1153
+ | httpcore | 1.0.9 | release-runtime | BSD-3-Clause; [b6618d8d-LICENSE.md](docs/ip/python_licenses/httpcore-1.0.9/b6618d8d-LICENSE.md) |
1154
+ | httpcore2 | 2.12.0 | release-runtime | BSD-3-Clause; [5a530193-LICENSE.md](docs/ip/python_licenses/httpcore2-2.12.0/5a530193-LICENSE.md) |
1155
+ | httpx | 0.28.1 | release-runtime | License :: OSI Approved :: BSD License; [1a79882f-LICENSE.md](docs/ip/python_licenses/httpx-0.28.1/1a79882f-LICENSE.md) |
1156
+ | httpx2 | 2.12.0 | release-runtime | BSD-3-Clause; [63bf7d5c-LICENSE.md](docs/ip/python_licenses/httpx2-2.12.0/63bf7d5c-LICENSE.md) |
1157
+ | huggingface_hub | 1.27.0 | release-runtime | License :: OSI Approved :: Apache Software License; [0caf54be-LICENSE](docs/ip/python_licenses/huggingface-hub-1.27.0/0caf54be-LICENSE) |
1158
+ | idna | 3.19 | release-runtime | BSD-3-Clause; [acdc9303-LICENSE.md](docs/ip/python_licenses/idna-3.19/acdc9303-LICENSE.md) |
1159
+ | iniconfig | 2.3.0 | locked-development-or-build | MIT; [7be90225-LICENSE](docs/ip/python_licenses/iniconfig-2.3.0/7be90225-LICENSE) |
1160
+ | Jinja2 | 3.1.6 | release-runtime | License :: OSI Approved :: BSD License; [b0ec1e61-LICENSE.txt](docs/ip/python_licenses/jinja2-3.1.6/b0ec1e61-LICENSE.txt) |
1161
+ | jiter | 0.16.0 | release-runtime | MIT; [67d87e5c-LICENSE](docs/ip/python_licenses/jiter-0.16.0/67d87e5c-LICENSE) |
1162
+ | joserfc | 1.7.5 | release-runtime | License :: OSI Approved :: BSD License; [acf310f1-LICENSE](docs/ip/python_licenses/joserfc-1.7.5/acf310f1-LICENSE) |
1163
+ | kiwisolver | 1.5.1 | release-runtime | License :: OSI Approved :: BSD License; [23ee68f7-LICENSE](docs/ip/python_licenses/kiwisolver-1.5.1/23ee68f7-LICENSE) |
1164
+ | libsql | 0.1.11 | release-runtime | Metadata/texts; see manifest; [fa97a58b-LICENSE.md](docs/ip/python_licenses/libsql-0.1.11/fa97a58b-LICENSE.md) |
1165
+ | lxml | 6.1.3 | release-runtime | Metadata/texts; see manifest; [792e684e-LICENSE.txt](docs/ip/python_licenses/lxml-6.1.3/792e684e-LICENSE.txt) |
1166
+ | markdown-it-py | 4.2.0 | release-runtime | License :: OSI Approved :: MIT License; [d0465fdc-LICENSE](docs/ip/python_licenses/markdown-it-py-4.2.0/d0465fdc-LICENSE), [b883c1f0-LICENSE.markdown-it](docs/ip/python_licenses/markdown-it-py-4.2.0/b883c1f0-LICENSE.markdown-it) |
1167
+ | MarkupSafe | 3.0.3 | release-runtime | BSD-3-Clause; [2102cfff-LICENSE.txt](docs/ip/python_licenses/markupsafe-3.0.3/2102cfff-LICENSE.txt) |
1168
+ | matplotlib | 3.10.8 | release-runtime | License :: OSI Approved :: Python Software Foundation License; [1b2617b9-LICENSE](docs/ip/python_licenses/matplotlib-3.10.8/1b2617b9-LICENSE) |
1169
+ | mdurl | 0.1.2 | release-runtime | License :: OSI Approved :: MIT License; [95bd6add-LICENSE](docs/ip/python_licenses/mdurl-0.1.2/95bd6add-LICENSE) |
1170
+ | mpmath | 1.3.0 | release-runtime | License :: OSI Approved :: BSD License; [21b64ce3-LICENSE](docs/ip/python_licenses/mpmath-1.3.0/21b64ce3-LICENSE) |
1171
+ | numpy | 2.5.2 | release-runtime | BSD-3-Clause AND 0BSD AND MIT AND Zlib AND CC0-1.0; [fb5540f4-LICENSE.txt](docs/ip/python_licenses/numpy-2.5.2/fb5540f4-LICENSE.txt), [87e91678-LICENSE.txt](docs/ip/python_licenses/numpy-2.5.2/87e91678-LICENSE.txt), [e4f92bad-COPYING](docs/ip/python_licenses/numpy-2.5.2/e4f92bad-COPYING), [9f8e40c5-LICENSE](docs/ip/python_licenses/numpy-2.5.2/9f8e40c5-LICENSE), [cd3c96ff-LICENSE.md](docs/ip/python_licenses/numpy-2.5.2/cd3c96ff-LICENSE.md), [95d0e166-LICENSE](docs/ip/python_licenses/numpy-2.5.2/95d0e166-LICENSE), [d0fb1067-LICENSE.md](docs/ip/python_licenses/numpy-2.5.2/d0fb1067-LICENSE.md), [c2e32b07-LICENSE.txt](docs/ip/python_licenses/numpy-2.5.2/c2e32b07-LICENSE.txt), [94c08f23-LICENSE](docs/ip/python_licenses/numpy-2.5.2/94c08f23-LICENSE), [2ee881cf-LICENSE.md](docs/ip/python_licenses/numpy-2.5.2/2ee881cf-LICENSE.md), [9d6c3b8d-LICENSE.md](docs/ip/python_licenses/numpy-2.5.2/9d6c3b8d-LICENSE.md), [954175b4-LICENSE.md](docs/ip/python_licenses/numpy-2.5.2/954175b4-LICENSE.md), [99d1a212-LICENSE.md](docs/ip/python_licenses/numpy-2.5.2/99d1a212-LICENSE.md), [fccf2a3b-LICENSE.md](docs/ip/python_licenses/numpy-2.5.2/fccf2a3b-LICENSE.md), [89589bca-LICENSE.md](docs/ip/python_licenses/numpy-2.5.2/89589bca-LICENSE.md), [23105799-LICENSE.md](docs/ip/python_licenses/numpy-2.5.2/23105799-LICENSE.md), [0f4ffb29-LICENSE.txt](docs/ip/python_licenses/numpy-2.5.2/0f4ffb29-LICENSE.txt), [ddfcf346-LICENSE](docs/ip/python_licenses/numpy-2.5.2/ddfcf346-LICENSE), [c21c9379-LICENSE.md](docs/ip/python_licenses/numpy-2.5.2/c21c9379-LICENSE.md) |
1172
+ | openai | 2.54.0 | release-runtime | License :: OSI Approved :: Apache Software License; [81adebaa-LICENSE](docs/ip/python_licenses/openai-2.54.0/81adebaa-LICENSE) |
1173
+ | orjson | 3.12.0 | release-runtime | MPL-2.0 AND (Apache-2.0 OR MIT); [3b52b294-LICENSE-APACHE](docs/ip/python_licenses/orjson-3.12.0/3b52b294-LICENSE-APACHE), [fdfef034-LICENSE-MIT](docs/ip/python_licenses/orjson-3.12.0/fdfef034-LICENSE-MIT), [bd633a0e-LICENSE-MPL-2.0](docs/ip/python_licenses/orjson-3.12.0/bd633a0e-LICENSE-MPL-2.0) |
1174
+ | packaging | 26.3 | release-runtime | Apache-2.0 OR BSD-2-Clause; [11c854e2-LICENSE](docs/ip/python_licenses/packaging-26.3/11c854e2-LICENSE), [e9a5bac8-LICENSE.APACHE](docs/ip/python_licenses/packaging-26.3/e9a5bac8-LICENSE.APACHE), [ef96a084-LICENSE.BSD](docs/ip/python_licenses/packaging-26.3/ef96a084-LICENSE.BSD) |
1175
+ | pandas | 2.3.3 | release-runtime | License :: OSI Approved :: BSD License; [631a102d-LICENSE](docs/ip/python_licenses/pandas-2.3.3/631a102d-LICENSE) |
1176
+ | pillow | 12.3.0 | release-runtime | MIT-CMU; [60b85706-LICENSE](docs/ip/python_licenses/pillow-12.3.0/60b85706-LICENSE) |
1177
+ | pluggy | 1.6.0 | locked-development-or-build | License :: OSI Approved :: MIT License; [a308a425-LICENSE](docs/ip/python_licenses/pluggy-1.6.0/a308a425-LICENSE) |
1178
+ | pycparser | 3.0 | release-runtime | BSD-3-Clause; [b4cf246d-LICENSE](docs/ip/python_licenses/pycparser-3.0/b4cf246d-LICENSE) |
1179
+ | pydantic | 2.13.5 | release-runtime | MIT; [ea58743d-LICENSE](docs/ip/python_licenses/pydantic-2.13.5/ea58743d-LICENSE) |
1180
+ | pydantic_core | 2.46.5 | release-runtime | MIT; [bd6c3cae-LICENSE](docs/ip/python_licenses/pydantic-core-2.46.5/bd6c3cae-LICENSE) |
1181
+ | pydub | 0.25.1 | release-runtime | License :: OSI Approved :: MIT License; [ea824f56-AUTHORS](docs/ip/python_licenses/pydub-0.25.1/ea824f56-AUTHORS), [ccd9e6d5-LICENSE](docs/ip/python_licenses/pydub-0.25.1/ccd9e6d5-LICENSE) |
1182
+ | Pygments | 2.21.0 | release-runtime | BSD-2-Clause; [34110d95-AUTHORS](docs/ip/python_licenses/pygments-2.21.0/34110d95-AUTHORS), [62c35449-LICENSE](docs/ip/python_licenses/pygments-2.21.0/62c35449-LICENSE) |
1183
+ | PyJWT | 2.13.0 | release-runtime | MIT; [35bb42f2-AUTHORS.rst](docs/ip/python_licenses/pyjwt-2.13.0/35bb42f2-AUTHORS.rst), [83214ab7-LICENSE](docs/ip/python_licenses/pyjwt-2.13.0/83214ab7-LICENSE) |
1184
+ | pyparsing | 3.3.2 | release-runtime | MIT; [325a1a4b-LICENSE](docs/ip/python_licenses/pyparsing-3.3.2/325a1a4b-LICENSE) |
1185
+ | pytest | 9.0.3 | locked-development-or-build | MIT; [5832e8fe-LICENSE](docs/ip/python_licenses/pytest-9.0.3/5832e8fe-LICENSE) |
1186
+ | python-dateutil | 2.9.0.post0 | release-runtime | License :: OSI Approved :: BSD License; License :: OSI Approved :: Apache Software License; [bd1e7a7d-LICENSE](docs/ip/python_licenses/python-dateutil-2.9.0.post0/bd1e7a7d-LICENSE) |
1187
+ | python-docx | 1.2.0 | release-runtime | License :: OSI Approved :: MIT License; [5af0446e-LICENSE](docs/ip/python_licenses/python-docx-1.2.0/5af0446e-LICENSE) |
1188
+ | python-multipart | 0.0.32 | release-runtime | Apache-2.0; [ca8b4405-LICENSE.txt](docs/ip/python_licenses/python-multipart-0.0.32/ca8b4405-LICENSE.txt) |
1189
+ | pytz | 2026.3.post1 | release-runtime | License :: OSI Approved :: MIT License; [1836a4fb-LICENSE.txt](docs/ip/python_licenses/pytz-2026.3.post1/1836a4fb-LICENSE.txt) |
1190
+ | PyYAML | 6.0.3 | release-runtime | License :: OSI Approved :: MIT License; [1f5c9467-LICENSE](docs/ip/python_licenses/pyyaml-6.0.3/1f5c9467-LICENSE) |
1191
+ | requests | 2.34.2 | release-runtime | License :: OSI Approved :: Apache Software License; [fb0b720c-LICENSE](docs/ip/python_licenses/requests-2.34.2/fb0b720c-LICENSE), [bd7b91af-NOTICE](docs/ip/python_licenses/requests-2.34.2/bd7b91af-NOTICE) |
1192
+ | rich | 15.0.0 | release-runtime | License :: OSI Approved :: MIT License; [bb9c3b1e-LICENSE](docs/ip/python_licenses/rich-15.0.0/bb9c3b1e-LICENSE) |
1193
+ | ruff | 0.16.5 | locked-development-or-build | MIT; [0a9aac48-LICENSE](docs/ip/python_licenses/ruff-0.16.5/0a9aac48-LICENSE) |
1194
+ | safehttpx | 0.1.7 | release-runtime | License :: OSI Approved :: MIT License; [733ab1ce-LICENSE](docs/ip/python_licenses/safehttpx-0.1.7/733ab1ce-LICENSE) |
1195
+ | semantic-version | 2.10.0 | release-runtime | License :: OSI Approved :: BSD License; [c758ddd4-LICENSE](docs/ip/python_licenses/semantic-version-2.10.0/c758ddd4-LICENSE) |
1196
+ | shellingham | 1.5.4 | release-runtime | License :: OSI Approved :: ISC License (ISCL); [e5daa4cc-LICENSE](docs/ip/python_licenses/shellingham-1.5.4/e5daa4cc-LICENSE) |
1197
+ | six | 1.17.0 | release-runtime | License :: OSI Approved :: MIT License; [3681ec3e-LICENSE](docs/ip/python_licenses/six-1.17.0/3681ec3e-LICENSE) |
1198
+ | sniffio | 1.3.1 | release-runtime | License :: OSI Approved :: MIT License; License :: OSI Approved :: Apache Software License; [e159a149-LICENSE](docs/ip/python_licenses/sniffio-1.3.1/e159a149-LICENSE), [954c7db5-LICENSE.APACHE2](docs/ip/python_licenses/sniffio-1.3.1/954c7db5-LICENSE.APACHE2), [b538e450-LICENSE.MIT](docs/ip/python_licenses/sniffio-1.3.1/b538e450-LICENSE.MIT) |
1199
+ | socksio | 1.0.0 | release-runtime | License :: OSI Approved :: MIT License; [7ec7f12c-LICENSE](docs/ip/python_licenses/socksio-1.0.0/7ec7f12c-LICENSE) |
1200
+ | starlette | 1.6.0 | release-runtime | BSD-3-Clause; [9d4b49ca-LICENSE.md](docs/ip/python_licenses/starlette-1.6.0/9d4b49ca-LICENSE.md) |
1201
+ | sympy | 1.14.0 | release-runtime | License :: OSI Approved :: BSD License; [5c2107f2-AUTHORS](docs/ip/python_licenses/sympy-1.14.0/5c2107f2-AUTHORS), [767eeaf7-LICENSE](docs/ip/python_licenses/sympy-1.14.0/767eeaf7-LICENSE), [94e2a313-LICENSE.txt](docs/ip/python_licenses/sympy-1.14.0/94e2a313-LICENSE.txt) |
1202
+ | tomlkit | 0.14.0 | release-runtime | License :: OSI Approved :: MIT License; [d7de5ded-LICENSE](docs/ip/python_licenses/tomlkit-0.14.0/d7de5ded-LICENSE) |
1203
+ | tqdm | 4.70.0 | release-runtime | Metadata/texts; see manifest; [8250daa3-LICENCE](docs/ip/python_licenses/tqdm-4.70.0/8250daa3-LICENCE) |
1204
+ | truststore | 0.10.4 | release-runtime | MIT; [9d4dfad8-LICENSE](docs/ip/python_licenses/truststore-0.10.4/9d4dfad8-LICENSE) |
1205
+ | typer | 0.27.2 | release-runtime | MIT; [7b4ea371-LICENSE](docs/ip/python_licenses/typer-0.27.2/7b4ea371-LICENSE), [8dba87f7-LICENSE.txt](docs/ip/python_licenses/typer-0.27.2/8dba87f7-LICENSE.txt) |
1206
+ | typing_extensions | 4.16.0 | release-runtime | PSF-2.0; [2231b6c4-LICENSE](docs/ip/python_licenses/typing-extensions-4.16.0/2231b6c4-LICENSE) |
1207
+ | typing-inspection | 0.4.4 | release-runtime | MIT; [215ebb85-LICENSE](docs/ip/python_licenses/typing-inspection-0.4.4/215ebb85-LICENSE) |
1208
+ | tzdata | 2026.3 | release-runtime | Metadata/texts; see manifest; [8615b07f-LICENSE](docs/ip/python_licenses/tzdata-2026.3/8615b07f-LICENSE) |
1209
+ | urllib3 | 2.7.0 | release-runtime | MIT; [0339980e-LICENSE.txt](docs/ip/python_licenses/urllib3-2.7.0/0339980e-LICENSE.txt) |
1210
+ | uvicorn | 0.41.0 | release-runtime | BSD-3-Clause; [736d6767-LICENSE.md](docs/ip/python_licenses/uvicorn-0.41.0/736d6767-LICENSE.md) |
app.py CHANGED
The diff for this file is too large to render. See raw diff
 
release_manifest.json CHANGED
@@ -1,18 +1,18 @@
1
  {
2
- "built_utc": "2026-08-30T18:20:27+00:00",
3
  "database_name": "dearmon-sat-act-learning-lab",
4
- "encrypted_payload_sha256": "adc070c86dbe93ba12cff7b924de4f2616f827718a05a6b4f0175e111443b436",
5
  "entry_module": "sat_act_lab.app_main",
6
- "fernet_secret_name": "SAT_ACT_APP_FERNET_V1_4_2_DEA36E04D801_0690259EE725",
7
- "key_fingerprint_sha256_prefix": "0690259EE725",
8
- "plaintext_archive_sha256": "dea36e04d801e349a085d0f9f83e1b568454323c7bcfff7f1cde213f1b0ee66c",
9
- "release_version": "1.4.2",
10
  "schema_namespace": "sat_act_learning_lab_v1",
11
  "schema_version": "dearmon-sat-act-release-v1",
12
  "source_members": {
13
  "sat_act_lab/__init__.py": {
14
  "bytes": 71,
15
- "sha256": "c2ea016aa58c3d10813a8b0cb468b2723622209c7c33b1b7c313de217c884369"
16
  },
17
  "sat_act_lab/act_english_bank.py": {
18
  "bytes": 79622,
@@ -26,25 +26,37 @@
26
  "bytes": 43952,
27
  "sha256": "5959db1e6a007f9384978c2a65af82e9bfd81216db939a1d852a91852badef8e"
28
  },
 
 
 
 
29
  "sat_act_lab/ai_question_overflow.py": {
30
- "bytes": 30007,
31
- "sha256": "9f557aea11cc2796e011031c70776dfd9cf3f4c0f8255fcbff9ded341580a4e4"
32
  },
33
  "sat_act_lab/app_main.py": {
34
- "bytes": 425891,
35
- "sha256": "0a2e53318d7a2c0ef36382d74a9c40cbd8969cbe2f7ede7d493b4b7c7ea9e8f7"
 
 
 
 
36
  },
37
  "sat_act_lab/attribute_graph.py": {
38
  "bytes": 131004,
39
  "sha256": "8188d65e7894a4c69aed1fdf9f8f4a0c7e90ca6055be44776fac8a39a7bb4dea"
40
  },
41
  "sat_act_lab/auth.py": {
42
- "bytes": 53065,
43
- "sha256": "ec077ace7061a00b6615711c0bd689819736b1e13732d9550c50412c713086f5"
44
  },
45
  "sat_act_lab/avatar.py": {
46
- "bytes": 73246,
47
- "sha256": "1456fe4834dec9636845ee0dd4794c4750abda703a5278079ce41b09d0fbbbff"
 
 
 
 
48
  },
49
  "sat_act_lab/blueprints.py": {
50
  "bytes": 49657,
@@ -54,45 +66,85 @@
54
  "bytes": 181295,
55
  "sha256": "f3e552f76e81cd1a65187cfa95c126b42497f7a623000057c55aa210eb24e978"
56
  },
 
 
 
 
57
  "sat_act_lab/curriculum.py": {
58
  "bytes": 34704,
59
  "sha256": "0ace42ff71e3eee09b7b0828807cda7ecad2ea86caeda9cb67c0b941ab70c960"
60
  },
 
 
 
 
61
  "sat_act_lab/demo_sessions.py": {
62
- "bytes": 37662,
63
- "sha256": "544b2163c3d39259108847468d8f9bb027ae65d3b13ee934a8f6d9a43d167943"
 
 
 
 
64
  },
65
  "sat_act_lab/diagnostic_reports.py": {
66
- "bytes": 74953,
67
- "sha256": "eedae1cd9aa5643b9923eb4c2d4879a17c066c4286e4aaccecea02f6094c04cb"
68
  },
69
  "sat_act_lab/diagnostic_skills.py": {
70
- "bytes": 119601,
71
- "sha256": "f31abccc2a3ef0554df6f5de50bdcb0d4871c3dd24d0ecacd8b8467b31f29b70"
 
 
 
 
 
 
 
 
72
  },
73
  "sat_act_lab/exam_engine.py": {
74
- "bytes": 100384,
75
- "sha256": "2abb720cd5a0a5a459cbcdc7ec1a8919ea50d7203cc809adccdefed4317e3a7f"
76
  },
77
  "sat_act_lab/exam_pdf_export.py": {
78
- "bytes": 47544,
79
- "sha256": "fce7b9417dee76dfbf2d0d9cdc212a3534295ae7f2764b318459a32f77c1aa17"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
80
  },
81
  "sat_act_lab/learner_exam_topics.py": {
82
- "bytes": 11795,
83
- "sha256": "bc32af89d411d8ff8918d74e026421707004adbf0e64e61d49706e3062526167"
84
  },
85
  "sat_act_lab/learning_concepts.py": {
86
  "bytes": 51827,
87
  "sha256": "cf32579466f8a97f1d299c78ace4a0fef16c6db51685dce0f164f160e910d06c"
88
  },
89
  "sat_act_lab/mastery_dashboard.py": {
90
- "bytes": 12958,
91
- "sha256": "5540dbdc9cc43cfd7f61c2a6bc9581044d0ff9ce22441022a58896f68a20ba03"
92
  },
93
  "sat_act_lab/mastery_dashboard_view.py": {
94
- "bytes": 26202,
95
- "sha256": "e1f2698a5c89a36893ea297556c89e93820e6dad2fae7e2916cb17f7c69c221b"
96
  },
97
  "sat_act_lab/math_rendering.py": {
98
  "bytes": 22555,
@@ -102,17 +154,77 @@
102
  "bytes": 6731,
103
  "sha256": "96dda3ddb76bc2d837769865fdbe177ad650bfd21cd158d161e5cb13123fa6a9"
104
  },
 
 
 
 
105
  "sat_act_lab/question_engine.py": {
106
- "bytes": 239549,
107
- "sha256": "49035bcdabbfeb78852b3a7c5a7756c97ec6106a28baafda66147eed5d091c9c"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
108
  },
109
  "sat_act_lab/topic_graph_report.py": {
110
- "bytes": 19837,
111
- "sha256": "0a6bb8a950a1f600e2d365bbbc7e9afba48c23be30d5440aa0fb94a2ed4ecbea"
112
  },
113
  "sat_act_lab/tracking.py": {
114
- "bytes": 218973,
115
- "sha256": "ddaca8f431faaef98ade06974e399bb4b09cc6c61ac64093d5a86cc928366a85"
116
  }
117
  },
118
  "space_file_hashes": {
@@ -121,24 +233,28 @@
121
  "sha256": "3b1fdd8eb2e17dc4edae8387f1bc9a18a8072a8d6fae3a71041f00f0b9b04103"
122
  },
123
  "DEPLOYMENT_NOTES.md": {
124
- "bytes": 9910,
125
- "sha256": "a7badb012c1a37b1c10da63f6ed3733d9eb5de99a87c0c1a5182eae469abefa7"
126
  },
127
  "README.md": {
128
- "bytes": 8342,
129
- "sha256": "c0fce1840ec6bbfc51fc228f5f9e9caf4d46bf08eaddf81f22acfca95cc9294c"
 
 
 
 
130
  },
131
  "app.py": {
132
- "bytes": 1086778,
133
- "sha256": "a3b6b387d9ccdebfe9441ca84fb0e67362d8d56d0f3fa68ad34ad10d59ab5c2d"
134
  },
135
  "requirements.txt": {
136
- "bytes": 301,
137
- "sha256": "82e9c9f08bbba04825943a5442185d82389605a6822b9740f555c6fe3aef5f3b"
138
  },
139
  "runtime.txt": {
140
- "bytes": 13,
141
- "sha256": "3c06f1fa700cc89985a58f039c6e5b4a973fc52e2c50b4fb092c0f89eb532f3a"
142
  }
143
  },
144
  "target_space": "DearmonAnalytics/SAT_ACT_Learning_Lab"
 
1
  {
2
+ "built_utc": "2026-09-08T00:57:08+00:00",
3
  "database_name": "dearmon-sat-act-learning-lab",
4
+ "encrypted_payload_sha256": "d05b5f7dc3f04a060dfca5579199f99469d4e41c79784794f0ccb42f23ed005c",
5
  "entry_module": "sat_act_lab.app_main",
6
+ "fernet_secret_name": "SAT_ACT_APP_FERNET_V1_7_0_5047BDC914D0_431E91CA28D4",
7
+ "key_fingerprint_sha256_prefix": "431E91CA28D4",
8
+ "plaintext_archive_sha256": "5047bdc914d0301005dba1d9e7c58bb4d1da4ceb38e04a85fb0b3bfa1b3c970e",
9
+ "release_version": "1.7.0",
10
  "schema_namespace": "sat_act_learning_lab_v1",
11
  "schema_version": "dearmon-sat-act-release-v1",
12
  "source_members": {
13
  "sat_act_lab/__init__.py": {
14
  "bytes": 71,
15
+ "sha256": "8baea69d8cf4beee0a4c8a1d514d665dda28007b5d23700bf9e109765d046188"
16
  },
17
  "sat_act_lab/act_english_bank.py": {
18
  "bytes": 79622,
 
26
  "bytes": 43952,
27
  "sha256": "5959db1e6a007f9384978c2a65af82e9bfd81216db939a1d852a91852badef8e"
28
  },
29
+ "sat_act_lab/adaptive_test.py": {
30
+ "bytes": 28551,
31
+ "sha256": "39e891a2a0ff1601db0bf0e4bbbd405e83838cf58c65f4c30b44afb9ec732bf2"
32
+ },
33
  "sat_act_lab/ai_question_overflow.py": {
34
+ "bytes": 33336,
35
+ "sha256": "e2e964945f7eb773ac6a4b47a9e2568b61ef738dce0ccf131895b76037e42acf"
36
  },
37
  "sat_act_lab/app_main.py": {
38
+ "bytes": 516880,
39
+ "sha256": "b20329f700c0186f0a79987df9a31ecdea09a49cae153d26033affd81c5075ee"
40
+ },
41
+ "sat_act_lab/assessment_checkpoint.py": {
42
+ "bytes": 9801,
43
+ "sha256": "f8e44a0ecf2c9be7237a224e2711b869fc836aec675e3218ed89ce35c3b89a9d"
44
  },
45
  "sat_act_lab/attribute_graph.py": {
46
  "bytes": 131004,
47
  "sha256": "8188d65e7894a4c69aed1fdf9f8f4a0c7e90ca6055be44776fac8a39a7bb4dea"
48
  },
49
  "sat_act_lab/auth.py": {
50
+ "bytes": 57838,
51
+ "sha256": "a7d0f6d4c4c5512b60bacc21c12bfecfee3e42659d72dad480c06d803303124c"
52
  },
53
  "sat_act_lab/avatar.py": {
54
+ "bytes": 79056,
55
+ "sha256": "b7c6212b18061908004aaf69058bbfc9eeade4df95cb27d785cfbdc961f545ba"
56
+ },
57
+ "sat_act_lab/baseline_diagnostic.py": {
58
+ "bytes": 23169,
59
+ "sha256": "0a3ae3ffe748476e1e31a02d478a8ac8487b14c8dd408f6fbce696cd52ec149b"
60
  },
61
  "sat_act_lab/blueprints.py": {
62
  "bytes": 49657,
 
66
  "bytes": 181295,
67
  "sha256": "f3e552f76e81cd1a65187cfa95c126b42497f7a623000057c55aa210eb24e978"
68
  },
69
+ "sat_act_lab/checkpoint_keys.py": {
70
+ "bytes": 2874,
71
+ "sha256": "4839554fcc85a6f8712eec50e53ffb3e1b1c39293fdf90aea9598bc6ff4824c2"
72
+ },
73
  "sat_act_lab/curriculum.py": {
74
  "bytes": 34704,
75
  "sha256": "0ace42ff71e3eee09b7b0828807cda7ecad2ea86caeda9cb67c0b941ab70c960"
76
  },
77
+ "sat_act_lab/data_lifecycle.py": {
78
+ "bytes": 8095,
79
+ "sha256": "3bf687f5c248ec5b1251e209c605b170618d7878b79c3e268b7c6043fe5e3e9b"
80
+ },
81
  "sat_act_lab/demo_sessions.py": {
82
+ "bytes": 46786,
83
+ "sha256": "56a701be1dd14e4c03677f839172098f677a6d9793131a9814aee6a22fbcc6eb"
84
+ },
85
+ "sat_act_lab/deployment_readiness.py": {
86
+ "bytes": 17630,
87
+ "sha256": "f1567a76e8adfcea2e01dce74453ab20d5bd13784e38019694f2d0e2c0fb0e8d"
88
  },
89
  "sat_act_lab/diagnostic_reports.py": {
90
+ "bytes": 75654,
91
+ "sha256": "b721e84931c453bb34b9ac1079028c10f868a681fa2c1eea2b5a36bfe3e3112b"
92
  },
93
  "sat_act_lab/diagnostic_skills.py": {
94
+ "bytes": 119838,
95
+ "sha256": "950d75358461fc61d11e84fc0362e4bb5b8535cb05e6f5ba1bf8c86fe5bdc953"
96
+ },
97
+ "sat_act_lab/entitlements.py": {
98
+ "bytes": 5639,
99
+ "sha256": "a99db3e80992a19a782cc0af82e2f5b8c05a06cd601acea999e3d61a1657481e"
100
+ },
101
+ "sat_act_lab/exam_accommodations.py": {
102
+ "bytes": 2246,
103
+ "sha256": "9554f9dc9db967c2fe51c27c59e3d15edadd690f4fb9d538833096783d790bc8"
104
  },
105
  "sat_act_lab/exam_engine.py": {
106
+ "bytes": 111250,
107
+ "sha256": "d1d2600b21edbe74ff1e4883fd214a34636249ecbc8f0bf6ff24c88d4e260c19"
108
  },
109
  "sat_act_lab/exam_pdf_export.py": {
110
+ "bytes": 52839,
111
+ "sha256": "d316a06172247f2cc0d9537df154a0d53ee8c6d754e4b4245c5c55dc5b003386"
112
+ },
113
+ "sat_act_lab/gradio_compat.py": {
114
+ "bytes": 3480,
115
+ "sha256": "e215beda038385d01a3453669c56d525b98f920c915cd6f23944cf595045c4dd"
116
+ },
117
+ "sat_act_lab/host_data_operations.py": {
118
+ "bytes": 11155,
119
+ "sha256": "10d9b19fceb78166e7a195d74bf91ad3136d4a1832bd8e595a5aa623bf275c30"
120
+ },
121
+ "sat_act_lab/institutional_identity.py": {
122
+ "bytes": 40080,
123
+ "sha256": "34e24a7072f36a6638cb240f92fcf28b44b0e31d7a83be26ba43206be64bd0ae"
124
+ },
125
+ "sat_act_lab/institutional_identity_config.py": {
126
+ "bytes": 2211,
127
+ "sha256": "fa504303396ddb4fd6e1cebf6ef6032965a6f4f695476aabd116d653ce4420b5"
128
+ },
129
+ "sat_act_lab/institutional_policy.py": {
130
+ "bytes": 12132,
131
+ "sha256": "cddb6b2c70d3958f1db605ccb3e4f470a961b3e674633a58135566596b615a64"
132
  },
133
  "sat_act_lab/learner_exam_topics.py": {
134
+ "bytes": 11804,
135
+ "sha256": "9b9387670c2a54c190cbcfb66136daa57b451da932940ab906b32ed5c22a7297"
136
  },
137
  "sat_act_lab/learning_concepts.py": {
138
  "bytes": 51827,
139
  "sha256": "cf32579466f8a97f1d299c78ace4a0fef16c6db51685dce0f164f160e910d06c"
140
  },
141
  "sat_act_lab/mastery_dashboard.py": {
142
+ "bytes": 12994,
143
+ "sha256": "abf33c155de23ae73551097c136963e5a710922dd767ea13a42b0e83d60fa9a2"
144
  },
145
  "sat_act_lab/mastery_dashboard_view.py": {
146
+ "bytes": 28304,
147
+ "sha256": "2feef6ba130169b1757ecdc9956da7f97f407b7b0669e7622059c529f08ba194"
148
  },
149
  "sat_act_lab/math_rendering.py": {
150
  "bytes": 22555,
 
154
  "bytes": 6731,
155
  "sha256": "96dda3ddb76bc2d837769865fdbe177ad650bfd21cd158d161e5cb13123fa6a9"
156
  },
157
+ "sat_act_lab/provider_execution.py": {
158
+ "bytes": 4378,
159
+ "sha256": "fd91fa4e509cf27d95a2364a3a98ce92520b788d672cec5cdef1c3a116404add"
160
+ },
161
  "sat_act_lab/question_engine.py": {
162
+ "bytes": 245340,
163
+ "sha256": "6cec92c215d6cd23e9408e035105b2cd76d907ca343bae0bb34621ca1577a58b"
164
+ },
165
+ "sat_act_lab/question_skill_audit.py": {
166
+ "bytes": 33101,
167
+ "sha256": "1f43f7af21ec98733ae2481ec900f9a202fc41d02f30952c274862ea223a81b2"
168
+ },
169
+ "sat_act_lab/recovery_compatibility.py": {
170
+ "bytes": 1670,
171
+ "sha256": "1ae37b6057f42b98b9e934449dcc4cff8f08327ca909dd2a788a326df0729ebc"
172
+ },
173
+ "sat_act_lab/release_authorization.py": {
174
+ "bytes": 17375,
175
+ "sha256": "3a551dfdece787ff06002231fc23e7732cc09ca4f323069d2245e0aa820fca2a"
176
+ },
177
+ "sat_act_lab/score_estimator.py": {
178
+ "bytes": 32840,
179
+ "sha256": "48f2e7003ce8f5ab212ba762cde536d96b24172b0764ade9f26d988430777f3b"
180
+ },
181
+ "sat_act_lab/security_audit.py": {
182
+ "bytes": 13679,
183
+ "sha256": "03ec02976f8dc9a4d4b145f0f6389dc812abfa243949bd8df628cfff6a776df5"
184
+ },
185
+ "sat_act_lab/simli_client_asset.py": {
186
+ "bytes": 225903,
187
+ "sha256": "237b038182940f8fc3b3b0e65d02a87ac0022a51227360f4f2e184d2c1c8f1a6"
188
+ },
189
+ "sat_act_lab/skill_hierarchy.py": {
190
+ "bytes": 47254,
191
+ "sha256": "559aa5297ce5eb12700b9f47934b5793be5280b335d476b4b4c204ec8a4b96e8"
192
+ },
193
+ "sat_act_lab/skill_hierarchy_catalog.py": {
194
+ "bytes": 1140829,
195
+ "sha256": "5c0637609b15be898dd065d9cdb2b42a41f5dafa885660c16bbbf9299ab0fc47"
196
+ },
197
+ "sat_act_lab/skill_mastery.py": {
198
+ "bytes": 10025,
199
+ "sha256": "4c0d8034380a61c81ea584d60fb0eb86625cd84e5b7289d243ab8a434279cf36"
200
+ },
201
+ "sat_act_lab/skill_mastery_view.py": {
202
+ "bytes": 31414,
203
+ "sha256": "8fd82d26c5511b8e9c5173c10e0de6df67178f4657dc8302319c8687bf88dd37"
204
+ },
205
+ "sat_act_lab/skill_score_impact.py": {
206
+ "bytes": 20209,
207
+ "sha256": "ee8af98a2a64cb8f7c897a93ee33f1e81270abe1d838f381a849b3e75a92657a"
208
+ },
209
+ "sat_act_lab/skill_score_impact_catalog.py": {
210
+ "bytes": 731409,
211
+ "sha256": "a5611da822176f15740182c54f0c81dd24c8accb38444aed02a1e9a940ee7da0"
212
+ },
213
+ "sat_act_lab/skill_score_impact_report.py": {
214
+ "bytes": 7813,
215
+ "sha256": "6b71da61df7af9d0bf73727435d2caf867826faab92f5f2bab9ca3a14df2e08f"
216
+ },
217
+ "sat_act_lab/timed_checkpoint.py": {
218
+ "bytes": 6541,
219
+ "sha256": "a22d65fba1f109069a637d9f9b980030649e7709e01f50974aa170a1515376ce"
220
  },
221
  "sat_act_lab/topic_graph_report.py": {
222
+ "bytes": 26350,
223
+ "sha256": "f151d8839bd6124c44d589eb61da57a1c99f4bcc1f77a46e5b80f1a7e77ad061"
224
  },
225
  "sat_act_lab/tracking.py": {
226
+ "bytes": 298292,
227
+ "sha256": "8b76c3778bf26a104f84cdd79ccf83c76111ced2be44089476caee9045d7b75d"
228
  }
229
  },
230
  "space_file_hashes": {
 
233
  "sha256": "3b1fdd8eb2e17dc4edae8387f1bc9a18a8072a8d6fae3a71041f00f0b9b04103"
234
  },
235
  "DEPLOYMENT_NOTES.md": {
236
+ "bytes": 18202,
237
+ "sha256": "eaefe2ae2454e8c04a8911c31b17e1d2af485eeba85c74e9f77260156e313edb"
238
  },
239
  "README.md": {
240
+ "bytes": 15288,
241
+ "sha256": "2c8bdf637d6ae44f83e09d578f72a880b252721d0fa4bc5ed21538cfacf5c0af"
242
+ },
243
+ "THIRD_PARTY_NOTICES.md": {
244
+ "bytes": 73850,
245
+ "sha256": "288997d5002f0932271a0a7173a2cf074f63e3c2ad0cd9195a6c32e4c29e452b"
246
  },
247
  "app.py": {
248
+ "bytes": 1999160,
249
+ "sha256": "2a1af44d2ea527836856e229a2c7f52711e4356fee0a24a860134761283ee6be"
250
  },
251
  "requirements.txt": {
252
+ "bytes": 38391,
253
+ "sha256": "b3c6a1bea8501441e75ee74f5ddd59e07727cf70a55c2cda6c6cce91ae6e3d68"
254
  },
255
  "runtime.txt": {
256
+ "bytes": 15,
257
+ "sha256": "322c1f7beac2944c506de4307cc2d5b9c0d3cedf305207353071f86bbd7dda9f"
258
  }
259
  },
260
  "target_space": "DearmonAnalytics/SAT_ACT_Learning_Lab"
requirements.txt CHANGED
@@ -1,18 +1,644 @@
1
- gradio==6.24.0
2
- gradio-client==2.6.0
3
- huggingface-hub==1.27.0
4
- fastapi==0.141.1
5
- starlette==1.6.0
6
- jinja2==3.1.6
7
- uvicorn==0.41.0
8
- numpy==2.5.2
9
- pandas==2.3.3
10
- matplotlib==3.10.8
11
- sympy==1.14.0
12
- requests==2.34.2
13
- pillow==12.1.1
14
- python-docx==1.2.0
15
- socksio==1.0.0
16
- libsql==0.1.11
17
- openai==2.54.0
18
- cryptography==46.0.7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # This file was autogenerated by uv via the following command:
2
+ # uv export --locked --no-dev --no-emit-project --format requirements-txt --output-file release/requirements.lock.txt
3
+ annotated-doc==0.0.5 \
4
+ --hash=sha256:117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101 \
5
+ --hash=sha256:c7e58ce09192557605d8bbd92836d7e1d520ac9580096042c0bfd197efacf1bb
6
+ # via
7
+ # fastapi
8
+ # typer
9
+ annotated-types==0.8.0 \
10
+ --hash=sha256:13b2beaad985e05e2d6407ee4c4f35590b11f8d693a258a561055cac8f64cab7 \
11
+ --hash=sha256:f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0
12
+ # via pydantic
13
+ anyio==4.14.2 \
14
+ --hash=sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494 \
15
+ --hash=sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f
16
+ # via
17
+ # gradio
18
+ # httpx
19
+ # httpx2
20
+ # openai
21
+ # starlette
22
+ authlib==1.8.0 \
23
+ --hash=sha256:88aebbd9af6757e14e912d5dc007ae1dc1f3e27e3b2152ce7c552ee2c3b3c121 \
24
+ --hash=sha256:f3ecd5f1da737262fb53bf1a4d95c4ea1ad9dd509316587a255c99ab1838a4f0
25
+ # via dearmon-sat-act-learning-lab
26
+ brotli==1.2.0 \
27
+ --hash=sha256:072e7624b1fc4d601036ab3f4f27942ef772887e876beff0301d261210bca97f \
28
+ --hash=sha256:260d3692396e1895c5034f204f0db022c056f9e2ac841593a4cf9426e2a3faca \
29
+ --hash=sha256:35d382625778834a7f3061b15423919aa03e4f5da34ac8e02c074e4b75ab4f84 \
30
+ --hash=sha256:7a47ce5c2288702e09dc22a44d0ee6152f2c7eda97b3c8482d826a1f3cfc7da7 \
31
+ --hash=sha256:7a61c06b334bd99bc5ae84f1eeb36bfe01400264b3c352f968c6e30a10f9d08b \
32
+ --hash=sha256:acec55bb7c90f1dfc476126f9711a8e81c9af7fb617409a9ee2953115343f08d \
33
+ --hash=sha256:adedc4a67e15327dfdd04884873c6d5a01d3e3b6f61406f99b1ed4865a2f6d28 \
34
+ --hash=sha256:af43b8711a8264bb4e7d6d9a6d004c3a2019c04c01127a868709ec29962b6036 \
35
+ --hash=sha256:b35c13ce241abdd44cb8ca70683f20c0c079728a36a996297adb5334adfc1c44 \
36
+ --hash=sha256:e310f77e41941c13340a95976fe66a8a95b01e783d430eeaf7a2f87e0a57dd0a \
37
+ --hash=sha256:e99befa0b48f3cd293dafeacdd0d191804d105d279e0b387a32054c1180f3161
38
+ # via gradio
39
+ certifi==2026.7.22 \
40
+ --hash=sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775 \
41
+ --hash=sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55
42
+ # via
43
+ # httpcore
44
+ # httpx
45
+ # requests
46
+ cffi==2.1.1 ; platform_python_implementation != 'PyPy' \
47
+ --hash=sha256:046bfc24911b37851ee1b51aab8bffe713d89c68c6a057b09484ce9fd5f69b4e \
48
+ --hash=sha256:208f941bb9d18e768138677f0a6d2ce01f590df56043dda1df1535ac57c88517 \
49
+ --hash=sha256:210019b6c7cf07f081b4c54635c8cf744377001350e29cc0f81c4377b4797735 \
50
+ --hash=sha256:3143d81e29e1e20a9ce10901ec369012947876596f75a222235965f2b7ae832e \
51
+ --hash=sha256:4a7c934f7360e8cd64fe9efadcbd10c7c6364f531e432b9a4bf5ccbc9e0e8b50 \
52
+ --hash=sha256:68e62fe11f30d5ca8289242866f0a5291402d8529ca2178ab8afc5c9694ae890 \
53
+ --hash=sha256:7bde5e4cc5c10140859842b9d383af292b22639a4dffb725314baf45968cef80 \
54
+ --hash=sha256:811bd1e21d32de12efca32393a0ab3f5133b54fce9bd44b8bd77ab07da14bf6a \
55
+ --hash=sha256:c1453022f490d2459a11819d83ad1d586e9ff65a12ac3e705ffebd46d3685dcf \
56
+ --hash=sha256:c8c69575568085ba0b1b10c0249d779a214aea6f6522e949a0fc9fb0fcb449d0 \
57
+ --hash=sha256:dd31f52ea1086513bb9df30f8fcee9b8918323ae067a3d5b78bc826a000712be \
58
+ --hash=sha256:f53e442b08449d42821fa4a4fba000095af9f62742a500f978a9f557ec44339a \
59
+ --hash=sha256:f81b3b8f3d4e343550fa4baa0e479bba9f2d29ce9c2e9b51d1ce1718d7442fcf
60
+ # via cryptography
61
+ charset-normalizer==3.5.1 \
62
+ --hash=sha256:1d1c7a53a6c2103925cdd6d7229f8c567379f211c869793df679f2e9f738c369 \
63
+ --hash=sha256:2f293479cce755c75f1697e87c409b7ae4c555c7dfecb6e988ad13abba943031 \
64
+ --hash=sha256:343fb4f2821043bd87095f7b08a1a181febc8e36ac64212143bbfd0a0e1bc235 \
65
+ --hash=sha256:3588e376b3ea2eea84976f67273d679f229e24c66dce7b82ae45aef04ff6e072 \
66
+ --hash=sha256:36047af20e17097c3bb9476c2b7655f2f7aa51322c0ba58c07695bedf755a950 \
67
+ --hash=sha256:3617ac3cfd8b9888f145ad89dd6e692285834b0201c6074a5eeaad3fd4d668c2 \
68
+ --hash=sha256:41876ee62a3dddf48ff1121ad8f0798032aa03f2fd35f21f34a4cab14f18d8d2 \
69
+ --hash=sha256:4582c27e8c889d64811987b5967fbd3ae0c823fe1fd933b543d55ac20bb475fa \
70
+ --hash=sha256:4abdc5f9ad448c1ecbfae2974b820535d6bc6e7eef63babbab3d81cf46968c71 \
71
+ --hash=sha256:4b599739b93b2cbeded49645ae3c8d1405c29ddfbceac1545c87a3f9580a9e96 \
72
+ --hash=sha256:4c4fb141a727957c93edfe5c32a26ceb6b5f6461d67146e2d39f51e16170bea8 \
73
+ --hash=sha256:5b6d1386bf0096d26d3a863dc0a487a5b4eb9aa93cf5ba69683d29dde6b9d60f \
74
+ --hash=sha256:5d8531a6569d025f68e2321e7638fb7978f23db58e5f69f56913837aae03816e \
75
+ --hash=sha256:6117b84ea48435e5356dc737f5121485c30920ba43375fa7b434fd753df0eac3 \
76
+ --hash=sha256:6df0ec430f9a831772c23ca5a224cba36517a58a84bb32c32bb59a9fa67c47f6 \
77
+ --hash=sha256:70055ff39b97c99e7ae40ea3e393fb62aa2e44dbd9b29f8d14f42fb0025c3959 \
78
+ --hash=sha256:7235dc28fc6dd9d832ac7c7bce95367dedb85929f17368a0c2bee1e080b9acbf \
79
+ --hash=sha256:7c0c10730342b0c9b35dd1d619beb8214e520bd96a1f870f452680b238aab3e0 \
80
+ --hash=sha256:87e4f41d375c0b9be2fb5251aee4b8a689169e134535aed81bf085c3b647451e \
81
+ --hash=sha256:88e85ab89cb822c1e635f51d6d32e488f94e002e70e2f492bdb8b945543f345a \
82
+ --hash=sha256:96fef3e886d6a9874b14f27fc193fbdc69d5d8035783d86aa4e1cea594e695f9 \
83
+ --hash=sha256:a2028475ba855475b8b4d3cfeb4994269c967aea8b9892dfba907f4263a863a3 \
84
+ --hash=sha256:a6dac12ff6b846103483683f60c5f8fee205121adc58ffd87e90a90a3af69e99 \
85
+ --hash=sha256:aae2ee51122d3ae968a3837d97dc24a0aeebb0dea23694422cd172bd30017cd6 \
86
+ --hash=sha256:ae4a097991662cd4fff0ddc74e0fe7874f82e00042fa0ea00855645ed0c79598 \
87
+ --hash=sha256:b39b69b347e5e47a3b5b8cfc005c68c1ba347474e3960236c4944a8ecd174962 \
88
+ --hash=sha256:b9af956078716df40d985fb0dfeb2c2120c5ca92ba4ff4b388acfd01cdc14d08 \
89
+ --hash=sha256:ba501e667c17d8411f98e67a022d9604ef179aff0e459b7e292c796837c13573 \
90
+ --hash=sha256:cee5dd7c6fb5dd52a0fe2a740f9bc6e3593f5f8b1788bde49de02086f30182b2 \
91
+ --hash=sha256:cfa1c0cc3a8f9f53f1243a5a99ac36fd003880199383b37672e86ddda9cb07e2 \
92
+ --hash=sha256:dd732602a7009217f658d5863d12d79d373a4de0eebc111094bcdd3bb8e0a6cc \
93
+ --hash=sha256:e199fb99720074809a7720f1c0b4d919eea8b87e88713e0f8f602f7bef543d9d \
94
+ --hash=sha256:e6621fb2a4988d6e53eedc455e5903e2679f3967b8acb3d639f1b63c14a2e893 \
95
+ --hash=sha256:f9f8405c2c758532c74fed975dbee57be1f31a6e865c031870c79a6ed3212ada
96
+ # via requests
97
+ click==8.5.0 \
98
+ --hash=sha256:255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360 \
99
+ --hash=sha256:ba0d2089de75ea0310e2dde03160e6ca10009947fb95a182f9b54021bb272e34
100
+ # via
101
+ # huggingface-hub
102
+ # uvicorn
103
+ colorama==0.4.6 ; sys_platform == 'win32' \
104
+ --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \
105
+ --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6
106
+ # via
107
+ # tqdm
108
+ # typer
109
+ contourpy==1.3.3 \
110
+ --hash=sha256:023b44101dfe49d7d53932be418477dba359649246075c996866106da069af69 \
111
+ --hash=sha256:07ce5ed73ecdc4a03ffe3e1b3e3c1166db35ae7584be76f65dbbe28a7791b0cc \
112
+ --hash=sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880 \
113
+ --hash=sha256:451e71b5a7d597379ef572de31eeb909a87246974d960049a9848c3bc6c41bf7 \
114
+ --hash=sha256:459c1f020cd59fcfe6650180678a9993932d80d44ccde1fa1868977438f0b411 \
115
+ --hash=sha256:4d00e655fcef08aba35ec9610536bfe90267d7ab5ba944f7032549c55a146da1 \
116
+ --hash=sha256:556dba8fb6f5d8742f2923fe9457dbdd51e1049c4a43fd3986a0b14a1d815fc6 \
117
+ --hash=sha256:626d60935cf668e70a5ce6ff184fd713e9683fb458898e4249b63be9e28286ea \
118
+ --hash=sha256:8153b8bfc11e1e4d75bcb0bff1db232f9e10b274e0929de9d608027e0d34ff8b \
119
+ --hash=sha256:92d9abc807cf7d0e047b95ca5d957cf4792fcd04e920ca70d48add15c1a90ea7 \
120
+ --hash=sha256:b08a32ea2f8e42cf1d4be3169a98dd4be32bafe4f22b6c4cb4ba810fa9e5d2cb \
121
+ --hash=sha256:b2e8faa0ed68cb29af51edd8e24798bb661eac3bd9f65420c1887b6ca89987c8
122
+ # via matplotlib
123
+ cryptography==50.0.1 \
124
+ --hash=sha256:01f41478cf33fc605a6a089cd56d28b45c6c0b45a1928b61797f2621a04bac71 \
125
+ --hash=sha256:05ba322c4da95b262a212c345af888ef2c37c88c0509756ea00a0e6d68850f23 \
126
+ --hash=sha256:2a93d05e34d5f67fba6f891fe85d929999baa7195e853923ea6d7576c9e68c5e \
127
+ --hash=sha256:2b34d76a652ea2b6faf777c35df230c5637842cd904e04f16230c3f9f03e4361 \
128
+ --hash=sha256:2ebbfb0f1fed745e91796e3e1080a1440423fdae8ece1b995a1d80883a409054 \
129
+ --hash=sha256:359e62deae718bce96170e223fdcb6357e4fbd3bb7a3a75f4430763532560e49 \
130
+ --hash=sha256:407fe2b6db00939c05c0e945e9914238f2f0a430974839429dafc82b1ee6bee5 \
131
+ --hash=sha256:4c4188f7c0cf655be5c06342b817ed0f9595b69ffa2b12026e5353eed29dea88 \
132
+ --hash=sha256:51593d180cf6d179bde5c5d065bed81386b1f381656ae7d042b7ffc87a9895ad \
133
+ --hash=sha256:51afcfceb15597cf2635068e4ac9a56b2abde622edde17f37d85fd7b5306497a \
134
+ --hash=sha256:53e279950892dc102c6b4e52af03ae5ea92fac572a1ddab78ca73a997f62b69f \
135
+ --hash=sha256:55d16b1ef3ee0958d893a977b19777887e546c9954ea81b200c3301a864013f2 \
136
+ --hash=sha256:5dd9bda1c12b4162f6ff568eeb5e0ff956c28d14406e875cfe8a63a2d414ff20 \
137
+ --hash=sha256:5fe002589592ed749ce77fe0695fcbd3500dd61d7d6db5858a7544c612fa8e45 \
138
+ --hash=sha256:76de83fbd91ac49c0feaaa983d0748fd7a53176afac5fb3bf7478d244f0eb527 \
139
+ --hash=sha256:9dde0a357190eb3b1da1bb9ab750e9c85cba82ca5977aa0836cbb94e92611239 \
140
+ --hash=sha256:9ebcdd5519be9b652a46f507817a74591774fc3d6923ac364e4dfa64e36b291b \
141
+ --hash=sha256:aed8db4f6d71c51efb89530e12d9464e7bf2923d46c3205dc794a2a93f8c0648 \
142
+ --hash=sha256:b8f852c65863251b9e3a1b8c150ce21e59b522dbb6a7d4bc80e680d38388e986 \
143
+ --hash=sha256:be224a65493ec5b74a158ff22a5522ce4a5ca1e543c647a3a4730d4a09e5f959 \
144
+ --hash=sha256:ca83d00d9e69cd5eb63f2e69c3a5a59e0cecae5ae14c6ae0b35830fe3b37bad0 \
145
+ --hash=sha256:e22dfed744bd4002e909464cb23d2f0b05c6f3113a79ef2e9864a53db737c733 \
146
+ --hash=sha256:e2ca8fd1b6b4b82a1c4cb02841d0837e3c12336c2e24b520ab8ab3b969733d8f \
147
+ --hash=sha256:e74591e283fe6eb956416c929eb58262a719fe0311fd9054c62c3350ed8760d8 \
148
+ --hash=sha256:fc3ed7ebd2a8c96f5b166de0ab9b624996bef3b07bbeb19364dfb78222c22c80 \
149
+ --hash=sha256:fd3718b960d0b5dd213cdf03f3bcb7000e69dda0de8b956061947ff6bcff5558 \
150
+ --hash=sha256:ff838d62ec1bfce4f9ba7fa16f4a7b554cd8d0c299e6be37502161a660c84eef
151
+ # via
152
+ # authlib
153
+ # dearmon-sat-act-learning-lab
154
+ # joserfc
155
+ # pyjwt
156
+ cycler==0.12.1 \
157
+ --hash=sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30 \
158
+ --hash=sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c
159
+ # via matplotlib
160
+ distro==1.9.0 \
161
+ --hash=sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed \
162
+ --hash=sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2
163
+ # via openai
164
+ fastapi==0.141.1 \
165
+ --hash=sha256:bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3 \
166
+ --hash=sha256:e8822fc40db1e1858054d7a949a888695bc9bdce70139178e33bd2871a453ca1
167
+ # via
168
+ # dearmon-sat-act-learning-lab
169
+ # gradio
170
+ filelock==3.32.4 \
171
+ --hash=sha256:22e58ca3b1ae3b98993b762d7338367ae64fe50252bf78d59da3bfebcdf1cedd \
172
+ --hash=sha256:2bde2e4cf732e0153406d8a7bc80620ecf5e621fe0d25e41143c4e3b4733ff30
173
+ # via huggingface-hub
174
+ fonttools==4.64.0 \
175
+ --hash=sha256:06b6409b868494556a831ae33b2d9a090476c37516b38d70f45a9720b460d423 \
176
+ --hash=sha256:4a05783ff54ce4c7a28f18e5772efdf63c219374bd9ffc55452182e1cef8be60 \
177
+ --hash=sha256:66a83f93579fb3493e458c4449d1d566a7b2a1c7b19915cd0fa3c9b8b5a8540b \
178
+ --hash=sha256:6786bed88581e19bc4f28ea7a64ad531e8f54acf50327fddca942688824a60bd \
179
+ --hash=sha256:9ecb2b206b5b2386f6968721a0770226b66bdd54adc4279bfff3ddf62873eed8 \
180
+ --hash=sha256:a8c631303bb1fd7be3067c47536a30ff1fcb4846d6008c112bc52a03f7cd6965 \
181
+ --hash=sha256:b2763e452b025ee8e990f0462e76052de9bb094ebc21d296f62c6dfe958886b4 \
182
+ --hash=sha256:cf67f96dc0bfe9607f5f2b734cedfbe2f6f995231adee4ccefa12872044d452d \
183
+ --hash=sha256:da4c9bdeaf6b06c12d13d0addfc8ef15aa9695d26574a6dc10751258bef72f30 \
184
+ --hash=sha256:ecb2e59a7bc692fee64dda6010deb66222335693b30046f15cccf81233aa715f
185
+ # via matplotlib
186
+ fsspec==2026.7.0 \
187
+ --hash=sha256:b57ddbafedfaef7018c1ecab32aa200a9d7ca26b77965f64e48b70061249d279 \
188
+ --hash=sha256:c803c40f4cf860b49dea58ee3e1c33cb9c790520e233537e1340049f89b82a88
189
+ # via
190
+ # gradio-client
191
+ # huggingface-hub
192
+ gradio==6.24.0 \
193
+ --hash=sha256:0a7c97c07ef0facecb86d776c73c0124b3f9803a828e09ea1737ad12219cabb5 \
194
+ --hash=sha256:2072be0c0803da1859f918a45dc568fafc7b0eebd581943bee8acc78f752e166
195
+ # via dearmon-sat-act-learning-lab
196
+ gradio-client==2.6.0 \
197
+ --hash=sha256:4493a6425560dd23d1eb5427a13290819135c664c5ed9f184eb517b1ea263291 \
198
+ --hash=sha256:e648110efa31347bb8b1abda150a7a975b40a9658fdd8562803e2ad6a300d033
199
+ # via
200
+ # dearmon-sat-act-learning-lab
201
+ # gradio
202
+ # hf-gradio
203
+ groovy==0.1.2 \
204
+ --hash=sha256:25c1dc09b3f9d7e292458aa762c6beb96ea037071bf5e917fc81fb78d2231083 \
205
+ --hash=sha256:7f7975bab18c729a257a8b1ae9dcd70b7cafb1720481beae47719af57c35fa64
206
+ # via gradio
207
+ h11==0.16.0 \
208
+ --hash=sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1 \
209
+ --hash=sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86
210
+ # via
211
+ # httpcore
212
+ # httpcore2
213
+ # uvicorn
214
+ hf-gradio==0.4.1 \
215
+ --hash=sha256:76b8cb8be6abe62d74c1ad2d35b42f0629db89aa9e1a8d033cecfe7c856eeab3 \
216
+ --hash=sha256:a017d942618f0d495a58ee4563047fa04bef614c00e0cb789a9a6d0633cffa7b
217
+ # via gradio
218
+ hf-xet==1.6.0 ; platform_machine == 'AMD64' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64' \
219
+ --hash=sha256:0e6e21fa3cdfcdcd76748564bf593870a5e013f47d97cf10aed63aa222cff5b7 \
220
+ --hash=sha256:2e58454a340b3556dfa4972d5451aff4fba8dd42a236600ba1a1d2b1514f0fef \
221
+ --hash=sha256:3dc3e35441ba395006af5aaacc40ef2e603c51ef46c3530b9156185f00935ea3 \
222
+ --hash=sha256:4fc74352a17015bd0ee90038bc9efe38db894cde45f268b6712b04fce8cd0acb \
223
+ --hash=sha256:633dc0cd71d32da58ab8c03ad38e2fac452c15c2b0a2866ebf6ededfe0a5061d \
224
+ --hash=sha256:8fb4f71cba6129110c3374a33f919001ff130488fc23553698e34cc1c2a1198c \
225
+ --hash=sha256:d62671bb130879cef0ee4c9ebe47a14af6c66ec53e6d84dc15936e5ffdfac82f \
226
+ --hash=sha256:f0906082d9932ae0c0057fa194041c22b4e2cdb46b2592ef3b91f020d62a081a \
227
+ --hash=sha256:fb4fadde1b2b70bf4c0c14a6dccbe7194b1c28947fefd5bbe3fed9d940676c3b
228
+ # via huggingface-hub
229
+ httpcore==1.0.9 \
230
+ --hash=sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55 \
231
+ --hash=sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8
232
+ # via httpx
233
+ httpcore2==2.12.0 ; sys_platform != 'emscripten' \
234
+ --hash=sha256:7e04258ce01013d7d615e5b910a3b27fac937d7a95038227e79652b4ba3b4ceb \
235
+ --hash=sha256:9293522bba0aa7c4c8e9e3f040c16575bd8868e155a77fa30c7a9085a5eae648
236
+ # via httpx2
237
+ httpx==0.28.1 \
238
+ --hash=sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc \
239
+ --hash=sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad
240
+ # via
241
+ # gradio
242
+ # gradio-client
243
+ # huggingface-hub
244
+ # openai
245
+ # safehttpx
246
+ httpx2==2.12.0 \
247
+ --hash=sha256:7631fe9887a8a2275f4a2540e053aa670fcc50742864a9ae7c66e609fdcf12cf \
248
+ --hash=sha256:cc8b6eecb8661c146b8f89a60e97456ee086e91a784ed31ac450c3a9e613dd36
249
+ # via dearmon-sat-act-learning-lab
250
+ httpx2-jsfetch==1.0 ; sys_platform == 'emscripten' \
251
+ --hash=sha256:70a0e3eabfef7cce5ad9c629f7d01ca05e418f586646f4ddf14782e4c1454c60 \
252
+ --hash=sha256:cb916b707601e69a07721aabc8f3f6659be3a6893bc1ff5c6f9e02241df2da32
253
+ # via httpx2
254
+ huggingface-hub==1.27.0 \
255
+ --hash=sha256:7df6827c2f956c60fbaa64646e979e566db76f619dd0a9729dfb8c5a3eb4f68d \
256
+ --hash=sha256:c1fed40ea82a6b41b477f5243546549b792ae0a93abcea608cff66089bf8f8df
257
+ # via
258
+ # dearmon-sat-act-learning-lab
259
+ # gradio
260
+ # gradio-client
261
+ idna==3.19 \
262
+ --hash=sha256:5e0811a4383b21dc5838069f801c4fb62113b7447663d2530d2bd6e77b49bf15 \
263
+ --hash=sha256:815e7be7a7806d54abb586dc943addc79e8b2ee16915059658cbeff4b1b43bf4
264
+ # via
265
+ # anyio
266
+ # httpx
267
+ # httpx2
268
+ # requests
269
+ jinja2==3.1.6 \
270
+ --hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \
271
+ --hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67
272
+ # via
273
+ # dearmon-sat-act-learning-lab
274
+ # gradio
275
+ jiter==0.16.0 \
276
+ --hash=sha256:0df91907609837f33341b8e6fe73b95991fdaa57caf1a0fbd343dffe826f386f \
277
+ --hash=sha256:1878349266f8ee36ecb1375cc5ba2f115f35fd9f0a1a4119e725e379126647f7 \
278
+ --hash=sha256:2ed5738ae4af18271a51a528b8811b0cbfa4a1858de9d83359e4169855d6a331 \
279
+ --hash=sha256:3a23f0e4f957e1be65752d2dfac9a5a06b1917af8dc85deb639c3b9d02e31290 \
280
+ --hash=sha256:44d019fa8cdaf89bf29c71b39e3712143fdd0ac76725c6ef954f9957a5ea8730 \
281
+ --hash=sha256:46add52f4ad47a08bfb1219f3e673da972191489a33016edefdb5ea55bfa8c48 \
282
+ --hash=sha256:51d7b836acb0108d7c77df1742332cac2a1fa04a74d6dacec46e7091f0e91274 \
283
+ --hash=sha256:561926e0573ffe4a32498420a76d64b16c513e1ab413b9d28158a8764ac701e5 \
284
+ --hash=sha256:5af7780e4a26bd7d0d989592bf9ef12ebf806b74ab709223ecca37c749872ea9 \
285
+ --hash=sha256:64d613743df53199b1aa256a7d328340da6d7078aac7705a7db9d7a791e9cfd2 \
286
+ --hash=sha256:67c3bc1760f8c99d805dcab4e644027142a53b1d5d861f18780ebdbd5d40b72a \
287
+ --hash=sha256:7b24c3492c5f4f84a37946ad9cf504910cf6a782d6a4e0689b6673c5894b4a1c \
288
+ --hash=sha256:96e38eea538c8ddf853a35727c7be0741c76c13f04148ac5c116222f50ece3b3 \
289
+ --hash=sha256:9c8a956fd72c2cf1e730d01ea080341f13aa0a97a4a33b51abebe725b7ae9ca9 \
290
+ --hash=sha256:c22a488f7b9218e245a0025a9ba6b100e2e54700831cf4cf16833a27fba3ad01 \
291
+ --hash=sha256:d284fb8d94d5855d60c44fefcab4bf966f1da6fada73992b01f6f0c9bc0c6702 \
292
+ --hash=sha256:d5bf78d0e05e45cfdd66558893938d59afe3d1b1a824a202039b20e607d25a72 \
293
+ --hash=sha256:f17d61a28b4b3e0e3e2ba98490c70501403b4d196f78732439160e7fd3678127 \
294
+ --hash=sha256:f4444a83f946605990c98f625cdd3d2725bfb818158760c5748c653170a20e0e
295
+ # via openai
296
+ joserfc==1.7.5 \
297
+ --hash=sha256:add2c2c84e8373b084d526a8b53daba5d7a513a118cd2dcd9fc9f979d0922159 \
298
+ --hash=sha256:d5ff536e658e17664f8c1b1ab60dc4aa62aa973fcef1edd33cc44bda45d6f5ea
299
+ # via authlib
300
+ kiwisolver==1.5.1 \
301
+ --hash=sha256:06a6917674de9e0fe3f66f5430787f59a9f2ddb64af9b714eaec547e29ef5c19 \
302
+ --hash=sha256:072bdb15a3c19a5b5dbc8f8fb1f4e1884bf4f3507eeb4cc6334401274d37a5c0 \
303
+ --hash=sha256:0ebdef3eae5336568147c39a55be6a2036ffde53faa9ca2d978989ae7c2da12c \
304
+ --hash=sha256:1209042a623ddfda5497e4066c7b77651dde8e1d3a9dd97599dc7e97f3b9b78c \
305
+ --hash=sha256:1798e83840c3f627246104c4d8a9639c60fa068adf9ce92b61791781fa8a68c1 \
306
+ --hash=sha256:2551cf9917af48ee7c4b29cc82320489508cf96fd26a51f6fc124de661cd44c7 \
307
+ --hash=sha256:26e8268480be5061d509e29669d59103c067a26377a56491630ece11762e3858 \
308
+ --hash=sha256:34633ecf50d16187ab8e5528b7a2530f2feb4e23f300db4672538b51cfc5cd38 \
309
+ --hash=sha256:38f6e0deb4d0a4615efe0c4efc5990b06ae450ab50a0b321c0b078b6d238c083 \
310
+ --hash=sha256:482676e5bd48d70ac99d9fc78863469845421e01184fa83f1f9366dc49f7e974 \
311
+ --hash=sha256:63fb7294b768f444eb4b068965f2662f28c2fd4161e23bd60fcf3ff27b74c046 \
312
+ --hash=sha256:6a797a1cefc8b9c93170db580337e1fe3d011ad18b1299943231279406342048 \
313
+ --hash=sha256:a5a00665d1a0e26763a7338d7e911d4598fbc1d50dd0d6b7919b7dc6c5d6569f \
314
+ --hash=sha256:ad8b9671348d7c8716715652ae11f85ed0eb99e265a2df2ca490577d69860b2c \
315
+ --hash=sha256:b03af77d77e50edba2030fd5f7c352ff209314b09030a3cba7c14edf9a09a444 \
316
+ --hash=sha256:bfd1de989b3330420e29de39352f5c049905c9e3ee67233a50d550e3d652c148 \
317
+ --hash=sha256:d27c2123977cb9269c30a49ba45f03a4323017ef693e19db4ec9dbe1299a3002 \
318
+ --hash=sha256:d79308fa689fac89cbcfbd4dbfc80b5f95c54c5a7fd4d194be221f9d33d026e6 \
319
+ --hash=sha256:f1303ef2eec81262a4b708c3e858afe58d7c75ad91c1c05266eda7673369859a
320
+ # via matplotlib
321
+ libsql==0.1.11 \
322
+ --hash=sha256:101b6e60f5333434b3e6107bfe2cf24cd5d1317286ad262cb6489941abde77d4 \
323
+ --hash=sha256:28dbc0165942c57d0dcfe0115eb4fde13f52929ce18e59a59e826ac77b647e11 \
324
+ --hash=sha256:74fde15d0cdc930da3b88a0cfcf9d7c9cafea945974d48d09394e574939f77b1 \
325
+ --hash=sha256:a9d7340f762ea6db8cdcc0345b1666a77cbaf313c28c7c6738533fc5844e8f54 \
326
+ --hash=sha256:c8c00c5e4d0906ff682ab3cad8473ef36aaa34080bcc553a2e636a73e79d9c2b
327
+ # via dearmon-sat-act-learning-lab
328
+ lxml==6.1.3 \
329
+ --hash=sha256:0c0710ac085a157b593c38fbcacd950f15c4afa8e2057527185875ab302752bc \
330
+ --hash=sha256:1aeca87830c4fe649dcf93fe2b059525b71c72587f21be4ae4af7103082a79fa \
331
+ --hash=sha256:21402998e4b78e7cce237d2788841aaa21ac9a4d1574d04dc2d12ee41ae807b5 \
332
+ --hash=sha256:379f8a75cf6eb7eef0af074b55f49ab73b868388a98de14646abcdfa4564bb11 \
333
+ --hash=sha256:38fc4e4e4e084e0bd491949482527d406788045c546d4f8789e93fc527b91385 \
334
+ --hash=sha256:3e42265103fb385d8642a78672edf376c6f7e1d3598a7a4f9cb1278f2f6b5f6f \
335
+ --hash=sha256:3e9a00d1c2c30936f7add097c41afc5da6556c580909104aafd382cac92a855c \
336
+ --hash=sha256:45222d94ddd511536f3b2f7d9deae3b2339b4ce0f075f1ca25703b07cad9dd21 \
337
+ --hash=sha256:48542c9acba9ff9450bd18d871d2c2c8787fdb283572b623d206f1b927cd7d9e \
338
+ --hash=sha256:5609efdb0d3c95499c00046bc53648b3482ec2175b5503d6e611b3f0555dc71d \
339
+ --hash=sha256:623c8799c17128753c65699f1c3aa32402657393a9ad6db09ed8b98ddf76611d \
340
+ --hash=sha256:909f4e927bb051f7740d6367285fc60cdcfdaf0258c2dba4ff5ba7eadadc250c \
341
+ --hash=sha256:97ce49699d87ebf8aad631b55d65b33219a4f1bfefbbf5bff19dc9af160aeaf9 \
342
+ --hash=sha256:a5c18810318303ce9afb3f95e2ddb54834f96fa699a8600433fd5a93dcf44c56 \
343
+ --hash=sha256:b37772102d44bb6628186accca3a121b1fa3a6b3d97518a8c29a5229ca4c0d0a \
344
+ --hash=sha256:b3ff39654f0ce6ebd4db154211136dbe7e8157bcc3bed2344c87f32c7c6ecb6c \
345
+ --hash=sha256:c55e71a9b1db1f107efb60da49c093689b74c5c31a708e5379e2fd9439d4fbb5 \
346
+ --hash=sha256:ddcf547bea2aee967d6a77779376a45e77e610e8465147a1f3d7e20d539d6e32 \
347
+ --hash=sha256:f683dc6300317700025e41d89a43e0276692ded16113a3c43eab704d605c58e5
348
+ # via python-docx
349
+ markdown-it-py==4.2.0 \
350
+ --hash=sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49 \
351
+ --hash=sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a
352
+ # via rich
353
+ markupsafe==3.0.3 \
354
+ --hash=sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce \
355
+ --hash=sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c \
356
+ --hash=sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f \
357
+ --hash=sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d \
358
+ --hash=sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698 \
359
+ --hash=sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b \
360
+ --hash=sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f \
361
+ --hash=sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a \
362
+ --hash=sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b \
363
+ --hash=sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e \
364
+ --hash=sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d \
365
+ --hash=sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d
366
+ # via
367
+ # gradio
368
+ # jinja2
369
+ matplotlib==3.10.8 \
370
+ --hash=sha256:2299372c19d56bcd35cf05a2738308758d32b9eaed2371898d8f5bd33f084aa3 \
371
+ --hash=sha256:24d50994d8c5816ddc35411e50a86ab05f575e2530c02752e02538122613371f \
372
+ --hash=sha256:3ab4aabc72de4ff77b3ec33a6d78a68227bf1123465887f9905ba79184a1cc04 \
373
+ --hash=sha256:3c624e43ed56313651bc18a47f838b60d7b8032ed348911c54906b130b20071b \
374
+ --hash=sha256:64fcc24778ca0404ce0cb7b6b77ae1f4c7231cdd60e6778f999ee05cbd581b9a \
375
+ --hash=sha256:99eefd13c0dc3b3c1b4d561c1169e65fe47aab7b8158754d7c084088e2329466 \
376
+ --hash=sha256:b9a5ca4ac220a0cdd1ba6bcba3608547117d30468fefce49bb26f55c1a3d5c58 \
377
+ --hash=sha256:dd80ecb295460a5d9d260df63c43f4afbdd832d725a531f008dad1664f458adf
378
+ # via dearmon-sat-act-learning-lab
379
+ mdurl==0.1.2 \
380
+ --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
381
+ --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba
382
+ # via markdown-it-py
383
+ mpmath==1.3.0 \
384
+ --hash=sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f \
385
+ --hash=sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c
386
+ # via sympy
387
+ numpy==2.5.2 \
388
+ --hash=sha256:14e373cfc6387177e8409dac3c7159be8eb05cd77096cd7c950268b86f62831c \
389
+ --hash=sha256:27650bb0e7140fa3d37b9923b4803645e0b125d190f326eecfd3f4dad8e8ade1 \
390
+ --hash=sha256:28ac63476ec7651484215ee7fa15a1f78b57c14621f01e392afe17b9a1390ce4 \
391
+ --hash=sha256:3cdec01fa790a186d430433fdd4d4ffb70eed6f0eeb4bf05c8dbe2dce0a9bcb8 \
392
+ --hash=sha256:4bbd96c833ecc8cc069ce518078fc8c60cb9cbfb0fea5b7a803ad65035596d03 \
393
+ --hash=sha256:65f188481f1669e26f62b701e8205d19e460fa4a9b52a1414ba382330e4a3414 \
394
+ --hash=sha256:6e8172ddfcf5cf74b811d372b570b83c60bd2de87a6fbfbebdadb4a9bd9c6cbb \
395
+ --hash=sha256:7999d4ddb0c4025018373fd787510d46e04c769467af22869707b3c1cfd459ab \
396
+ --hash=sha256:8ee9c4eeb8454b3660a8b53493563c3e121c2fc94fbd72b848ef814ed7b676a9 \
397
+ --hash=sha256:c1f017dc0875c9209d219f97feceb7d54c2661bb243deb4114478e1295808af7 \
398
+ --hash=sha256:d482d171c406ae88c5b19cad3b6a1c4c5209f886ab74bc44c2c865c23f52d860 \
399
+ --hash=sha256:d6a48072864e3324e194a8fbb3c657bcc5b5c869dbc64c9537b1d5c862572c0a
400
+ # via
401
+ # contourpy
402
+ # dearmon-sat-act-learning-lab
403
+ # gradio
404
+ # matplotlib
405
+ # pandas
406
+ openai==2.54.0 \
407
+ --hash=sha256:89089789197ccdb87f173a03145ed1598d00795220c93e96cf712b1cbf5e5f2b \
408
+ --hash=sha256:e3e6f8bc1ba30ddf381ace1a14340eed381cb984a1a59bd0f34b5be3b5d49cfa
409
+ # via dearmon-sat-act-learning-lab
410
+ orjson==3.12.0 \
411
+ --hash=sha256:010811c1b69773450a01cef97727a67b223242f350b77d4ca000e59a9ef2155a \
412
+ --hash=sha256:1192a7021b6d071aaf909864f6e924d6a2675ca360485b972b8401749311750b \
413
+ --hash=sha256:11edb4660a6680abee9788a3a9072208a2c96538cc1322bd79542065229d8e54 \
414
+ --hash=sha256:2d3a9da945a4d96ae758fdaaca56742e6b73b6fd554c5d8876f252a6dad70b83 \
415
+ --hash=sha256:532ff8cd4bd59a327a953a7dcde922c7fc25b85e29721bb8633265430d3a3873 \
416
+ --hash=sha256:53c0c474a9d9aff9aebfc0c88de1f28f843d940e6e3a80729abdf6a20274356f \
417
+ --hash=sha256:92ffc09e07233a6ab6d4e067f7841edcbcc134cb4812155cf171ea5255a421d7 \
418
+ --hash=sha256:a6cf4b18e7de173f209f2084ffbd736dd72389a396326ee80a7022168be232e5 \
419
+ --hash=sha256:aa3e43a6846e91d7bde3d5a9c66090fcd8744f569a9b6cffc5e1ca38f6a461c0 \
420
+ --hash=sha256:ad29eece0c601737f2a60edc2752a84e7a0785df3efb62e3012834700a5afe0d \
421
+ --hash=sha256:bf44e374aadde77b1f6109f1030be51433eb61984379852766b6f4e187db7b1e \
422
+ --hash=sha256:d14203fb1aae2ad9b3d52f8a0e82aeb10197ef1c9bc61da7f358bd70b00123d5
423
+ # via gradio
424
+ packaging==26.3 \
425
+ --hash=sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79 \
426
+ --hash=sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c
427
+ # via
428
+ # gradio
429
+ # gradio-client
430
+ # huggingface-hub
431
+ # matplotlib
432
+ pandas==2.3.3 \
433
+ --hash=sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084 \
434
+ --hash=sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35 \
435
+ --hash=sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53 \
436
+ --hash=sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b \
437
+ --hash=sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98 \
438
+ --hash=sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89 \
439
+ --hash=sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b \
440
+ --hash=sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908
441
+ # via
442
+ # dearmon-sat-act-learning-lab
443
+ # gradio
444
+ pillow==12.3.0 \
445
+ --hash=sha256:0dd2064cbc55aaec028ef5fbb60fa47bb6c3e7918e07ff17935284b227a9d2df \
446
+ --hash=sha256:331b624368d4f1d069149002f25f44bc61c8919ce8ddb3c45bdad8f6e2d89510 \
447
+ --hash=sha256:3b8182a766685eaa002637e28b4ec8d6b18819a0c71f579bf0dbaa5830297cce \
448
+ --hash=sha256:78cb2c6865a35ab8ff8b75fd122f6033b92a62c82801110e48ddd6c936a45d91 \
449
+ --hash=sha256:a2b55dd6b2a4c4b7d87ffa56bdb33fdc5fdb9a462173861a7bc097f17d91cb09 \
450
+ --hash=sha256:ba09209fbe443b4acccebe845d8a138b89a8f4fbaeedd44953490b5315d5e965 \
451
+ --hash=sha256:d9c7f76c0673154f044e9d78c8655fb4213f6ca31a836df48b40fe5d187717b9 \
452
+ --hash=sha256:dbce0b29841537a2fa4a214c2bbf14de3587c9680caa9b4e217568472490b28f \
453
+ --hash=sha256:e491916b378fba47242221bb9ead245211b70d504f495d105d17b14a24b4907c \
454
+ --hash=sha256:ffd0c5368496f41b0944be820fcb7a838aa6e623d250b01acf2643939c3f99d7
455
+ # via
456
+ # dearmon-sat-act-learning-lab
457
+ # gradio
458
+ # matplotlib
459
+ pycparser==3.0 ; implementation_name != 'PyPy' and platform_python_implementation != 'PyPy' \
460
+ --hash=sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29 \
461
+ --hash=sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992
462
+ # via cffi
463
+ pydantic==2.13.5 \
464
+ --hash=sha256:346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73 \
465
+ --hash=sha256:51a9c5f7b2f8e636f04c6cada605d9b6a3bf1348fdf945a3d8869b19bba0ee08
466
+ # via
467
+ # fastapi
468
+ # gradio
469
+ # openai
470
+ pydantic-core==2.46.5 \
471
+ --hash=sha256:013d6f3483d81e02e7c328831808f336c8596ee33b4bd4026b9ffb1e960b8942 \
472
+ --hash=sha256:0fc5be0abd4a407e200d844b404e33639a554e7bd0d448e7b9ae181be4789ac2 \
473
+ --hash=sha256:10416c15b8839ecc4ef4d0885da76da6fd0f67333a0eb8aff6d93c4b8f2910fc \
474
+ --hash=sha256:18a09e1e1011b462f2e32774f25859ef1223d5c2b0546a633cf56654710721e0 \
475
+ --hash=sha256:2bc9419666990c06d7397831f2126a1ecc3594aaa3ff7de5bf2d066802f4e07b \
476
+ --hash=sha256:347ec774390c87326a2e4929d58d3f7e8763a104d5d35f4cd595a4c952366433 \
477
+ --hash=sha256:4fdc8b93a41521988916eeaa271173fcca7fa0803d62f87675aac8dcec1c8e29 \
478
+ --hash=sha256:5cb482e9e84c851f4e623fe4acc1ced89168cf1fe18f7089db4548c8f5bbb65b \
479
+ --hash=sha256:5e81740c09e310f5aa5cbd3e434a01c154d4bef93241c7877b39f211d2b78ba8 \
480
+ --hash=sha256:816ff0a6550ffc06c098ccd2e0698600f9aa7da192a79eaa6f9af504a35db869 \
481
+ --hash=sha256:8e24d8f05fa2d28513d94e877e9c75ad66175376209b3977f916e240e623193c \
482
+ --hash=sha256:a39ac25a9a2fa4072efdb429833c4a4c8009a51ff9eea3eeae131713cd27991e \
483
+ --hash=sha256:b98134087d9de723658d17a42c7d0da8d6e2ef08015dee7dc93889047315f5e4 \
484
+ --hash=sha256:b9fe6fb92520e3fd61f2e49000b6911b188824f089b75973ea06d6267f0b476d \
485
+ --hash=sha256:c7ea57fc63aa7da93a1bd2d644e6577befae10c52c4e36377635eea1056a74f5 \
486
+ --hash=sha256:d925f3d9afd05a8c0fb3a1031463a8d59ebe5e2afad297e29c78be19e13b4e62 \
487
+ --hash=sha256:e652ab17569c94bff5475520f907b7148b8c24036a8ebbe5cf7cf7493d28579a \
488
+ --hash=sha256:e9c134bb666dd54b778b9fc0d2b50cbb7f979b9e3716f26a88c9ab3b6fc1dd0f \
489
+ --hash=sha256:efd62a42486f1bda5d24cb4f63d15a3c7768375fe83d36f9417b4ad7a2fb20b3 \
490
+ --hash=sha256:f7b0ec93a2893de856652154d73b7ba622f26fa97726487dcac373de5f4c6084
491
+ # via pydantic
492
+ pydub==0.25.1 \
493
+ --hash=sha256:65617e33033874b59d87db603aa1ed450633288aefead953b30bded59cb599a6 \
494
+ --hash=sha256:980a33ce9949cab2a569606b65674d748ecbca4f0796887fd6f46173a7b0d30f
495
+ # via gradio
496
+ pygments==2.21.0 \
497
+ --hash=sha256:2363c69b61c4a97c838da3b130dcd6468f4848992b21a82f2a63ec34377137d9 \
498
+ --hash=sha256:610ca751c9bc2492b38eb9a38a7fbc93edbbb2d7182edaf34e66ae493dee5c8c
499
+ # via rich
500
+ pyjwt==2.13.0 \
501
+ --hash=sha256:41571c89ca91598c79e8ef18a2d07367d4810fbbd6f637794879baf1b7703423 \
502
+ --hash=sha256:66adcc2aff09b3f1bbd95fc1e1577df8ac8723c978552fd43304c8a290ac5728
503
+ # via dearmon-sat-act-learning-lab
504
+ pyparsing==3.3.2 \
505
+ --hash=sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d \
506
+ --hash=sha256:c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc
507
+ # via matplotlib
508
+ python-dateutil==2.9.0.post0 \
509
+ --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \
510
+ --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427
511
+ # via
512
+ # matplotlib
513
+ # pandas
514
+ python-docx==1.2.0 \
515
+ --hash=sha256:3fd478f3250fbbbfd3b94fe1e985955737c145627498896a8a6bf81f4baf66c7 \
516
+ --hash=sha256:7bc9d7b7d8a69c9c02ca09216118c86552704edc23bac179283f2e38f86220ce
517
+ # via dearmon-sat-act-learning-lab
518
+ python-multipart==0.0.32 \
519
+ --hash=sha256:be54b7f3fa167bb83e4fcd936b887b708f4e57fe75911c02aebf53efaf8d938e \
520
+ --hash=sha256:ff6d3f776f16878c894e52e107296ffc890e913c611b1a4ec6c44e2821fe2e23
521
+ # via gradio
522
+ pytz==2026.3.post1 \
523
+ --hash=sha256:2211d3fcf9a797d3405cac96ac7f61d80e6a644f72a3309607282fe8a2010c5d \
524
+ --hash=sha256:dd95840dd199baea12d9cc096a1d452caa6596a1c1e4b5f3dbd1541855d5e815
525
+ # via
526
+ # gradio
527
+ # pandas
528
+ pyyaml==6.0.3 \
529
+ --hash=sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea \
530
+ --hash=sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b \
531
+ --hash=sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c \
532
+ --hash=sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd \
533
+ --hash=sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196 \
534
+ --hash=sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e \
535
+ --hash=sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28 \
536
+ --hash=sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5 \
537
+ --hash=sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc \
538
+ --hash=sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f \
539
+ --hash=sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0
540
+ # via
541
+ # dearmon-sat-act-learning-lab
542
+ # gradio
543
+ # huggingface-hub
544
+ requests==2.34.2 \
545
+ --hash=sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0 \
546
+ --hash=sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed
547
+ # via dearmon-sat-act-learning-lab
548
+ rich==15.0.0 \
549
+ --hash=sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb \
550
+ --hash=sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36
551
+ # via typer
552
+ safehttpx==0.1.7 \
553
+ --hash=sha256:c4f4a162db6993464d7ca3d7cc4af0ffc6515a606dfd220b9f82c6945d869cde \
554
+ --hash=sha256:db201c0978c41eddb8bb480f3eee59dd67304fdd91646035e9d9a720049a9d23
555
+ # via gradio
556
+ semantic-version==2.10.0 \
557
+ --hash=sha256:bdabb6d336998cbb378d4b9db3a4b56a1e3235701dc05ea2690d9a997ed5041c \
558
+ --hash=sha256:de78a3b8e0feda74cabc54aab2da702113e33ac9d9eb9d2389bcf1f58b7d9177
559
+ # via gradio
560
+ shellingham==1.5.4 \
561
+ --hash=sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686 \
562
+ --hash=sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de
563
+ # via typer
564
+ six==1.17.0 \
565
+ --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \
566
+ --hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81
567
+ # via python-dateutil
568
+ sniffio==1.3.1 \
569
+ --hash=sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 \
570
+ --hash=sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc
571
+ # via openai
572
+ socksio==1.0.0 \
573
+ --hash=sha256:95dc1f15f9b34e8d7b16f06d74b8ccf48f609af32ab33c608d08761c5dcbb1f3 \
574
+ --hash=sha256:f88beb3da5b5c38b9890469de67d0cb0f9d494b78b106ca1845f96c10b91c4ac
575
+ # via dearmon-sat-act-learning-lab
576
+ starlette==1.6.0 \
577
+ --hash=sha256:a86dd39d14bb45f85a3d18525215a9ef0cfd1f192ac793220e72598c90335f0c \
578
+ --hash=sha256:d4e3ac5e546444960c710297a3c9fc3f7ebae1b7e963f3d36173b49da535be9b
579
+ # via
580
+ # dearmon-sat-act-learning-lab
581
+ # fastapi
582
+ # gradio
583
+ sympy==1.14.0 \
584
+ --hash=sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517 \
585
+ --hash=sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5
586
+ # via dearmon-sat-act-learning-lab
587
+ tomlkit==0.14.0 \
588
+ --hash=sha256:592064ed85b40fa213469f81ac584f67a4f2992509a7c3ea2d632208623a3680 \
589
+ --hash=sha256:cf00efca415dbd57575befb1f6634c4f42d2d87dbba376128adb42c121b87064
590
+ # via gradio
591
+ tqdm==4.70.0 \
592
+ --hash=sha256:55b0b0dbd97462d06ebee91e4dac24ed4d4702be82b24f07e6c1d27e08cea220 \
593
+ --hash=sha256:7f585706bfddbdebf89daac705b2dfcc16890130727d3197ca62c732b4310953
594
+ # via
595
+ # huggingface-hub
596
+ # openai
597
+ truststore==0.10.4 ; sys_platform != 'emscripten' \
598
+ --hash=sha256:9d91bd436463ad5e4ee4aba766628dd6cd7010cf3e2461756b3303710eebc301 \
599
+ --hash=sha256:adaeaecf1cbb5f4de3b1959b42d41f6fab57b2b1666adb59e89cb0b53361d981
600
+ # via
601
+ # httpcore2
602
+ # httpx2
603
+ typer==0.27.2 \
604
+ --hash=sha256:269b7eb9d3c202ca84b4bc9618cb04ebb43d3d4d1e567e4c768607232c05f945 \
605
+ --hash=sha256:b3a5fc4342d5fc8fda8fc3010b1cf117e9249aab7fae800c2eff62fd3842d97d
606
+ # via
607
+ # gradio
608
+ # hf-gradio
609
+ typing-extensions==4.16.0 \
610
+ --hash=sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8 \
611
+ --hash=sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5
612
+ # via
613
+ # anyio
614
+ # fastapi
615
+ # gradio
616
+ # gradio-client
617
+ # httpx2
618
+ # huggingface-hub
619
+ # openai
620
+ # pydantic
621
+ # pydantic-core
622
+ # python-docx
623
+ # starlette
624
+ # typing-inspection
625
+ typing-inspection==0.4.4 \
626
+ --hash=sha256:547274fa6b0a561ccf549cc9524b999a578e737d015d8709d021f9d0d13bea47 \
627
+ --hash=sha256:65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147
628
+ # via
629
+ # fastapi
630
+ # pydantic
631
+ tzdata==2026.3 \
632
+ --hash=sha256:4a1518b8993086a7982523e071643f3c0e5f213e75b21318e78bcabfff9d1415 \
633
+ --hash=sha256:dc096730c87af6cab1b171c9d532be840741ff5d459015e7f6947bd7d7e54931
634
+ # via pandas
635
+ urllib3==2.7.0 \
636
+ --hash=sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c \
637
+ --hash=sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897
638
+ # via requests
639
+ uvicorn==0.41.0 \
640
+ --hash=sha256:09d11cf7008da33113824ee5a1c6422d89fbc2ff476540d69a34c87fab8b571a \
641
+ --hash=sha256:29e35b1d2c36a04b9e180d4007ede3bcb32a85fbdfd6c6aeb3f26839de088187
642
+ # via
643
+ # dearmon-sat-act-learning-lab
644
+ # gradio
runtime.txt CHANGED
@@ -1,2 +1 @@
1
- python-3.12
2
-
 
1
+ python-3.12.13