From 716610bfe806bbc0393227e1aacc63470e42f83a Mon Sep 17 00:00:00 2001 From: Suzuku <280906548+ZilaiWang@users.noreply.github.com> Date: Wed, 12 Aug 2026 02:13:18 +0800 Subject: [PATCH] build TermKit Studio 0.2 foundation --- .github/screenshots/studio-concepts.jpg | Bin 0 -> 86885 bytes .github/screenshots/studio-releases.jpg | Bin 0 -> 73935 bytes .github/screenshots/studio-review.jpg | Bin 0 -> 92782 bytes .github/screenshots/studio-runtime.jpg | Bin 0 -> 66226 bytes .github/workflows/ci.yml | 12 + .gitignore | 5 + CHANGELOG.md | 36 +- README.md | 232 ++- README.zh-CN.md | 176 +- TERM_KIT_STUDIO_ARCHITECTURE.md | 389 ++++ alembic.ini | 38 + apps/studio/bun.lock | 381 ++++ apps/studio/index.html | 13 + apps/studio/package.json | 30 + apps/studio/src/App.tsx | 64 + apps/studio/src/api/client.ts | 142 ++ apps/studio/src/api/types.ts | 327 ++++ apps/studio/src/components/CommandPalette.tsx | 66 + apps/studio/src/components/Shell.tsx | 78 + apps/studio/src/components/ui.tsx | 68 + apps/studio/src/main.tsx | 27 + apps/studio/src/navigation.test.ts | 20 + apps/studio/src/navigation.ts | 51 + apps/studio/src/pages/CandidatesPage.tsx | 98 + apps/studio/src/pages/ConceptsPage.tsx | 508 +++++ apps/studio/src/pages/ExchangePage.tsx | 101 + apps/studio/src/pages/RelationsPage.tsx | 108 ++ apps/studio/src/pages/ReleasesPage.tsx | 34 + apps/studio/src/pages/ReviewPage.tsx | 84 + apps/studio/src/pages/RuntimePage.tsx | 48 + apps/studio/src/pages/SourcesPage.tsx | 83 + apps/studio/src/styles.css | 384 ++++ apps/studio/tsconfig.app.json | 25 + apps/studio/tsconfig.json | 7 + apps/studio/tsconfig.node.json | 16 + apps/studio/vite.config.ts | 19 + docs/README.md | 5 + docs/adr/0004-local-first-studio.md | 41 + docs/adr/0005-concept-first-curation.md | 36 + docs/adr/README.md | 2 + docs/architecture.md | 176 +- docs/compatibility/termspec-0.2.md | 40 + docs/development.md | 66 +- docs/exchange.md | 38 + docs/roadmap.md | 84 +- docs/runtime.md | 32 + docs/security.md | 71 +- docs/studio.md | 33 + docs/termpack-format.md | 8 + docs/termspec.md | 130 +- pyproject.toml | 13 +- scripts/check_architecture.py | 19 +- scripts/embed_studio_assets.py | 68 + scripts/export_schemas.py | 32 + src/termkit/_version.py | 4 +- src/termkit/cli.py | 80 +- src/termkit/errors.py | 8 + src/termkit/exchange/__init__.py | 25 +- src/termkit/exchange/models.py | 75 + src/termkit/exchange/parser.py | 282 +++ src/termkit/exchange/planner.py | 418 +++++ src/termkit/exchange/ports.py | 1 + src/termkit/forge/__init__.py | 6 +- src/termkit/forge/compat.py | 85 + src/termkit/forge/models.py | 93 +- src/termkit/forge/pipeline.py | 38 +- src/termkit/forge/ports.py | 15 +- src/termkit/runtime/__init__.py | 17 + src/termkit/runtime/benchmark.py | 78 + src/termkit/runtime/compiler.py | 310 ++++ src/termkit/runtime/dependencies.py | 94 + src/termkit/runtime/matcher.py | 150 ++ src/termkit/server/app.py | 56 +- src/termkit/server/routes/__init__.py | 1 + src/termkit/server/routes/studio.py | 358 ++++ src/termkit/spec/__init__.py | 53 + src/termkit/spec/candidates.py | 99 + src/termkit/spec/changes.py | 89 + src/termkit/spec/corpus.py | 51 + src/termkit/spec/domains.py | 38 + src/termkit/spec/identity.py | 26 + src/termkit/spec/models.py | 2 + src/termkit/spec/review.py | 52 + src/termkit/spec/revisions.py | 27 + .../schemas/CandidateAlignment.schema.json | 59 + .../spec/schemas/CandidateBatch.schema.json | 461 +++++ .../spec/schemas/CandidateConcept.schema.json | 186 ++ .../schemas/CandidateLexicalEntry.schema.json | 201 ++ .../schemas/CandidateRelation.schema.json | 73 + .../spec/schemas/ChangeOperation.schema.json | 102 + .../spec/schemas/ChangeSet.schema.json | 179 ++ src/termkit/spec/schemas/Concept.schema.json | 64 + .../spec/schemas/ConceptRevision.schema.json | 59 + src/termkit/spec/schemas/Corpus.schema.json | 51 + .../spec/schemas/CorpusSegment.schema.json | 72 + .../spec/schemas/DomainNode.schema.json | 75 + .../spec/schemas/DomainScheme.schema.json | 69 + .../schemas/ExternalIdentifier.schema.json | 59 + src/termkit/spec/schemas/ForgeRun.schema.json | 298 +++ .../spec/schemas/LexicalRevision.schema.json | 64 + .../spec/schemas/PackManifest.schema.json | 2 +- .../spec/schemas/ReviewDecision.schema.json | 67 + .../spec/schemas/ReviewTask.schema.json | 147 ++ .../spec/schemas/SourceRevision.schema.json | 58 + .../studio_assets/assets/index-BF43INBl.css | 1 + .../studio_assets/assets/index-BlmEeyh9.js | 55 + src/termkit/studio_assets/index.html | 14 + src/termkit/workspace/__init__.py | 5 + src/termkit/workspace/canonical.py | 72 + src/termkit/workspace/db.py | 265 +++ src/termkit/workspace/migrate.py | 17 + src/termkit/workspace/migrations/README.md | 5 + src/termkit/workspace/migrations/env.py | 44 + .../workspace/migrations/script.py.mako | 25 + .../versions/0001_workspace_foundation.py | 283 +++ .../versions/0002_source_corpus_identity.py | 45 + src/termkit/workspace/models.py | 104 ++ src/termkit/workspace/project.py | 83 + src/termkit/workspace/reconciliation.py | 77 + src/termkit/workspace/store.py | 1641 +++++++++++++++++ src/termkit/workspace/writer.py | 75 + tests/test_cli.py | 9 + tests/test_exchange.py | 212 +++ tests/test_forge.py | 66 +- tests/test_runtime.py | 101 +- tests/test_studio_api.py | 130 ++ tests/test_termspec_v02.py | 102 + tests/test_workspace.py | 382 ++++ uv.lock | 248 ++- 129 files changed, 13238 insertions(+), 364 deletions(-) create mode 100644 .github/screenshots/studio-concepts.jpg create mode 100644 .github/screenshots/studio-releases.jpg create mode 100644 .github/screenshots/studio-review.jpg create mode 100644 .github/screenshots/studio-runtime.jpg create mode 100644 TERM_KIT_STUDIO_ARCHITECTURE.md create mode 100644 alembic.ini create mode 100644 apps/studio/bun.lock create mode 100644 apps/studio/index.html create mode 100644 apps/studio/package.json create mode 100644 apps/studio/src/App.tsx create mode 100644 apps/studio/src/api/client.ts create mode 100644 apps/studio/src/api/types.ts create mode 100644 apps/studio/src/components/CommandPalette.tsx create mode 100644 apps/studio/src/components/Shell.tsx create mode 100644 apps/studio/src/components/ui.tsx create mode 100644 apps/studio/src/main.tsx create mode 100644 apps/studio/src/navigation.test.ts create mode 100644 apps/studio/src/navigation.ts create mode 100644 apps/studio/src/pages/CandidatesPage.tsx create mode 100644 apps/studio/src/pages/ConceptsPage.tsx create mode 100644 apps/studio/src/pages/ExchangePage.tsx create mode 100644 apps/studio/src/pages/RelationsPage.tsx create mode 100644 apps/studio/src/pages/ReleasesPage.tsx create mode 100644 apps/studio/src/pages/ReviewPage.tsx create mode 100644 apps/studio/src/pages/RuntimePage.tsx create mode 100644 apps/studio/src/pages/SourcesPage.tsx create mode 100644 apps/studio/src/styles.css create mode 100644 apps/studio/tsconfig.app.json create mode 100644 apps/studio/tsconfig.json create mode 100644 apps/studio/tsconfig.node.json create mode 100644 apps/studio/vite.config.ts create mode 100644 docs/adr/0004-local-first-studio.md create mode 100644 docs/adr/0005-concept-first-curation.md create mode 100644 docs/compatibility/termspec-0.2.md create mode 100644 docs/exchange.md create mode 100644 docs/runtime.md create mode 100644 docs/studio.md create mode 100644 scripts/embed_studio_assets.py create mode 100644 src/termkit/exchange/models.py create mode 100644 src/termkit/exchange/parser.py create mode 100644 src/termkit/exchange/planner.py create mode 100644 src/termkit/forge/compat.py create mode 100644 src/termkit/runtime/benchmark.py create mode 100644 src/termkit/runtime/compiler.py create mode 100644 src/termkit/runtime/dependencies.py create mode 100644 src/termkit/runtime/matcher.py create mode 100644 src/termkit/server/routes/__init__.py create mode 100644 src/termkit/server/routes/studio.py create mode 100644 src/termkit/spec/candidates.py create mode 100644 src/termkit/spec/changes.py create mode 100644 src/termkit/spec/corpus.py create mode 100644 src/termkit/spec/domains.py create mode 100644 src/termkit/spec/identity.py create mode 100644 src/termkit/spec/review.py create mode 100644 src/termkit/spec/revisions.py create mode 100644 src/termkit/spec/schemas/CandidateAlignment.schema.json create mode 100644 src/termkit/spec/schemas/CandidateBatch.schema.json create mode 100644 src/termkit/spec/schemas/CandidateConcept.schema.json create mode 100644 src/termkit/spec/schemas/CandidateLexicalEntry.schema.json create mode 100644 src/termkit/spec/schemas/CandidateRelation.schema.json create mode 100644 src/termkit/spec/schemas/ChangeOperation.schema.json create mode 100644 src/termkit/spec/schemas/ChangeSet.schema.json create mode 100644 src/termkit/spec/schemas/ConceptRevision.schema.json create mode 100644 src/termkit/spec/schemas/Corpus.schema.json create mode 100644 src/termkit/spec/schemas/CorpusSegment.schema.json create mode 100644 src/termkit/spec/schemas/DomainNode.schema.json create mode 100644 src/termkit/spec/schemas/DomainScheme.schema.json create mode 100644 src/termkit/spec/schemas/ExternalIdentifier.schema.json create mode 100644 src/termkit/spec/schemas/ForgeRun.schema.json create mode 100644 src/termkit/spec/schemas/LexicalRevision.schema.json create mode 100644 src/termkit/spec/schemas/ReviewDecision.schema.json create mode 100644 src/termkit/spec/schemas/ReviewTask.schema.json create mode 100644 src/termkit/spec/schemas/SourceRevision.schema.json create mode 100644 src/termkit/studio_assets/assets/index-BF43INBl.css create mode 100644 src/termkit/studio_assets/assets/index-BlmEeyh9.js create mode 100644 src/termkit/studio_assets/index.html create mode 100644 src/termkit/workspace/__init__.py create mode 100644 src/termkit/workspace/canonical.py create mode 100644 src/termkit/workspace/db.py create mode 100644 src/termkit/workspace/migrate.py create mode 100644 src/termkit/workspace/migrations/README.md create mode 100644 src/termkit/workspace/migrations/env.py create mode 100644 src/termkit/workspace/migrations/script.py.mako create mode 100644 src/termkit/workspace/migrations/versions/0001_workspace_foundation.py create mode 100644 src/termkit/workspace/migrations/versions/0002_source_corpus_identity.py create mode 100644 src/termkit/workspace/models.py create mode 100644 src/termkit/workspace/project.py create mode 100644 src/termkit/workspace/reconciliation.py create mode 100644 src/termkit/workspace/store.py create mode 100644 src/termkit/workspace/writer.py create mode 100644 tests/test_exchange.py create mode 100644 tests/test_studio_api.py create mode 100644 tests/test_termspec_v02.py create mode 100644 tests/test_workspace.py diff --git a/.github/screenshots/studio-concepts.jpg b/.github/screenshots/studio-concepts.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9b3a6ca7e26f32965f408c783ee8d0784c7a7ed4 GIT binary patch literal 86885 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%0D>R^CqKWNTCP!j$-N6Hb{9gTd?o zXgECI$U1GIO8`lFOwBskW!i)jG2T7-YK00Ew>ZzGkbrT;EIh zs?tV?^BC<-EXVo;2W8+<-^k+XsQ8?ugm`m3)xaRYOWoIdt%c7h2?cdx+)q=!#b{z` zMBTm8OjqO<8Vze4_9O#%k&v5O>h<+w4~h@A+fTFCq`eq0; zo#XgmKZk+IdN)*luqeKn)eWr>?y5$&^-+TTe89As$uvHCU0ctZ1;vKaZ;vW+ZS8?) z=u|Qm=fV#5>sg>iRmz@5W?eW{nlz7&(a&jZVaQHb!i4sEWG@d6t!aDQ5Repummsm~ z2w|v?fE}YUy}R|Yk9&Mhn5G&)L3!X~yKNK7k{7xvQ7*rqWTMMetPBC_!U8QkeT$Yy z84&YhAelz$VFU5Z1I%=AW=6nRcibM|JQ$y*xzohOH0m`o2UOKj?=%@Mbde~qcv%?T z9RvF`ee0>tOu8kVfW?OYJ5X<=!hDAtpzmI~l+9{&a@bW?*BqKg09Uls%xRV08Xqae za+hG?OuMR!8`_V{F74`o1{vmyr30_XbYniDBH28;O?&EgwM_JOwnKNz6;39EO=0{X z5EIX*i5i+aJAzSoK!d-E*+wVKNO$yIJ+#4wg6j075nNgWc{>7 z!gG@AfHW=fJ_pWGMkK8!n67K1m_Ob5vhCH2A($-M?((M-ONV)-H0-h?voiY(z`!u4 z+9kFYQ4Z8Ae}6j6l><5#bpC+_rn4vL@yD&}UW)x6Szte^d}gEt|GgN%Kka+}99H^w zLfgNDs{Sh;(65HMn&Ybp;7{uYK-sr^r`c?tr+wg2t(ceXTrzRK^;G#ogzR()Sxv#y z$j|d-Lp9aK!?Z$3ZD26^9sJ`=LIHuj%`_Bea?tHmH$#ugUX=Mt@4W6K;1t5M)znSZ z?aXq9a4y!W!=Zkys>B1o;A^F&y^o_(vfmcX%aWT&ZmH{kx&jGc=aZfcmT7Z!C{?2L zG_=*brG7jfTh;k-l2$9rFU_m#;{Jf>yQlT+@?%SZd5-o01g|Z0r>+>2l**D`3%v87 zu=O1)iasnmC}D2C6Y;L)V5=xD>yRN!j-_w zWm!>Lc)V6)LGh@{;fkCpsunX)Nw2qiadPb1Nf*AkF?ekhrA`Umr%lO0&F^8M!5KFe zw~f21;8m|+f}IL=*L5JPyx>T-VnZ@6#Zm}wQX6%mDjG%5dYoGWKteZe)c^6(egD`oW?R_H-F|E^0S0VHXZZf4NhpHJp zDo2B`)V{ZSB#w}TXt4|zwns}YDzS40C9YH(vMqmzS9d&Zcs*nvhLDw;RT5l|sI%Wt zgR01%7+Xhpf;e3IJ~erk$Qh=>yyKsiO?O`8@StH6qiI~BD_F$8e_$}wU#hkGx)p`J z1Jv@;%5Fr07->Say8pXj`MZR+S?F*28h=h)#Q%|70h;$v ze@&oDP4hcHod21N_h$=Ge`iPjyQT7f@M-_*7o6)mwS|5xAAkQQek>nOtw?n@N7-R~4r|0N*dS}t^VHlr1STI%h zt%(eW1@wHh@Is-8<7&C8nyZ%znLN;bVp5zHn2G)A^g8=K+^ zJ=vA#zm+k$L@XVF)LMy`@Z4_@ABqLP;?#kBq~m;GJmO*YNKUr=jLHZZ4EQ*I0ADeU zOQ1smf-z~aihfeXCBcNj%fXQmsnvegxzU|BKI!$XDzfEJ(V`hLzIdi!@IjcLex(6NQ%!q%)Kgs1rc~~=hzc{ZxwZ*Z zP9ZDsva9;*8AhCTvXJ&ZE(`tg9#-68xr(z2S}&J|JrT9fh_sEjPpB)qz8Tu+2rM~1 z+GOw(g9d-vdzJwk0636F*#a;fuopL57`F^?^?rm(TLzV70u*_;7TX1J z;AWe$E{3UQSgd#QBzz5gv4SK_4ero--CeH_Hi+vDw;|8I$bP{E@bp<756NI%H?dw; z+#0@saKn&|c8D@-RPdbBl9E$+!}j~w>ChM@8{2{^pxq=6tj1ncyd*-4 zPPO8dd}k(^Cq^p;rD<#|Ha1eu%D#43kF}5$n>;|B1A)bFG{1(ERIi-pDer$Nk+gT= zp!N<#JX95$nD*vlgVm-n{%>%u_5k* ztS70_lc10#>PB%!OEc^1KSj|_R05}Q6jTNr<`6De{<;-CyS8I@L9 zjBSaWX0OR6&vQvwP;@{}MEqs2AU)Zxk>-6H<3kZ+hsu$2Vj6{q>dBVe0_qCXIo7Hz z0nmFp2M;Q6Sw2}Ded(^ch~$E1eACQfzzhR^Hd&BVcbxa}8D?SFy=7Mi`_LQ?eFFy2 zjT2tP@_`I>YkJMZcczh7QM%j$Ez!qB@*_Z9Sq!FHYg`A7|9MN5jlEFo7WYCUMBm>j zh%}X>34B|yLW&iwCj9KbuZ2H(-RBCHLaaW&Sh@d=n;nvln2uO`e&f`Vl*-L1(_h@#C+5B1AZ~YZ=TZVEjv$P) z!V`Y|%P7h4U3lQQRygz@DljY9%6AIByY;J?$2s^*&0o!-e2~BD9~``%z^ETLv{Q<5 z?kuBD3qiJXO}5wk8@vmze>#phFT`=xO!da$G%>yWm5Fzu6F-W7JeD8B;s5J22#3Ve zFoHPBu7->zo_^Cj%SC5aC4K_8c?sA9-|J!;~we9W)SH{%K5qtnQu2Os;Z?nRm#L;?k~5- zYFGExPGF-xz;U2{t8hf?N)iHXSCNfpzu)(8=+UMDu8!2-s3-xsZAnuSw}QQ6!vtfb#aqWSi8Qj5=jTV>d*pVE zl_Ma>S7CTUR|Q&dhKq|)>Ow&AZ5K;*f$7+{5ykeQ_sJD+cstsOm_^2kw0GmMPMe1d zF6dKkrEOp{$pt=MfdpPx>add-lKsdlSRAJr{)%*bq3)XAKuBv`6M`XV?Gvs>pt+5F zu5U!uL6^RhQNgN878%8U%yGJju^i;0wCZo~3mfEgcJ}b8z`LN|=myD&uDvT8lPh_x z+lVFHh$Itdz4Edj_w+FhayvtlOwXz~>1e72&u|VCp5N#yzQPm|S#iPRoEXWF&6EvW zIKrXBRq@{Wrfyq_RA&i@dCjuh9cjz@m`oh} zMG$4`Q6ijF?j5|J>{ z-On+;EHp4s7;@h=!Jl{Us*{FGdQ03p&>!nv(PWPX zwsi>zKXE?Zi;HJkc!(AU@u^`a#B!AkcG|6EVm({ZSkr2J=m)actw;gI#V@+_Ri?`- zD6$PKK25-%WycT%;TX<63?XQ;`aDeb)l;LkOPnMts`>Oyrj$MI^z31pSCcqEtE~%U zGV4WeZTU4(Vq}bsbxZB5K5G7D7VpRGn;J&^88~<>V%)Oar!+MP=W<1#TcRzOYu9@M zvNSY|Z5y}@4=F+=33PLMe$e(R&bKf3k>~Tvar3Oo_Q~xPA%m@yVKkXEjmo+1Zv7Dp zzL8JD{O<=?)=1eK(#gt=XB+nxl+;gvMwPW`yq&+6SNy+iW4TEMy5tP$v;${a2hkT! zL+nIe^+)irD<7Klvu#(2Tw}BP7pK1SN=A= zxrFnOOJKZoq|4EVQ&JIYDiY|BEFip8t_h7C4`vA|_4;X75AwbO>a(%=gfx7~tv8O+ zEzOjlFO7)D2)e##op~pgK||QzL*F;JoY!7m5HOzNFTtz5rzGaUsC(u84zh`s^xAe8 z^1kQpMxy6Aeaj0aqQg<8?dNoB-FEV#pGpB}yMkzO2uYK$)X=Q4g{wEHF=6pCm#+z8 z!d*m~aeo7d#;#vWVL0a-j*v=>?x42WkJxq12h<5;?HwKIpUo0DT6bzgDpOXBIdA-J G@IL@9eb)*A literal 0 HcmV?d00001 diff --git a/.github/screenshots/studio-review.jpg b/.github/screenshots/studio-review.jpg new file mode 100644 index 0000000000000000000000000000000000000000..24b0a1e6eb9b4824bf38b726e29e4764badcc20a GIT binary patch literal 92782 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 > [!IMPORTANT] -> TermKit is a working project name and the repository is at a pre-alpha -> foundation stage. Public contracts are intentionally small; compatibility is -> not guaranteed until the first stable TermSpec release. +> TermKit is pre-alpha. TermSpec 0.2 and the local Studio are implemented as the +> long-term architecture, but public compatibility is not guaranteed until 1.0. + +![TermKit Studio concept workspace](.github/screenshots/studio-concepts.jpg) + +TermKit Studio keeps concept identity, multilingual lexical entries, evidence, +relations and revision state visible in one dense workspace. Canonical files do +not change until an explicit ChangeSet passes validation and is applied. ## What TermKit is -TermKit is infrastructure for a future ecosystem of professional language -resources. Its model is concept-first: a hydraulic pump is one concept with -definitions, relations, multilingual lexical entries, evidence, review state, -and provenance—not a collection of unrelated bilingual string pairs. +TermKit treats a termbase as governed knowledge rather than a table of bilingual +word pairs. One language-neutral concept owns definitions, domain membership, +relations, provenance and lifecycle state; each language-specific name is a +separate lexical entry with its own status, policy, sense and evidence. + +```text +Concept → Evidence → Curation → Review → Package → Runtime +``` + +The repository contains three product surfaces: + +- **TermKit Core** — TermSpec 0.2, deterministic TermPack tooling, Forge + contracts, Exchange planning, dependency locks, and provider-neutral runtime. +- **TermKit Studio** — the official local-first React/FastAPI workbench for + concepts, candidates, review, sources, relations, exchange, runtime and releases. +- **TermRegistry** — immutable package discovery and verified local installation; + a hosted registry is deliberately not required. -The first repository contains four logical components: +Studio is not a SaaS dashboard. It opens a terminology repository on your own +machine. YAML and JSONL remain canonical; the workspace SQLite database is a +derived editing/index layer, and every semantic edit is an auditable ChangeSet. -- **TermSpec** defines concepts, lexical entries, evidence, sources, quality, - manifests, dependencies, and lock files. -- **TermRuntime** performs normalized longest-match discovery and produces - provider-neutral `TermPlan` decisions for translation and validation. -- **TermForge** defines an auditable candidate-production and review pipeline; - extraction and alignment algorithms are plugins. -- **TermRegistry** defines immutable package discovery and installation ports; - the first implementation is a verified local installer. +## Highlights -Terminology data belongs in separate repositories. Every pack declares its own -license, sources, maintainers, and redistribution policy. +- **Concept-first modeling** — represent one meaning once, then attach any + number of BCP 47 language entries, definitions, relations and evidence. +- **Governed curation** — draft semantic operations, review language and domain + decisions independently, and keep rationale plus revision history. +- **Standards-aware exchange** — map CSV/XLSX, normalize TBX and SKOS, preview + identity conflicts, and expose OpenRefine Reconciliation API v0.2. +- **Deterministic runtime** — resolve dependencies, write an exact lock, compile + FTS5 plus an Aho–Corasick matcher, and explain every terminology decision. +- **Local by default** — canonical data stays Git-friendly and Studio binds to + loopback; no hosted account or proprietary database is required. ## Quick start +From a source checkout, requirements are Python 3.11+, +[uv](https://docs.astral.sh/uv/), Bun 1.3+, and Git: + ```bash uv sync --all-extras +cd apps/studio && bun install --frozen-lockfile && bun run build && cd ../.. +uv run termkit studio examples/packs/demo-hydraulics +``` + +Studio opens at `http://127.0.0.1:8765/studio`. It binds to loopback by default; +non-loopback hosting requires an explicit override because Studio has no hosted +authentication boundary. Release wheels embed the production Studio build, so +installed users only need `termkit[studio]`; Bun is a contributor dependency. + +Core workflows remain available without the UI: + +```bash uv run termkit validate examples/packs/demo-hydraulics uv run termkit pack build examples/packs/demo-hydraulics --output dist/ +uv run termkit runtime compile \ + --pack examples/packs/demo-hydraulics \ + --output dist/demo-hydraulics.termdb \ + --lock-output dist/termkit.lock uv run termkit resolve \ "The boom cylinder is controlled by the pilot valve." \ --pack examples/packs/demo-hydraulics \ @@ -51,54 +97,132 @@ uv run termkit resolve \ --target-language zh-Hans ``` -## Repository map +## Studio workflow + +| Workspace | Purpose | +| --- | --- | +| Concepts | Faceted, virtualized concept and multilingual lexical editing | +| Candidates | Context-first reconciliation of Forge output into concepts | +| Review | PR-style semantic diffs with separate language/domain decisions | +| Sources | Provenance, authority, content identity and rights inspection | +| Relations | Hierarchy-first browsing plus governed relation ChangeSets | +| Exchange | CSV/XLSX mapping wizard and normalized TBX/SKOS import planning | +| Runtime | Explainable resolve/check plus independent `.termdb` compilation | +| Releases | Validation gates and deterministic build/verification | + +`⌘K` / `Ctrl+K` opens the command palette. The interface is intentionally dense, +quiet and keyboard-friendly; machine assistance belongs behind Forge and +reconciliation capabilities, not at the center of the product. + +### Review semantic changes + +![TermKit Studio review workspace](.github/screenshots/studio-review.jpg) + +A draft is an ordered semantic diff rather than an opaque form submission. +Language and domain reviewers decide separately, provide rationale, and approve +the same ChangeSet before canonical source is updated. + +### Explain runtime decisions + +![TermKit Studio runtime lab](.github/screenshots/studio-runtime.jpg) + +Runtime Lab shows source offsets, concept identity, selected pack, target term, +policy and evidence. The same bounded result can be consumed through the Python +API, local HTTP API or a compiled `.termdb` index. + +### Validate and build immutable releases + +![TermKit Studio release workspace](.github/screenshots/studio-releases.jpg) + +Release gates validate schema, references, languages, evidence and rights before +building a deterministic `.termpack`; the produced archive is verified in the +same workflow and reported with its SHA-256 digest. + +## Curation lifecycle + +```text +source revision → corpus → Forge candidates → reconciliation + → ChangeSet → language/domain review → canonical source + → TermPack + lock → compiled runtime index +``` + +Machine or plugin output never becomes approved terminology directly. It first +produces candidates with occurrence context and quality signals; a curator then +matches an existing concept, creates a concept, attaches a lexical entry, +defers, merges or rejects the proposal. See [Studio](docs/studio.md), +[Exchange](docs/exchange.md) and [Runtime](docs/runtime.md) for the complete +workflows. + +## Architecture ```text -src/termkit/ - spec/ Stable concept, lexical, evidence, and manifest contracts - pack/ Safe, deterministic TermPack build/load/verify operations - runtime/ Matching, resolution, term plans, and translation checking - plugins/ Entry-point discovery, descriptors, and typed plugin protocols - forge/ Candidate pipeline and review workflow ports - registry/ Package registry and installer ports - server/ Optional HTTP adapter - cli.py Thin command-line adapter -examples/ Original, redistributable demonstration packs -tests/ Offline contract, boundary, pack, runtime, and plugin tests -docs/ Architecture, governance, security, format, and ADRs +canonical YAML + JSONL + │ open / hash / index + ▼ +workspace.sqlite ── draft ChangeSet ── review ── validated atomic write + │ │ + │ candidate/review/history ▼ + └──────────────────────────────────── canonical source + │ + build TermPack / resolve dependencies / lock + ▼ + immutable .termpack derived .termdb + FTS5 + matcher ``` -Dependency direction is enforced in tests: `spec` is the center, while CLI, -server, providers, storage, and third-party algorithms stay at the edges. +The two SQLite files have different ownership and lifecycles: + +- `.termkit/workspace.sqlite` contains local editing state, candidates, review + decisions and derived canonical indexes; +- `.termkit/runtime/*.termdb` contains only resolved pack data, FTS5 search and + a serialized deterministic Aho–Corasick matcher. + +See [architecture.md](docs/architecture.md) and the accepted +[Studio architecture](TERM_KIT_STUDIO_ARCHITECTURE.md) for invariants. -## Standards strategy +## Repository map -TermKit does not replace terminology standards. The internal JSONL format is -optimized for Git review, streaming, and reproducible builds. Conversion -adapters will target TBX-Basic first, then SKOS where concept graphs benefit; -BCP 47 language tags are mandatory from day one. TMX and XLIFF remain adjacent -translation-workflow formats rather than being embedded into TermSpec. +```text +apps/studio/ React + TypeScript + Vite workbench +src/termkit/spec/ TermSpec 0.2 semantic contracts and JSON Schema +src/termkit/workspace/ Alembic-backed local application engine +src/termkit/forge/ Reproducible candidate pipeline and plugin ports +src/termkit/exchange/ CSV/XLSX/TBX/SKOS parsing and reconciliation plans +src/termkit/runtime/ Resolution, QA, dependency locks, FTS and matcher compiler +src/termkit/pack/ Canonical loading, validation and deterministic archives +src/termkit/registry/ Verified immutable package installation +src/termkit/server/ Local FastAPI and Studio API adapters +examples/ Original test fixtures, never the production data catalog +``` + +Official original seed data lives in the separate sibling **TermKit-Packs** +repository. Its dependency hierarchy covers mechanical engineering/hydraulics/ +construction machinery and machine learning/computer vision/object detection. ## Development ```bash uv run ruff check . uv run mypy src +uv run python scripts/export_schemas.py --check uv run pytest --cov -uv build +cd apps/studio && bun run check && bun run test && bun run build +cd ../.. && uv run python scripts/embed_studio_assets.py --check && uv build ``` -Read [CONTRIBUTING.md](CONTRIBUTING.md) and [AGENTS.md](AGENTS.md) before making -structural changes. +Read [CONTRIBUTING.md](CONTRIBUTING.md), [AGENTS.md](AGENTS.md), and +[development.md](docs/development.md) before structural changes. + +## Trust and non-goals -## Current non-goals +TermPacks are untrusted data and never contain executable plugins. Reference-only +or restricted sources cannot ship excerpts. Studio is local-only by default and +must not be exposed directly to the public internet. -- a terminology-management SaaS or marketplace UI; -- bundled proprietary or scraped terminology data; -- an LLM-generated glossary without evidence and review state; -- arbitrary code execution from `.termpack` archives; -- a custom TBX dialect, graph database, or vector database; -- production multi-tenant hosting. +TermKit does not bundle scraped/proprietary termbases, automatically approve +machine proposals, invent a custom TBX dialect, or turn terminology curation +into a chat-first AI product. Multi-tenant SaaS and a plugin marketplace remain +outside the current security boundary. ## License diff --git a/README.zh-CN.md b/README.zh-CN.md index 400f95e..e31720e 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -2,42 +2,86 @@ # TermKit -**面向专业领域的、概念优先的多语言术语基础设施。** +**面向专业术语工程的 Concept-first 基础设施与 Local-first 工作台。** -以可安装、可依赖、可版本化、可追溯的方式生产和使用专业术语资源。 +在不绑定某个模型或翻译供应商的前提下,整理证据、审核语义变更、构建不可变术语包, +并编译可复现的本地运行时索引。 -[English](README.md) · [架构](docs/architecture.md) · -[TermPack 格式](docs/termpack-format.md) · [插件系统](docs/plugin-system.md) +[English](README.md) · [Studio 架构](TERM_KIT_STUDIO_ARCHITECTURE.md) · +[TermSpec](docs/termspec.md) · [TermPack 格式](docs/termpack-format.md) + +[![CI](https://github.com/ZilaiWang/TermKit/actions/workflows/ci.yml/badge.svg)](https://github.com/ZilaiWang/TermKit/actions/workflows/ci.yml) +[![Python 3.11+](https://img.shields.io/badge/Python-3.11%2B-3776AB?logo=python&logoColor=white)](https://www.python.org/) +[![TermSpec 0.2](https://img.shields.io/badge/TermSpec-0.2-315C43)](docs/termspec.md) +[![License: MIT](https://img.shields.io/badge/License-MIT-2F2F2F.svg)](LICENSE) > [!IMPORTANT] -> TermKit 目前是工作名,项目仍处于 pre-alpha 地基阶段。第一版优先稳定数据 -> 契约、插件边界和可复现构建,不提前承诺稳定 API,也不急于制作网站和大词库。 +> TermKit 仍处于 pre-alpha。TermSpec 0.2 与本地 Studio 已按长期架构实现, +> 但在 1.0 之前暂不承诺公共接口完全稳定。 + +![TermKit Studio 概念工作区](.github/screenshots/studio-concepts.jpg) + +Concept、各语言词项、证据、关系和版本状态会同时出现在一个高密度工作区中。 +只有经过明确 Apply 的 ChangeSet 才会修改 canonical files。 ## 项目定位 -TermKit 不是“中英词对数据库”。它把一个专业概念与定义、概念关系、不同语言的 -名称、使用说明、来源证据、审核状态和版本历史联系起来,再把这些纯数据资源打包成 -可安装的 TermPack,供翻译器、PaperLens、OCR、ASR、搜索、RAG 和技术写作工具 -调用。 +TermKit 不把术语库理解为“中英词对表”。一个语言无关的 `Concept` 负责含义、定义、 +领域、关系、证据和生命周期;不同语言的名称是独立 `LexicalEntry`,各自具有状态、 +术语策略、词义说明和证据。 + +```text +Concept → Evidence → Curation → Review → Package → Runtime +``` + +项目包含三个产品面: + +- **TermKit Core:**TermSpec 0.2、TermPack、Forge、Exchange、依赖 lock 与运行时; +- **TermKit Studio:**官方 local-first Web 工作台,覆盖 Concepts、Candidates、 + Review、Sources、Relations、Exchange、Runtime、Releases; +- **TermRegistry:**不可变包的发现与校验安装;本地使用不依赖托管服务。 + +Studio 不是 SaaS 管理后台。它在本机打开术语数据仓库,YAML + JSONL 始终是 canonical +source;SQLite 只负责索引和编辑运行态。每次语义修改必须先形成可审核的 ChangeSet。 -第一阶段只有四个逻辑组件: +## 核心能力 -- **TermSpec:**概念、词项、证据、来源、质量、manifest、依赖和 lock 文件规范; -- **TermRuntime:**最长匹配、词义解析端口、`TermPlan` 和译后术语检查; -- **TermForge:**候选抽取、对齐、证据聚合和双维度审核流程; -- **TermRegistry:**不可变版本的发现、安装、校验和锁定协议。 +- **Concept-first:**一个含义只建模一次,再关联任意数量的 BCP 47 语言词项、定义、 + 关系与证据; +- **受治理的整理流程:**把修改保存为语义操作,语言审核与领域审核分别决策,并保留 + rationale 和 revision history; +- **标准交换层:**支持 CSV/XLSX 映射、TBX/SKOS 规范化、身份冲突预览,以及 + OpenRefine Reconciliation API v0.2; +- **确定性运行时:**解析依赖、生成精确 lock、编译 FTS5 与 Aho–Corasick matcher, + 并解释每个术语决策; +- **Local-first:**canonical 数据保持 Git-friendly,Studio 默认只监听本机回环地址, + 不需要托管账号或专有数据库。 -软件和数据从第一天分离。TermKit 仓库使用 MIT;每个术语包必须独立声明许可证、 -来源、维护者与再分发策略。 +## 快速启动 -## 快速开始 +从源码运行需要 Python 3.11+、uv、Bun 1.3+ 与 Git: ```bash uv sync --all-extras +cd apps/studio && bun install --frozen-lockfile && bun run build && cd ../.. +uv run termkit studio examples/packs/demo-hydraulics +``` + +浏览器会打开 `http://127.0.0.1:8765/studio`。Studio 默认只允许回环地址;它没有 +面向公网的认证与多租户安全边界。正式 wheel 已内嵌 Studio 生产构建,安装用户只需 +安装 `termkit[studio]`;Bun 只是贡献者依赖。 + +命令行能力可以独立使用: + +```bash uv run termkit validate examples/packs/demo-hydraulics uv run termkit pack build examples/packs/demo-hydraulics --output dist/ +uv run termkit runtime compile \ + --pack examples/packs/demo-hydraulics \ + --output dist/demo-hydraulics.termdb \ + --lock-output dist/termkit.lock uv run termkit resolve \ "The boom cylinder is controlled by the pilot valve." \ --pack examples/packs/demo-hydraulics \ @@ -45,35 +89,93 @@ uv run termkit resolve \ --target-language zh-Hans ``` -## 关键工程原则 +## Studio 能做什么 + +| 工作区 | 作用 | +| --- | --- | +| Concepts | Facet 筛选、虚拟列表、概念与多语言词项编辑 | +| Candidates | 结合上下文把 Forge 输出协调为概念,而非接受“词对” | +| Review | 类 PR 语义 diff,语言审核与领域审核独立留痕 | +| Sources | 查看来源身份、权威级别、内容摘要与再分发权限 | +| Relations | 默认树形浏览,并通过 ChangeSet 修改概念关系 | +| Exchange | CSV/XLSX 映射向导,以及 TBX/SKOS 的规范化导入计划 | +| Runtime | 可解释 resolve/check,编译独立 `.termdb` | +| Releases | Schema、引用、语言、许可证、证据等发布门禁 | -- Concept first,language second; -- 语言标识统一使用 BCP 47; -- Git 友好的 JSONL 是内部维护格式,TBX 是交换格式; -- TermPack 只能包含数据,不能夹带可执行插件; -- 插件通过 Python entry points 显式安装和发现; -- 所有发布包不可变、带校验和,可由 lock 文件精确复现; -- 测试默认离线,示例数据必须原创或可再分发; -- 不把“未找到证据”伪装成“已确认术语”。 +`⌘K` / `Ctrl+K` 打开命令面板。界面采用 dense、quiet、structural、 +keyboard-friendly 的专业工具风格。机器/LLM 能力只作为 Forge、消歧、定义建议等后台 +capability 暴露,不把产品做成 AI 聊天项目。 -完整边界见[架构文档](docs/architecture.md)和[安全模型](docs/security.md)。 +### 审核语义变更 -## 当前不做 +![TermKit Studio 审核工作区](.github/screenshots/studio-review.jpg) -- 术语管理 SaaS、应用市场 UI 或多租户云服务; -- 携带版权风险的厂商手册和爬取词库; -- 没有来源和审核状态的批量 AI 词对; -- 自创 TBX dialect、图数据库或默认向量数据库; -- 直接实现所有翻译供应商、抽取器和小语种形态学算法。 +草稿是一组有顺序的语义 diff,而不是不可追踪的表单提交。语言审核和领域审核分别 +给出 rationale,对同一个 ChangeSet 完成决策后,才允许写回 canonical source。 + +### 解释运行时决策 + +![TermKit Studio Runtime Lab](.github/screenshots/studio-runtime.jpg) + +Runtime Lab 展示匹配区间、Concept 身份、来源 pack、目标词项、术语策略和证据。 +同一份受约束结果也可以通过 Python API、本地 HTTP API 或编译后的 `.termdb` 使用。 + +### 验证并构建不可变发布物 + +![TermKit Studio 发布工作区](.github/screenshots/studio-releases.jpg) + +发布门禁先检查 Schema、引用、语言、证据和来源权限,再构建确定性的 `.termpack`; +同一流程会立即校验归档,并显示 SHA-256 摘要。 + +## 整理生命周期 + +```text +source revision → corpus → Forge candidates → reconciliation + → ChangeSet → language/domain review → canonical source + → TermPack + lock → compiled runtime index +``` + +机器或插件输出不会直接成为正式术语,而是先形成带语境与质量信号的 Candidate。 +整理者随后决定匹配已有 Concept、新建 Concept、挂接 LexicalEntry、合并、延后或拒绝。 +完整流程见 [Studio](docs/studio.md)、[Exchange](docs/exchange.md) 和 +[Runtime](docs/runtime.md)。 + +## 数据与运行时边界 + +```text +canonical YAML + JSONL + │ + ▼ +workspace.sqlite ── ChangeSet ── Review ── 原子写回 canonical source + │ + TermPack + dependency lock + ▼ + 独立 .termdb(FTS5 + matcher) +``` + +- `.termkit/workspace.sqlite` 保存本地草稿、候选、审核、历史与派生索引; +- `.termkit/runtime/*.termdb` 只保存已解析 pack 集合、FTS5 与序列化的确定性 + Aho–Corasick matcher; +- 删除 `.termkit/` 不会删除 canonical 术语数据,但会删除尚未应用的本地草稿。 + +正式原创种子数据放在独立同级仓库 **TermKit-Packs**,从第一天按长期依赖层级维护: +机械基础 → 液压/工程机械 → 挖掘机,以及 ML 基础 → 计算机视觉 → 目标检测。 ## 开发验证 ```bash uv run ruff check . uv run mypy src +uv run python scripts/export_schemas.py --check uv run pytest --cov -uv build +cd apps/studio && bun run check && bun run test && bun run build +cd ../.. && uv run python scripts/embed_studio_assets.py --check && uv build ``` -提交结构性改动前请阅读 [CONTRIBUTING.md](CONTRIBUTING.md) 与 -[AGENTS.md](AGENTS.md)。 +## 安全与非目标 + +TermPack 只能包含数据,不能携带可执行插件;受限来源不能发布摘录;Studio 默认不得 +直接暴露公网。项目不捆绑爬取/私有词库,不自动批准机器候选,不自创 TBX 方言,也不 +把术语工程做成 chat-first AI 产品。当前不建设多租户 SaaS 或远程插件市场。 + +软件代码使用 [MIT License](LICENSE)。每个术语包及其来源必须独立声明授权。 diff --git a/TERM_KIT_STUDIO_ARCHITECTURE.md b/TERM_KIT_STUDIO_ARCHITECTURE.md new file mode 100644 index 0000000..c69cc94 --- /dev/null +++ b/TERM_KIT_STUDIO_ARCHITECTURE.md @@ -0,0 +1,389 @@ +# TermKit Studio architecture + +Status: Accepted for implementation +Target: TermSpec 0.2 / TermKit 0.2 pre-alpha +Last reviewed: 2026-08-12 + +## 1. Product boundary + +TermKit Studio is the official local-first terminology engineering workbench. +It is not a hosted multi-tenant SaaS, a registry marketplace, a chat client, or +the canonical terminology store. It provides a professional interface over the +same public TermSpec, TermPack, Forge, Runtime, and Registry contracts used by +other applications. + +The product has three surfaces: + +```text +TermKit Core schemas, workflows, packages, runtime, plugin contracts +TermKit Studio local curation, review, evidence, testing, and release UI +TermRegistry package discovery, immutable distribution, and locking +``` + +Studio is a browser application served by a local FastAPI process. A native +wrapper may be added later, but desktop packaging remains an adapter. + +## 2. Non-negotiable invariants + +1. Concepts remain language-neutral. Language and script belong to lexical + entries. +2. YAML and deterministic JSONL in a terminology repository remain canonical. + SQLite never silently replaces or outranks those files. +3. Every edit is first represented by a draft `ChangeSet`; a UI save operation + never writes canonical files directly. +4. Candidate production and governed approval are separate. Machine-produced + records cannot advance themselves to `APPROVED` or `STANDARDIZED`. +5. Source rights, evidence state, and review state are visible domain data, not + optional UI metadata. +6. Studio workspace storage and compiled Runtime storage are separate files, + schemas, APIs, and lifecycle concepts. +7. TermPacks contain data only. Installed Python plugins are explicitly trusted + code and are never loaded by inspecting a pack or opening a workspace. +8. Applying a ChangeSet is transactional from the user's perspective: either a + validated deterministic canonical snapshot is written, or no source files + change. + +## 3. Repository and deployment layout + +```text +src/termkit/ + spec/ public semantic contracts + pack/ canonical load, validation, and release archives + workspace/ local application engine and SQLite adapters + forge/ reproducible pipeline orchestration and ports + runtime/ resolution and compiled runtime index + exchange/ standards-based exchange adapters + server/routes/ HTTP adapters grouped by user capability + studio_assets/ packaged production frontend, generated at release + +apps/studio/ React + TypeScript + Vite source +alembic/ workspace schema migration environment +examples/ original fixtures only, never production datasets +``` + +The Python package can be installed without Studio dependencies. The `studio` +extra provides FastAPI, Uvicorn, SQLAlchemy, Alembic, and spreadsheet support. +The frontend is a static SPA in production and a Vite development server during +frontend work. + +## 4. Dependency direction + +```text + apps/studio + | + server/routes + | + +---------------+---------------+ + | | | + workspace service registry adapters + / | \ | | + exchange forge pack runtime registry + \ | / / \ + TermSpec ---- pack plugin protocols +``` + +- `spec` imports no application, persistence, plugin, server, or provider code. +- `workspace` is an application layer. It may consume `spec`, `pack`, `forge`, + and `exchange` ports, but none of those modules may import `workspace`. +- `server` and `apps/studio` translate requests and events; they do not decide + evidence sufficiency, review completion, or release validity. +- Runtime compiled storage is owned by `runtime`, not `workspace`. +- SQLAlchemy entities are persistence records and never become TermSpec models. + +The architecture check rejects both absolute and relative forbidden imports. + +## 5. TermSpec 0.2 semantic model + +TermSpec 0.2 adds explicit long-lived entities rather than hiding them in UI or +database fields. + +### Knowledge organization + +- `DomainScheme`: a versioned domain taxonomy and its maintainers. +- `DomainNode`: a stable node with labels, parent links, notation, and scope. +- `ExternalIdentifier`: a typed link to an external concept system with match + type, confidence, and evidence. + +### Concept-first candidate pool + +- `CandidateConcept`: a meaning hypothesis, domain hypotheses, source + occurrences, definitions, and possible existing-concept matches. +- `CandidateLexicalEntry`: one language-specific surface linked to a candidate + concept; it is never a source-to-target pair. +- `CandidateRelation`: a proposed semantic relation. +- `CandidateAlignment`: evidence that two candidate lexical entries express the + same candidate concept in different languages. + +`CandidateTerm` remains only as a deprecated compatibility input during the +0.2 cycle and is converted at the Forge boundary. + +### Governed change and review + +- `ChangeSet`: author, base revision, reason, source run, ordered operations, + review references, and lifecycle state. +- `ChangeOperation`: typed create/update/remove operation with before/after + snapshots and an explicit subject identity. +- `ReviewTask`: required review dimensions and assigned roles. +- `ReviewDecision`: approve, request changes, reject, or defer with rationale. +- `ConceptRevision` and `LexicalRevision`: immutable revision metadata and + content digests. + +Language review and domain review are distinct requirements. A complete review +policy may require both without assuming one person fills both roles. + +### Sources and corpora + +- `SourceRevision`: immutable retrieval/content identity for a source. +- `Corpus`: segmentation configuration and source revision set. +- `CorpusSegment`: language, structural location, text digest, optional parallel + group, and rights-aware excerpt state. + +Missing extraction, unattested proposals, rejected proposals, and confirmed +absence remain different states. + +## 6. Canonical source and workspace lifecycle + +Opening a terminology repository follows this sequence: + +```text +validate path and manifest + -> hash canonical release files + -> migrate workspace.sqlite + -> compare imported source digest + -> rebuild derived canonical tables when source changed + -> preserve drafts, reviews, candidate pool, UI state, and history +``` + +The default local layout is: + +```text +/.termkit/workspace.sqlite +/.termkit/artifacts/ +/.termkit/runtime/.termdb +``` + +`.termkit/` is disposable and ignored by Git. Rebuilding it must not lose +canonical terminology, but may lose explicitly documented local-only drafts if +the user deletes it. + +### Workspace database responsibilities + +The workspace database stores: + +- indexed copies of canonical concepts, lexical entries, relations, evidence, + sources, and domain nodes; +- draft ChangeSets and ordered operations; +- review tasks and decisions; +- candidate concepts, lexical entries, relations, alignments, and occurrences; +- Forge run metadata, stage state, artifact references, and statistics; +- corpus segments, operation history, UI state, and search indices. + +It does not store a released TermPack as its authoritative representation. + +### Runtime compiled database responsibilities + +A `.termdb` contains only data derived from a resolved TermLock: + +- exact and normalized lexical indices; +- SQLite FTS5 search tables; +- deterministic scan automata metadata; +- pack coordinates and digests; +- no drafts, reviews, UI state, or Forge runs. + +## 7. ChangeSet transaction model + +Draft editing is append-oriented: + +```text +create draft ChangeSet + -> append validated operations + -> preview aggregate diff + -> submit for review when policy requires + -> apply in one workspace transaction + -> validate prospective PackData + -> render deterministic files to sibling temporary files + -> atomically replace canonical files + -> append immutable history event +``` + +Operations have stable IDs and optimistic `base_revision` checks. Conflicts +produce a structured response; last-writer-wins is forbidden. + +Undo creates a new compensating ChangeSet from stored `before` snapshots. Redo +creates another forward ChangeSet. History is never rewritten. + +The initial operation vocabulary is: + +```text +CREATE_CONCEPT UPDATE_CONCEPT REMOVE_CONCEPT +SET_CONCEPT_STATUS +ADD_LEXICAL_ENTRY UPDATE_LEXICAL_ENTRY REMOVE_LEXICAL_ENTRY +ADD_RELATION REMOVE_RELATION +ADD_EVIDENCE UPDATE_EVIDENCE REMOVE_EVIDENCE +LINK_EXTERNAL_ID UNLINK_EXTERNAL_ID +``` + +## 8. Forge reproducibility + +`ForgeRun` stores metadata, never an unbounded embedded candidate list: + +- input source revision IDs and content digests; +- ordered stages and stage results; +- plugin descriptors and versions; +- model/provider identity and prompt/config revision where applicable; +- deterministic seed; +- artifact references and their digests; +- counts, timings, warnings, and errors. + +Candidates live in separate workspace tables. The fixed logical flow is: + +```text +source intake -> normalize/segment -> candidate mining -> deduplicate/cluster +-> concept reconciliation -> cross-language alignment -> evidence aggregation +-> automated QA -> candidate review -> language review -> domain review +-> ChangeSet -> canonical source -> release +``` + +Algorithms remain plugins. Plausible extractor implementations include rules, +statistical termhood, model-backed proposals, and hybrid ensembles. They all +emit the same concept-first candidate contracts. + +## 9. Exchange boundary + +Supported capability targets are native JSONL/TermPack, TBX, CSV, XLSX, and +SKOS. Exchange adapters produce an intermediate import plan: + +```text +read -> normalize -> map -> preview -> identity strategy -> reconcile +-> conflict decisions -> ChangeSet +``` + +Spreadsheet mapping is explicit and saved as reusable mapping profiles. TBX and +SKOS adapters preserve source identifiers and record unsupported constructs as +diagnostics; they never silently flatten semantics into canonical files. + +## 10. Studio HTTP API + +All Studio endpoints live under `/studio/api/v1`. Public resolver/checker APIs +remain under `/v1` and do not acquire workspace behavior. + +```text +GET /workspace +GET /concepts search, facets, cursor/page +GET /concepts/{id} +POST /changesets +POST /changesets/{id}/operations +POST /changesets/{id}/submit +POST /changesets/{id}/apply +POST /history/{id}/revert +GET /candidates +POST /candidates/{id}/decision +GET /reviews +POST /reviews/{id}/decisions +GET /sources +GET /forge/runs +POST /forge/runs +POST /exchange/preview +POST /runtime/resolve +POST /runtime/check +POST /releases/validate +POST /releases/build +``` + +The API is local-only by default. It rejects non-loopback binding unless the +operator supplies an explicit unsafe/hosted configuration. The local API has no +multi-user authorization and must never be presented as an internet service. + +## 11. Studio information architecture + +Navigation follows user work rather than source modules: + +```text +Concepts Candidates Review Sources Relations +Exchange Runtime Releases +``` + +The product shell is dense, quiet, structural, keyboard-friendly, and designed +for resizable panes and large collections. It does not use landing heroes, +metric-card dashboards, chat-first layouts, decorative gradients, AI sparkle, +or fake controls. + +### Concepts workspace + +The first complete work surface is: + +```text +facets -> virtualized concept list -> concept editor -> contextual inspector +``` + +It supports definitions, domains, BCP 47 languages, lexical status/policy, +morphology, relations, evidence, external identifiers, review state, history, +and pinned side-by-side languages. Every mutation creates or updates a draft +ChangeSet. + +### Remaining work surfaces + +- Candidates: evidence context and concept reconciliation decisions. +- Review: ChangeSet diff, separate language/domain decisions, rationale. +- Sources: authority, rights, revision, corpus, candidates, and evidence usage. +- Relations: tree-first editing with an optional graph inspection view. +- Exchange: mapping, preview, reconciliation, and conflicts. +- Runtime: explainable resolve/check routes and match traces. +- Releases: validation, semantic diff, build, verify, install, and publish ports. + +Unavailable capabilities are labeled as unavailable; the UI never simulates +successful backend work. + +## 12. Frontend implementation + +`apps/studio` uses React, TypeScript, and Vite with: + +- TanStack Query for server state; +- TanStack Table and Virtual for dense/large lists; +- Radix primitives for accessible menus, dialogs, and resizable interactions; +- CSS variables and a small project-owned component layer; +- a command palette and documented keyboard shortcuts; +- frontend unit tests plus a production build in CI. + +The frontend consumes API boundary types. It does not copy evidence or review +policy logic from Python. + +## 13. Security and rights + +- Workspace paths are resolved and tied to the CLI-opened project root. +- Canonical writes use an allowlist and atomic replacement. +- Import size, XML entity behavior, spreadsheet formulas, archives, and file + names are treated as untrusted input. +- Source excerpts are redacted from publishable output according to + redistribution policy. +- Plugin loading remains off for third-party distributions by default. +- Git actions are explicit user operations through `GitWorkspaceAdapter`; no + automatic push or credential discovery is part of the workspace engine. + +## 14. Migration and delivery order + +1. Add TermSpec 0.2 models while retaining explicit 0.1 compatibility readers. +2. Replace Forge's pair-oriented candidate storage with concept-first records. +3. Add Alembic-managed workspace storage and deterministic ChangeSet apply. +4. Add Studio API and CLI composition. +5. Build the final Studio shell and complete Concepts. +6. Add candidates, review, sources, Forge runs, relations, Runtime, releases. +7. Add exchange adapters, runtime compiler, lock resolution, and benchmarks. +8. Establish the separate official pack hierarchy using original/licensed data. + +Each step keeps offline tests green, regenerates schemas, updates compatibility +notes, and avoids claiming deferred capability as complete. + +## 15. Architecture acceptance checks + +- Deleting `workspace.sqlite` and reopening recreates canonical indexed data. +- A draft edit does not change any canonical source file. +- Applying an invalid ChangeSet changes neither DB canonical state nor files. +- Applying a valid ChangeSet produces deterministic, reviewable Git diffs. +- Undo/redo are new audited operations, not history mutation. +- A Forge run can reference 50,000 candidates without embedding them in one row. +- The Runtime compiler never reads Studio draft/review tables. +- A TermPack inspection never imports plugin code. +- Rights-restricted excerpts cannot enter a release. +- Studio production build, Python 3.11–3.13 tests, schemas, and package build pass + in CI. diff --git a/alembic.ini b/alembic.ini new file mode 100644 index 0000000..ce18c9e --- /dev/null +++ b/alembic.ini @@ -0,0 +1,38 @@ +[alembic] +script_location = src/termkit/workspace/migrations +prepend_sys_path = . +path_separator = os + +[loggers] +keys = root,sqlalchemy,alembic + +[handlers] +keys = console + +[formatters] +keys = generic + +[logger_root] +level = WARN +handlers = console +qualname = + +[logger_sqlalchemy] +level = WARN +handlers = +qualname = sqlalchemy.engine + +[logger_alembic] +level = INFO +handlers = +qualname = alembic + +[handler_console] +class = StreamHandler +args = (sys.stderr,) +level = NOTSET +formatter = generic + +[formatter_generic] +format = %(levelname)-5.5s [%(name)s] %(message)s +datefmt = %H:%M:%S diff --git a/apps/studio/bun.lock b/apps/studio/bun.lock new file mode 100644 index 0000000..452ad80 --- /dev/null +++ b/apps/studio/bun.lock @@ -0,0 +1,381 @@ +{ + "lockfileVersion": 1, + "configVersion": 1, + "workspaces": { + "": { + "name": "@termkit/studio", + "dependencies": { + "@radix-ui/react-dialog": "^1.1.15", + "@tanstack/react-query": "^5.90.21", + "@tanstack/react-table": "^8.21.3", + "@tanstack/react-virtual": "^3.13.18", + "lucide-react": "^0.545.0", + "react": "^19.2.0", + "react-dom": "^19.2.0", + }, + "devDependencies": { + "@types/react": "^19.2.2", + "@types/react-dom": "^19.2.2", + "@vitejs/plugin-react": "^5.0.4", + "typescript": "^5.9.3", + "vite": "^7.1.12", + "vitest": "^4.0.4", + }, + }, + }, + "packages": { + "@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], + + "@babel/compat-data": ["@babel/compat-data@7.29.7", "", {}, "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg=="], + + "@babel/core": ["@babel/core@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/helper-compilation-targets": "^7.29.7", "@babel/helper-module-transforms": "^7.29.7", "@babel/helpers": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA=="], + + "@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + + "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], + + "@babel/helper-globals": ["@babel/helper-globals@7.29.7", "", {}, "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA=="], + + "@babel/helper-module-imports": ["@babel/helper-module-imports@7.29.7", "", { "dependencies": { "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g=="], + + "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.29.7", "", { "dependencies": { "@babel/helper-module-imports": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7", "@babel/traverse": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg=="], + + "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.29.7", "", {}, "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw=="], + + "@babel/helper-string-parser": ["@babel/helper-string-parser@7.29.7", "", {}, "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw=="], + + "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.29.7", "", {}, "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg=="], + + "@babel/helper-validator-option": ["@babel/helper-validator-option@7.29.7", "", {}, "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw=="], + + "@babel/helpers": ["@babel/helpers@7.29.7", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg=="], + + "@babel/parser": ["@babel/parser@7.29.8", "", { "dependencies": { "@babel/types": "^7.29.8" }, "bin": "./bin/babel-parser.js" }, "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA=="], + + "@babel/plugin-transform-react-jsx-self": ["@babel/plugin-transform-react-jsx-self@7.29.7", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw=="], + + "@babel/plugin-transform-react-jsx-source": ["@babel/plugin-transform-react-jsx-source@7.29.7", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q=="], + + "@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], + + "@babel/traverse": ["@babel/traverse@7.29.8", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.8", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg=="], + + "@babel/types": ["@babel/types@7.29.8", "", { "dependencies": { "@babel/helper-string-parser": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7" } }, "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg=="], + + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.28.2", "", { "os": "aix", "cpu": "ppc64" }, "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ=="], + + "@esbuild/android-arm": ["@esbuild/android-arm@0.28.2", "", { "os": "android", "cpu": "arm" }, "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg=="], + + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.28.2", "", { "os": "android", "cpu": "arm64" }, "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A=="], + + "@esbuild/android-x64": ["@esbuild/android-x64@0.28.2", "", { "os": "android", "cpu": "x64" }, "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q=="], + + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.28.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw=="], + + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.28.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw=="], + + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.28.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw=="], + + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.28.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg=="], + + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.28.2", "", { "os": "linux", "cpu": "arm" }, "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w=="], + + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.28.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug=="], + + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.28.2", "", { "os": "linux", "cpu": "ia32" }, "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ=="], + + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.28.2", "", { "os": "linux", "cpu": "none" }, "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ=="], + + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.28.2", "", { "os": "linux", "cpu": "none" }, "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA=="], + + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.28.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ=="], + + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.28.2", "", { "os": "linux", "cpu": "none" }, "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA=="], + + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.28.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg=="], + + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.28.2", "", { "os": "linux", "cpu": "x64" }, "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ=="], + + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.28.2", "", { "os": "none", "cpu": "arm64" }, "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw=="], + + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.28.2", "", { "os": "none", "cpu": "x64" }, "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw=="], + + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.28.2", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ=="], + + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.28.2", "", { "os": "openbsd", "cpu": "x64" }, "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw=="], + + "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.28.2", "", { "os": "none", "cpu": "arm64" }, "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q=="], + + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.28.2", "", { "os": "sunos", "cpu": "x64" }, "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g=="], + + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.28.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ=="], + + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.28.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA=="], + + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.28.2", "", { "os": "win32", "cpu": "x64" }, "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g=="], + + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], + + "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], + + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], + + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], + + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + + "@napi-rs/lzma-linux-x64-gnu": ["@napi-rs/lzma-linux-x64-gnu@1.5.1", "", { "os": "linux", "cpu": "x64" }, "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ=="], + + "@radix-ui/primitive": ["@radix-ui/primitive@1.1.7", "", {}, "sha512-rqWnm76nYT8HoNNqEjpgJ7Pw/DrBj5iBTrmEPo6HTX5+VJyBNOqTdv4g89G63HuR5g0AaENoAcH7Is5fF2kZ8Q=="], + + "@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.5", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-+48PbAAbq3didjJxa+OaWY2ZwgAKsNiRGyeHKszblZMQ+kcpd9pAaT11cMkGEie0vsOi3QdeTE6d5Fe3Gn61kA=="], + + "@radix-ui/react-context": ["@radix-ui/react-context@1.2.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-RHCUGwKHDr0hDGg4X7ma4JG4/+12qxw8rkh5QKdDldlCvtja6nUx1Ef/8HVrJze81lEsgLQlqjzjGNHantgnQA=="], + + "@radix-ui/react-dialog": ["@radix-ui/react-dialog@1.1.23", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-dismissable-layer": "1.1.19", "@radix-ui/react-focus-guards": "1.1.6", "@radix-ui/react-focus-scope": "1.1.16", "@radix-ui/react-id": "1.1.4", "@radix-ui/react-portal": "1.1.17", "@radix-ui/react-presence": "1.1.10", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-slot": "1.3.3", "@radix-ui/react-use-controllable-state": "1.2.6", "@radix-ui/react-use-layout-effect": "1.1.4", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.7.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Ksw4WeROkO4rC9k/onilX/Ao2Cr1ku1unMNH+XSCcP4jSXYu7HDsg9n4ojMjVb22XpYjAQ9qfrFlVbru1vXDUA=="], + + "@radix-ui/react-dismissable-layer": ["@radix-ui/react-dismissable-layer@1.1.19", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-use-callback-ref": "1.1.4", "@radix-ui/react-use-effect-event": "0.0.5" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-8g4pfOL9HoKKLWGiypT+dphVqjFfmcXO5GBnhsG6zI+lxAx/8feQpr+1LSN8Re3hiZ+XkLNS4O9ztK11/LzQ6w=="], + + "@radix-ui/react-focus-guards": ["@radix-ui/react-focus-guards@1.1.6", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-RNOJjfZMTyBM6xYmV3IVGXkPjIhcBAuv48POevAXwrGJhkWZ9p1rFoIS1JFooPuT193AZmRsCPhpoVJxx6OPoQ=="], + + "@radix-ui/react-focus-scope": ["@radix-ui/react-focus-scope@1.1.16", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-use-callback-ref": "1.1.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-wmRZ2WWLvmt6KHy2rNPOdPUjwq5xOHY02+m+udwJTn0aNIox/rkskAvJTyTLGhPK6KgrUjlJUJpgmx/+wFiFIQ=="], + + "@radix-ui/react-id": ["@radix-ui/react-id@1.1.4", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-TMQp2llA+RYn7JcjnrMnz7wN4pcVttPZnRZo52PLQsoLVKzNlVwUeHmfePgTgRluXFvlD3GD5g5MOVVTJCO0qA=="], + + "@radix-ui/react-portal": ["@radix-ui/react-portal@1.1.17", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-vKQLcWypUnwZVvfV7UkGahH2g6ySe8M8R+zYBwPrv5byZ9QAW6cQVvNKo7GgmD+p8aYb6D9JBuvy8/WhOno2wQ=="], + + "@radix-ui/react-presence": ["@radix-ui/react-presence@1.1.10", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-3wyzCQ6+ubRA+D4uv9m95JYLXxmOHp05qjrkjeA7uKHHtjpPggQzc6DAb0URl7j67oR0K2foO4ip27TiX037Bw=="], + + "@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.10", "", { "dependencies": { "@radix-ui/react-slot": "1.3.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-MucOnzh6hR5mid6VpkbglRAMYMjKLqRnGBbjXkzjK52fuQDd1qbkx78a5P40mkcnVXJdEVxm26E9OPAiUq7nBg=="], + + "@radix-ui/react-slot": ["@radix-ui/react-slot@1.3.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.5" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-qx7oqnYbxnK9kYI9m317qmFmEgo6ywqWvbTogdj7cL9p3/yx4M48p7Rnw5z3H890cL/ow/EeWJsuTykeZVXP5Q=="], + + "@radix-ui/react-use-callback-ref": ["@radix-ui/react-use-callback-ref@1.1.4", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-R6OUY2e2fA6Yn6s+VSx5KBV6Nx8LQEhu+cz7LCej18rQ1HLyg9PSC9jP/ZNx0o6FAIK9c0F1kHylzSxKsdlkrQ=="], + + "@radix-ui/react-use-controllable-state": ["@radix-ui/react-use-controllable-state@1.2.6", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-use-effect-event": "0.0.5", "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-uEQJGT97ZA/TgP/Hydw47lHu+/vQj6z/0jA+WeTbK1o9Rx45GImjpD0tc3W5ad3D6XTSR6e1yEO0FvGq6WQfVQ=="], + + "@radix-ui/react-use-effect-event": ["@radix-ui/react-use-effect-event@0.0.5", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-7cshFL8HGS/7HEiHH+9kL9HBwp2sa9yX18Knwek6KYWmXwM7pegMgta2AXMQKI+rq3JnfSj9x8wYqFMTdG1Jgg=="], + + "@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.4", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-K20DkRkUwDnxEYMBPcg3Y6voLkEy5p5QQmszZgLngKKiC7dzBR/aEuK3w1qlx2JWDUNH6FluahYdgR3BP+QbYw=="], + + "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-rc.3", "", {}, "sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q=="], + + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.62.4", "", { "os": "android", "cpu": "arm" }, "sha512-RrPokAb7dmbxFoeO3TloqHyOjgye8RkBhSqmp4aJMIex4c9r46ZstPnleDQOq1t46VOVjwIuwNogIqbodV1Vvg=="], + + "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.62.4", "", { "os": "android", "cpu": "arm64" }, "sha512-JKuJc+pnpks2pjy7L/N3v/cAkZxYlnmuZoD840ldbMI5KDbC4iO9NKwPKYdjYFCMAIIlBzYSFHxIJVYzRo2/8A=="], + + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.62.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-krw5uS2STmvJ02x0uTXHbqQNuz+9eZ1iw+qXk9dmW2gvV4jV7O2hEoOnuhFrpOPiel1mBFtqbxYZZtC46hXLOw=="], + + "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.62.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-wsTxtgApb4PrOsNJIm0FZ1h3WvCC+k9uxLJ4ad75hgoS4NiRes2SoJFlDAyMwiUY8IssDqGcHbXuN0sx1tfF1A=="], + + "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.62.4", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-GUOnQlyZe3yAXhWOtOMsn5Qkrv5E5mZXa0thbARWi5Ei2szlVXJFQhddZ4HbAzh8q92w5twp+CQvs/eFanz9YQ=="], + + "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.62.4", "", { "os": "freebsd", "cpu": "x64" }, "sha512-/Y7f3QuxjzPKsjA/rfEDa3+0vXqyjmJ50Ln8dPpCmWkKTrUoWHG1cWhTqaAMLob2m2nESWuC7yGrREz019Ztqg=="], + + "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.62.4", "", { "os": "linux", "cpu": "arm" }, "sha512-81wiiX3v7aqy+T+bT61TJ78yJjRquqFFTTbAPt08imfQQzkPIW8t6aJbkTagtCCrXMNc9D66+geqlK7ydLPNqA=="], + + "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.62.4", "", { "os": "linux", "cpu": "arm" }, "sha512-9kmDIvNZqdoHOBZgNtpTBeLWYO/LVipM3H/j62P8848/l/VPEQL6N3uxU9pvP1oZAsXyC2MEnFP3ovRjo7WYNQ=="], + + "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.62.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-CcnXHWnXg69g+DX5VWL3FHts3qMRN2uVEHX+BZvGLdd07/gXkn3ePjYtO1LDJvxkGKVHMclKBRa1QUTH+6toYQ=="], + + "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.62.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-iFOibiHnTRuhrWLlRsOQFdZJJIa7S8OwkneJr4ocALP16u5yk6lWLINFwhHaEqBFMsKDUZofLkGos7+CPzGB3g=="], + + "@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.62.4", "", { "os": "linux", "cpu": "none" }, "sha512-XnWYMI7euHlb5a871xPja+Gm7DRCFU+FGRrtS2sMq9N8FvqtpagUy6gD4YOemC5MRk9xbh8+jYMEJbigFQwsgA=="], + + "@rollup/rollup-linux-loong64-musl": ["@rollup/rollup-linux-loong64-musl@4.62.4", "", { "os": "linux", "cpu": "none" }, "sha512-qGDAlO0U8xedCcsdRm9oaoQY8DAx/QT7uIxJWhCdx0ceIWX783UC9QSYkdpzAe29wNiVfp24+bZdQmn49o45SQ=="], + + "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.62.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-ru4H6ezD7ysA5EiEK6qkkaEb4modH8CTej6kUy/gQi20u3kB3G7Zn8snXXkeJSCOFKG/rbPPtM/+9Wgas1961w=="], + + "@rollup/rollup-linux-ppc64-musl": ["@rollup/rollup-linux-ppc64-musl@4.62.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-2W4MO5WQVJnbJaZdvDb9rhBDuFU1nKIepPFpJUBsTh2k1YY2g+ODViaWuyOAjQ5cOP7NvrvLzt3wvHOoiAvc7w=="], + + "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.62.4", "", { "os": "linux", "cpu": "none" }, "sha512-+fxjfuoAmVMCYV5QyjoIpu0cp5DOiOTeqYFk1AVaxGr+/ravWLX89XfQmptsoWcaVy/TGf2hexzbUOrCQIL1CQ=="], + + "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.62.4", "", { "os": "linux", "cpu": "none" }, "sha512-jTn8JfHGL4djjFxPuM06LmNUJDsst2jeVlsd9OmIH6zc5sC9K6rIuO4YajXatLUpBmBKl6b35ro1QZocLi+tcA=="], + + "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.62.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-oCJCJL4pXsoDcP2QZ+JVlPTIRc6266zsIaeJJsWImmF7HO0W8nb6HuSgZlMWxJwaPf8ehbSw8yo0EUw925hKsA=="], + + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.62.4", "", { "os": "linux", "cpu": "x64" }, "sha512-W69hukhZ3KKNRCaMIEzKvcFye42hh0FE1+YoYaf5+Ikacuftoco6yO/xouz0hc5d5W/s3yBro5jRiuEE/Q5vUw=="], + + "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.62.4", "", { "os": "linux", "cpu": "x64" }, "sha512-qiXbGG2jkjXhzXpsFZSR2Xpb8DN/UaxYsbb/STbuR/6fpaDgRmmaq1B/LmtF2wQFOFOSsK2jdE0RZ3a0zHn4QA=="], + + "@rollup/rollup-openbsd-x64": ["@rollup/rollup-openbsd-x64@4.62.4", "", { "os": "openbsd", "cpu": "x64" }, "sha512-nWeM//hxv8mIo6jD7Hu4o48DVmV9pbV6gsKaWU+4NFyqHoPKwrkRiZGLKUhOBk8qNmDmpwFtPKg80Bo/Tn4xiQ=="], + + "@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.62.4", "", { "os": "none", "cpu": "arm64" }, "sha512-s62SQ/vgsRSvMwDkOEfTqfgASF0f26ZNaQuTA6Aok5lrikf89yI2W0gFHvZb2Jpgc6N8JnOKZgCK2iciO3CsxQ=="], + + "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.62.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-J6wGf8TVGbXJq+HH+ttTvrcfNKPbuZecV6KT1B8I18BC5IURUh5kl4Yl5OEP5eFIUoI5BWxCsyYMhFsDx8kekw=="], + + "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.62.4", "", { "os": "win32", "cpu": "ia32" }, "sha512-zmfrQd/0wu6oJs8Vq8KwY/YtsKSsLtKe/HwAP4Wqy8LhWjeT55fHRAkOhYQ12wI3ayS4Tt12d5CDRD7N96SAYQ=="], + + "@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.62.4", "", { "os": "win32", "cpu": "x64" }, "sha512-qPzHqdj9rfUD+w79dtE07zi/kFwKyCJqplp5K5ygeLTp7jLpAoc16OAH39HSmRC9UpozaecsleI8uAdEj6v2yw=="], + + "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.62.4", "", { "os": "win32", "cpu": "x64" }, "sha512-zD6NdeWEByGE9QF9vCrlJ5YQB4oq9q91kPZS37Jwj5hOkvR1lTBSpsKhKDw4IJtbQ35LsTS1HD9DZYGKIshU1Q=="], + + "@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], + + "@tanstack/query-core": ["@tanstack/query-core@5.101.4", "", {}, "sha512-gNwcvOJcRbLWPOLG/2OBm+zM+Yv+MKsXKEOWC57USuZDEsI71hEErQsiEGx5wX9rzWWkfwM0fVSPoiIFSsxfiw=="], + + "@tanstack/react-query": ["@tanstack/react-query@5.101.4", "", { "dependencies": { "@tanstack/query-core": "5.101.4" }, "peerDependencies": { "react": "^18 || ^19" } }, "sha512-yRg2pfOCxIs4ZJW3XYYHU/WgtD04FHSnfHlpRT7h7pR77hwkdRG4wxbKe4aq6P0RvXUTBSQpQeadS1SUYUe+KA=="], + + "@tanstack/react-table": ["@tanstack/react-table@8.21.3", "", { "dependencies": { "@tanstack/table-core": "8.21.3" }, "peerDependencies": { "react": ">=16.8", "react-dom": ">=16.8" } }, "sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww=="], + + "@tanstack/react-virtual": ["@tanstack/react-virtual@3.14.9", "", { "dependencies": { "@tanstack/virtual-core": "3.17.7" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-qZyr0FZDP8rDC4WBhsryIZmAd9bveJvFGUJJtskWaew6/0dTRS6wZxnR6VQ5bY2KwL3LjerrHqQLk3a0GKcPXQ=="], + + "@tanstack/table-core": ["@tanstack/table-core@8.21.3", "", {}, "sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg=="], + + "@tanstack/virtual-core": ["@tanstack/virtual-core@3.17.7", "", {}, "sha512-bp+v10y65sp2H7WpWfIMyxTNfl8ZVfxFTLRjPIFRryi6FV/J33z4IS53WO4pTk36KlvJ4iLiQz+oaydDC1xbcA=="], + + "@types/babel__core": ["@types/babel__core@7.20.5", "", { "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA=="], + + "@types/babel__generator": ["@types/babel__generator@7.27.0", "", { "dependencies": { "@babel/types": "^7.0.0" } }, "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg=="], + + "@types/babel__template": ["@types/babel__template@7.4.4", "", { "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A=="], + + "@types/babel__traverse": ["@types/babel__traverse@7.28.0", "", { "dependencies": { "@babel/types": "^7.28.2" } }, "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q=="], + + "@types/chai": ["@types/chai@5.2.3", "", { "dependencies": { "@types/deep-eql": "*", "assertion-error": "^2.0.1" } }, "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA=="], + + "@types/deep-eql": ["@types/deep-eql@4.0.2", "", {}, "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw=="], + + "@types/estree": ["@types/estree@1.0.9", "", {}, "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg=="], + + "@types/react": ["@types/react@19.2.18", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-AnzbBERsrLKtk2XSfTbYRLjQPdy116Sty4q+T+Bp3IC4l6jNBvreVPAHmpq9qhXQM7CXZPjLVmGMw9sy+hxQ3w=="], + + "@types/react-dom": ["@types/react-dom@19.2.4", "", { "peerDependencies": { "@types/react": "^19.2.0" } }, "sha512-Bsc+QHgp+P/F02XDzNCY9jnZNCUuLki36KT7VKrTXXLdHf+vHMNZnW1rVu5DNW/rCK+fya3DATySbLM4yhtKUw=="], + + "@vitejs/plugin-react": ["@vitejs/plugin-react@5.2.0", "", { "dependencies": { "@babel/core": "^7.29.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", "@rolldown/pluginutils": "1.0.0-rc.3", "@types/babel__core": "^7.20.5", "react-refresh": "^0.18.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-YmKkfhOAi3wsB1PhJq5Scj3GXMn3WvtQ/JC0xoopuHoXSdmtdStOpFrYaT1kie2YgFBcIe64ROzMYRjCrYOdYw=="], + + "@vitest/expect": ["@vitest/expect@4.1.10", "", { "dependencies": { "@standard-schema/spec": "^1.1.0", "@types/chai": "^5.2.2", "@vitest/spy": "4.1.10", "@vitest/utils": "4.1.10", "chai": "^6.2.2", "tinyrainbow": "^3.1.0" } }, "sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA=="], + + "@vitest/mocker": ["@vitest/mocker@4.1.10", "", { "dependencies": { "@vitest/spy": "4.1.10", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "optionalPeers": ["msw", "vite"] }, "sha512-v0xaezt+DKEmKfaxg133ldzADrwLGd7Ze1MfQQTYfvs8OqZIwbxyxaYURivwV7sWy5fqn3rH5uOrSp07bp44Ow=="], + + "@vitest/pretty-format": ["@vitest/pretty-format@4.1.10", "", { "dependencies": { "tinyrainbow": "^3.1.0" } }, "sha512-W1HsjSH4MXQ9YfmmhLAoIYf1HRfekQCGngeIgcei6MP5QQGWUe0gkopdZQaVCFO+JDJMrAJGwa5pRpNpvy4P8Q=="], + + "@vitest/runner": ["@vitest/runner@4.1.10", "", { "dependencies": { "@vitest/utils": "4.1.10", "pathe": "^2.0.3" } }, "sha512-IKI6kpIH+LmpROplyLwBBaCfMgOZOMsygVa6BARD6ahA04VRuJSa6OaVG7kRvSEMD870Vd91rSSw0eegtWyLGg=="], + + "@vitest/snapshot": ["@vitest/snapshot@4.1.10", "", { "dependencies": { "@vitest/pretty-format": "4.1.10", "@vitest/utils": "4.1.10", "magic-string": "^0.30.21", "pathe": "^2.0.3" } }, "sha512-xRkfOT1qpTAi/Ti4Y1LtfRc3kEuqxGw59eN2jN9pRWMtS/XDevekhcFSqvQqjUNGksfjMJu3Y+oJ+4Ypn2OaJw=="], + + "@vitest/spy": ["@vitest/spy@4.1.10", "", {}, "sha512-PLf/Ugvoq5wO/b4rwYCR1h2PSIdXz7wnkQFMiUpLdtM7l6pqVFcQIBEHyT1+l+cj7mNwAfZHzqXqDyjvOuwbDw=="], + + "@vitest/utils": ["@vitest/utils@4.1.10", "", { "dependencies": { "@vitest/pretty-format": "4.1.10", "convert-source-map": "^2.0.0", "tinyrainbow": "^3.1.0" } }, "sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA=="], + + "aria-hidden": ["aria-hidden@1.2.6", "", { "dependencies": { "tslib": "^2.0.0" } }, "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA=="], + + "assertion-error": ["assertion-error@2.0.1", "", {}, "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA=="], + + "baseline-browser-mapping": ["baseline-browser-mapping@2.11.13", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-k9HNuUVMlqVjQ9UHzfPjIqiDbWw7WqT1AoT7GL8VwvF3r0ZfArtgiSPAlmupyNquNgOJHTuH4CKYf8ttMTWBTQ=="], + + "browserslist": ["browserslist@4.28.8", "", { "dependencies": { "baseline-browser-mapping": "^2.11.12", "caniuse-lite": "^1.0.30001809", "electron-to-chromium": "^1.5.402", "node-releases": "^2.0.53", "update-browserslist-db": "^1.3.0" }, "bin": { "browserslist": "cli.js" } }, "sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA=="], + + "caniuse-lite": ["caniuse-lite@1.0.30001809", "", {}, "sha512-xxWVywk6a6Arlk+hymeycyn/VgqEfLDxupvhH/xiY5SJ/18kmi9o6MiO320DCUzypORHLtvh0I4i04tUhCNHNQ=="], + + "chai": ["chai@6.2.2", "", {}, "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg=="], + + "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], + + "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], + + "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "detect-node-es": ["detect-node-es@1.1.0", "", {}, "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="], + + "electron-to-chromium": ["electron-to-chromium@1.5.404", "", {}, "sha512-3WJtd7/lVq2Jnuz6wed1l9+1ZD2u2Tet1/1NBc4Iedkmgbu+I7YuAqdAQ8T+VZtnwysMsAf3IqSq9D1gyZjA2g=="], + + "es-module-lexer": ["es-module-lexer@2.3.1", "", {}, "sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA=="], + + "esbuild": ["esbuild@0.28.2", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.28.2", "@esbuild/android-arm": "0.28.2", "@esbuild/android-arm64": "0.28.2", "@esbuild/android-x64": "0.28.2", "@esbuild/darwin-arm64": "0.28.2", "@esbuild/darwin-x64": "0.28.2", "@esbuild/freebsd-arm64": "0.28.2", "@esbuild/freebsd-x64": "0.28.2", "@esbuild/linux-arm": "0.28.2", "@esbuild/linux-arm64": "0.28.2", "@esbuild/linux-ia32": "0.28.2", "@esbuild/linux-loong64": "0.28.2", "@esbuild/linux-mips64el": "0.28.2", "@esbuild/linux-ppc64": "0.28.2", "@esbuild/linux-riscv64": "0.28.2", "@esbuild/linux-s390x": "0.28.2", "@esbuild/linux-x64": "0.28.2", "@esbuild/netbsd-arm64": "0.28.2", "@esbuild/netbsd-x64": "0.28.2", "@esbuild/openbsd-arm64": "0.28.2", "@esbuild/openbsd-x64": "0.28.2", "@esbuild/openharmony-arm64": "0.28.2", "@esbuild/sunos-x64": "0.28.2", "@esbuild/win32-arm64": "0.28.2", "@esbuild/win32-ia32": "0.28.2", "@esbuild/win32-x64": "0.28.2" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA=="], + + "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], + + "estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], + + "expect-type": ["expect-type@1.4.0", "", {}, "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA=="], + + "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], + + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + + "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], + + "get-nonce": ["get-nonce@1.0.1", "", {}, "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q=="], + + "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], + + "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], + + "json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], + + "lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], + + "lucide-react": ["lucide-react@0.545.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-7r1/yUuflQDSt4f1bpn5ZAocyIxcTyVyBBChSVtBKn5M+392cPmI5YJMWOJKk/HUWGm5wg83chlAZtCcGbEZtw=="], + + "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], + + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "nanoid": ["nanoid@3.3.18", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w=="], + + "node-releases": ["node-releases@2.0.53", "", {}, "sha512-D9UOmYG3UH1V+ENW56t5QXBwJw1YEY18ruVeus89Rw+SyIgjPkCO84bRzO3uNIYosJbNwiabWVn48o3uJLjxFQ=="], + + "obug": ["obug@2.1.4", "", {}, "sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA=="], + + "pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], + + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + + "picomatch": ["picomatch@4.0.5", "", {}, "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A=="], + + "postcss": ["postcss@8.5.26", "", { "dependencies": { "nanoid": "^3.3.17", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ=="], + + "react": ["react@19.2.8", "", {}, "sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw=="], + + "react-dom": ["react-dom@19.2.8", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.8" } }, "sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ=="], + + "react-refresh": ["react-refresh@0.18.0", "", {}, "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw=="], + + "react-remove-scroll": ["react-remove-scroll@2.7.2", "", { "dependencies": { "react-remove-scroll-bar": "^2.3.7", "react-style-singleton": "^2.2.3", "tslib": "^2.1.0", "use-callback-ref": "^1.3.3", "use-sidecar": "^1.1.3" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q=="], + + "react-remove-scroll-bar": ["react-remove-scroll-bar@2.3.8", "", { "dependencies": { "react-style-singleton": "^2.2.2", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q=="], + + "react-style-singleton": ["react-style-singleton@2.2.3", "", { "dependencies": { "get-nonce": "^1.0.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ=="], + + "rollup": ["rollup@4.62.4", "", { "dependencies": { "@types/estree": "1.0.9" }, "optionalDependencies": { "@napi-rs/lzma-linux-x64-gnu": "1.5.1", "@rollup/rollup-android-arm-eabi": "4.62.4", "@rollup/rollup-android-arm64": "4.62.4", "@rollup/rollup-darwin-arm64": "4.62.4", "@rollup/rollup-darwin-x64": "4.62.4", "@rollup/rollup-freebsd-arm64": "4.62.4", "@rollup/rollup-freebsd-x64": "4.62.4", "@rollup/rollup-linux-arm-gnueabihf": "4.62.4", "@rollup/rollup-linux-arm-musleabihf": "4.62.4", "@rollup/rollup-linux-arm64-gnu": "4.62.4", "@rollup/rollup-linux-arm64-musl": "4.62.4", "@rollup/rollup-linux-loong64-gnu": "4.62.4", "@rollup/rollup-linux-loong64-musl": "4.62.4", "@rollup/rollup-linux-ppc64-gnu": "4.62.4", "@rollup/rollup-linux-ppc64-musl": "4.62.4", "@rollup/rollup-linux-riscv64-gnu": "4.62.4", "@rollup/rollup-linux-riscv64-musl": "4.62.4", "@rollup/rollup-linux-s390x-gnu": "4.62.4", "@rollup/rollup-linux-x64-gnu": "4.62.4", "@rollup/rollup-linux-x64-musl": "4.62.4", "@rollup/rollup-openbsd-x64": "4.62.4", "@rollup/rollup-openharmony-arm64": "4.62.4", "@rollup/rollup-win32-arm64-msvc": "4.62.4", "@rollup/rollup-win32-ia32-msvc": "4.62.4", "@rollup/rollup-win32-x64-gnu": "4.62.4", "@rollup/rollup-win32-x64-msvc": "4.62.4", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-RXOqwaPsBGjMNMa4sQjDjHieHEZDFoj/Rdr46l2MU5DfEs16wHJPC2RPTPHWhNl+M3aI472LLqFkFKut4SblOg=="], + + "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="], + + "semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "siginfo": ["siginfo@2.0.0", "", {}, "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g=="], + + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + + "stackback": ["stackback@0.0.2", "", {}, "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw=="], + + "std-env": ["std-env@4.2.0", "", {}, "sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw=="], + + "tinybench": ["tinybench@2.9.0", "", {}, "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg=="], + + "tinyexec": ["tinyexec@1.3.0", "", {}, "sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ=="], + + "tinyglobby": ["tinyglobby@0.2.17", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g=="], + + "tinyrainbow": ["tinyrainbow@3.1.1", "", {}, "sha512-yau8yJdTt989Mm0Bd/236QnzEiPf2xLLTqUZRUJOo/3CB078LSwzei343DgtJVmfJKJE3TMINY1u42SQsP6mXw=="], + + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "update-browserslist-db": ["update-browserslist-db@1.3.1", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-ZZ61DsRsOnakl74HAmp3oSN4aXUmEWXf+i/yv0h7tIBfICc3VdrFErQKUUKPgu3AMsTUMbcongALEN4l6GSUrQ=="], + + "use-callback-ref": ["use-callback-ref@1.3.3", "", { "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg=="], + + "use-sidecar": ["use-sidecar@1.1.3", "", { "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ=="], + + "vite": ["vite@7.3.6", "", { "dependencies": { "esbuild": "^0.27.0 || ^0.28.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-4XP60spRGjSZFf1qYH+dJIkK2znL3zQfl9KkOV9MkkRR/3Dls0dxaBsQPTloEc5BLXWPL9vsOxopxyKoMmDueg=="], + + "vitest": ["vitest@4.1.10", "", { "dependencies": { "@vitest/expect": "4.1.10", "@vitest/mocker": "4.1.10", "@vitest/pretty-format": "4.1.10", "@vitest/runner": "4.1.10", "@vitest/snapshot": "4.1.10", "@vitest/spy": "4.1.10", "@vitest/utils": "4.1.10", "es-module-lexer": "^2.0.0", "expect-type": "^1.3.0", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^4.0.0-rc.1", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.1.0", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", "@vitest/browser-playwright": "4.1.10", "@vitest/browser-preview": "4.1.10", "@vitest/browser-webdriverio": "4.1.10", "@vitest/coverage-istanbul": "4.1.10", "@vitest/coverage-v8": "4.1.10", "@vitest/ui": "4.1.10", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@opentelemetry/api", "@types/node", "@vitest/browser-playwright", "@vitest/browser-preview", "@vitest/browser-webdriverio", "@vitest/coverage-istanbul", "@vitest/coverage-v8", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "./vitest.mjs" } }, "sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw=="], + + "why-is-node-running": ["why-is-node-running@2.3.0", "", { "dependencies": { "siginfo": "^2.0.0", "stackback": "0.0.2" }, "bin": { "why-is-node-running": "cli.js" } }, "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w=="], + + "yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], + } +} diff --git a/apps/studio/index.html b/apps/studio/index.html new file mode 100644 index 0000000..42e2490 --- /dev/null +++ b/apps/studio/index.html @@ -0,0 +1,13 @@ + + + + + + + TermKit Studio + + +

+ + + diff --git a/apps/studio/package.json b/apps/studio/package.json new file mode 100644 index 0000000..630d74c --- /dev/null +++ b/apps/studio/package.json @@ -0,0 +1,30 @@ +{ + "name": "@termkit/studio", + "version": "0.2.0-alpha.0", + "private": true, + "type": "module", + "packageManager": "bun@1.3.14", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "check": "tsc -b --pretty false", + "test": "vitest run" + }, + "dependencies": { + "@radix-ui/react-dialog": "^1.1.15", + "@tanstack/react-query": "^5.90.21", + "@tanstack/react-table": "^8.21.3", + "@tanstack/react-virtual": "^3.13.18", + "lucide-react": "^0.545.0", + "react": "^19.2.0", + "react-dom": "^19.2.0" + }, + "devDependencies": { + "@types/react": "^19.2.2", + "@types/react-dom": "^19.2.2", + "@vitejs/plugin-react": "^5.0.4", + "typescript": "^5.9.3", + "vite": "^7.1.12", + "vitest": "^4.0.4" + } +} diff --git a/apps/studio/src/App.tsx b/apps/studio/src/App.tsx new file mode 100644 index 0000000..11f0e96 --- /dev/null +++ b/apps/studio/src/App.tsx @@ -0,0 +1,64 @@ +import { useEffect, useState } from "react"; +import { useQuery } from "@tanstack/react-query"; + +import { api } from "./api/client"; +import { CommandPalette } from "./components/CommandPalette"; +import { Shell } from "./components/Shell"; +import { ErrorState, LoadingState } from "./components/ui"; +import { pageFromHash, type PageId } from "./navigation"; +import { CandidatesPage } from "./pages/CandidatesPage"; +import { ConceptsPage } from "./pages/ConceptsPage"; +import { ExchangePage } from "./pages/ExchangePage"; +import { RelationsPage } from "./pages/RelationsPage"; +import { ReleasesPage } from "./pages/ReleasesPage"; +import { ReviewPage } from "./pages/ReviewPage"; +import { RuntimePage } from "./pages/RuntimePage"; +import { SourcesPage } from "./pages/SourcesPage"; + +const pages: Record React.JSX.Element> = { + concepts: ConceptsPage, + candidates: CandidatesPage, + review: ReviewPage, + sources: SourcesPage, + relations: RelationsPage, + exchange: ExchangePage, + runtime: RuntimePage, + releases: ReleasesPage +}; + +export function App() { + const [page, setPage] = useState(pageFromHash()); + const [commandOpen, setCommandOpen] = useState(false); + const workspace = useQuery({ queryKey: ["workspace"], queryFn: api.workspace }); + + useEffect(() => { + const update = () => setPage(pageFromHash()); + window.addEventListener("hashchange", update); + return () => window.removeEventListener("hashchange", update); + }, []); + + useEffect(() => { + const keyboard = (event: KeyboardEvent) => { + if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === "k") { + event.preventDefault(); + setCommandOpen(true); + } + }; + window.addEventListener("keydown", keyboard); + return () => window.removeEventListener("keydown", keyboard); + }, []); + + const Page = pages[page]; + return ( + setCommandOpen(true)}> + {workspace.isPending ? ( + + ) : workspace.isError ? ( + + ) : ( + + )} + + + ); +} diff --git a/apps/studio/src/api/client.ts b/apps/studio/src/api/client.ts new file mode 100644 index 0000000..a14834c --- /dev/null +++ b/apps/studio/src/api/client.ts @@ -0,0 +1,142 @@ +import type { + CandidateConcept, + CandidateDetail, + ChangeSet, + ConceptDetail, + ConceptListResult, + Relation, + ResolutionResult, + RuntimeCheckResult, + ReviewDecision, + ReviewTask, + SourceSummary, + ExchangePreview, + ExchangeRequest, + WorkspaceSummary +} from "./types"; + +export class ApiError extends Error { + constructor( + message: string, + readonly status: number, + readonly code = "API_ERROR" + ) { + super(message); + } +} + +async function request(path: string, init?: RequestInit): Promise { + const response = await fetch(`/studio/api/v1${path}`, { + ...init, + headers: { + "Content-Type": "application/json", + ...init?.headers + } + }); + if (!response.ok) { + const body = (await response.json().catch(() => ({}))) as { error?: string; code?: string }; + throw new ApiError(body.error ?? response.statusText, response.status, body.code); + } + return (await response.json()) as T; +} + +function queryString(values: Record): string { + const params = new URLSearchParams(); + Object.entries(values).forEach(([key, value]) => { + if (value !== undefined && value !== "") params.set(key, String(value)); + }); + const encoded = params.toString(); + return encoded ? `?${encoded}` : ""; +} + +export const api = { + workspace: () => request("/workspace"), + concepts: (filters: Record) => + request(`/concepts${queryString(filters)}`), + concept: (id: string) => request(`/concepts/${encodeURIComponent(id)}`), + changesets: (status = "") => request(`/changesets${queryString({ status })}`), + createChangeset: (body: { author: string; reason: string; source_run_id?: string }) => + request("/changesets", { method: "POST", body: JSON.stringify(body) }), + addOperation: ( + changesetId: string, + body: { + kind: string; + subject_kind: string; + subject_id: string; + after: Record | null; + } + ) => + request(`/changesets/${encodeURIComponent(changesetId)}/operations`, { + method: "POST", + body: JSON.stringify(body) + }), + applyChangeset: (id: string) => + request<{ changeset: ChangeSet; source_revision: string }>( + `/changesets/${encodeURIComponent(id)}/apply`, + { method: "POST" } + ), + submitChangeset: (id: string, title: string, dimensions: string[]) => + request(`/changesets/${encodeURIComponent(id)}/submit`, { + method: "POST", + body: JSON.stringify({ title, required_dimensions: dimensions }) + }), + reviews: (status = "") => request(`/reviews${queryString({ status })}`), + reviewDecision: ( + id: string, + body: Omit + ) => + request(`/reviews/${encodeURIComponent(id)}/decisions`, { + method: "POST", + body: JSON.stringify(body) + }), + candidates: (state = "") => + request(`/candidates${queryString({ state })}`), + candidate: (id: string) => + request(`/candidates/${encodeURIComponent(id)}`), + decideCandidate: ( + id: string, + body: { decision: string; actor: string; target_id?: string; rationale?: string } + ) => + request<{ candidate_concept_id: string; changeset_id: string; state: string }>( + `/candidates/${encodeURIComponent(id)}/decision`, + { method: "POST", body: JSON.stringify(body) } + ), + sources: () => request("/sources"), + relations: () => request("/relations"), + forgeRuns: () => request>>("/forge/runs"), + inspectExchange: (body: ExchangeRequest) => + request("/exchange/preview", { method: "POST", body: JSON.stringify(body) }), + createExchangeChangeset: (body: ExchangeRequest) => + request("/exchange/changeset", { method: "POST", body: JSON.stringify(body) }), + resolve: (body: { + text: string; + source_language: string; + target_language: string; + domain_hints?: string[]; + }) => request("/runtime/resolve", { method: "POST", body: JSON.stringify(body) }), + check: (body: { + source: string; + translation: string; + source_language: string; + target_language: string; + domain_hints?: string[]; + }) => + request( + "/runtime/check", + { method: "POST", body: JSON.stringify(body) } + ), + compileRuntime: () => + request<{ database_path: string; lexical_count: number; matcher_nodes: number }>( + "/runtime/compile", + { method: "POST" } + ), + validateRelease: () => + request<{ coordinate: string; issues: Array<{ code: string; message: string; severity: string }> }>( + "/releases/validate", + { method: "POST" } + ), + buildRelease: () => + request<{ archive: string; verification: Record }>("/releases/build", { + method: "POST" + }) +}; diff --git a/apps/studio/src/api/types.ts b/apps/studio/src/api/types.ts new file mode 100644 index 0000000..4a01e1e --- /dev/null +++ b/apps/studio/src/api/types.ts @@ -0,0 +1,327 @@ +export type CandidateState = + | "PROPOSED" + | "ATTESTED" + | "LINGUIST_REVIEWED" + | "DOMAIN_REVIEWED" + | "APPROVED" + | "STANDARDIZED" + | "DEPRECATED" + | "REJECTED"; + +export interface Definition { + language: string; + text: string; + source_ids: string[]; +} + +export interface ExternalIdentifier { + scheme: string; + identifier: string; + uri: string; + match_type: "EXACT" | "CLOSE" | "BROADER" | "NARROWER" | "RELATED"; + confidence: number; + evidence_ids: string[]; +} + +export interface Concept { + concept_id: string; + domain_ids: string[]; + definitions: Definition[]; + notes: string[]; + external_identifiers: ExternalIdentifier[]; + revision: number; + status: CandidateState; +} + +export interface Morphology { + lemma: string; + part_of_speech: string; + grammatical_gender: string; + inflection_class: string; + forms: Record; +} + +export interface LexicalEntry { + term_id: string; + concept_id: string; + language: string; + text: string; + normalized: string; + script: string; + region: string; + status: "PREFERRED" | "ADMITTED" | "DEPRECATED" | "REJECTED"; + policy: "KEEP" | "MUST" | "PREFER" | "ALLOW" | "AVOID"; + sense: string; + usage_note: string; + abbreviation: boolean; + transliteration: string; + aliases: string[]; + morphology: Morphology; + evidence_ids: string[]; + candidate_state: CandidateState; +} + +export interface Relation { + relation_id: string; + source_concept_id: string; + target_concept_id: string; + relation_type: "BROADER" | "NARROWER" | "RELATED" | "PART_OF"; + evidence_ids: string[]; +} + +export interface Evidence { + evidence_id: string; + source_id: string; + concept_id: string; + term_ids: string[]; + location: string; + source_text: string; + target_text: string; + evidence_type: string; + retrieved_at: string; + publishable_excerpt: boolean; +} + +export interface Source { + source_id: string; + title: string; + publisher: string; + languages: string[]; + domain_ids: string[]; + source_type: string; + uri: string; + published_at: string; + retrieved_at: string; + license: string; + redistribution_policy: + | "REDISTRIBUTABLE" + | "DERIVATION_ALLOWED" + | "REFERENCE_ONLY" + | "RESTRICTED"; + content_sha256: string; + authority_level: string; +} + +export interface FacetValue { + value: string; + count: number; +} + +export interface ConceptSummary { + concept_id: string; + display_label: string; + status: CandidateState; + revision: number; + domain_ids: string[]; + languages: string[]; + lexical_preview: string[]; + evidence_count: number; +} + +export interface ConceptListResult { + items: ConceptSummary[]; + total: number; + limit: number; + offset: number; + facets: { + statuses: FacetValue[]; + domains: FacetValue[]; + languages: FacetValue[]; + }; +} + +export interface ChangeOperation { + operation_id: string; + kind: string; + subject_kind: string; + subject_id: string; + before: Record | null; + after: Record | null; + sequence: number; +} + +export interface ChangeSet { + changeset_id: string; + author: string; + created_at: string; + updated_at: string; + base_revision: string; + reason: string; + source_run_id: string; + operations: ChangeOperation[]; + review_ids: string[]; + status: "DRAFT" | "IN_REVIEW" | "APPROVED" | "APPLIED" | "REJECTED" | "REVERTED"; +} + +export interface ConceptDetail { + concept: Concept; + lexical_entries: LexicalEntry[]; + relations: Relation[]; + evidence: Evidence[]; + history: Record[]; + draft_changesets: ChangeSet[]; +} + +export interface WorkspaceSummary { + root: string; + database_path: string; + coordinate: string; + source_revision: string; + concept_count: number; + lexical_count: number; + source_count: number; + evidence_count: number; + languages: string[]; + dirty_changesets: number; + validation_ok: boolean; + validation_errors: number; +} + +export interface CandidateConcept { + candidate_concept_id: string; + meaning_hypothesis: string; + domain_ids: string[]; + definitions: Definition[]; + occurrence_ids: string[]; + existing_matches: Array<{ + concept_id: string; + confidence: number; + rationale: string; + evidence_ids: string[]; + }>; + state: CandidateState; + quality: Record; + derivation: string[]; +} + +export interface CandidateLexicalEntry { + candidate_lexical_id: string; + candidate_concept_id: string; + language: string; + text: string; + suggested_status: string; + suggested_policy: string; + occurrence_ids: string[]; + evidence_ids: string[]; + state: CandidateState; +} + +export interface CorpusSegment { + segment_id: string; + corpus_id: string; + source_revision_id: string; + language: string; + location: string; + structure: string; + text: string; + excerpt_state: string; +} + +export interface CandidateDetail { + candidate: CandidateConcept; + lexical_entries: CandidateLexicalEntry[]; + occurrences: CorpusSegment[]; +} + +export interface ReviewDecision { + decision_id: string; + task_id: string; + dimension: "LANGUAGE" | "DOMAIN" | "EVIDENCE" | "RIGHTS"; + reviewer: string; + decision: "APPROVE" | "REQUEST_CHANGES" | "REJECT" | "DEFER"; + rationale: string; + created_at: string; +} + +export interface ReviewTask { + task_id: string; + changeset_id: string; + title: string; + required_dimensions: ReviewDecision["dimension"][]; + assigned_reviewers: Partial>; + decisions: ReviewDecision[]; + status: "OPEN" | "CHANGES_REQUESTED" | "APPROVED" | "REJECTED"; + created_at: string; + updated_at: string; +} + +export interface SourceSummary { + source: Source; + evidence_count: number; + concept_count: number; + revision_count: number; + candidate_count: number; + segment_count: number; +} + +export interface ResolutionResult { + source_language: string; + target_language: string; + pack_coordinates: string[]; + warnings: Array<{ code: string; message: string; source_start: number; source_end: number }>; + matches: Array<{ + source_start: number; + source_end: number; + source_text: string; + source_term_id: string; + concept_id: string; + target_term_id: string; + target_text: string; + policy: string; + sense: string; + confidence: number; + pack_id: string; + pack_version: string; + evidence_ids: string[]; + }>; +} + +export interface RuntimeCheckResult { + resolution: ResolutionResult; + check: { + violations: Array<{ + code: string; + concept_id: string; + expected: string; + found: string; + severity: "ERROR" | "WARNING"; + message: string; + }>; + }; +} + +export interface ExchangeMapping { + column: string; + target: + | "IGNORE" + | "LEXICAL_TEXT" + | "DEFINITION" + | "CONCEPT_ID" + | "SOURCE" + | "DOMAIN" + | "STATUS" + | "BROADER" + | "RELATED"; + language: string; +} + +export interface ExchangeRequest { + filename: string; + format: "csv" | "xlsx" | "tbx" | "skos"; + content_base64: string; + mappings: ExchangeMapping[]; + identity_strategy: "CREATE" | "RECONCILE"; +} + +export interface ExchangePreview { + filename: string; + format: string; + columns: string[]; + rows: Array>; + row_count: number; + suggested_mappings: ExchangeMapping[]; + proposed_concepts: number; + proposed_lexicals: number; + reconciled_concepts: number; + conflicts: string[]; +} diff --git a/apps/studio/src/components/CommandPalette.tsx b/apps/studio/src/components/CommandPalette.tsx new file mode 100644 index 0000000..e1d8c4f --- /dev/null +++ b/apps/studio/src/components/CommandPalette.tsx @@ -0,0 +1,66 @@ +import { useEffect, useMemo, useState } from "react"; +import * as Dialog from "@radix-ui/react-dialog"; +import { Command, Search, X } from "lucide-react"; + +import { navigate, navigation, type PageId } from "../navigation"; + +interface CommandPaletteProps { + open: boolean; + onOpenChange: (value: boolean) => void; +} + +export function CommandPalette({ open, onOpenChange }: CommandPaletteProps) { + const [query, setQuery] = useState(""); + useEffect(() => { + if (!open) setQuery(""); + }, [open]); + const commands = useMemo( + () => navigation.filter((item) => item.label.toLowerCase().includes(query.toLowerCase())), + [query] + ); + + const select = (page: PageId) => { + navigate(page); + onOpenChange(false); + }; + + return ( + + + + + Command palette +
+ + setQuery(event.target.value)} + placeholder="Search commands…" + /> + + + +
+
+
Open workspace
+ {commands.map((item) => { + const Icon = item.icon; + return ( + + ); + })} + {commands.length === 0 &&
No matching command
} +
+
+ Keyboard-first workspace navigation +
+
+
+
+ ); +} diff --git a/apps/studio/src/components/Shell.tsx b/apps/studio/src/components/Shell.tsx new file mode 100644 index 0000000..d3843e2 --- /dev/null +++ b/apps/studio/src/components/Shell.tsx @@ -0,0 +1,78 @@ +import type { ReactNode } from "react"; +import { Command, Search } from "lucide-react"; + +import type { WorkspaceSummary } from "../api/types"; +import { navigate, navigation, productIcon, type PageId } from "../navigation"; +import { Badge } from "./ui"; + +interface ShellProps { + activePage: PageId; + workspace?: WorkspaceSummary; + onOpenCommand: () => void; + children: ReactNode; +} + +export function Shell({ activePage, workspace, onOpenCommand, children }: ShellProps) { + const ProductIcon = productIcon; + const coordinate = workspace?.coordinate ?? "Opening workspace"; + const branchState = workspace?.dirty_changesets ? `${workspace.dirty_changesets} drafts` : "clean"; + + return ( +
+
+
+ + TermKit Studio +
+
+ {coordinate} + / + main + {branchState} +
+ +
+ + + +
{children}
+ +
+ {workspace?.concept_count.toLocaleString() ?? "—"} concepts + {workspace?.languages.join(" · ") ?? "—"} + {workspace?.evidence_count.toLocaleString() ?? "—"} evidence records + + + {workspace?.source_revision.slice(0, 10) ?? "no revision"} + +
+
+ ); +} diff --git a/apps/studio/src/components/ui.tsx b/apps/studio/src/components/ui.tsx new file mode 100644 index 0000000..b7705f9 --- /dev/null +++ b/apps/studio/src/components/ui.tsx @@ -0,0 +1,68 @@ +import type { ReactNode } from "react"; +import { AlertCircle, CheckCircle2, LoaderCircle } from "lucide-react"; + +export function Badge({ children, tone = "neutral" }: { children: ReactNode; tone?: string }) { + return {children}; +} + +export function StatusBadge({ status }: { status: string }) { + const tone = + status === "APPROVED" || status === "STANDARDIZED" || status === "APPLIED" + ? "approved" + : status === "REJECTED" || status === "FAILED" + ? "rejected" + : status === "DEPRECATED" || status === "REVERTED" + ? "deprecated" + : status === "IN_REVIEW" || status === "AWAITING_REVIEW" || status === "OPEN" + ? "review" + : "proposal"; + return {status.replaceAll("_", " ")}; +} + +export function LoadingState({ label = "Loading" }: { label?: string }) { + return ( +
+ + {label} +
+ ); +} + +export function ErrorState({ error }: { error: unknown }) { + return ( +
+ + {error instanceof Error ? error.message : "The operation failed"} +
+ ); +} + +export function EmptyState({ title, detail }: { title: string; detail: string }) { + return ( +
+ + {title} +

{detail}

+
+ ); +} + +export function Section({ + title, + action, + children +}: { + title: string; + action?: ReactNode; + children: ReactNode; +}) { + return ( +
+
+

{title}

+ {action} +
+ {children} +
+ ); +} diff --git a/apps/studio/src/main.tsx b/apps/studio/src/main.tsx new file mode 100644 index 0000000..6957e69 --- /dev/null +++ b/apps/studio/src/main.tsx @@ -0,0 +1,27 @@ +import { StrictMode } from "react"; +import { createRoot } from "react-dom/client"; +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; + +import { App } from "./App"; +import "./styles.css"; + +const queryClient = new QueryClient({ + defaultOptions: { + queries: { + staleTime: 10_000, + retry: 1, + refetchOnWindowFocus: false + } + } +}); + +const root = document.getElementById("root"); +if (!root) throw new Error("Studio root element is missing"); + +createRoot(root).render( + + + + + +); diff --git a/apps/studio/src/navigation.test.ts b/apps/studio/src/navigation.test.ts new file mode 100644 index 0000000..71ca7b8 --- /dev/null +++ b/apps/studio/src/navigation.test.ts @@ -0,0 +1,20 @@ +import { beforeEach, describe, expect, it, vi } from "vitest"; + +import { navigate, pageFromHash } from "./navigation"; + +describe("workspace navigation", () => { + beforeEach(() => { + vi.stubGlobal("window", { location: { hash: "" } }); + }); + + it("falls back to concepts for an unknown route", () => { + window.location.hash = "#/unknown"; + expect(pageFromHash()).toBe("concepts"); + }); + + it("round-trips a declared workspace route", () => { + navigate("runtime"); + expect(window.location.hash).toBe("#/runtime"); + expect(pageFromHash()).toBe("runtime"); + }); +}); diff --git a/apps/studio/src/navigation.ts b/apps/studio/src/navigation.ts new file mode 100644 index 0000000..a10e03c --- /dev/null +++ b/apps/studio/src/navigation.ts @@ -0,0 +1,51 @@ +import { + Archive, + BookOpenText, + Boxes, + FileCheck2, + GitFork, + Import, + Library, + ListChecks, + TestTubeDiagonal, + type LucideIcon +} from "lucide-react"; + +export type PageId = + | "concepts" + | "candidates" + | "review" + | "sources" + | "relations" + | "exchange" + | "runtime" + | "releases"; + +export interface NavigationItem { + id: PageId; + label: string; + shortcut: string; + icon: LucideIcon; +} + +export const navigation: NavigationItem[] = [ + { id: "concepts", label: "Concepts", shortcut: "G C", icon: BookOpenText }, + { id: "candidates", label: "Candidates", shortcut: "G A", icon: ListChecks }, + { id: "review", label: "Review", shortcut: "G R", icon: FileCheck2 }, + { id: "sources", label: "Sources", shortcut: "G S", icon: Library }, + { id: "relations", label: "Relations", shortcut: "G L", icon: GitFork }, + { id: "exchange", label: "Exchange", shortcut: "G E", icon: Import }, + { id: "runtime", label: "Runtime", shortcut: "G T", icon: TestTubeDiagonal }, + { id: "releases", label: "Releases", shortcut: "G P", icon: Archive } +]; + +export const productIcon = Boxes; + +export function pageFromHash(): PageId { + const requested = window.location.hash.replace(/^#\/?/, "").split("/")[0]; + return navigation.some((item) => item.id === requested) ? (requested as PageId) : "concepts"; +} + +export function navigate(page: PageId): void { + window.location.hash = `#/${page}`; +} diff --git a/apps/studio/src/pages/CandidatesPage.tsx b/apps/studio/src/pages/CandidatesPage.tsx new file mode 100644 index 0000000..3f86a20 --- /dev/null +++ b/apps/studio/src/pages/CandidatesPage.tsx @@ -0,0 +1,98 @@ +import { useEffect, useState } from "react"; +import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; +import { ArrowRight, GitMerge, ListChecks, Split, XCircle } from "lucide-react"; + +import { api } from "../api/client"; +import { Badge, EmptyState, ErrorState, LoadingState, Section, StatusBadge } from "../components/ui"; + +export function CandidatesPage() { + const queryClient = useQueryClient(); + const [state, setState] = useState(""); + const [selectedId, setSelectedId] = useState(""); + const [targetId, setTargetId] = useState(""); + const [rationale, setRationale] = useState(""); + const candidates = useQuery({ + queryKey: ["candidates", state], + queryFn: () => api.candidates(state) + }); + const detail = useQuery({ + queryKey: ["candidate", selectedId], + queryFn: () => api.candidate(selectedId), + enabled: Boolean(selectedId) + }); + const runs = useQuery({ queryKey: ["forge-runs"], queryFn: api.forgeRuns }); + + useEffect(() => { + if (!selectedId && candidates.data?.[0]) setSelectedId(candidates.data[0].candidate_concept_id); + }, [candidates.data, selectedId]); + + const decide = useMutation({ + mutationFn: (decision: string) => + api.decideCandidate(selectedId, { + decision, + actor: "local-curator", + target_id: targetId, + rationale + }), + onSuccess: async () => { + await Promise.all([ + queryClient.invalidateQueries({ queryKey: ["candidates"] }), + queryClient.invalidateQueries({ queryKey: ["candidate", selectedId] }), + queryClient.invalidateQueries({ queryKey: ["changesets"] }), + queryClient.invalidateQueries({ queryKey: ["workspace"] }) + ]); + } + }); + + return ( +
+
+
Term reconciliation

Candidates

Machine output becomes governed concepts only after evidence-based decisions.

+
+ {["", "PROPOSED", "ATTESTED", "REJECTED"].map((item) => )} +
+
+
+
+
Candidate pool{candidates.data?.length ?? 0}
+ {candidates.isPending ? : candidates.isError ? : candidates.data?.length ? candidates.data.map((item) => ( + + )) : } +
+
+ {!selectedId ? : detail.isPending ? : detail.isError ? : detail.data ? <> +
{detail.data.candidate.candidate_concept_id}

{detail.data.candidate.meaning_hypothesis}

+
+
{detail.data.lexical_entries.map((item) =>
{item.language}{item.text}{item.suggested_status} · {item.suggested_policy}
)}
+
+
+ {detail.data.occurrences.length ? detail.data.occurrences.map((item) =>
{item.source_revision_id}{item.structure || item.location}

{item.text}

{item.language} · {item.excerpt_state}
) :

No redistributable excerpt is stored. Inspect source metadata before deciding.

} +
+
+ {detail.data.candidate.existing_matches.length ? detail.data.candidate.existing_matches.map((item) => ) :

No automatic reconciliation match.

} +
+ : null} +
+