keating 4.0.2 → 4.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/bin/keating.js +1 -1
  2. package/dist/src/core/version.js +1 -1
  3. package/package.json +1 -1
  4. package/web/.output/nitro.json +1 -1
  5. package/web/.output/public/assets/{AnimationPlayer-Bj9E6XAF.js → AnimationPlayer-CYbhLL_R.js} +1 -1
  6. package/web/.output/public/assets/{AssistantChatPanel-CPiSdBQo.js → AssistantChatPanel-DQSKpGWP.js} +122 -122
  7. package/web/.output/public/assets/{CategoricalChart-ZCOId7ho.js → CategoricalChart-BVb9-7_N.js} +1 -1
  8. package/web/.output/public/assets/{Chat-BPuDBuv7.js → Chat-C6p8yxAr.js} +2 -2
  9. package/web/.output/public/assets/{CodeHighlighter-CUd-nVJG.js → CodeHighlighter-DhI0IV5H.js} +1 -1
  10. package/web/.output/public/assets/{ComingUp-BM3f_QSf.js → ComingUp-DFaRgEbt.js} +1 -1
  11. package/web/.output/public/assets/{CourseJoin--37EPPeg.js → CourseJoin-DMZ6foZO.js} +1 -1
  12. package/web/.output/public/assets/CourseWorkspace-l_bPGNhE.js +25 -0
  13. package/web/.output/public/assets/{Courses-DgryGTWV.js → Courses-DIqulPB-.js} +1 -1
  14. package/web/.output/public/assets/{EvolutionDetail-BHwyObAD.js → EvolutionDetail-C-NYL1qL.js} +1 -1
  15. package/web/.output/public/assets/{FlashcardRenderer-hzqoLbnQ.js → FlashcardRenderer-iDgfcwk4.js} +1 -1
  16. package/web/.output/public/assets/{FlashcardShaderField-pDI9y_r4.js → FlashcardShaderField-JGgL2kgp.js} +1 -1
  17. package/web/.output/public/assets/{FlashcardTimer-BANuXJze.js → FlashcardTimer-vPNL9_0N.js} +1 -1
  18. package/web/.output/public/assets/{HyperframesPlayer-BQFYx43N.js → HyperframesPlayer-DEtdwGBR.js} +1 -1
  19. package/web/.output/public/assets/KeatingBench-XnWxgfUC.js +2 -0
  20. package/web/.output/public/assets/{LearningInsightsHeader-Do3bROTu.js → LearningInsightsHeader-DWj2-1xb.js} +1 -1
  21. package/web/.output/public/assets/{Live-HZjRDq-V.js → Live-BasKZMuE.js} +1 -1
  22. package/web/.output/public/assets/{MarkdownBlock-KUcDESQo.js → MarkdownBlock-C89ecD-M.js} +3 -3
  23. package/web/.output/public/assets/ModelSelector-B_EaHvVz.js +1 -0
  24. package/web/.output/public/assets/{Nav-GcfPhZc3.js → Nav-DQ-5KEsA.js} +1 -1
  25. package/web/.output/public/assets/{NotOrganicAccessPromptDialog-CKb6iTFn.js → NotOrganicAccessPromptDialog-DS7PLMx4.js} +1 -1
  26. package/web/.output/public/assets/{NotOrganicCallback-DWbhlP2j.js → NotOrganicCallback-BxKOsisT.js} +1 -1
  27. package/web/.output/public/assets/{OAuthCallback-D15ohKxE.js → OAuthCallback-dk2EQnAU.js} +1 -1
  28. package/web/.output/public/assets/OpenUIPreview-BrBXAEt4.js +1 -0
  29. package/web/.output/public/assets/PatternDigestPanel-jmxcLCUX.js +1 -0
  30. package/web/.output/public/assets/Plus-RIb_ldNd.js +1 -0
  31. package/web/.output/public/assets/{QuizRenderer-CLQqGwub.js → QuizRenderer-DaPQ7ySS.js} +1 -1
  32. package/web/.output/public/assets/{RenderingSmoke-DRHji-yz.js → RenderingSmoke-D3aD8prv.js} +1 -1
  33. package/web/.output/public/assets/{Select-BE2GfDud.js → Select-BYfJxqbI.js} +1 -1
  34. package/web/.output/public/assets/{SharedSession-DAM8ydVu.js → SharedSession-CEsTcr4j.js} +3 -3
  35. package/web/.output/public/assets/{ThemeToggle-BdGijxoN.js → ThemeToggle-BZH64Rpu.js} +1 -1
  36. package/web/.output/public/assets/{TrainingData-7EbVIzmQ.js → TrainingData-DujNU5sy.js} +3 -3
  37. package/web/.output/public/assets/TrajectoryReview-OjkaW6a6.js +35 -0
  38. package/web/.output/public/assets/TrajectoryReviewIndex-C5QAijKT.js +1 -0
  39. package/web/.output/public/assets/TrajectoryReviewWorkspace-DSn96Dxb.js +1 -0
  40. package/web/.output/public/assets/{Usage-BU1OfvzO.js → Usage-C5HU0Yc5.js} +1 -1
  41. package/web/.output/public/assets/activity-DdJDHeam.js +1 -0
  42. package/web/.output/public/assets/{anthropic-messages-rElikI6M.js → anthropic-messages-ZiHu59Q7.js} +1 -1
  43. package/web/.output/public/assets/{azure-openai-responses-yppPdVFy.js → azure-openai-responses-BHgsWKby.js} +1 -1
  44. package/web/.output/public/assets/calibration-7gf-WNR5.js +1 -0
  45. package/web/.output/public/assets/circle-question-mark-CK-DUGIA.js +1 -0
  46. package/web/.output/public/assets/clipboard-list-CRJvmiKL.js +1 -0
  47. package/web/.output/public/assets/{course-assembly-BIf5lrcx.js → course-assembly-CQE_9Vh4.js} +3 -3
  48. package/web/.output/public/assets/{course-submission-judgement-m2Gj1AKW.js → course-submission-judgement-Dmmw__tF.js} +1 -1
  49. package/web/.output/public/assets/{custom-tts-DapOpVQe.js → custom-tts-DqDZf3aF.js} +1 -1
  50. package/web/.output/public/assets/desktop-offline-IzFtwAhh.js +3 -0
  51. package/web/.output/public/assets/{dist-BudWH94z.js → dist-Dq5mGdi-.js} +1 -1
  52. package/web/.output/public/assets/file-text-CANyHShy.js +1 -0
  53. package/web/.output/public/assets/{from-study-plan-XEoNCZH-.js → from-study-plan-D14XtwuX.js} +2 -2
  54. package/web/.output/public/assets/{gemini-live-C2U-Xfzz.js → gemini-live-CGEtXm6j.js} +1 -1
  55. package/web/.output/public/assets/{google-generative-ai-8HY6m7rq.js → google-generative-ai-DcqlQJ6d.js} +1 -1
  56. package/web/.output/public/assets/{google-vertex-DnCA4qzU.js → google-vertex-C5RXjS_e.js} +1 -1
  57. package/web/.output/public/assets/{gpt-live-CEMTjMri.js → gpt-live-C4ltEjG_.js} +1 -1
  58. package/web/.output/public/assets/{index-C8C76R86.js → index-DCgpDQKf.js} +30 -30
  59. package/web/.output/public/assets/info-CGMF4Cdc.js +1 -0
  60. package/web/.output/public/assets/keating-stream-g73cFcJe.js +11 -0
  61. package/web/.output/public/assets/{learner-context-D0BfhTjc.js → learner-context-CpkZOwpe.js} +1 -1
  62. package/web/.output/public/assets/{library-pPmUSBEY.js → library-Dt_HrttW.js} +5 -5
  63. package/web/.output/public/assets/{live-context-CYuoXPUI.js → live-context-D5leiub7.js} +1 -1
  64. package/web/.output/public/assets/{mistral-conversations-BehK5A17.js → mistral-conversations-BSUNv6T_.js} +1 -1
  65. package/web/.output/public/assets/{openai-codex-responses-vVGnXFbc.js → openai-codex-responses-BEjWFOsh.js} +1 -1
  66. package/web/.output/public/assets/{openai-completions-SUIeYkEW.js → openai-completions-XWr91hin.js} +1 -1
  67. package/web/.output/public/assets/{openai-realtime-BSeGY5DQ.js → openai-realtime-BERRi9aO.js} +1 -1
  68. package/web/.output/public/assets/{openai-responses-DzgNIiYy.js → openai-responses-DeNWT5uB.js} +1 -1
  69. package/web/.output/public/assets/{openai-responses-shared-CHf6ek3_.js → openai-responses-shared-BdPh5feu.js} +1 -1
  70. package/web/.output/public/assets/{openai-tts-DRXdgxDT.js → openai-tts-ChGSz4r8.js} +1 -1
  71. package/web/.output/public/assets/{operation-BMdkNnIS.js → operation-kDIu8RLw.js} +2 -2
  72. package/web/.output/public/assets/{pi-messages-CpI94BCF.js → pi-messages-pzwJsgas.js} +1 -1
  73. package/web/.output/public/assets/{public-client-KRBnkgBr.js → public-client-CqivHtfG.js} +1 -1
  74. package/web/.output/public/assets/{recipes-BcSW8MlI.js → recipes-lg2hVa6Q.js} +1 -1
  75. package/web/.output/public/assets/{renderer-CKD_Hn-d.js → renderer-Cx1jCM2v.js} +1 -1
  76. package/web/.output/public/assets/{segments-nMdXcVhb.js → segments-BuQ4O8Bd.js} +1 -1
  77. package/web/.output/public/assets/{shared-actions-Bj56xHM3.js → shared-actions-B9eYiZAR.js} +1 -1
  78. package/web/.output/public/assets/{shared-renderer-C-yYfXvq.js → shared-renderer-hMxAoPZb.js} +7 -7
  79. package/web/.output/public/assets/shared-sessions-CwS3OLWR.js +5 -0
  80. package/web/.output/public/assets/{srs-WAeRnL8v.js → srs-BBTX4fCR.js} +1 -1
  81. package/web/.output/public/assets/{tavus-live-CVb9mE_J.js → tavus-live-HpBIH49i.js} +1 -1
  82. package/web/.output/public/assets/{topic-categorization-DHcL_IrS.js → topic-categorization-DfJaArmq.js} +1 -1
  83. package/web/.output/public/assets/trajectory-artifacts-EvNqJEHH.js +3 -0
  84. package/web/.output/public/assets/trajectory-store-C3qzwrr6.js +2 -0
  85. package/web/.output/public/assets/{transformers.web-CUMRYLoV.js → transformers.web-CrNvRfsr.js} +1 -1
  86. package/web/.output/public/assets/use-review-passes-DmWsvYdF.js +8 -0
  87. package/web/.output/public/assets/{use-sessions-C33USzrV.js → use-sessions-3UElISPk.js} +1 -1
  88. package/web/.output/public/assets/{useCoursesAccess-Zfb1Jqw-.js → useCoursesAccess-BgOspZex.js} +1 -1
  89. package/web/.output/public/assets/user-DEmM1U0O.js +1 -0
  90. package/web/.output/public/index.html +7 -7
  91. package/web/.output/public/sw.js +1 -1
  92. package/web/.output/server/_chunks/renderer-template.mjs +1 -1
  93. package/web/.output/server/_libs/h3+rou3+srvx.mjs +1 -1
  94. package/web/.output/server/index.mjs +1191 -1112
  95. package/web/.output/public/assets/CourseWorkspace-McgEEARK.js +0 -25
  96. package/web/.output/public/assets/ModelSelector-CiiiT7sM.js +0 -1
  97. package/web/.output/public/assets/OpenUIPreview-C8sgkYAj.js +0 -1
  98. package/web/.output/public/assets/PatternDigestPanel-Ctm7smvT.js +0 -1
  99. package/web/.output/public/assets/TrajectoryReview-DkC_NtyR.js +0 -35
  100. package/web/.output/public/assets/TrajectoryReviewIndex-C7pg9K9U.js +0 -1
  101. package/web/.output/public/assets/TrajectoryReviewWorkspace-D80QHrDn.js +0 -1
  102. package/web/.output/public/assets/calibration-B8NNSy6-.js +0 -1
  103. package/web/.output/public/assets/desktop-offline-BOKnmvYX.js +0 -2
  104. package/web/.output/public/assets/keating-stream-DeWgIdIv.js +0 -11
  105. package/web/.output/public/assets/shared-sessions-B2FsK7oM.js +0 -5
  106. package/web/.output/public/assets/trajectory-artifacts-B47xntcj.js +0 -3
  107. package/web/.output/public/assets/trajectory-store-CFat_se9.js +0 -2
  108. package/web/.output/public/assets/use-review-passes-BTc5nGD9.js +0 -8
@@ -1,5 +1,5 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-C8C76R86.js","assets/rolldown-runtime-BG2f4sTM.js","assets/syntax-highlighter-Buac5fmw.js","assets/operation-BMdkNnIS.js","assets/calibration-B8NNSy6-.js","assets/local-setting-MxAmyvqH.js","assets/desktop-offline-BOKnmvYX.js","assets/nodepod-wasm-BWaXBLCc.js","assets/public-client-KRBnkgBr.js","assets/notorganic-desktop-Dx4qYMPd.js","assets/srs-WAeRnL8v.js","assets/event-stream-qbAZIAKV.js","assets/__vite-browser-external-BiaOLN6f.js","assets/utils-DKF99Hx-.js","assets/with-selector-Csw1EGl2.js","assets/index-CqQiLJzM.css"])))=>i.map(i=>d[i]);
2
- import{s as e}from"./rolldown-runtime-BG2f4sTM.js";import{T as t}from"./syntax-highlighter-Buac5fmw.js";import{n}from"./operation-BMdkNnIS.js";import{D as r,F as i,h as a,p as o,w as s,x as c}from"./calibration-B8NNSy6-.js";import{n as l}from"./nodepod-wasm-BWaXBLCc.js";import{t as u}from"./Nav-GcfPhZc3.js";import{At as d,Bt as f,Ct as p,Ft as m,H as h,It as g,Kt as _,Lt as v,Ot as y,Pt as b,Qt as x,Rt as S,Tr as C,Ur as w,Ut as ee,Vt as T,Wt as E,Y as D,ei as O,hr as k,jt as A,lr as te,ni as ne,wt as j}from"./index-C8C76R86.js";import{t as M}from"./arrow-left-DwKFZ0Rg.js";import{t as re}from"./chevron-right-CtU0hmKY.js";import{t as ie}from"./download-Cu2Egmxp.js";import{t as ae}from"./upload-BDNPMEAh.js";import{r as oe}from"./ModelSelector-CiiiT7sM.js";import{n as se,t as ce}from"./browser-download-DzX_pBaq.js";import{n as le,t as ue}from"./keating-stream-DeWgIdIv.js";import{r as N}from"./keating-interaction-motion-DVCBDCYP.js";import{a as de,r as P}from"./browser-B8t9zyUd.js";import{t as fe}from"./useSeo-fXJau5mP.js";import{t as pe}from"./sandbox-export-Cl8U49Iq.js";var F=e(t(),1),me=g({role:y([`system`,`user`,`assistant`]),content:S()}).strict(),he=g({status:y([`accepted`,`unscored`,`review`,`rejected`,`reference`]),recommendedForSft:A(),scored:A(),reward:m().min(0).max(1).optional(),signals:v(S(),f()).optional()}).strict(),I=g({schemaVersion:b(2),id:S().min(1),split:y([`train`,`validation`]),task:y([`supervised-finetuning`,`preference-learning`,`reference`]),source:g({type:y([`artifact`,`session`,`sandbox`]),kind:S().min(1),topic:S().optional(),sessionId:S().optional(),sessionTitle:S().optional(),messageTimestamp:m().optional(),model:f().optional(),thinkingLevel:S().nullable().optional(),path:S().optional(),commitId:S().optional()}).strict(),messages:d(me).min(2),prompt:d(me).min(1),completion:S().min(1),quality:he,metrics:g({promptCharacters:m().int().nonnegative(),completionCharacters:m().int().positive(),messageCount:m().int().min(2)}).strict()}).strict(),ge=g({schemaVersion:b(2),mode:b(`finetune`),generatedAt:S().datetime(),source:y([`all`,`artifacts`,`sessions`,`sandbox`]),format:y([`chatml`,`alpaca`,`both`]),redactionEnabled:A(),minimumAssistantCharacters:m().int().positive(),judgeScoringEnabled:A(),judgeScoring:g({thinkingLevel:S().optional(),model:g({provider:S(),id:S()}).nullable(),eligible:m().int().nonnegative(),scored:m().int().nonnegative(),unscored:m().int().nonnegative()}).strict().nullable().optional(),recommendedDataset:S().min(1),splitStrategy:S().min(1),counts:g({artifactsRead:m().int().nonnegative(),sessionsRead:m().int().nonnegative(),sandboxFilesRead:m().int().nonnegative(),sandboxCommitsRead:m().int().nonnegative(),examplesWritten:m().int().nonnegative(),canonicalRecords:m().int().nonnegative(),trainRecords:m().int().nonnegative(),validationRecords:m().int().nonnegative(),sftExcluded:m().int().nonnegative(),duplicatesRemoved:m().int().nonnegative(),lengthExcluded:m().int().nonnegative().optional(),limitExcluded:m().int().nonnegative().optional(),skipped:m().int().nonnegative(),redactions:m().int().nonnegative(),rewardedLines:m().int().nonnegative(),ktoLines:m().int().nonnegative(),preferenceLines:m().int().nonnegative(),dpoTextLines:m().int().nonnegative(),grpoPromptLines:m().int().nonnegative()}).strict(),quality:g({accepted:m().int().nonnegative(),unscored:m().int().nonnegative(),review:m().int().nonnegative(),rejected:m().int().nonnegative(),reference:m().int().nonnegative()}).strict(),rewardStats:f().optional(),warnings:d(S())}).passthrough();function _e(){return T(I,{target:`draft-2020-12`,unrepresentable:`any`})}var L=.5,R=.7,z={explicit:.6,inferred:.15,quiz:.25},ve=.35;function B({originalMessages:e,alternativeMessages:t,originalMessageTimestamp:n,preference:r,persona:i}){let a=e.findIndex(e=>e.role===`assistant`&&e.timestamp===n),o=[...t].reverse().find(e=>e.role===`assistant`);if(a<0||!o)return null;let s=e[a],c=e.slice(0,a).map(e=>({role:e.role,content:e.content})),l=i?.trim()?[{role:`system`,content:i.trim()},...c]:c,u=r===`alternative`?o.content:s.content,d=r===`alternative`?s.content:o.content;return!u.trim()||!d.trim()||u===d?null:{prompt:l,chosen:u,rejected:d,chosenReward:1,rejectedReward:0,rewardGap:1}}function V(e){return Number.isFinite(e)?Math.max(0,Math.min(1,e)):L}function ye(e){let t=e.filter(e=>Number.isFinite(e.score)),n=t.reduce((e,t)=>e+t.weight,0);return n<=0?null:V(t.reduce((e,t)=>e+t.score*t.weight,0)/n)}function be(e){if(!e)return null;let t=/-(\d+)$/.exec(e);if(!t)return null;let n=Number(t[1]);return Number.isFinite(n)?n:null}function xe(e){return JSON.stringify(e.map(e=>[e.role,e.content]))}function Se(e){return typeof e.partialCreditPoints==`number`?V(e.partialCreditPoints/Math.max(1,e.totalQuestions)):V(e.score/Math.max(1,e.totalQuestions))}function H({sessionId:e,title:t,persona:n,messages:r,feedback:i,quizResults:a,usedFeedbackIds:o}){let s=[],c=t?.trim()||`general`;for(let t=0;t<r.length;t+=1){let i=r[t];if(i.role!==`assistant`||i.shortAssistant)continue;let a=r.slice(0,t).map(e=>({role:e.role,content:e.content})),o=n?.trim()?[{role:`system`,content:n.trim()},...a]:a;s.push({sessionId:e,topic:c,messageTimestamp:i.timestamp,context:o,completion:i.content,reward:L,signals:{},scored:!1})}for(let e of s){let t=U(e,r,i,o);if(t&&(e.signals.explicit=t),!t){let t=Ce(e,r,c);t&&(e.signals.inferred=t)}let n=we(e,a,r,c);n&&(e.signals.quiz=n);let s=ye([...e.signals.explicit?[{score:e.signals.explicit.score,weight:z.explicit}]:[],...e.signals.inferred?[{score:e.signals.inferred.score,weight:z.inferred}]:[],...e.signals.quiz?[{score:e.signals.quiz.score,weight:z.quiz}]:[]]);s===null?(e.reward=L,e.scored=!1):(e.reward=s,e.scored=!0)}return s}function U(e,t,n,r){for(let t of n){if(r.has(t.id)||t.sessionId&&t.sessionId!==e.sessionId)continue;let n=be(t.messageId);if(n!==null&&n===e.messageTimestamp)return r.add(t.id),{score:O(t.signal),joinedBy:`messageId`,signal:t.signal,feedbackId:t.id}}if(typeof e.messageTimestamp!=`number`)return null;let i=t.find(t=>t.role===`user`&&typeof t.timestamp==`number`&&t.timestamp>e.messageTimestamp)?.timestamp??e.messageTimestamp+6e5,a=n.filter(t=>r.has(t.id)||t.messageId||t.sessionId&&t.sessionId!==e.sessionId?!1:t.createdAt>=e.messageTimestamp&&t.createdAt<i).sort((t,n)=>Math.abs(t.createdAt-e.messageTimestamp)-Math.abs(n.createdAt-e.messageTimestamp))[0];return a?(r.add(a.id),{score:O(a.signal),joinedBy:`timestampWindow`,signal:a.signal,feedbackId:a.id}):null}function Ce(e,t,n){if(typeof e.messageTimestamp!=`number`)return null;let r=t.find(t=>t.role===`user`&&typeof t.timestamp==`number`&&t.timestamp>e.messageTimestamp);if(!r)return null;let i=w(r.content,n);return i?{score:O(i.signal),joinedBy:`nextTurn`,signal:i.signal}:null}function we(e,t,n,r){if(typeof e.messageTimestamp!=`number`)return null;let i=t.filter(t=>t.sessionId?t.sessionId===e.sessionId&&t.createdAt>=e.messageTimestamp:t.topic===r?t.createdAt>=e.messageTimestamp&&t.createdAt<e.messageTimestamp+6e5:!1).filter(t=>!n.find(n=>n.role===`assistant`&&typeof n.timestamp==`number`&&n.timestamp>e.messageTimestamp&&n.timestamp<=t.createdAt)).sort((e,t)=>t.createdAt-e.createdAt)[0];return i?{score:Se(i),joinedBy:i.sessionId?`sessionId`:`topicWindow`,quizResultId:i.id}:null}function W(e,t=C){return V(e.masteryGain*t.masteryGain+e.retention*t.retention+e.engagement*t.engagement+e.transfer*t.transfer-e.confusion*t.confusion)}function Te(e,t){for(let n=0;n<e.length;n+=1){let r=t[n];if(!r)continue;let i=W(r),a=e[n];a.signals.judge={...r,score:i},a.reward=V((1-ve)*a.reward+ve*i),a.scored=!0}return e}function Ee(e){return e.filter(e=>e.scored&&(e.reward>=.7||e.reward<=.35)).map(e=>({prompt:e.context,completion:e.completion,label:e.reward>=R}))}function G(e){let t=new Map;for(let n of e){if(!n.scored)continue;let e=xe(n.context);t.set(e,[...t.get(e)??[],n])}let n=[];for(let e of t.values()){if(e.length<2)continue;let t=[...e].sort((e,t)=>t.reward-e.reward);for(let e=0;e<t.length-1;e+=1)for(let r=e+1;r<t.length;r+=1){let i=t[e],a=t[r],o=i.reward-a.reward;o>=.3&&n.push({prompt:i.context,chosen:i.completion,rejected:a.completion,chosenReward:i.reward,rejectedReward:a.reward,rewardGap:o})}}return n}function De(e){return e.map(e=>({prompt:e.prompt,chosen:e.chosen,rejected:e.rejected}))}function Oe(e){return e.map(e=>{switch(e.role){case`system`:return`System: ${e.content}`;case`user`:return`User: ${e.content}`;case`assistant`:return`Assistant: ${e.content}`}}).join(`
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-DCgpDQKf.js","assets/rolldown-runtime-BG2f4sTM.js","assets/syntax-highlighter-Buac5fmw.js","assets/operation-kDIu8RLw.js","assets/calibration-7gf-WNR5.js","assets/local-setting-MxAmyvqH.js","assets/desktop-offline-IzFtwAhh.js","assets/nodepod-wasm-BWaXBLCc.js","assets/public-client-CqivHtfG.js","assets/notorganic-desktop-Dx4qYMPd.js","assets/srs-BBTX4fCR.js","assets/event-stream-qbAZIAKV.js","assets/__vite-browser-external-BiaOLN6f.js","assets/utils-DKF99Hx-.js","assets/with-selector-Csw1EGl2.js","assets/index-CqQiLJzM.css"])))=>i.map(i=>d[i]);
2
+ import{s as e}from"./rolldown-runtime-BG2f4sTM.js";import{T as t}from"./syntax-highlighter-Buac5fmw.js";import{n}from"./operation-kDIu8RLw.js";import{D as r,F as i,h as a,p as o,w as s,x as c}from"./calibration-7gf-WNR5.js";import{n as l}from"./nodepod-wasm-BWaXBLCc.js";import{t as u}from"./Nav-DQ-5KEsA.js";import{At as d,Bt as f,Ct as p,Ft as m,H as h,It as g,Kt as _,Lt as v,Ot as y,Pt as b,Qt as x,Rt as S,Tr as C,Ur as w,Ut as ee,Vt as T,Wt as E,Y as D,ei as O,hr as k,jt as A,lr as te,ni as ne,wt as j}from"./index-DCgpDQKf.js";import{t as M}from"./arrow-left-DwKFZ0Rg.js";import{t as re}from"./chevron-right-CtU0hmKY.js";import{t as ie}from"./download-Cu2Egmxp.js";import{t as ae}from"./upload-BDNPMEAh.js";import{r as oe}from"./ModelSelector-B_EaHvVz.js";import{n as se,t as ce}from"./browser-download-DzX_pBaq.js";import{n as le,t as ue}from"./keating-stream-g73cFcJe.js";import{r as N}from"./keating-interaction-motion-DVCBDCYP.js";import{a as de,r as P}from"./browser-B8t9zyUd.js";import{t as fe}from"./useSeo-fXJau5mP.js";import{t as pe}from"./sandbox-export-Cl8U49Iq.js";var F=e(t(),1),me=g({role:y([`system`,`user`,`assistant`]),content:S()}).strict(),he=g({status:y([`accepted`,`unscored`,`review`,`rejected`,`reference`]),recommendedForSft:A(),scored:A(),reward:m().min(0).max(1).optional(),signals:v(S(),f()).optional()}).strict(),I=g({schemaVersion:b(2),id:S().min(1),split:y([`train`,`validation`]),task:y([`supervised-finetuning`,`preference-learning`,`reference`]),source:g({type:y([`artifact`,`session`,`sandbox`]),kind:S().min(1),topic:S().optional(),sessionId:S().optional(),sessionTitle:S().optional(),messageTimestamp:m().optional(),model:f().optional(),thinkingLevel:S().nullable().optional(),path:S().optional(),commitId:S().optional()}).strict(),messages:d(me).min(2),prompt:d(me).min(1),completion:S().min(1),quality:he,metrics:g({promptCharacters:m().int().nonnegative(),completionCharacters:m().int().positive(),messageCount:m().int().min(2)}).strict()}).strict(),ge=g({schemaVersion:b(2),mode:b(`finetune`),generatedAt:S().datetime(),source:y([`all`,`artifacts`,`sessions`,`sandbox`]),format:y([`chatml`,`alpaca`,`both`]),redactionEnabled:A(),minimumAssistantCharacters:m().int().positive(),judgeScoringEnabled:A(),judgeScoring:g({thinkingLevel:S().optional(),model:g({provider:S(),id:S()}).nullable(),eligible:m().int().nonnegative(),scored:m().int().nonnegative(),unscored:m().int().nonnegative()}).strict().nullable().optional(),recommendedDataset:S().min(1),splitStrategy:S().min(1),counts:g({artifactsRead:m().int().nonnegative(),sessionsRead:m().int().nonnegative(),sandboxFilesRead:m().int().nonnegative(),sandboxCommitsRead:m().int().nonnegative(),examplesWritten:m().int().nonnegative(),canonicalRecords:m().int().nonnegative(),trainRecords:m().int().nonnegative(),validationRecords:m().int().nonnegative(),sftExcluded:m().int().nonnegative(),duplicatesRemoved:m().int().nonnegative(),lengthExcluded:m().int().nonnegative().optional(),limitExcluded:m().int().nonnegative().optional(),skipped:m().int().nonnegative(),redactions:m().int().nonnegative(),rewardedLines:m().int().nonnegative(),ktoLines:m().int().nonnegative(),preferenceLines:m().int().nonnegative(),dpoTextLines:m().int().nonnegative(),grpoPromptLines:m().int().nonnegative()}).strict(),quality:g({accepted:m().int().nonnegative(),unscored:m().int().nonnegative(),review:m().int().nonnegative(),rejected:m().int().nonnegative(),reference:m().int().nonnegative()}).strict(),rewardStats:f().optional(),warnings:d(S())}).passthrough();function _e(){return T(I,{target:`draft-2020-12`,unrepresentable:`any`})}var L=.5,R=.7,z={explicit:.6,inferred:.15,quiz:.25},ve=.35;function B({originalMessages:e,alternativeMessages:t,originalMessageTimestamp:n,preference:r,persona:i}){let a=e.findIndex(e=>e.role===`assistant`&&e.timestamp===n),o=[...t].reverse().find(e=>e.role===`assistant`);if(a<0||!o)return null;let s=e[a],c=e.slice(0,a).map(e=>({role:e.role,content:e.content})),l=i?.trim()?[{role:`system`,content:i.trim()},...c]:c,u=r===`alternative`?o.content:s.content,d=r===`alternative`?s.content:o.content;return!u.trim()||!d.trim()||u===d?null:{prompt:l,chosen:u,rejected:d,chosenReward:1,rejectedReward:0,rewardGap:1}}function V(e){return Number.isFinite(e)?Math.max(0,Math.min(1,e)):L}function ye(e){let t=e.filter(e=>Number.isFinite(e.score)),n=t.reduce((e,t)=>e+t.weight,0);return n<=0?null:V(t.reduce((e,t)=>e+t.score*t.weight,0)/n)}function be(e){if(!e)return null;let t=/-(\d+)$/.exec(e);if(!t)return null;let n=Number(t[1]);return Number.isFinite(n)?n:null}function xe(e){return JSON.stringify(e.map(e=>[e.role,e.content]))}function Se(e){return typeof e.partialCreditPoints==`number`?V(e.partialCreditPoints/Math.max(1,e.totalQuestions)):V(e.score/Math.max(1,e.totalQuestions))}function H({sessionId:e,title:t,persona:n,messages:r,feedback:i,quizResults:a,usedFeedbackIds:o}){let s=[],c=t?.trim()||`general`;for(let t=0;t<r.length;t+=1){let i=r[t];if(i.role!==`assistant`||i.shortAssistant)continue;let a=r.slice(0,t).map(e=>({role:e.role,content:e.content})),o=n?.trim()?[{role:`system`,content:n.trim()},...a]:a;s.push({sessionId:e,topic:c,messageTimestamp:i.timestamp,context:o,completion:i.content,reward:L,signals:{},scored:!1})}for(let e of s){let t=U(e,r,i,o);if(t&&(e.signals.explicit=t),!t){let t=Ce(e,r,c);t&&(e.signals.inferred=t)}let n=we(e,a,r,c);n&&(e.signals.quiz=n);let s=ye([...e.signals.explicit?[{score:e.signals.explicit.score,weight:z.explicit}]:[],...e.signals.inferred?[{score:e.signals.inferred.score,weight:z.inferred}]:[],...e.signals.quiz?[{score:e.signals.quiz.score,weight:z.quiz}]:[]]);s===null?(e.reward=L,e.scored=!1):(e.reward=s,e.scored=!0)}return s}function U(e,t,n,r){for(let t of n){if(r.has(t.id)||t.sessionId&&t.sessionId!==e.sessionId)continue;let n=be(t.messageId);if(n!==null&&n===e.messageTimestamp)return r.add(t.id),{score:O(t.signal),joinedBy:`messageId`,signal:t.signal,feedbackId:t.id}}if(typeof e.messageTimestamp!=`number`)return null;let i=t.find(t=>t.role===`user`&&typeof t.timestamp==`number`&&t.timestamp>e.messageTimestamp)?.timestamp??e.messageTimestamp+6e5,a=n.filter(t=>r.has(t.id)||t.messageId||t.sessionId&&t.sessionId!==e.sessionId?!1:t.createdAt>=e.messageTimestamp&&t.createdAt<i).sort((t,n)=>Math.abs(t.createdAt-e.messageTimestamp)-Math.abs(n.createdAt-e.messageTimestamp))[0];return a?(r.add(a.id),{score:O(a.signal),joinedBy:`timestampWindow`,signal:a.signal,feedbackId:a.id}):null}function Ce(e,t,n){if(typeof e.messageTimestamp!=`number`)return null;let r=t.find(t=>t.role===`user`&&typeof t.timestamp==`number`&&t.timestamp>e.messageTimestamp);if(!r)return null;let i=w(r.content,n);return i?{score:O(i.signal),joinedBy:`nextTurn`,signal:i.signal}:null}function we(e,t,n,r){if(typeof e.messageTimestamp!=`number`)return null;let i=t.filter(t=>t.sessionId?t.sessionId===e.sessionId&&t.createdAt>=e.messageTimestamp:t.topic===r?t.createdAt>=e.messageTimestamp&&t.createdAt<e.messageTimestamp+6e5:!1).filter(t=>!n.find(n=>n.role===`assistant`&&typeof n.timestamp==`number`&&n.timestamp>e.messageTimestamp&&n.timestamp<=t.createdAt)).sort((e,t)=>t.createdAt-e.createdAt)[0];return i?{score:Se(i),joinedBy:i.sessionId?`sessionId`:`topicWindow`,quizResultId:i.id}:null}function W(e,t=C){return V(e.masteryGain*t.masteryGain+e.retention*t.retention+e.engagement*t.engagement+e.transfer*t.transfer-e.confusion*t.confusion)}function Te(e,t){for(let n=0;n<e.length;n+=1){let r=t[n];if(!r)continue;let i=W(r),a=e[n];a.signals.judge={...r,score:i},a.reward=V((1-ve)*a.reward+ve*i),a.scored=!0}return e}function Ee(e){return e.filter(e=>e.scored&&(e.reward>=.7||e.reward<=.35)).map(e=>({prompt:e.context,completion:e.completion,label:e.reward>=R}))}function G(e){let t=new Map;for(let n of e){if(!n.scored)continue;let e=xe(n.context);t.set(e,[...t.get(e)??[],n])}let n=[];for(let e of t.values()){if(e.length<2)continue;let t=[...e].sort((e,t)=>t.reward-e.reward);for(let e=0;e<t.length-1;e+=1)for(let r=e+1;r<t.length;r+=1){let i=t[e],a=t[r],o=i.reward-a.reward;o>=.3&&n.push({prompt:i.context,chosen:i.completion,rejected:a.completion,chosenReward:i.reward,rejectedReward:a.reward,rewardGap:o})}}return n}function De(e){return e.map(e=>({prompt:e.prompt,chosen:e.chosen,rejected:e.rejected}))}function Oe(e){return e.map(e=>{switch(e.role){case`system`:return`System: ${e.content}`;case`user`:return`User: ${e.content}`;case`assistant`:return`Assistant: ${e.content}`}}).join(`
3
3
 
4
4
  `)}function ke(e){return e.map(e=>({prompt:Oe(e.prompt),chosen:e.chosen,rejected:e.rejected}))}function K(e){let t=new Set,n=[];for(let r of e){let e=xe(r.context);t.has(e)||(t.add(e),n.push({prompt:r.context}))}return n}function Ae(e){let t={scored:0,unscored:0,bySource:{explicit:0,inferred:0,quiz:0,judge:0},distribution:[0,0,0,0,0]};for(let n of e){n.scored?t.scored+=1:t.unscored+=1,n.signals.explicit&&(t.bySource.explicit+=1),n.signals.inferred&&(t.bySource.inferred+=1),n.signals.quiz&&(t.bySource.quiz+=1),n.signals.judge&&(t.bySource.judge+=1);let e=Math.min(4,Math.max(0,Math.floor(V(n.reward)/.2)));t.distribution[e]+=1}return t}var je=[/\bsk-ant-[A-Za-z0-9_-]{12,}\b/g,/\bsk-[A-Za-z0-9_-]{12,}\b/g,/\bAIza[A-Za-z0-9_-]{16,}\b/g,/\bghp_[A-Za-z0-9_]{12,}\b/g,/\bBearer\s+[A-Za-z0-9._-]{12,}\b/gi,/^[A-Z][A-Z0-9_]*_API_KEY\s*=\s*.+$/gm,/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/gi];function q(e,t){if(!t)return{text:e,count:0};let n=e,r=0;for(let e of je)n=n.replace(e,()=>(r+=1,`[REDACTED]`));return{text:n,count:r}}function J(e){let t=e?.content;return typeof t==`string`?t:Array.isArray(t)?t.map(e=>typeof e==`string`?e:e?.type===`text`&&typeof e.text==`string`||typeof e?.text==`string`?e.text:e?.type===`file`&&typeof e.filename==`string`?`[Attachment: ${e.filename}]`:``).filter(Boolean).join(`
5
5
  `):``}function Me(e,t){return t?.stopReason===`error`?!0:/__KEATING_ERROR__|authentication failed|no api key|stack trace|^\s*error:/i.test(e)}function Ne(e,t){switch(e){case`plan`:return`Create a Keating-style Socratic lesson plan for ${t}.`;case`quiz`:return`Create retrieval practice and an answer key for ${t}.`;case`map`:return`Create a Mermaid concept map for ${t}.`;case`animation`:return`Create a teaching animation storyboard for ${t}.`;case`verification`:return`Create a verification checklist before teaching ${t}.`;default:return`Create a Keating teaching artifact for ${t}.`}}function Y(e,t,n,r,i,a,o){let s=r.trim();if(!s){a.skipped+=1;return}let c=q(s,i.redact);a.redactions+=c.count;let l=Ne(t,n),u=[{role:`user`,content:l},{role:`assistant`,content:c.text}];e.push({id:`artifact-${t}-${Z(n)}`,source:`artifact`,kind:t,topic:n,instruction:l,output:c.text,messages:u}),o?.push({source:`artifact`,messages:u})}function Pe(e,t,n,r,i){let a=r.trim()?[{role:`system`,content:r.trim()}]:[],o=[];for(let r of t.messages){if(r.role===`user`){o.push({role:`user`,content:r.content});continue}let t=He(e.id,r.timestamp),s=t?i.get(t):void 0,c=!n.keepAllResponses&&!!(s?.scored&&s.reward<.7);if(r.shortAssistant||c){o=[];continue}a.push(...o,{role:`assistant`,content:r.content}),o=[]}let s=a.some(e=>e.role===`user`),c=a.some(e=>e.role===`assistant`);return!s||!c?null:{source:`session`,messages:a,envelope:{title:e.title,sessionId:e.id,source:`keating-session-export`,model:e.model,thinkingLevel:e.thinkingLevel,messages:n.redact?void 0:e.messages,training:{id:`session-${Z(e.id)}`,kind:`conversation`,topic:e.title}}}}function Fe(e,t,n){let r=[],i=[];for(let a of e.messages){let e=a?.role,o=e===`user`||e===`user-with-attachments`?`user`:e===`assistant`?`assistant`:null;if(!o){n.skipped+=1;continue}let s=J(a).trim();if(!s){n.skipped+=1;continue}if(o===`assistant`&&!t.keepAllResponses&&Me(s,a)){n.skipped+=1;continue}let c=o===`assistant`&&s.length<t.minAssistantChars;o===`assistant`&&s.length<t.minAssistantChars&&(n.skipped+=1);let l=q(s,t.redact);n.redactions+=l.count,r.push({role:o,content:l.text,timestamp:typeof a?.timestamp==`number`?a.timestamp:void 0,shortAssistant:c}),c||i.push(r[r.length-1])}return{messages:r,pairMessages:i}}function Ie(e,t,n){for(let r=0;r<t.pairMessages.length-1;r+=1){let i=t.pairMessages[r],a=t.pairMessages[r+1];i?.role===`user`&&a?.role===`assistant`&&e.push({id:`session-${Z(n.id)}-${a.timestamp??r}`,source:`session`,kind:`conversation`,topic:n.title,sessionId:n.id,sessionTitle:n.title,messageTimestamp:a.timestamp,model:n.model,thinkingLevel:n.thinkingLevel,instruction:i.content,output:a.content,messages:[i,a]})}}function Le(e,t,n,r,i){if(!t)return{filesRead:0,commitsRead:0};let a=0,o=t.vc.commits.length;for(let o of t.nodepod.files){if(a+=1,!/\/workspace\/(src\/core\/|pi\/prompts\/|web\/src\/keating\/)/.test(o.path))continue;let t=o.content.trim();if(!t){r.skipped+=1;continue}let s=q(t,n.redact);r.redactions+=s.count;let c=`Maintain or improve this Keating sandbox source file: ${o.path}.`,l=[{role:`user`,content:c},{role:`assistant`,content:s.text}];e.push({id:`sandbox-file-${Z(o.path)}`,source:`sandbox`,kind:`source-file`,path:o.path,instruction:c,output:s.text,messages:l}),i?.push({source:`sandbox`,messages:l})}for(let a of t.vc.commits){let t=a.files.map(e=>`${e.path} ${e.hash}`).join(`
@@ -10,7 +10,7 @@ import{s as e}from"./rolldown-runtime-BG2f4sTM.js";import{T as t}from"./syntax-h
10
10
  `:``)}function X(e){return e.map(e=>JSON.stringify(e)).join(`
11
11
  `)+(e.length?`
12
12
  `:``)}function Z(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-|-$/g,``).slice(0,80)||`item`}function Be(e){let t=2166136261;for(let n=0;n<e.length;n+=1)t^=e.charCodeAt(n),t=Math.imul(t,16777619);return t>>>0}function Ve(e,t){let n=Be(e);return n%10*10+Math.floor(n/10)%10<t?`validation`:`train`}function He(e,t){return e&&typeof t==`number`?`${e}:${t}`:null}function Ue(e){if(!e)return{status:`unscored`,recommendedForSft:!1,scored:!1};if(!e.scored)return{status:`unscored`,recommendedForSft:!1,scored:!1,signals:e.signals};let t=e.reward>=.7?`accepted`:e.reward<=.35?`rejected`:`review`;return{status:t,recommendedForSft:t===`accepted`,scored:!0,reward:e.reward,signals:e.signals}}function We(e,t,n,r){let i=new Map;for(let e of t){let t=He(e.sessionId,e.messageTimestamp);t&&i.set(t,e)}let a=[];for(let t of e){let e=He(t.sessionId,t.messageTimestamp),o=e?i.get(e):void 0,s=(o?[...o.context,{role:`assistant`,content:o.completion}]:t.messages??[{role:`user`,content:t.instruction},{role:`assistant`,content:t.output}]).map(e=>({role:e.role,content:e.content})),c=!o&&t.source===`session`&&n.trim()?[{role:`system`,content:n.trim()},...s]:s,l=c.at(-1)?.content??t.output,u=c.slice(0,-1),d=JSON.stringify([...u.map(e=>[e.role,e.content.trim()]),[`assistant`,l.trim()]]),f=t.source===`sandbox`?{status:`reference`,recommendedForSft:!1,scored:!1}:t.source===`artifact`?{status:`unscored`,recommendedForSft:!1,scored:!1}:Ue(o);a.push({schemaVersion:2,id:`${t.id}-${Be(d).toString(36)}`,split:Ve(t.sessionId??t.path??t.commitId??t.id,r),task:f.status===`rejected`?`preference-learning`:f.status===`reference`?`reference`:`supervised-finetuning`,source:{type:t.source,kind:t.kind,topic:t.topic,sessionId:t.sessionId,sessionTitle:t.sessionTitle,messageTimestamp:t.messageTimestamp,model:t.model,thinkingLevel:t.thinkingLevel,path:t.path,commitId:t.commitId},messages:c,prompt:u,completion:l,quality:f,metrics:{promptCharacters:u.reduce((e,t)=>e+t.content.length,0),completionCharacters:l.length,messageCount:c.length}})}return{records:a,duplicateCount:0}}function Ge(e){let t=new Set,n=[],r=0;for(let i of e){let e=JSON.stringify([i.instruction.trim(),(i.input??``).trim(),i.output.trim()]);if(t.has(e)){r+=1;continue}t.add(e),n.push(i)}return{examples:n,duplicateCount:r}}function Ke(e){let t={accepted:0,unscored:0,review:0,rejected:0,reference:0};for(let n of e)t[n.quality.status]+=1;return t}function qe(e){return e?e.trim().split(`
13
- `).filter(Boolean).length:0}async function Je(e,t){t.keepAllResponses&&(t={...t,minAssistantChars:1,maxAssistantChars:void 0,maxRecords:void 0,deduplicate:!1});let n=(e,t)=>{if(e!==void 0&&(!Number.isInteger(e)||e<1))throw Error(`${t} must be a positive integer.`)};if(n(t.maxAssistantChars,`Maximum assistant characters`),n(t.maxRecords,`Maximum records`),t.maxAssistantChars!==void 0&&t.maxAssistantChars<t.minAssistantChars)throw Error(`Maximum assistant characters must be at least the minimum.`);let r=t.validationPercent??10;if(!Number.isFinite(r)||r<0||r>50)throw Error(`Validation percentage must be between 0 and 50.`);let i=[],a=[],o=new Map,s={redactions:0,skipped:0},c=t.source===`all`||t.source===`artifacts`,l=t.source===`all`||t.source===`sessions`,u=t.source===`all`||t.source===`sandbox`,d=``,f=0,p=0,m=0,h=0;if(c){for(let n of e.plans??[])f+=1,Y(i,n.metadata?.type===`quiz`?`quiz`:`plan`,n.topic,n.content,t,s);for(let n of e.maps??[])f+=1,Y(i,`map`,n.topic,n.mmdContent,t,s);for(let n of e.animations??[])f+=1,Y(i,`animation`,n.topic,n.storyboard,t,s);for(let n of e.verifications??[])f+=1,Y(i,`verification`,n.topic,n.checklist,t,s)}if(l){let n=e.persona?q(e.persona,t.redact):{text:``,count:0};d=n.text,s.redactions+=n.count;for(let n of e.sessions??[]){p+=1;let e=Fe(n,t,s);o.set(n.id,e),Ie(i,e,n)}}if(u){let n=Le(i,e.sandbox,t,s);m=n.filesRead,h=n.commitsRead}let g=i.filter(e=>e.output.length>=t.minAssistantChars&&(t.maxAssistantChars===void 0||e.output.length<=t.maxAssistantChars)),_=i.length-g.length,v=t.deduplicate?Ge(g):{examples:g,duplicateCount:0},y=Math.max(0,v.examples.length-(t.maxRecords??v.examples.length));v.examples=v.examples.slice(0,t.maxRecords),s.skipped+=_+v.duplicateCount+y;let b=new Map;for(let e of v.examples){if(e.source!==`session`)continue;let t=JSON.stringify([e.sessionId,e.messageTimestamp,e.output]);b.set(t,(b.get(t)??0)+1)}let x=new Set(b.keys()),S=new Set;a.length=0;let C=new Set;for(let t of e.sessions??[]){let n=o.get(t.id);if(!n)continue;let r=[],i=[];for(let e of n.messages){if(e.role===`user`){i.push(e);continue}let n=JSON.stringify([t.id,e.timestamp,e.content]),a=b.get(n)??0;a>0&&(b.set(n,a-1),r.push(...i,e)),i=[]}r.length>0&&r.push(...i),r.length!==n.messages.length&&S.add(t.id),n.messages=r,n.pairMessages=r,a.push(...H({sessionId:t.id,title:t.title,persona:d,messages:r,feedback:e.feedback??[],quizResults:e.quizResults??[],usedFeedbackIds:C}))}t.judge&&a.length>0&&Te(a,await t.judge(a));let w=a.filter(e=>e.signals.judge).length,ee=new Map;for(let e of a){let t=He(e.sessionId,e.messageTimestamp);t&&ee.set(t,e)}let T=v.examples.filter(e=>{let n=He(e.sessionId,e.messageTimestamp),r=n?ee.get(n):void 0;return t.keepAllResponses||!(r?.scored&&r.reward<.7)}),E=We(v.examples,a,d,r),D=T.filter(e=>e.source!==`session`).map(e=>{let t=e.messages??[{role:`user`,content:e.instruction},{role:`assistant`,content:e.output}];return{source:e.source,messages:t,envelope:{source:`keating-training-export`,training:{id:e.id,kind:e.kind,topic:e.topic,quality:e.source===`artifact`?{status:`unscored`,recommendedForSft:!1,scored:!1}:{status:`reference`,recommendedForSft:!1,scored:!1}}}}});for(let n of e.sessions??[]){let e=o.get(n.id);if(!e)continue;let r=Pe(n,e,t,d,ee);r&&(S.has(n.id)&&r.envelope&&(r.envelope.messages=void 0),D.push(r))}let O=t.keepAllResponses?`${JSON.stringify({schemaVersion:1,kind:`keating-training-source-snapshot`,source:t.source,...c?{plans:e.plans??[],maps:e.maps??[],animations:e.animations??[],verifications:e.verifications??[],benchmarks:e.benchmarks??[],evolutions:e.evolutions??[]}:{},...l?{sessions:e.sessions??[],feedback:e.feedback??[],quizResults:e.quizResults??[],persona:e.persona??``}:{},...u?{sandbox:e.sandbox??null}:{}},(e,n)=>{if(typeof n!=`string`)return n;let r=q(n,t.redact);return s.redactions+=r.count,r.text},2)}\n`:void 0,k={sourceDataJson:O,exampleCount:T.length,recordCount:E.records.length,skippedCount:s.skipped,redactionCount:s.redactions,manifestJson:``};if((t.format===`chatml`||t.format===`both`)&&(k.chatmlJsonl=Re(D)),(t.format===`alpaca`||t.format===`both`)&&(k.alpacaJsonl=ze(T)),k.canonicalJsonl=X(E.records.map(e=>I.parse(e))),a.length>0){let n=Ee(a),r=(e.sessions??[]).flatMap(e=>{if(!e.generatedAlternative||!e.parentSessionId||e.responsePreference!==`original`&&e.responsePreference!==`alternative`||typeof e.alternativeForMessageTimestamp!=`number`)return[];let n=o.get(e.parentSessionId),r=o.get(e.id);if(!n||!r)return[];let i=[...e.messages].reverse().find(e=>e.role===`assistant`);if(!i||!x.has(JSON.stringify([e.id,i.timestamp,q(J(i).trim(),t.redact).text])))return[];let a=B({originalMessages:n.messages,alternativeMessages:r.messages,originalMessageTimestamp:e.alternativeForMessageTimestamp,preference:e.responsePreference,persona:d});return a?[a]:[]}),i=[...G(a),...r],s=K(a);k.rewardStats=Ae(a),k.rewardedJsonl=X(a.map(e=>({id:`session-${Z(e.sessionId)}-${e.messageTimestamp??`untimed`}`,sessionId:e.sessionId,topic:e.topic,messageTimestamp:e.messageTimestamp,messages:[...e.context,{role:`assistant`,content:e.completion}],reward:e.reward,signals:e.signals,scored:e.scored}))),k.ktoJsonl=X(n),k.preferenceJsonl=X(De(i)),k.dpoTextJsonl=X(ke(i)),k.grpoPromptsJsonl=X(s)}let A=Ke(E.records),te=E.records.filter(e=>e.split===`train`).length,ne=E.records.length-te,j=v.examples.length-T.length,M=[...t.keepAllResponses?[`Keep everything is enabled: short, error-like, and low-scoring text responses are retained in compatibility exports. Quality labels remain descriptive, not an endorsement. The source snapshot preserves original message structures, including non-text and empty messages; text training files cannot represent every source item.`]:[],`Compatibility files combine partitions. Use the canonical record split field to construct training and validation datasets; train.* filenames do not enforce a held-out partition.`,...t.judge&&w<a.length?[`Judge scored ${w} of ${a.length} eligible responses. Missing scores may reflect failed requests, invalid responses, or the scoring limit; they are not quality judgments.`]:[],...T.length===0?[`No supervised fine-tuning examples were generated.`]:[],...A.unscored>0?[`${A.unscored} captured responses have no quality signal; review them before high-stakes training.`]:[],...A.reference>0?[`${A.reference} sandbox records are reference material, not recommended SFT examples.`]:[],...r>0&&ne===0&&E.records.length>=2?[`The deterministic source-group split produced no validation records for this small dataset.`]:[]];return k.manifestJson=`${JSON.stringify({schemaVersion:2,mode:`finetune`,generatedAt:new Date(t.now??Date.now()).toISOString(),source:t.source,format:t.format,redactionEnabled:t.redact,keepAllResponses:t.keepAllResponses??!1,sourceSnapshotIncluded:!!O,minimumAssistantCharacters:t.minAssistantChars,maximumAssistantCharacters:t.maxAssistantChars??null,maximumRecords:t.maxRecords??null,validationPercent:r,deduplicationEnabled:t.deduplicate??!1,recordSelection:`Source order, after character bounds and optional exact prompt/completion deduplication; limits count canonical records before SFT quality exclusions.`,judgeScoringEnabled:!!t.judge,judgeScoring:t.judge?{model:t.judgeModel??null,...t.judgeThinkingLevel?{thinkingLevel:t.judgeThinkingLevel}:{},eligible:a.length,scored:w,unscored:a.length-w}:null,recommendedDataset:`data/keating.training.jsonl`,splitStrategy:`Stable source-group hash (${100-r}% train / ${r}% validation)`,counts:{artifactsRead:f,sessionsRead:p,sandboxFilesRead:m,sandboxCommitsRead:h,examplesWritten:T.length,canonicalRecords:E.records.length,trainRecords:te,validationRecords:ne,sftExcluded:j,lengthExcluded:_,limitExcluded:y,duplicatesRemoved:v.duplicateCount+E.duplicateCount,skipped:s.skipped,redactions:s.redactions,rewardedLines:qe(k.rewardedJsonl),ktoLines:qe(k.ktoJsonl),preferenceLines:qe(k.preferenceJsonl),dpoTextLines:qe(k.dpoTextJsonl),grpoPromptLines:qe(k.grpoPromptsJsonl)},quality:A,rewardStats:k.rewardStats,warnings:M},null,2)}\n`,k}async function Ye(){let e=await _.getAllMetadata(),t=await Promise.all(e.map(async e=>_.loadSession(e.id))),[n,r,i,a,o,s,c,l,u,d]=await Promise.all([E.getLessonPlans(),E.getLessonMaps(),E.getAnimations(),E.getVerifications(),E.getBenchmarks(),E.getEvolutions(),pe().catch(()=>void 0),E.getFeedback(),E.getQuizResults(),Promise.resolve(N())]);return{plans:n,maps:r,animations:i,verifications:a,benchmarks:o,evolutions:s,sessions:t.filter(Boolean),sandbox:c,feedback:l,quizResults:u,persona:d}}function Xe(e,t=`auto`){return t===`auto`?e.toLowerCase().includes(`alpaca`)?`alpaca`:`chatml`:t}function Ze(e,t){let n=[],r=[],i=0,a=e.split(/\r?\n/);for(let e=0;e<a.length;e+=1){let o=a[e].trim();if(o)try{n.push(JSON.parse(o))}catch{i+=1,r.push(`Skipped invalid JSONL line ${e+1} in ${t}.`)}}return{values:n,skipped:i,warnings:r}}function Qe(e){let t=e&&typeof e==`object`?e:null;if(!t)return null;let n=t.role===`system`||t.role===`user`||t.role===`assistant`?t.role:null,r=typeof t.content==`string`?t.content.trim():``;return n&&r?{role:n,content:r}:null}function $e(e){let t=e&&typeof e==`object`?e:null;if(!t)return;let n={};return typeof t.title==`string`&&(n.title=t.title),typeof t.thinkingLevel==`string`&&(n.thinkingLevel=t.thinkingLevel),typeof t.sessionId==`string`&&(n.sessionId=t.sessionId),typeof t.source==`string`&&(n.source=t.source),t.model&&typeof t.model==`object`&&(n.model=t.model),Array.isArray(t.messages)&&(n.rawMessages=t.messages),Object.keys(n).length>0?n:void 0}function et(e){let t=[],n=0;for(let r of e){let e=r&&typeof r==`object`?r:null,i=Array.isArray(e?.messages)?e.messages.map(Qe).filter(e=>!!e):[];if(i.some(e=>e.role===`user`)&&i.some(e=>e.role===`assistant`)){let n=$e(e?.keating);t.push(n?{messages:i,meta:n}:{messages:i})}else n+=1}return{imported:t,skipped:n,warnings:[]}}function tt(e){let t=[],n=0;for(let r of e){let e=r&&typeof r==`object`?r:null,i=typeof e?.instruction==`string`?e.instruction.trim():``,a=typeof e?.input==`string`?e.input.trim():``,o=typeof e?.output==`string`?e.output.trim():``;if(!i||!o){n+=1;continue}t.push({messages:[{role:`user`,content:a?`${i}\n\n${a}`:i},{role:`assistant`,content:o}]})}return{imported:t,skipped:n,warnings:[]}}function nt(e){return JSON.stringify(e.messages.map(e=>[e.role,e.content]))}function rt(e,t,n){let r=0;for(let i of n){let n=nt(i);t.has(n)||(t.add(n),e.push(i),r+=1)}return r}function it(e){return e.meta?.rawMessages&&e.meta.rawMessages.length>0?e.meta.rawMessages:e.messages.map(e=>({role:e.role,content:[{type:`text`,text:e.content}]}))}function at(e,t={}){let n=[],r=new Set,i=[],a=0,o=0;for(let t of e){if(!t.name.toLowerCase().endsWith(`.jsonl`)){i.push(`Skipped non-JSONL file: ${t.name}.`),o+=1;continue}let e=Ze(t.text,t.name);o+=e.skipped,i.push(...e.warnings);let s=Xe(t.name,t.format)===`alpaca`?tt(e.values):et(e.values);a+=rt(n,r,s.imported),o+=s.skipped,i.push(...s.warnings)}if(a===0||n.length===0)return{filesRead:e.length,examplesImported:0,skipped:o,sessionsImported:0,warnings:i,sessions:[]};let s=new Date(t.now??Date.now()).toISOString(),c=t.title?.trim(),l=n.map((e,r)=>{let i=new Date((t.now??Date.now())+r).toISOString(),a=e.meta,o=c&&n.length>1?`${c} (${r+1}/${n.length})`:c||`Imported fine-tune session ${r+1}`;return{id:a?.sessionId?`${a.sessionId}-import-${r}`:`imported-finetune-${s.replace(/[:.]/g,`-`)}-${r}`,title:a?.title?.trim()||o,model:a?.model??t.model??ue,thinkingLevel:a?.thinkingLevel??t.thinkingLevel??D.reasoningLevel,createdAt:i,lastModified:i,messages:it(e)}});return{filesRead:e.length,examplesImported:a,skipped:o,sessionsImported:l.length,warnings:i,sessions:l}}async function ot(e,t={}){let[{sessionPreview:n,sessionSearchText:r,sessionUsage:i},{getInitPromise:a,sessions:o},{resolveAvailableChatModel:s},{loadKeatingUiSettings:c}]=await Promise.all([l(()=>import(`./index-C8C76R86.js`).then(e=>e.rn),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15])),l(()=>import(`./index-C8C76R86.js`).then(e=>e.Gt),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15])),l(()=>import(`./index-C8C76R86.js`).then(e=>e.kn),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15])),l(()=>import(`./index-C8C76R86.js`).then(e=>e.nt),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]))]);await a();let u=await s(t.model??ue),d=t.thinkingLevel??c().reasoningLevel,f=at(e,{...t,model:u,thinkingLevel:d});for(let e of f.sessions){let t={id:e.id,title:e.title,createdAt:e.createdAt,lastModified:e.lastModified,messageCount:e.messages.length,usage:i(e.messages),thinkingLevel:e.thinkingLevel,...x(e.model),preview:n(e.messages),searchText:r(e.messages)};await o.save(e,t)}return f.sessions.length>0&&typeof window<`u`&&window.dispatchEvent(new CustomEvent(`keating:sessions-changed`)),f}function st(e){return e.trim()?e.trim().split(`
13
+ `).filter(Boolean).length:0}async function Je(e,t){t.keepAllResponses&&(t={...t,minAssistantChars:1,maxAssistantChars:void 0,maxRecords:void 0,deduplicate:!1});let n=(e,t)=>{if(e!==void 0&&(!Number.isInteger(e)||e<1))throw Error(`${t} must be a positive integer.`)};if(n(t.maxAssistantChars,`Maximum assistant characters`),n(t.maxRecords,`Maximum records`),t.maxAssistantChars!==void 0&&t.maxAssistantChars<t.minAssistantChars)throw Error(`Maximum assistant characters must be at least the minimum.`);let r=t.validationPercent??10;if(!Number.isFinite(r)||r<0||r>50)throw Error(`Validation percentage must be between 0 and 50.`);let i=[],a=[],o=new Map,s={redactions:0,skipped:0},c=t.source===`all`||t.source===`artifacts`,l=t.source===`all`||t.source===`sessions`,u=t.source===`all`||t.source===`sandbox`,d=``,f=0,p=0,m=0,h=0;if(c){for(let n of e.plans??[])f+=1,Y(i,n.metadata?.type===`quiz`?`quiz`:`plan`,n.topic,n.content,t,s);for(let n of e.maps??[])f+=1,Y(i,`map`,n.topic,n.mmdContent,t,s);for(let n of e.animations??[])f+=1,Y(i,`animation`,n.topic,n.storyboard,t,s);for(let n of e.verifications??[])f+=1,Y(i,`verification`,n.topic,n.checklist,t,s)}if(l){let n=e.persona?q(e.persona,t.redact):{text:``,count:0};d=n.text,s.redactions+=n.count;for(let n of e.sessions??[]){p+=1;let e=Fe(n,t,s);o.set(n.id,e),Ie(i,e,n)}}if(u){let n=Le(i,e.sandbox,t,s);m=n.filesRead,h=n.commitsRead}let g=i.filter(e=>e.output.length>=t.minAssistantChars&&(t.maxAssistantChars===void 0||e.output.length<=t.maxAssistantChars)),_=i.length-g.length,v=t.deduplicate?Ge(g):{examples:g,duplicateCount:0},y=Math.max(0,v.examples.length-(t.maxRecords??v.examples.length));v.examples=v.examples.slice(0,t.maxRecords),s.skipped+=_+v.duplicateCount+y;let b=new Map;for(let e of v.examples){if(e.source!==`session`)continue;let t=JSON.stringify([e.sessionId,e.messageTimestamp,e.output]);b.set(t,(b.get(t)??0)+1)}let x=new Set(b.keys()),S=new Set;a.length=0;let C=new Set;for(let t of e.sessions??[]){let n=o.get(t.id);if(!n)continue;let r=[],i=[];for(let e of n.messages){if(e.role===`user`){i.push(e);continue}let n=JSON.stringify([t.id,e.timestamp,e.content]),a=b.get(n)??0;a>0&&(b.set(n,a-1),r.push(...i,e)),i=[]}r.length>0&&r.push(...i),r.length!==n.messages.length&&S.add(t.id),n.messages=r,n.pairMessages=r,a.push(...H({sessionId:t.id,title:t.title,persona:d,messages:r,feedback:e.feedback??[],quizResults:e.quizResults??[],usedFeedbackIds:C}))}t.judge&&a.length>0&&Te(a,await t.judge(a));let w=a.filter(e=>e.signals.judge).length,ee=new Map;for(let e of a){let t=He(e.sessionId,e.messageTimestamp);t&&ee.set(t,e)}let T=v.examples.filter(e=>{let n=He(e.sessionId,e.messageTimestamp),r=n?ee.get(n):void 0;return t.keepAllResponses||!(r?.scored&&r.reward<.7)}),E=We(v.examples,a,d,r),D=T.filter(e=>e.source!==`session`).map(e=>{let t=e.messages??[{role:`user`,content:e.instruction},{role:`assistant`,content:e.output}];return{source:e.source,messages:t,envelope:{source:`keating-training-export`,training:{id:e.id,kind:e.kind,topic:e.topic,quality:e.source===`artifact`?{status:`unscored`,recommendedForSft:!1,scored:!1}:{status:`reference`,recommendedForSft:!1,scored:!1}}}}});for(let n of e.sessions??[]){let e=o.get(n.id);if(!e)continue;let r=Pe(n,e,t,d,ee);r&&(S.has(n.id)&&r.envelope&&(r.envelope.messages=void 0),D.push(r))}let O=t.keepAllResponses?`${JSON.stringify({schemaVersion:1,kind:`keating-training-source-snapshot`,source:t.source,...c?{plans:e.plans??[],maps:e.maps??[],animations:e.animations??[],verifications:e.verifications??[],benchmarks:e.benchmarks??[],evolutions:e.evolutions??[]}:{},...l?{sessions:e.sessions??[],feedback:e.feedback??[],quizResults:e.quizResults??[],persona:e.persona??``}:{},...u?{sandbox:e.sandbox??null}:{}},(e,n)=>{if(typeof n!=`string`)return n;let r=q(n,t.redact);return s.redactions+=r.count,r.text},2)}\n`:void 0,k={sourceDataJson:O,exampleCount:T.length,recordCount:E.records.length,skippedCount:s.skipped,redactionCount:s.redactions,manifestJson:``};if((t.format===`chatml`||t.format===`both`)&&(k.chatmlJsonl=Re(D)),(t.format===`alpaca`||t.format===`both`)&&(k.alpacaJsonl=ze(T)),k.canonicalJsonl=X(E.records.map(e=>I.parse(e))),a.length>0){let n=Ee(a),r=(e.sessions??[]).flatMap(e=>{if(!e.generatedAlternative||!e.parentSessionId||e.responsePreference!==`original`&&e.responsePreference!==`alternative`||typeof e.alternativeForMessageTimestamp!=`number`)return[];let n=o.get(e.parentSessionId),r=o.get(e.id);if(!n||!r)return[];let i=[...e.messages].reverse().find(e=>e.role===`assistant`);if(!i||!x.has(JSON.stringify([e.id,i.timestamp,q(J(i).trim(),t.redact).text])))return[];let a=B({originalMessages:n.messages,alternativeMessages:r.messages,originalMessageTimestamp:e.alternativeForMessageTimestamp,preference:e.responsePreference,persona:d});return a?[a]:[]}),i=[...G(a),...r],s=K(a);k.rewardStats=Ae(a),k.rewardedJsonl=X(a.map(e=>({id:`session-${Z(e.sessionId)}-${e.messageTimestamp??`untimed`}`,sessionId:e.sessionId,topic:e.topic,messageTimestamp:e.messageTimestamp,messages:[...e.context,{role:`assistant`,content:e.completion}],reward:e.reward,signals:e.signals,scored:e.scored}))),k.ktoJsonl=X(n),k.preferenceJsonl=X(De(i)),k.dpoTextJsonl=X(ke(i)),k.grpoPromptsJsonl=X(s)}let A=Ke(E.records),te=E.records.filter(e=>e.split===`train`).length,ne=E.records.length-te,j=v.examples.length-T.length,M=[...t.keepAllResponses?[`Keep everything is enabled: short, error-like, and low-scoring text responses are retained in compatibility exports. Quality labels remain descriptive, not an endorsement. The source snapshot preserves original message structures, including non-text and empty messages; text training files cannot represent every source item.`]:[],`Compatibility files combine partitions. Use the canonical record split field to construct training and validation datasets; train.* filenames do not enforce a held-out partition.`,...t.judge&&w<a.length?[`Judge scored ${w} of ${a.length} eligible responses. Missing scores may reflect failed requests, invalid responses, or the scoring limit; they are not quality judgments.`]:[],...T.length===0?[`No supervised fine-tuning examples were generated.`]:[],...A.unscored>0?[`${A.unscored} captured responses have no quality signal; review them before high-stakes training.`]:[],...A.reference>0?[`${A.reference} sandbox records are reference material, not recommended SFT examples.`]:[],...r>0&&ne===0&&E.records.length>=2?[`The deterministic source-group split produced no validation records for this small dataset.`]:[]];return k.manifestJson=`${JSON.stringify({schemaVersion:2,mode:`finetune`,generatedAt:new Date(t.now??Date.now()).toISOString(),source:t.source,format:t.format,redactionEnabled:t.redact,keepAllResponses:t.keepAllResponses??!1,sourceSnapshotIncluded:!!O,minimumAssistantCharacters:t.minAssistantChars,maximumAssistantCharacters:t.maxAssistantChars??null,maximumRecords:t.maxRecords??null,validationPercent:r,deduplicationEnabled:t.deduplicate??!1,recordSelection:`Source order, after character bounds and optional exact prompt/completion deduplication; limits count canonical records before SFT quality exclusions.`,judgeScoringEnabled:!!t.judge,judgeScoring:t.judge?{model:t.judgeModel??null,...t.judgeThinkingLevel?{thinkingLevel:t.judgeThinkingLevel}:{},eligible:a.length,scored:w,unscored:a.length-w}:null,recommendedDataset:`data/keating.training.jsonl`,splitStrategy:`Stable source-group hash (${100-r}% train / ${r}% validation)`,counts:{artifactsRead:f,sessionsRead:p,sandboxFilesRead:m,sandboxCommitsRead:h,examplesWritten:T.length,canonicalRecords:E.records.length,trainRecords:te,validationRecords:ne,sftExcluded:j,lengthExcluded:_,limitExcluded:y,duplicatesRemoved:v.duplicateCount+E.duplicateCount,skipped:s.skipped,redactions:s.redactions,rewardedLines:qe(k.rewardedJsonl),ktoLines:qe(k.ktoJsonl),preferenceLines:qe(k.preferenceJsonl),dpoTextLines:qe(k.dpoTextJsonl),grpoPromptLines:qe(k.grpoPromptsJsonl)},quality:A,rewardStats:k.rewardStats,warnings:M},null,2)}\n`,k}async function Ye(){let e=await _.getAllMetadata(),t=await Promise.all(e.map(async e=>_.loadSession(e.id))),[n,r,i,a,o,s,c,l,u,d]=await Promise.all([E.getLessonPlans(),E.getLessonMaps(),E.getAnimations(),E.getVerifications(),E.getBenchmarks(),E.getEvolutions(),pe().catch(()=>void 0),E.getFeedback(),E.getQuizResults(),Promise.resolve(N())]);return{plans:n,maps:r,animations:i,verifications:a,benchmarks:o,evolutions:s,sessions:t.filter(Boolean),sandbox:c,feedback:l,quizResults:u,persona:d}}function Xe(e,t=`auto`){return t===`auto`?e.toLowerCase().includes(`alpaca`)?`alpaca`:`chatml`:t}function Ze(e,t){let n=[],r=[],i=0,a=e.split(/\r?\n/);for(let e=0;e<a.length;e+=1){let o=a[e].trim();if(o)try{n.push(JSON.parse(o))}catch{i+=1,r.push(`Skipped invalid JSONL line ${e+1} in ${t}.`)}}return{values:n,skipped:i,warnings:r}}function Qe(e){let t=e&&typeof e==`object`?e:null;if(!t)return null;let n=t.role===`system`||t.role===`user`||t.role===`assistant`?t.role:null,r=typeof t.content==`string`?t.content.trim():``;return n&&r?{role:n,content:r}:null}function $e(e){let t=e&&typeof e==`object`?e:null;if(!t)return;let n={};return typeof t.title==`string`&&(n.title=t.title),typeof t.thinkingLevel==`string`&&(n.thinkingLevel=t.thinkingLevel),typeof t.sessionId==`string`&&(n.sessionId=t.sessionId),typeof t.source==`string`&&(n.source=t.source),t.model&&typeof t.model==`object`&&(n.model=t.model),Array.isArray(t.messages)&&(n.rawMessages=t.messages),Object.keys(n).length>0?n:void 0}function et(e){let t=[],n=0;for(let r of e){let e=r&&typeof r==`object`?r:null,i=Array.isArray(e?.messages)?e.messages.map(Qe).filter(e=>!!e):[];if(i.some(e=>e.role===`user`)&&i.some(e=>e.role===`assistant`)){let n=$e(e?.keating);t.push(n?{messages:i,meta:n}:{messages:i})}else n+=1}return{imported:t,skipped:n,warnings:[]}}function tt(e){let t=[],n=0;for(let r of e){let e=r&&typeof r==`object`?r:null,i=typeof e?.instruction==`string`?e.instruction.trim():``,a=typeof e?.input==`string`?e.input.trim():``,o=typeof e?.output==`string`?e.output.trim():``;if(!i||!o){n+=1;continue}t.push({messages:[{role:`user`,content:a?`${i}\n\n${a}`:i},{role:`assistant`,content:o}]})}return{imported:t,skipped:n,warnings:[]}}function nt(e){return JSON.stringify(e.messages.map(e=>[e.role,e.content]))}function rt(e,t,n){let r=0;for(let i of n){let n=nt(i);t.has(n)||(t.add(n),e.push(i),r+=1)}return r}function it(e){return e.meta?.rawMessages&&e.meta.rawMessages.length>0?e.meta.rawMessages:e.messages.map(e=>({role:e.role,content:[{type:`text`,text:e.content}]}))}function at(e,t={}){let n=[],r=new Set,i=[],a=0,o=0;for(let t of e){if(!t.name.toLowerCase().endsWith(`.jsonl`)){i.push(`Skipped non-JSONL file: ${t.name}.`),o+=1;continue}let e=Ze(t.text,t.name);o+=e.skipped,i.push(...e.warnings);let s=Xe(t.name,t.format)===`alpaca`?tt(e.values):et(e.values);a+=rt(n,r,s.imported),o+=s.skipped,i.push(...s.warnings)}if(a===0||n.length===0)return{filesRead:e.length,examplesImported:0,skipped:o,sessionsImported:0,warnings:i,sessions:[]};let s=new Date(t.now??Date.now()).toISOString(),c=t.title?.trim(),l=n.map((e,r)=>{let i=new Date((t.now??Date.now())+r).toISOString(),a=e.meta,o=c&&n.length>1?`${c} (${r+1}/${n.length})`:c||`Imported fine-tune session ${r+1}`;return{id:a?.sessionId?`${a.sessionId}-import-${r}`:`imported-finetune-${s.replace(/[:.]/g,`-`)}-${r}`,title:a?.title?.trim()||o,model:a?.model??t.model??ue,thinkingLevel:a?.thinkingLevel??t.thinkingLevel??D.reasoningLevel,createdAt:i,lastModified:i,messages:it(e)}});return{filesRead:e.length,examplesImported:a,skipped:o,sessionsImported:l.length,warnings:i,sessions:l}}async function ot(e,t={}){let[{sessionPreview:n,sessionSearchText:r,sessionUsage:i},{getInitPromise:a,sessions:o},{resolveAvailableChatModel:s},{loadKeatingUiSettings:c}]=await Promise.all([l(()=>import(`./index-DCgpDQKf.js`).then(e=>e.rn),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15])),l(()=>import(`./index-DCgpDQKf.js`).then(e=>e.Gt),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15])),l(()=>import(`./index-DCgpDQKf.js`).then(e=>e.kn),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15])),l(()=>import(`./index-DCgpDQKf.js`).then(e=>e.nt),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]))]);await a();let u=await s(t.model??ue),d=t.thinkingLevel??c().reasoningLevel,f=at(e,{...t,model:u,thinkingLevel:d});for(let e of f.sessions){let t={id:e.id,title:e.title,createdAt:e.createdAt,lastModified:e.lastModified,messageCount:e.messages.length,usage:i(e.messages),thinkingLevel:e.thinkingLevel,...x(e.model),preview:n(e.messages),searchText:r(e.messages)};await o.save(e,t)}return f.sessions.length>0&&typeof window<`u`&&window.dispatchEvent(new CustomEvent(`keating:sessions-changed`)),f}function st(e){return e.trim()?e.trim().split(`
14
14
  `).length:0}function Q(e,t,n,r){r&&e.push({path:t,purpose:n,content:r,records:st(r)})}function ct(){return`${JSON.stringify(_e(),null,2)}\n`}function lt(e,t,n){let r=e.counts??{},i=e.quality??{},a=t.map(e=>`| \`${e.path}\` | ${e.records??`n/a`} | ${e.purpose} |`).join(`
15
15
  `);return`# Keating training export
16
16
 
@@ -0,0 +1,35 @@
1
+ import{s as e}from"./rolldown-runtime-BG2f4sTM.js";import{T as t}from"./syntax-highlighter-Buac5fmw.js";import{$t as n,Ct as r,Dt as i,Kt as a,N as o,Qt as s,Ut as c,Wt as l,Zt as u,en as d,nn as f,on as p,sn as m,wt as h}from"./index-DCgpDQKf.js";import{t as g}from"./loader-circle-NSGC9iIj.js";import{t as _}from"./arrow-left-DwKFZ0Rg.js";import{o as v,s as y}from"./ModelSelector-B_EaHvVz.js";import{a as b,b as x,d as S,g as C,h as w,m as T,p as E,r as D,s as O,t as k,u as A,y as j}from"./trajectory-store-C3qzwrr6.js";import{a as ee,i as M,n as te,r as ne,t as re}from"./trajectory-artifacts-EvNqJEHH.js";import{a as N,r as P}from"./browser-B8t9zyUd.js";import{a as ie,i as F,n as I,r as ae,t as oe}from"./use-review-passes-DmWsvYdF.js";import{a as se,i as L,r as R,t as ce}from"./TrajectoryReviewWorkspace-DSn96Dxb.js";var z=e(t(),1),B={raw:`data/reviews/trajectory-reviews.jsonl`,chatml:`data/sft/review-corrections.chatml.jsonl`,alpaca:`data/sft/review-corrections.alpaca.jsonl`,dpoChat:`data/preferences/review.dpo.chat.jsonl`,dpoText:`data/preferences/review.dpo.text.jsonl`,kto:`data/preferences/review.kto.jsonl`,artifactRevisions:`data/artifacts/review-revisions.jsonl`};function V(e,t){if(typeof e==`string`){let n=x(e);return n!==e&&(t.count+=1),n}if(Array.isArray(e))return e.map(e=>V(e,t));if(e&&typeof e==`object`){let n={};for(let[r,i]of Object.entries(e))n[r]=V(i,t);return n}return e}function H(e){return Array.isArray(e)?e.map(H):!e||typeof e!=`object`?e:Object.fromEntries(Object.entries(e).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>[e,H(t)]))}function le(e,t){return`${JSON.stringify(H(V(e,t)))}\n`}function U(e,t){return e.map(e=>le(e,t)).join(``)}function W(e){return e.trim()?e.trim().split(`
2
+ `).length:0}function G(e,t){return t===`[REDACTED]`&&e!==`[REDACTED]`?1:Array.isArray(e)&&Array.isArray(t)?e.reduce((e,n,r)=>e+G(n,t[r]),0):e&&t&&typeof e==`object`&&typeof t==`object`?Object.entries(e).reduce((e,[n,r])=>e+G(r,t[n]),0):0}function ue(e,t){let n=j(e);return t.count+=G(e,n),n}function K(e,t){return(e.createdAt??0)-(t.createdAt??0)||e.id.localeCompare(t.id)}function de(e,t){return{...e,annotations:[...e.annotations].sort(K),candidates:[...e.candidates].sort(K),modelPools:[...e.modelPools].sort((e,t)=>e.id.localeCompare(t.id)),artifacts:[...e.artifacts].sort(K).map(e=>e.metadata?{...e,metadata:ue(e.metadata,t)}:e)}}function fe(e){if(e.generation)return e.generation.cost.known?e.generation.cost.usd:void 0;if(typeof e.usage?.costUsd==`number`)return e.usage.costUsd;let t=e.usage?.inputTokens,n=e.usage?.outputTokens;if(!(typeof t!=`number`&&typeof n!=`number`))return((t??0)*e.model.cost.input+(n??0)*e.model.cost.output)/1e6}function pe(e,t){let{candidate:n,pool:r}=e,i=n.generation?.run.pool,a=n.generation?.run.requestedModel??n.model,o=fe(n);return{candidateId:n.id,reviewId:n.reviewId,sessionId:n.sessionId,targetKey:n.targetKey,annotationIds:n.annotationIds.filter(e=>t.has(e)).sort(),pool:{id:i?.id??n.poolId,name:i?.name??r?.name,snapshot:i},model:a,pricingUsdPerMillionTokens:a.cost,usage:n.usage,costUsd:o,cost:n.generation?.cost??{known:o!==void 0,usd:o,provenance:typeof n.usage?.costUsd==`number`?`stream-usage`:o===void 0?`unknown`:`catalog-rates`},generation:n.generation}}function me(e){if(e.review.status!==`final`)return[];let t=new Map(e.modelPools.map(e=>[e.id,e])),n=new Map(e.candidates.map(e=>[e.id,e])),r=new Set,i=[];for(let[a,o]of Object.entries(e.review.selectedCandidateIds).sort()){let e=n.get(o);!e||r.has(e.id)||e.targetKey!==a||e.state!==`completed`||!e.preferred||!e.content?.trim()||(r.add(e.id),i.push({candidate:e,pool:t.get(e.poolId)}))}return i.sort((e,t)=>K(e.candidate,t.candidate))}function he(e){return e===`system`||e===`user`||e===`assistant`?e:e===`tool`||e===`toolResult`?`tool`:`user`}function ge(e,t){if(t.target.kind!==`response`||!e||e.id!==t.sessionId)return null;let n=t.target,r=e.messages.map((t,n)=>({message:t,index:n,anchor:A(e.id,t,n)})),i=r.find(e=>e.anchor.id===n.messageId);if(!i){let e=r.filter(e=>e.anchor.role===`assistant`&&(n.messageTimestamp===void 0||e.anchor.timestamp===n.messageTimestamp)&&e.anchor.text===n.originalContent.trim());e.length===1&&([i]=e)}if(!i||i.anchor.role!==`assistant`)return null;let a=[];e.systemPrompt?.trim()&&!r.slice(0,i.index).some(e=>e.anchor.role===`system`)&&a.push({role:`system`,content:e.systemPrompt.trim()});for(let e of r.slice(0,i.index)){let t=M(E(e.message));t&&a.push({role:he(e.message.role),content:t})}return a.length>0?a:null}function q(e){return e.map(e=>{switch(e.role){case`system`:return`System: ${e.content}`;case`user`:return`User: ${e.content}`;case`assistant`:return`Assistant: ${e.content}`;case`tool`:return`Tool: ${e.content}`}}).join(`
3
+
4
+ `)}function _e(e){let t=-1;for(let n=e.length-1;n>=0;--n)if(e[n].role===`user`){t=n;break}return t<0?{instruction:`Continue the reviewed tutoring trajectory.`,input:q(e)}:{instruction:e[t].content,input:q(e.filter((e,n)=>n!==t))}}function ve(e){let t=e.files.map(e=>`| \`${e.path}\` | ${e.records??`n/a`} | ${e.purpose} |`).join(`
5
+ `);return`# Keating trajectory review export
6
+
7
+ This archive preserves one redacted review snapshot and separates human-approved training derivatives from draft material. Start with \`${B.raw}\` for audit and provenance.
8
+
9
+ ## Approval boundary
10
+
11
+ - Raw review data includes draft and final annotations, every candidate, model pools, prompts, and generation outcomes.
12
+ - SFT, DPO, KTO, and artifact-revision files include only completed candidates that were both selected and marked preferred when the review was final.
13
+ - Response training records are omitted unless Keating can match the reviewed assistant turn and reconstruct its preceding session context.
14
+ - KTO contains two records per approved correction: the chosen correction is desirable and the original response is undesirable.
15
+
16
+ ## Counts
17
+
18
+ - Final review: ${e.review.status===`final`?`yes`:`no`}
19
+ - Approved response corrections: ${e.counts.approvedCorrections}
20
+ - Approved artifact revisions: ${e.counts.approvedArtifactRevisions}
21
+ - Redacted values across exported data: ${e.counts.redactions}
22
+ - Skipped selected candidates: ${e.counts.skippedApprovedCandidates}
23
+
24
+ ## Files
25
+
26
+ | Path | Records | Use |
27
+ | --- | ---: | --- |
28
+ ${t}
29
+
30
+ ## Privacy and provenance
31
+
32
+ Secret-shaped values are replaced with \`[REDACTED]\` in every data file using Keating's security redaction helper. Pattern-based redaction cannot guarantee removal of every personal or confidential value, so inspect the raw review JSONL before sharing it. Training records retain candidate, annotation, model, pool, token-usage, and cost provenance.
33
+ `}function ye(e){return new Date(e).toISOString().replace(/[:.]/g,`-`)}function be(e,t={}){let n=t.now??Date.now(),r=new Date(n).toISOString(),{snapshot:i,session:a}=e,o={count:0},s=new Set(i.annotations.filter(e=>e.status===`final`).map(e=>e.id)),c=me(i),l=c.filter(({candidate:e})=>e.target.kind===`response`),u=c.filter(({candidate:e})=>e.target.kind===`artifact`),d=[];i.review.status!==`final`&&d.push(`This review is still a draft; no training or approved artifact revision records were emitted.`);let f=[];for(let e of l){let t=ge(a,e.candidate);if(!t){d.push(`Selected response candidate ${e.candidate.id} was skipped because its prompt context could not be reconstructed.`);continue}f.push({approved:e,prompt:t,chosen:e.candidate.content.trim(),rejected:e.candidate.target.kind===`response`?e.candidate.target.originalContent.trim():``,provenance:pe(e,s)})}let p=f.map(e=>({messages:[...e.prompt,{role:`assistant`,content:e.chosen}],keating:{source:`trajectory-review`,quality:{status:`accepted`,recommendedForSft:!0,humanApproved:!0},provenance:e.provenance}})),m=f.map(e=>({..._e(e.prompt),output:e.chosen,keating:{source:`trajectory-review`,quality:{status:`accepted`,recommendedForSft:!0,humanApproved:!0},provenance:e.provenance}})),h=f.map(e=>({prompt:e.prompt,chosen:e.chosen,rejected:e.rejected,keating:{source:`trajectory-review`,provenance:e.provenance}})),g=f.map(e=>({prompt:q(e.prompt),chosen:e.chosen,rejected:e.rejected,keating:{source:`trajectory-review`,provenance:e.provenance}})),_=f.flatMap(e=>[{prompt:e.prompt,completion:e.chosen,label:!0,keating:{source:`trajectory-review`,provenance:e.provenance}},{prompt:e.prompt,completion:e.rejected,label:!1,keating:{source:`trajectory-review`,provenance:e.provenance}}]),v=u.map(e=>{let t=e.candidate;if(t.target.kind!==`artifact`)throw Error(`Expected an artifact review candidate.`);return{artifact:t.target.artifact,topic:t.target.topic,originalContent:t.target.originalContent,revisedContent:t.content.trim(),materializedArtifactId:t.materializedArtifactId,provenance:pe(e,s)}}),y=le(de(i,o),o),b=U(p,o),x=U(m,o),S=U(h,o),C=U(g,o),w=U(_,o),T=U(v,o),E=[{path:B.raw,purpose:`Complete redacted review snapshot, including drafts and all generation candidates.`,content:y,records:W(y)},{path:B.chatml,purpose:`Human-approved response corrections for ChatML SFT.`,content:b,records:W(b)},{path:B.alpaca,purpose:`Human-approved response corrections for Alpaca SFT.`,content:x,records:W(x)},{path:B.dpoChat,purpose:`Human-approved chosen correction versus rejected original, with chat-array prompts.`,content:S,records:W(S)},{path:B.dpoText,purpose:`Human-approved chosen correction versus rejected original, with rendered text prompts.`,content:C,records:W(C)},{path:B.kto,purpose:`Desirable correction and undesirable original records for KTO.`,content:w,records:W(w)},{path:B.artifactRevisions,purpose:`Human-approved artifact revisions with immutable source and generation provenance.`,content:T,records:W(T)}],D=[{path:`manifest.json`,purpose:`Machine-readable archive contract, counts, warnings, and file catalog.`},{path:`README.md`,purpose:`Dataset card, approval boundary, privacy notes, and usage guidance.`},...E.map(({content:e,...t})=>t)],O=Object.keys(i.review.selectedCandidateIds).length,k={schemaVersion:1,kind:`keating-trajectory-review-archive`,generatedAt:r,redactionEnabled:!0,recommendedDataset:B.raw,review:{status:i.review.status,verdict:i.review.verdict},counts:{annotations:i.annotations.length,finalAnnotations:s.size,capturedArtifacts:i.artifacts.length,responseCandidates:i.candidates.filter(e=>e.target.kind===`response`).length,artifactCandidates:i.candidates.filter(e=>e.target.kind===`artifact`).length,approvedCorrections:f.length,approvedArtifactRevisions:v.length,chatmlLines:p.length,alpacaLines:m.length,dpoChatLines:h.length,dpoTextLines:g.length,ktoLines:_.length,redactions:o.count,skippedApprovedCandidates:Math.max(0,O-f.length-v.length)},warnings:d,files:D},A=[{path:`manifest.json`,purpose:D[0].purpose,content:`${JSON.stringify(H(k),null,2)}\n`},{path:`README.md`,purpose:D[1].purpose,content:ve(k)},...E],j=new Date(n);return{bytes:N(Object.fromEntries(A.map(e=>[e.path,[P(e.content),{mtime:j}]])),{level:6}),filename:`keating-trajectory-review-${ye(n)}.zip`,manifest:k,files:D}}function xe(e){if(typeof document>`u`)throw Error(`Trajectory review downloads require a browser document.`);let t=new Uint8Array(e.bytes.byteLength);t.set(e.bytes);let n=URL.createObjectURL(new Blob([t.buffer],{type:`application/zip`})),r=document.createElement(`a`);r.href=n,r.download=e.filename,r.style.display=`none`,document.body.appendChild(r),r.click(),r.remove(),setTimeout(()=>URL.revokeObjectURL(n),0)}function Se(e,t){if(t.target.kind!==`response`)return-1;let n=t.target,r=e.messages.flatMap((t,n)=>{let r=t;return r.role===`assistant`?[{ordinal:n,timestamp:r.timestamp,anchor:A(e.id,t,n)}]:[]}),i=r.find(e=>e.anchor.id===n.messageId);if(i)return i.ordinal;let a=r.filter(e=>(n.messageTimestamp===void 0||e.timestamp===n.messageTimestamp)&&e.anchor.text===n.originalContent);return a.length===1?a[0].ordinal:-1}function Ce(e){return{input:e.usage?.inputTokens??0,output:e.usage?.outputTokens??0,cacheRead:0,cacheWrite:0,totalTokens:e.usage?.totalTokens??(e.usage?.inputTokens??0)+(e.usage?.outputTokens??0),cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:e.usage?.costUsd??0}}}function we(e,t,r=new Date().toISOString(),i=u()){if(t.target.kind!==`response`)throw Error(`Only response candidates can be inserted into a session.`);if(t.state!==`completed`||!t.content?.trim())throw Error(`Only a completed response candidate can be inserted.`);let a=Se(e,t);if(a<0)throw Error(`The reviewed assistant turn is no longer present in this session.`);let o=S(t.model),c=Math.max(Date.parse(r),(t.target.messageTimestamp??0)+1),l={role:`assistant`,content:[{type:`text`,text:t.content.trim()}],api:o.api,provider:o.provider,model:o.id,usage:Ce(t),stopReason:`stop`,timestamp:c},p=[...structuredClone(e.messages.slice(0,a)),l],m={id:i,title:`${e.title||`Session`} (review revision)`,parentSessionId:e.id,forkedAt:r,forkedFromMessageTimestamp:t.target.messageTimestamp,createdAt:r,lastModified:r,aiGeneratedTitle:!1};return{data:{...m,model:o,thinkingLevel:e.thinkingLevel,messages:p},metadata:{...m,messageCount:p.length,usage:f(p),thinkingLevel:e.thinkingLevel,...s(o),preview:n(p),searchText:d(p)}}}async function Te(e,t,n){let r=we(e,t);await n.sessions.save(r.data,r.metadata);let i=await n.reviews.saveCandidate({...t,insertedSessionId:r.data.id});return typeof window<`u`&&window.dispatchEvent(new CustomEvent(`keating:sessions-changed`,{detail:{sessionId:r.data.id,parentSessionId:e.id,reviewRevision:!0}})),{...r,candidate:i}}function J(e){return e instanceof Error?e.message:String(e)}function Ee(e){let t=(0,z.useMemo)(()=>k(),[]),[n,r]=(0,z.useState)(null),[i,o]=(0,z.useState)(null),[s,u]=(0,z.useState)([]),[d,f]=(0,z.useState)([]),[p,m]=(0,z.useState)([]),[h,g]=(0,z.useState)([]),[_,v]=(0,z.useState)(!0),[y,x]=(0,z.useState)({saving:!1,generating:!1,exporting:!1}),[S,C]=(0,z.useState)(null),E=(0,z.useRef)(e);E.current=e;let D=(0,z.useRef)(0),A=(0,z.useRef)(0),j=(0,z.useRef)(null),M=(0,z.useRef)(Promise.resolve()),N=(0,z.useRef)(0),P=(0,z.useCallback)((e,t)=>e===D.current&&t===E.current,[]),I=(0,z.useCallback)(async()=>{let n=e,i=++D.current;v(!0),C(null);try{await c();let s=await a.loadSession(e);if(!s)throw Error(`This session is not available in local storage.`);let d=await t.getOrCreateReview(e),[p,h,_,v,y]=await Promise.all([t.listAnnotations(d.id),t.listCandidates(d.id),t.listModelPools(),t.listArtifactVersions(d.id),te(l,d.id,e,Date.now(),s.messages)]),b=[],x=0;for(let e of v){if(e.media&&x>=re.maxImages)continue;let t=await ee(e);t&&(b.push(t),t.media&&(x+=1))}v=b,_.length===0&&(_=await Promise.all(O(s.model).map(e=>t.saveModelPool(e))));let S=new Set(v.map(e=>e.id)),C=y.filter(e=>!S.has(e.id));if(C.length>0&&await Promise.all(C.map(e=>t.saveArtifactVersion(e))),v=[...v,...C].sort((e,t)=>t.createdAt-e.createdAt||e.id.localeCompare(t.id)),!P(i,n))return;r(s),o(d),u(p),g(h),m(_),f(v)}catch(e){P(i,n)&&C(J(e))}finally{P(i,n)&&v(!1)}},[P,e,t]);return(0,z.useEffect)(()=>(j.current?.abort(),A.current+=1,r(null),o(null),u([]),f([]),m([]),g([]),x({saving:!1,generating:!1,exporting:!1}),I(),()=>{j.current?.abort(),A.current+=1,D.current+=1}),[I]),{session:n,review:i,annotations:s,artifacts:d,modelPools:p,candidates:h,loading:_,busy:y,error:S,reload:I,saveReview:(0,z.useCallback)(n=>{let r=D.current,i=e;N.current+=1,x(e=>({...e,saving:!0})),C(null);let a=M.current.then(()=>t.saveReview(n));return M.current=a.then(()=>void 0,()=>void 0),a.then(e=>(P(r,i)&&o(e),e),e=>{throw P(r,i)&&C(J(e)),e}).finally(()=>{--N.current,P(r,i)&&N.current===0&&x(e=>({...e,saving:!1}))})},[P,e,t]),saveAnnotation:(0,z.useCallback)(async n=>{if(!i)throw Error(`The trajectory review has not loaded yet.`);let r=D.current,a=e,o=n.id?s.find(e=>e.id===n.id):void 0,c=Date.now(),l={schemaVersion:1,id:o?.id??b(`annotation`),reviewId:i.id,sessionId:i.sessionId,target:n.target,targetKey:T(n.target),kind:n.kind,category:n.category.trim()||`pedagogy`,severity:n.severity,note:n.note.trim(),pedagogicalImpact:n.pedagogicalImpact?.trim()||void 0,suggestedAlternative:n.suggestedAlternative?.trim()||void 0,authorship:n.authorship??o?.authorship??`human`,fieldAuthorship:n.fieldAuthorship??o?.fieldAuthorship,revision:n.revision??o?.revision,status:n.status??o?.status??`draft`,createdAt:o?.createdAt??c,updatedAt:c};if(!l.note)throw Error(`An annotation needs a note.`);let d=await t.saveAnnotation(l);return P(r,a)&&u(e=>[...e.filter(e=>e.id!==d.id),d].sort((e,t)=>e.updatedAt-t.updatedAt)),d},[s,P,i,e,t]),deleteAnnotation:(0,z.useCallback)(async n=>{let r=D.current,i=e;await t.deleteAnnotation(n,e),P(r,i)&&u(e=>e.filter(e=>e.id!==n))},[P,e,t]),saveModelPool:(0,z.useCallback)(async e=>{let n=await t.saveModelPool(e);return m(e=>[...e.filter(e=>e.id!==n.id),n].sort((e,t)=>e.updatedAt-t.updatedAt)),n},[t]),deleteModelPool:(0,z.useCallback)(async e=>{await t.deleteModelPool(e),m(t=>t.filter(t=>t.id!==e))},[t]),generateCandidates:(0,z.useCallback)(async(r,a,o)=>{if(!i||!n)throw Error(`The trajectory review has not loaded yet.`);let c=D.current,l=e,u=p.find(e=>e.id===a);if(!u)throw Error(`Choose an available model pool first.`);let d=o?s.filter(e=>o.includes(e.id)):s.filter(e=>e.targetKey===T(r));j.current?.abort();let f=new AbortController;j.current=f;let m=++A.current;x(e=>({...e,generating:!0})),C(null);try{return await ie({reviewId:i.id,sessionId:e,target:r,trajectory:n.messages,annotations:d,pool:u,signal:f.signal,onCandidate:async e=>{if((m!==A.current||f.signal.aborted||!P(c,l))&&e.state!==`cancelled`)return;let n=await t.saveCandidate(e);m!==A.current||f.signal.aborted||!P(c,l)||g(e=>[...e.filter(e=>e.id!==n.id),n].sort((e,t)=>e.createdAt-t.createdAt))}})}catch(e){if(f.signal.aborted||m!==A.current||!P(c,l))return[];throw C(J(e)),e}finally{m===A.current&&(j.current=null,P(c,l)&&x(e=>({...e,generating:!1})))}},[s,P,p,i,n,e,t]),chooseCandidate:(0,z.useCallback)(async n=>{if(!i)throw Error(`The trajectory review has not loaded yet.`);let r=D.current,a=e,s=await t.chooseCandidate(i,n);P(r,a)&&(o(s.review),g(s.candidates))},[P,i,e,t]),insertCandidate:(0,z.useCallback)(async r=>{if(!n)throw Error(`The trajectory review has not loaded yet.`);let i=D.current,o=e,s=h.find(e=>e.id===r);if(!s)throw Error(`Review candidate not found.`);let c=await Te(n,s,{sessions:a,reviews:t});return P(i,o)&&g(e=>e.map(e=>e.id===c.candidate.id?c.candidate:e)),c.data.id},[h,P,n,e,t]),acceptArtifactRevision:(0,z.useCallback)(async n=>{let r=D.current,i=e,a=h.find(e=>e.id===n);if(!a||a.target.kind!==`artifact`||a.state!==`completed`||!a.content)throw Error(`Only a completed artifact candidate can be accepted.`);F(a.target);let o=a.target.artifact,s=d.find(e=>e.artifact.versionId===o.versionId&&e.artifact.contentHash===o.contentHash);if(!s)throw Error(`The frozen source artifact is no longer available in this review.`);let c=await w(a.content),l=ne(s,a.content,c,a.id);await t.saveArtifactVersion(l);let u=await t.saveCandidate({...a,materializedArtifactId:l.id});return P(r,i)&&(f(e=>[...e.filter(e=>e.id!==l.id),l]),g(e=>e.map(e=>e.id===u.id?u:e))),l},[d,h,P,e,t]),exportArchive:(0,z.useCallback)(async()=>{if(!n||!i)throw Error(`The trajectory review has not loaded yet.`);let r=D.current,a=e;x(e=>({...e,exporting:!0})),C(null);try{let e=be({snapshot:await t.exportSnapshot(i.id),session:{id:n.id,title:n.title,messages:n.messages}});P(r,a)&&xe(e)}catch(e){throw P(r,a)&&C(J(e)),e}finally{P(r,a)&&x(e=>({...e,exporting:!1}))}},[P,i,n,e,t])}}function De(e){let t=new Map;for(let n of e){let e=n;e.role!==`toolResult`||typeof e.toolCallId!=`string`||t.set(e.toolCallId,e.isError===!0?`failed`:`succeeded`)}return t}var Oe=/^data:([^;,]+)?(?:;base64)?,/i;function Y(e,t=new WeakSet){if(typeof e==`string`){let t=e.match(Oe);return t?`[embedded ${t[1]||`media`}; ${e.length.toLocaleString()} characters]`:e}return typeof e!=`object`||!e?e:t.has(e)?`[Circular]`:(t.add(e),Array.isArray(e)?e.map(e=>Y(e,t)):Object.fromEntries(Object.entries(e).map(([e,n])=>[e,Y(n,t)])))}function X(e){if(typeof e==`string`)return e;try{return JSON.stringify(Y(e),null,2)??``}catch{return String(e??``)}}function ke(e){return Array.isArray(e)?e.map(e=>{if(!e||typeof e!=`object`)return Y(e);let t=e;return t.type===`thinking`?{type:`thinking`,content:`[reasoning omitted from review]`}:t.type===`image`?{type:`image`,mimeType:t.mimeType,encodedCharacters:typeof t.data==`string`?t.data.length:0}:Y(t)}):Y(e)}function Ae(e,t=new Map){let n=e,r=typeof n.role==`string`?n.role:`unknown`,i=n.content,a=[],o=[];if(Array.isArray(i))for(let e of i){if(!e||typeof e!=`object`)continue;let n=e;if(n.type===`text`&&typeof n.text==`string`&&o.push(n.text),n.type===`toolCall`){let e=typeof n.id==`string`?n.id:void 0;a.push({kind:`call`,name:typeof n.name==`string`?n.name:`tool`,callId:e,status:e?t.get(e)??(n.__toolError===!0?`failed`:n.__toolResult===void 0?`pending`:`succeeded`):`pending`,input:X(n.arguments??{})})}}else typeof i==`string`&&o.push(i);r===`toolResult`&&a.push({kind:`result`,name:typeof n.toolName==`string`?n.toolName:`tool`,callId:typeof n.toolCallId==`string`?n.toolCallId:void 0,status:n.isError===!0?`failed`:`succeeded`,output:o.join(`
34
+ `).trim()||X(i),details:n.details===void 0?void 0:X(n.details),isError:n.isError===!0});let s={role:r,timestamp:typeof n.timestamp==`number`?n.timestamp:void 0,content:ke(i)};return r===`assistant`&&(s.provider=n.provider,s.model=n.model,s.stopReason=n.stopReason),r===`toolResult`&&(s.toolCallId=n.toolCallId,s.toolName=n.toolName,s.isError=n.isError,n.details!==void 0&&(s.details=Y(n.details))),{markdown:o.join(`
35
+ `).trim(),raw:JSON.stringify(s,null,2),tools:a}}var je={activeSource:`message`,activeTargetKey:`session`,annotationDraft:null,reviewDraft:null,reviewDraftRevision:0,reviewDirty:!1,availableModels:[],localError:null};function Me(e,t){switch(t.type){case`reset`:return{...je,sessionId:t.sessionId};case`hydrate`:return{...e,activeTurnId:e.activeTurnId??t.turnId,activeArtifactId:e.activeArtifactId??t.artifactId,activeModelPoolId:e.activeModelPoolId??t.poolId,activeTargetKey:e.activeTurnId?e.activeTargetKey:t.turnTargetKey??e.activeTargetKey};case`select-turn`:return{...e,activeSource:`message`,activeTurnId:t.id,activeTargetKey:t.targetKey,activeAnnotationId:void 0,annotationDraft:null};case`select-artifact`:return{...e,activeSource:`artifact`,activeArtifactId:t.id,activeTargetKey:t.targetKey,activeAnnotationId:void 0,annotationDraft:null};case`open-annotation`:{let n=t.draft.target.kind.startsWith(`artifact`);return{...e,activeSource:n?`artifact`:`message`,activeTurnId:n?e.activeTurnId:t.sourceId,activeArtifactId:n?t.sourceId:e.activeArtifactId,activeTargetKey:t.generationTargetKey,activeAnnotationId:t.annotationId,annotationDraft:t.draft}}case`expand-annotation`:return{...e,annotationDraft:t.draft};case`change-annotation`:{let n=e.annotationDraft;if(!n)return{...e,annotationDraft:t.draft};let r=se(n,t.draft,t.draft.fieldAuthorship);return{...e,annotationDraft:{...t.draft,fieldAuthorship:r,authorship:L(r)}}}case`close-annotation`:return{...e,annotationDraft:null};case`annotation-saved`:return{...e,activeAnnotationId:t.id,annotationDraft:null};case`annotation-deleted`:return e.activeAnnotationId===t.id?{...e,activeAnnotationId:void 0,annotationDraft:null}:e;case`select-candidate`:return{...e,activeCandidateId:t.id};case`select-pool`:return{...e,activeModelPoolId:t.id};case`sync-review`:return e.sessionId&&e.sessionId!==t.review.sessionId?e:!e.reviewDirty||!e.reviewDraft?{...e,reviewDraft:t.review,reviewDirty:!1}:{...e,reviewDraft:{...t.review,status:e.reviewDraft.status,verdict:e.reviewDraft.verdict,ratings:e.reviewDraft.ratings,rubricJudgement:e.reviewDraft.rubricJudgement,overallRating:e.reviewDraft.overallRating,summary:e.reviewDraft.summary,updatedAt:e.reviewDraft.updatedAt}};case`change-review`:return{...e,reviewDraft:t.review,reviewDraftRevision:e.reviewDraftRevision+1,reviewDirty:!0};case`review-saved`:return e.sessionId&&e.sessionId!==t.review.sessionId||e.reviewDraftRevision!==t.submittedRevision?e:{...e,reviewDraft:t.review,reviewDirty:!1};case`models-loaded`:return{...e,availableModels:t.models};case`error`:return{...e,localError:t.message}}}var Z=h();function Ne(e){return e===`assistant`?`Tutor response`:e===`user`||e===`user-with-attachments`?`Learner message`:e===`toolResult`?`Tool result`:e.replaceAll(/([a-z])([A-Z])/g,`$1 $2`)}function Pe(e,t,n=[]){let r=De(t),i=new Map(n.map(e=>[e.messageTimestamp,e]));return t.map((t,n)=>{let a=A(e,t,n),o=t,s=Ae(t,r),c=M(a.text),l=m(c);return{...a,role:o.role===`user-with-attachments`?`user`:o.role===`toolResult`?`tool`:a.role,text:l||o.errorMessage||`[${Ne(a.role)}]`,markdown:p(c),rawSource:c,raw:s.raw,tools:s.tools,label:Ne(a.role),model:o.model,status:o.stopReason===`error`||o.stopReason===`aborted`?`failed`:`complete`,...o.role===`assistant`&&a.timestamp!==void 0&&i.has(a.timestamp)?{draftReview:i.get(a.timestamp)}:{}}})}function Fe(e){return{kind:`response`,messageId:e.id,messageTimestamp:e.timestamp,originalContent:e.text}}function Ie(e,t){if(t.kind===`response`)return(e.target.kind===`message`||e.target.kind===`message-span`)&&e.target.messageId===t.messageId;let n=e.target;return n.kind.startsWith(`artifact`)&&`artifact`in n&&D(n.artifact)===D(t.artifact)}function Le(e,t){let n=e.kind===`message-span`||e.kind===`artifact-span`?e.anchor.quote:``,r=t?.intent===`rewrite`&&!!n;return{target:e,targetKey:T(e),kind:t?.kind??`problem`,category:``,note:``,pedagogicalImpact:``,suggestedAlternative:r?n:``,revision:r?{original:n}:void 0,status:`draft`}}function Q(e){return e.kind===`message`||e.kind===`message-span`?`message:${e.messageId}`:e.kind.startsWith(`artifact`)&&`artifact`in e?T({kind:`artifact`,artifact:e.artifact}):T(e)}function $(e,t){if(e.kind===`message`||e.kind===`message-span`)return e.messageId;if(e.kind.startsWith(`artifact`)&&`artifact`in e){let n=D(e.artifact);return t.find(e=>D(e.reference)===n)?.id}}function Re(e){return{id:e.id,target:e.target,targetKey:e.targetKey,kind:e.kind,category:e.category,severity:e.severity,note:e.note,pedagogicalImpact:e.pedagogicalImpact,suggestedAlternative:e.suggestedAlternative,status:e.status}}function ze(e){return(0,Z.jsx)(`main`,{className:o({minHeight:`100dvh`,display:`grid`,placeItems:`center`,padding:`1.5rem`,background:`var(--background)`,color:`var(--foreground)`}),children:(0,Z.jsxs)(`div`,{className:o({maxWidth:`32rem`}),children:[(0,Z.jsxs)(r,{to:`/review`,className:o({display:`inline-flex`,alignItems:`center`,gap:`0.4rem`,minHeight:`2.5rem`,color:`var(--muted-foreground)`,fontSize:`0.8125rem`,_hover:{color:`var(--foreground)`}}),children:[(0,Z.jsx)(_,{size:15}),` Reviews`]}),(0,Z.jsx)(`h1`,{className:o({marginTop:`0.75rem`,fontFamily:`serif`,fontSize:`1.5rem`,fontWeight:650}),children:`Review unavailable`}),(0,Z.jsx)(`p`,{role:`alert`,className:o({marginTop:`0.5rem`,color:`var(--muted-foreground)`,fontSize:`0.875rem`,lineHeight:1.6}),children:e})]})})}function Be(){let e=i({strict:!1}).sessionId??``,t=Ee(e),n=I(e,t.session?.messages??[],t.annotations),[r,a]=(0,z.useReducer)(Me,je),s=(0,z.useRef)(e);s.current=e,(0,z.useEffect)(()=>{a({type:`reset`,sessionId:e})},[e]),(0,z.useEffect)(()=>{t.review&&a({type:`sync-review`,review:t.review})},[t.review]),(0,z.useEffect)(()=>{let e=!1;return v().then(y).then(t=>{e||a({type:`models-loaded`,models:t.map(e=>C(e.model))})}).catch(t=>{e||a({type:`error`,message:t instanceof Error?t.message:String(t)})}),()=>{e=!0}},[e]);let[c,u]=(0,z.useState)([]);(0,z.useEffect)(()=>{let e=t.session?.id;if(!e)return;let n=!1;return l.getTeachingDraftReceipts(e).then(e=>{n||u(e)}).catch(()=>{n||u([])}),()=>{n=!0}},[t.session]);let d=(0,z.useMemo)(()=>t.session?Pe(t.session.id,t.session.messages,c):[],[c,t.session]),f=(0,z.useMemo)(()=>t.artifacts.map(e=>({id:e.id,title:e.label,reference:e.artifact,summary:e.topic?`${e.topic} · captured ${new Date(e.capturedAt).toLocaleString()}`:void 0,media:e.media?{kind:`image`,src:e.media.dataUrl,alt:e.media.alt,assetHash:e.media.assetHash,naturalWidth:e.media.naturalWidth,naturalHeight:e.media.naturalHeight}:void 0,plainText:e.artifact.artifactType===`animation`?e.secondaryContent||`Animation source is frozen. Review its storyboard or annotate the whole artifact.`:e.content,createdAt:e.createdAt,status:`ready`})),[t.artifacts]);(0,z.useEffect)(()=>{if(!r.activeTurnId&&d.length>0){let e=d.find(e=>e.role===`assistant`)??d[0];a({type:`hydrate`,turnId:e.id,turnTargetKey:T({kind:`message`,messageId:e.id,role:e.role,messageTimestamp:e.timestamp,contentFingerprint:e.contentFingerprint})})}},[d,r.activeTurnId]),(0,z.useEffect)(()=>{!r.activeArtifactId&&f.length>0&&a({type:`hydrate`,artifactId:f[0].id})},[f,r.activeArtifactId]),(0,z.useEffect)(()=>{!r.activeModelPoolId&&t.modelPools.length>0&&a({type:`hydrate`,poolId:t.modelPools[0].id})},[t.modelPools,r.activeModelPoolId]);let p=(0,z.useCallback)(t=>{let n=e,r=()=>s.current===n;a({type:`error`,message:null}),t(r).catch(e=>{r()&&a({type:`error`,message:e instanceof Error?e.message:String(e)})})},[e]),m=(0,z.useCallback)(()=>{let e=d.find(e=>e.id===r.activeTurnId),n=f.find(e=>e.id===r.activeArtifactId);if(r.activeSource===`artifact`&&n){let e={kind:`artifact`,artifact:n.reference,topic:t.artifacts.find(e=>e.id===n.id)?.topic??n.title,originalContent:t.artifacts.find(e=>e.id===n.id)?.content??n.plainText??``};return F(e),e}if(e?.role===`assistant`)return Fe(e);throw Error(`Select a tutor response or artifact before generating candidates.`)},[f,d,t.artifacts,r.activeArtifactId,r.activeSource,r.activeTurnId]),h=(0,z.useCallback)((e,n,r)=>{p(()=>t.generateCandidates(e,n,r))},[t,p]);if(!e)return ze(`No session was selected.`);if(t.loading)return(0,Z.jsx)(`main`,{className:o({minHeight:`100dvh`,display:`grid`,placeItems:`center`,background:`var(--background)`,color:`var(--muted-foreground)`}),children:(0,Z.jsxs)(`p`,{role:`status`,className:o({display:`inline-flex`,alignItems:`center`,gap:`0.5rem`,fontSize:`0.875rem`}),children:[(0,Z.jsx)(g,{size:17,className:o({animation:`spin 1s linear infinite`})}),` Loading review workspace…`]})});if(!t.session||!t.review)return ze(t.error??`The review could not be loaded.`);let _={onSelectTurn:e=>{let t=d.find(t=>t.id===e);t&&a({type:`select-turn`,id:e,targetKey:`message:${t.id}`})},onSelectArtifact:e=>{let t=f.find(t=>t.id===e);t&&a({type:`select-artifact`,id:e,targetKey:T({kind:`artifact`,artifact:t.reference})})},onTextSelection:e=>{a({type:`open-annotation`,draft:Le(e.target,{kind:e.kind,intent:e.intent}),generationTargetKey:Q(e.target),sourceId:$(e.target,f)})},onReviewChange:e=>a({type:`change-review`,review:e}),onStartAnnotation:e=>{a({type:`open-annotation`,draft:Le(e),generationTargetKey:Q(e),sourceId:$(e,f)})},onAnnotationDraftChange:e=>a({type:`change-annotation`,draft:e}),onSaveAnnotation:e=>p(async n=>{let r=await t.saveAnnotation(e);n()&&a({type:`annotation-saved`,id:r.id})}),onCancelAnnotation:()=>a({type:`close-annotation`}),onEditAnnotation:e=>{a({type:`open-annotation`,draft:Re(e),generationTargetKey:Q(e.target),sourceId:$(e.target,f),annotationId:e.id})},onDeleteAnnotation:e=>p(async n=>{await t.deleteAnnotation(e),n()&&a({type:`annotation-deleted`,id:e})}),onSelectCandidate:e=>a({type:`select-candidate`,id:e}),onChooseCandidate:e=>p(()=>t.chooseCandidate(e)),onInsertCandidate:e=>p(async()=>{let n=t.candidates.find(t=>t.id===e);if(!n)throw Error(`Review candidate not found.`);n.target.kind===`artifact`&&F(n.target),await t.chooseCandidate(e),n.target.kind===`artifact`?await t.acceptArtifactRevision(e):await t.insertCandidate(e)}),onRegenerateCandidate:e=>{let n=t.candidates.find(t=>t.id===e);n&&h(n.target,n.poolId,n.annotationIds)},onGenerateCandidates:e=>{try{let n=m();h(n,e,t.annotations.filter(e=>Ie(e,n)).map(e=>e.id))}catch(e){a({type:`error`,message:e instanceof Error?e.message:String(e)})}},onSelectModelPool:e=>a({type:`select-pool`,id:e}),onModelPoolChange:e=>p(()=>t.saveModelPool(e)),onAddModel:(e,n)=>p(async()=>{let r=t.modelPools.find(t=>t.id===e);if(!r)throw Error(`Model pool not found.`);r.models.some(e=>e.provider===n.provider&&e.id===n.id)||await t.saveModelPool({...r,models:[...r.models,n]})}),onRemoveModel:(e,n)=>{let r=t.modelPools.find(t=>t.id===e);r&&p(()=>t.saveModelPool({...r,models:r.models.filter(e=>e.provider!==n.provider||e.id!==n.id)}))},onCreateModelPool:()=>{let e=t.session?.model;if(!e)return;let n;try{n=m()}catch(e){a({type:`error`,message:e instanceof Error?e.message:String(e)});return}let r=Date.now(),i=n.kind===`artifact`?[`artifact:${n.artifact.artifactType}`]:[`response`],o={schemaVersion:1,id:b(`pool`),name:`New review pool`,tasks:i,models:[C(e)],candidateCount:3,temperature:.7,maxTokens:2048,createdAt:r,updatedAt:r};p(async e=>{let n=await t.saveModelPool(o);e()&&a({type:`select-pool`,id:n.id})})},onDeleteModelPool:e=>p(()=>t.deleteModelPool(e)),onSave:()=>{let e=r.reviewDraft??t.review,n=r.reviewDraftRevision;p(async r=>{let i=await t.saveReview(e);r()&&a({type:`review-saved`,review:i,submittedRevision:n})})},onExport:()=>{let e=r.reviewDraft,n=r.reviewDraftRevision,i=r.reviewDirty&&e;p(async r=>{if(i){let i=await t.saveReview(e);r()&&a({type:`review-saved`,review:i,submittedRevision:n})}await t.exportArchive()})}},x=t.modelPools.find(e=>e.id===r.activeModelPoolId)??t.modelPools[0],S=n.lastRun[`critique-sweep`]??n.lastRun[`rubric-score`]??n.lastRun[`annotation-expand`],w={running:n.running,error:n.error,critique:n.critique,rubric:n.rubric,footnote:S?`Last pass: ${S.model} · ${(S.latencyMs/1e3).toFixed(1)}s`:void 0},E={onRunPass:t=>{if(t===`rubric-score`){n.runRubricScore();return}if(x){if(t===`critique-sweep`)n.runCritiqueSweep(x);else if(t===`annotation-expand`){let t=r.annotationDraft;if(!t?.note.trim())return;n.expandAnnotation(x,{note:t.note,kind:t.kind,category:t.category,quotedText:t.target.kind===`message-span`||t.target.kind===`artifact-span`?t.target.anchor.quote:void 0}).then(n=>{if(!n||s.current!==e)return;let r=[],i=!!t.pedagogicalImpact?.trim(),o=!!t.suggestedAlternative?.trim();!i&&n.pedagogicalImpact?.trim()&&r.push(`pedagogicalImpact`),!o&&n.suggestedAlternative?.trim()&&r.push(`suggestedAlternative`);let c=R(t.fieldAuthorship,r);a({type:`expand-annotation`,draft:{...t,pedagogicalImpact:i?t.pedagogicalImpact:n.pedagogicalImpact,suggestedAlternative:o?t.suggestedAlternative:n.suggestedAlternative,fieldAuthorship:c,authorship:L(c)}})})}}},onCancelPass:n.cancel,onDismissPassError:n.dismissError,onAcceptProposal:e=>p(async r=>{let i=oe(e,t.session?.messages??[]),o=await t.saveAnnotation({authorship:`pass-drafted`,fieldAuthorship:R(void 0,[`note`,`pedagogicalImpact`,`suggestedAlternative`]),target:i,kind:e.kind,category:e.category,severity:e.severity,note:e.note,pedagogicalImpact:e.pedagogicalImpact,suggestedAlternative:e.suggestedAlternative,status:`draft`});r()&&(n.dismissCritique(e.id),a({type:`annotation-saved`,id:o.id}))}),onDismissProposal:n.dismissCritique,onDismissAllProposals:n.clearCritique,onApplyRubric:i=>{if(!ae(i,e,t.session?.messages??[])){a({type:`error`,message:`The transcript changed. Run the rubric review again before applying its estimates.`}),n.clearRubric();return}let o=r.reviewDraft??t.review;if(!o)return;let s={...o.ratings};for(let e of i.ratings)s[e.key]=e.rating;a({type:`change-review`,review:{...o,ratings:s,rubricJudgement:i.judgement??o.rubricJudgement,overallRating:i.overallRating??o.overallRating,summary:o.summary?.trim()?o.summary:i.summary,verdict:o.verdict===`undecided`&&i.verdict?i.verdict:o.verdict,updatedAt:Date.now()}}),n.clearRubric()},onDismissRubric:n.clearRubric,onRevealProposal:e=>{e.messageId&&a({type:`select-turn`,id:e.messageId,targetKey:`message:${e.messageId}`})}};return(0,Z.jsx)(ce,{data:{session:{id:t.session.id,title:t.session.title||`Untitled session`,subtitle:`${d.length} recorded turns · ${f.length} frozen artifacts`,startedAt:Date.parse(t.session.createdAt)},messages:d,artifacts:f,review:r.reviewDraft??t.review,annotations:t.annotations,annotationDraft:r.annotationDraft,modelPools:t.modelPools,availableModels:r.availableModels,candidates:t.candidates,activeTurnId:r.activeTurnId,activeArtifactId:r.activeArtifactId,activeAnnotationId:r.activeAnnotationId,activeCandidateId:r.activeCandidateId,activeModelPoolId:r.activeModelPoolId,activeTargetKey:r.activeTargetKey,reviewDirty:r.reviewDirty,busy:t.busy,error:r.localError??t.error??void 0},callbacks:_,passes:w,passCallbacks:E})}export{Be as TrajectoryReview};
@@ -0,0 +1 @@
1
+ import{s as e}from"./rolldown-runtime-BG2f4sTM.js";import{T as t}from"./syntax-highlighter-Buac5fmw.js";import{Ct as n,M as r,N as i,wt as a}from"./index-DCgpDQKf.js";import{o}from"./recipes-lg2hVa6Q.js";import{t as s}from"./use-sessions-3UElISPk.js";import{t as c}from"./trajectory-store-C3qzwrr6.js";import{r as l}from"./Plus-RIb_ldNd.js";import{x as u}from"./use-review-passes-DmWsvYdF.js";import{t as d}from"./PatternDigestPanel-jmxcLCUX.js";var f=e(t(),1),p=a(),m=i({minHeight:`100dvh`,background:`var(--paper)`,color:`var(--ink)`,paddingInline:{base:`1rem`,md:`2rem`},paddingBlock:{base:`1rem`,md:`1.5rem`}});function h(){let e=s({flatLimit:100}),[t,a]=(0,f.useState)([]),[h,g]=(0,f.useState)(new Map),[_,v]=(0,f.useState)([]);(0,f.useEffect)(()=>{let e=!1,t=async()=>{let t=c(),n=await t.listReviews().catch(()=>[]);if(e)return;a(n);let r=await Promise.all(n.map(async e=>[e.id,await t.listAnnotations(e.id).catch(()=>[])]));e||g(new Map(r))};return t(),c().listModelPools().then(t=>{e||v(t)}).catch(()=>void 0),window.addEventListener(`keating:trajectory-review-changed`,t),()=>{e=!0,window.removeEventListener(`keating:trajectory-review-changed`,t)}},[]);let y=(0,f.useMemo)(()=>new Map(t.map(e=>[e.sessionId,e])),[t]),b=e.flatResults??e.items,x=(0,f.useMemo)(()=>new Map(e.items.map(e=>[e.id,e.title||`Untitled session`])),[e.items]),S=(0,f.useMemo)(()=>t.filter(e=>(h.get(e.id)??[]).length>0||e.overallRating!==void 0||!!e.summary?.trim()).map(e=>({review:e,annotations:h.get(e.id)??[],title:x.get(e.sessionId)})),[h,t,x]);return(0,p.jsx)(`main`,{className:m,children:(0,p.jsxs)(`div`,{className:i({maxWidth:`72rem`,marginInline:`auto`}),children:[(0,p.jsxs)(`header`,{className:i({display:`flex`,flexWrap:`wrap`,alignItems:`flex-start`,justifyContent:`space-between`,gap:`1rem`,paddingBottom:`1.5rem`,borderBottom:`1px solid var(--line)`}),children:[(0,p.jsxs)(`div`,{children:[(0,p.jsxs)(n,{to:`/chat`,className:i({display:`inline-flex`,alignItems:`center`,gap:`0.4rem`,minHeight:`2.25rem`,color:`var(--ink-soft)`,fontSize:`0.8125rem`,transitionProperty:`color`,transitionDuration:`{durations.base}`,_hover:{color:`var(--ink)`,"& .keating-duo-icon":{transform:`translateX(-3px)`}},_focusVisible:{outline:`3px solid var(--accent)`,outlineOffset:`2px`}}),children:[(0,p.jsx)(l,{icon:u.back,size:15}),` Back to teaching`]}),(0,p.jsxs)(`div`,{className:i({display:`flex`,alignItems:`center`,gap:`0.65rem`,marginTop:`0.35rem`}),children:[(0,p.jsx)(l,{icon:u.annotate,size:24,className:i({color:`var(--accent-dim)`})}),(0,p.jsx)(`h1`,{className:i({fontFamily:`var(--mono-display)`,fontSize:{base:`1.65rem`,md:`2rem`},fontWeight:700,letterSpacing:`-0.02em`}),children:`Session reviews`})]}),(0,p.jsx)(`p`,{className:i({maxWidth:`42rem`,marginTop:`0.5rem`,color:`var(--ink-soft)`,fontSize:`0.9rem`,lineHeight:1.6}),children:`Read back how a lesson actually went, mark the exact line that earned praise or blame, and turn what you learn into training examples.`})]}),(0,p.jsxs)(`div`,{className:i({display:`inline-flex`,maxWidth:`25rem`,alignItems:`center`,gap:`0.45rem`,color:`var(--ink-soft)`,fontSize:`0.75rem`,lineHeight:1.45,paddingTop:`0.5rem`}),children:[(0,p.jsx)(l,{icon:u.locked,size:14}),`Reviews stay local; remote passes send redacted context to the selected provider.`]})]}),(0,p.jsx)(d,{sessions:S,pools:_,titleForSession:e=>x.get(e),className:i({marginTop:`1.5rem`})}),(0,p.jsxs)(`section`,{"aria-labelledby":`sessions-heading`,className:i({paddingTop:`1.5rem`}),children:[(0,p.jsxs)(`div`,{className:i({display:`flex`,flexWrap:`wrap`,alignItems:`center`,justifyContent:`space-between`,gap:`0.85rem`,marginBottom:`0.9rem`}),children:[(0,p.jsxs)(`div`,{children:[(0,p.jsx)(`h2`,{id:`sessions-heading`,className:r(o(),i({fontSize:`11px`})),children:`Choose a session`}),(0,p.jsxs)(`p`,{className:i({color:`var(--ink-soft)`,fontSize:`0.75rem`,marginTop:`0.25rem`}),children:[e.items.length,` locally available sessions`]})]}),(0,p.jsxs)(`label`,{className:i({display:`flex`,alignItems:`center`,gap:`0.5rem`,width:{base:`100%`,sm:`18rem`},height:`2.5rem`,borderBottom:`1.5px solid var(--line)`,transitionProperty:`border-color`,transitionDuration:`{durations.base}`,_focusWithin:{borderColor:`var(--accent-dim)`}}),children:[(0,p.jsx)(l,{icon:u.search,size:15,className:i({color:`var(--ink-soft)`})}),(0,p.jsx)(`span`,{className:i({srOnly:!0}),children:`Search sessions`}),(0,p.jsx)(`input`,{value:e.query,onChange:t=>e.setQuery(t.target.value),placeholder:`Search transcript or title`,className:i({flex:1,minWidth:0,background:`transparent`,outline:`none`,fontSize:`0.8125rem`,color:`var(--ink)`})})]})]}),e.loading?(0,p.jsx)(`p`,{role:`status`,className:i({paddingBlock:`3rem`,color:`var(--ink-soft)`,fontSize:`0.875rem`}),children:`Loading sessions…`}):e.error?(0,p.jsx)(`p`,{role:`alert`,className:i({paddingBlock:`3rem`,color:`var(--destructive)`,fontSize:`0.875rem`}),children:e.error}):b.length===0?(0,p.jsx)(`p`,{className:i({paddingBlock:`3rem`,color:`var(--ink-soft)`,fontSize:`0.875rem`}),children:`No matching sessions.`}):(0,p.jsx)(`ul`,{className:i({listStyle:`none`,display:`grid`,gap:`0.4rem`}),children:b.map(e=>{let t=y.get(e.id),r=t?.status===`final`;return(0,p.jsx)(`li`,{children:(0,p.jsxs)(n,{to:`/review/sessions/$sessionId`,params:{sessionId:e.id},className:i({display:`grid`,gridTemplateColumns:{base:`1fr auto`,md:`minmax(0, 1fr) 9rem 10rem auto`},alignItems:`center`,gap:{base:`0.5rem`,md:`1rem`},minHeight:`4.5rem`,border:`1.5px solid var(--line)`,borderRadius:`{radii.keating}`,background:`var(--card)`,paddingBlock:`0.75rem`,paddingInline:`0.85rem`,transitionProperty:`transform, box-shadow, border-color`,transitionDuration:`{durations.base}`,transitionTimingFunction:`{easings.standard}`,_hover:{transform:`translate(-2px, -2px)`,boxShadow:`4px 4px 0 var(--ink)`,borderColor:`var(--ink)`,"& .keating-duo-icon":{transform:`rotate(-6deg) scale(1.12)`}},_focusVisible:{outline:`3px solid var(--accent)`,outlineOffset:`2px`}}),children:[(0,p.jsxs)(`div`,{className:i({minWidth:0}),children:[(0,p.jsx)(`h3`,{className:i({overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`,fontSize:`0.875rem`,fontWeight:650,color:`var(--ink)`}),children:e.title||`Untitled session`}),(0,p.jsx)(`p`,{className:i({overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`,marginTop:`0.3rem`,color:`var(--ink-soft)`,fontSize:`0.75rem`}),children:e.preview||`No transcript preview`})]}),(0,p.jsxs)(`span`,{className:i({display:{base:`none`,md:`block`},color:`var(--ink-soft)`,fontSize:`0.75rem`}),children:[e.messageCount,` turns`]}),(0,p.jsx)(`span`,{className:i({display:{base:`none`,md:`block`},color:`var(--ink-soft)`,fontSize:`0.75rem`,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`}),children:e.modelName??e.modelId??`Unknown model`}),(0,p.jsxs)(`span`,{className:i({display:`inline-flex`,alignItems:`center`,justifySelf:`end`,gap:`0.35rem`,color:r?`var(--accent-dim)`:`var(--ink-soft)`,fontSize:`0.75rem`,fontWeight:650}),children:[(0,p.jsx)(l,{icon:r?u.verdict:u.annotate,size:14,active:r}),t?r?`Final`:`Draft`:`Review`]})]})},e.id)})})]})]})})}export{h as TrajectoryReviewIndex};
@@ -0,0 +1 @@
1
+ import{s as e}from"./rolldown-runtime-BG2f4sTM.js";import{T as t}from"./syntax-highlighter-Buac5fmw.js";import{R as n}from"./operation-kDIu8RLw.js";import{M as r,N as i,wt as a}from"./index-DCgpDQKf.js";import{t as o}from"./MarkdownBlock-C89ecD-M.js";import{n as s,t as c}from"./OpenUIPreview-BrBXAEt4.js";import{t as l}from"./Select-BYfJxqbI.js";import{r as u}from"./segments-BuQ4O8Bd.js";import{t as d}from"./trash-2-CD2oMBVJ.js";import{a as f,i as p,o as m,r as h,t as g}from"./recipes-lg2hVa6Q.js";import{r as _}from"./ModelSelector-B_EaHvVz.js";import{c as v,d as y,f as b,g as x,l as S,n as C,o as w,r as T}from"./trajectory-store-C3qzwrr6.js";import{r as E}from"./Plus-RIb_ldNd.js";import{_ as D,b as O,c as k,d as A,f as j,g as M,h as N,l as P,m as F,o as I,p as L,s as R,u as z,v as ee,x as B,y as V}from"./use-review-passes-DmWsvYdF.js";var H=e(t(),1),U=a(),W=[{value:`problem`,label:`Problem`},{value:`strength`,label:`Strength`},{value:`suggestion`,label:`Suggestion`}],G=[`Diagnosis`,`Factual accuracy`,`Scaffolding`,`Adaptation`,`Learner agency`,`Verification`,`Clarity`,`Tool use`,`Artifact quality`,`Safety`],K={category:`category`,severity:`severity`,impact:`impact`,alternative:`alternative`};function q(e){if(e.kind===`message-span`||e.kind===`artifact-span`)return e.anchor.quote}function J(e){let t=[];return e.category.trim()&&t.push(`category`),e.severity&&t.push(`severity`),e.pedagogicalImpact?.trim()&&t.push(`impact`),(e.suggestedAlternative?.trim()||e.revision)&&t.push(`alternative`),t}var Y=i({display:`block`,marginBottom:`0.375rem`,fontSize:`0.75rem`,fontWeight:650,color:`var(--foreground)`}),te=i({display:`inline-flex`,alignItems:`center`,gap:`0.2rem`,borderRadius:`0.25rem`,border:`1px dashed var(--border)`,background:`transparent`,paddingInline:`0.4rem`,paddingBlock:`0.15rem`,fontSize:`0.6875rem`,fontWeight:600,color:`var(--muted-foreground)`,_hover:{borderStyle:`solid`,borderColor:`var(--ink)`,color:`var(--foreground)`},_focusVisible:{outline:`3px solid var(--accent)`,outlineOffset:`1px`}});function ne({draft:e,onChange:t,onSave:n,onCancel:a,isSaving:o,onExpand:s,isExpanding:c,autoFocus:u}){let d=(0,H.useId)(),[f,p]=(0,H.useState)(()=>J(e)),h=e.note.trim().length>0&&!o,g=q(e.target),_=!!e.revision,v=e=>f.includes(e),y=e=>p(t=>t.includes(e)?t:[...t,e]),b=Object.keys(K).filter(e=>!v(e));function x(t){t.preventDefault(),h&&n(e)}function S(t){(t.metaKey||t.ctrlKey)&&t.key===`Enter`&&h&&(t.preventDefault(),n(e))}function C(e,t){return v(e)?(0,U.jsx)(`div`,{children:t},e):null}return(0,U.jsxs)(`form`,{onSubmit:x,onKeyDown:S,className:i({display:`flex`,flexDirection:`column`,gap:`0.75rem`}),children:[(0,U.jsxs)(`div`,{className:i({display:`flex`,alignItems:`flex-start`,justifyContent:`space-between`,gap:`0.75rem`}),children:[(0,U.jsxs)(`div`,{children:[(0,U.jsx)(`div`,{className:A,children:e.id?`Edit annotation`:_?`Revise this text`:`New annotation`}),(0,U.jsx)(`div`,{className:r(P,i({marginTop:`0.125rem`})),children:ee(e.target,`editor`)})]}),(0,U.jsxs)(`button`,{type:`button`,className:I,onClick:a,children:[(0,U.jsx)(E,{icon:B.dismiss,size:13}),` Cancel`]})]}),g&&!_?(0,U.jsxs)(`blockquote`,{className:i({display:`grid`,gridTemplateColumns:`auto minmax(0, 1fr)`,gap:`0.5rem`,borderLeft:`2px solid var(--accent-dim)`,background:`var(--muted)`,padding:`0.625rem`,fontSize:`0.75rem`,lineHeight:1.45,color:`var(--foreground)`}),children:[(0,U.jsx)(E,{icon:B.quote,size:13,className:i({marginTop:`0.125rem`,color:`var(--ink-soft)`})}),(0,U.jsx)(`span`,{className:i({display:`block`,maxHeight:`4.4rem`,overflow:`auto`,whiteSpace:`pre-wrap`}),children:g})]}):null,_&&e.revision?(0,U.jsx)(`div`,{className:i({display:`grid`,gap:`0.25rem`,fontSize:`0.75rem`}),children:(0,U.jsx)(`span`,{className:i({borderRadius:`0.25rem`,background:`color-mix(in srgb, var(--destructive) 12%, transparent)`,padding:`0.3rem 0.45rem`,color:`var(--muted-foreground)`,textDecoration:`line-through`,textDecorationColor:`var(--destructive)`}),children:e.revision.original})}):null,(0,U.jsxs)(`fieldset`,{children:[(0,U.jsx)(`legend`,{className:i({marginBottom:`0.375rem`,fontSize:`0.75rem`,fontWeight:650,color:`var(--foreground)`}),children:`Signal`}),(0,U.jsx)(`div`,{className:i({display:`grid`,gridTemplateColumns:`repeat(3, minmax(0, 1fr))`,gap:`0.25rem`}),children:W.map(n=>{let r=e.kind===n.value;return(0,U.jsxs)(`label`,{className:i({cursor:`pointer`,borderRadius:`0.375rem`,border:`1px solid`,borderColor:r?`var(--ink)`:`var(--border)`,background:r?`var(--ink)`:`var(--background)`,padding:`0.375rem 0.25rem`,textAlign:`center`,fontSize:`0.6875rem`,fontWeight:650,color:r?`var(--paper)`:`var(--foreground)`,_focusWithin:{outline:`3px solid var(--accent)`,outlineOffset:`1px`}}),style:r?{borderColor:N(n.value)}:void 0,children:[(0,U.jsx)(`input`,{type:`radio`,name:`annotation-kind`,value:n.value,checked:r,className:i({position:`absolute`,opacity:0,pointerEvents:`none`}),onChange:()=>t({...e,kind:n.value})}),n.label]},n.value)})})]}),(0,U.jsxs)(`div`,{children:[(0,U.jsx)(`label`,{htmlFor:`${d}-note`,className:Y,children:`Why does this matter?`}),(0,U.jsx)(`textarea`,{id:`${d}-note`,value:e.note,className:j,autoFocus:u,placeholder:`Describe the evidence and why it matters.`,onChange:n=>t({...e,note:n.currentTarget.value})})]}),C(`category`,(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`label`,{htmlFor:`${d}-category`,className:Y,children:`Category`}),(0,U.jsx)(`input`,{id:`${d}-category`,list:`${d}-categories`,value:e.category,className:k,placeholder:`Choose or type a category`,onChange:n=>t({...e,category:n.currentTarget.value})}),(0,U.jsx)(`datalist`,{id:`${d}-categories`,children:G.map(e=>(0,U.jsx)(`option`,{value:e},e))})]})),C(`severity`,(0,U.jsxs)(`fieldset`,{children:[(0,U.jsx)(`legend`,{className:r(Y,i({marginBottom:`0.375rem`})),children:`Severity`}),(0,U.jsxs)(`div`,{className:i({display:`flex`,alignItems:`center`,gap:`0.25rem`}),children:[[1,2,3,4].map(n=>(0,U.jsxs)(`label`,{className:i({cursor:`pointer`}),children:[(0,U.jsx)(`input`,{type:`radio`,name:`annotation-severity`,value:n,checked:e.severity===n,className:i({position:`absolute`,opacity:0,pointerEvents:`none`}),onChange:()=>t({...e,severity:n})}),(0,U.jsx)(`span`,{className:i({display:`inline-flex`,width:`2rem`,height:`2rem`,alignItems:`center`,justifyContent:`center`,borderRadius:`0.375rem`,border:`1px solid`,borderColor:e.severity===n?`var(--ink)`:`var(--border)`,background:e.severity===n?`var(--ink)`:`var(--background)`,fontSize:`0.75rem`,fontWeight:700,color:e.severity===n?`var(--paper)`:`var(--foreground)`,_focusWithin:{outline:`3px solid var(--accent)`,outlineOffset:`1px`}}),children:n})]},n)),e.severity?(0,U.jsx)(`button`,{type:`button`,className:i({marginLeft:`0.25rem`,fontSize:`0.6875rem`,color:`var(--muted-foreground)`,textDecoration:`underline`,_focusVisible:{outline:`3px solid var(--accent)`,outlineOffset:`1px`}}),onClick:()=>t({...e,severity:void 0}),children:`Clear`}):null]})]})),C(`impact`,(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`label`,{htmlFor:`${d}-impact`,className:Y,children:`Pedagogical impact`}),(0,U.jsx)(`textarea`,{id:`${d}-impact`,value:e.pedagogicalImpact??``,className:j,placeholder:`How did this affect the learner?`,onChange:n=>t({...e,pedagogicalImpact:n.currentTarget.value})})]})),C(`alternative`,(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`label`,{htmlFor:`${d}-alternative`,className:Y,children:_?`Replacement text`:`Suggested alternative`}),(0,U.jsx)(`textarea`,{id:`${d}-alternative`,value:e.suggestedAlternative??``,className:j,placeholder:`Write the teaching move or response that would help instead.`,onChange:n=>t({...e,suggestedAlternative:n.currentTarget.value})})]})),b.length>0||s?(0,U.jsxs)(`div`,{className:i({display:`flex`,flexWrap:`wrap`,alignItems:`center`,gap:`0.3rem`}),children:[b.map(e=>(0,U.jsxs)(`button`,{type:`button`,className:te,onClick:()=>y(e),children:[(0,U.jsx)(E,{icon:B.add,size:11}),` `,K[e]]},e)),s?(0,U.jsxs)(`button`,{type:`button`,className:r(I,i({marginLeft:`auto`,minHeight:`1.75rem`})),disabled:c||e.note.trim().length===0,title:e.note.trim().length===0?`Write the note first.`:void 0,onClick:()=>{p([`category`,`severity`,`impact`,`alternative`]),s()},children:[(0,U.jsx)(E,{icon:B.expand,size:13,active:c}),c?`Drafting…`:`Finish this note`]}):null]}):null,(0,U.jsxs)(`div`,{className:i({display:`flex`,alignItems:`center`,justifyContent:`space-between`,gap:`0.75rem`,borderTop:`1px solid var(--border)`,paddingTop:`0.75rem`}),children:[(0,U.jsxs)(`label`,{className:i({display:`flex`,alignItems:`center`,gap:`0.375rem`,fontSize:`0.6875rem`,color:`var(--muted-foreground)`}),children:[`Status`,(0,U.jsxs)(l,{"aria-label":`Annotation status`,value:e.status,className:r(k,i({width:`auto`,minHeight:`2rem`,paddingInline:`0.375rem`})),onValueChange:n=>t({...e,status:n}),children:[(0,U.jsx)(`option`,{value:`draft`,children:`Draft`}),(0,U.jsx)(`option`,{value:`final`,children:`Final`})]})]}),(0,U.jsxs)(`div`,{className:i({display:`flex`,alignItems:`center`,gap:`0.5rem`}),children:[(0,U.jsx)(`span`,{className:r(m(),i({fontSize:`9px`})),children:e.authorship===`pass-drafted`?`pass · accepted`:e.authorship===`pass-edited`?`pass · edited`:`human`}),(0,U.jsxs)(`button`,{type:`submit`,className:z,disabled:!h,children:[(0,U.jsx)(E,{icon:B.save,size:13}),` `,o?`Saving...`:e.id?`Update`:`Add annotation`]})]})]}),(0,U.jsx)(`div`,{className:P,children:`Tip: press Ctrl+Enter or Command+Enter to save.`})]})}var re=[{value:`response`,label:`Tutor responses`},{value:`artifact:plan`,label:`Plans`},{value:`artifact:map`,label:`Maps`},{value:`artifact:animation`,label:`Animations`},{value:`artifact:quiz`,label:`Quizzes`},{value:`artifact:verification`,label:`Verifications`},{value:`artifact:deck`,label:`Decks`},{value:`artifact:benchmark`,label:`Benchmarks`},{value:`artifact:evolution`,label:`Evolution`},{value:`artifact:prompt-evolution`,label:`Prompt evolution`},{value:`artifact:document`,label:`Documents`},{value:`artifact:openui`,label:`OpenUI`},{value:`artifact:other`,label:`Other`}];function ie(e){return e===`image`||e===`video`||e===`audio`?null:`artifact:${e}`}function ae(e,t){return e.filter(e=>e.tasks.includes(t))}function X(e,t){return e.models.filter(e=>!t.some(t=>t.provider===e.provider&&t.id===e.id))}function oe(e,t,n){let r=e.tasks.includes(t),i=e.models.length>0,a=X(e,n);return{taskCompatible:r,hasModels:i,unavailableModels:a,ready:r&&i&&a.length===0}}function se(e,t,n){let r=ae(e,t);return n&&r.some(e=>e.id===n)?n:r[0]?.id}function ce(e){return re.find(t=>t.value===e)?.label??e.replace(`artifact:`,``)}function Z(e){return e.charAt(0).toUpperCase()+e.slice(1)}function le(e){let t=[];e.usage?.totalTokens!=null&&t.push(`${e.usage.totalTokens.toLocaleString()} tokens`),e.generation?e.generation.cost.known&&e.generation.cost.usd!=null?t.push(`$${e.generation.cost.usd.toFixed(e.generation.cost.usd<.01?4:2)}`):e.generation.cost.known||t.push(`cost unknown`):e.usage?.costUsd!=null&&t.push(`$${e.usage.costUsd.toFixed(e.usage.costUsd<.01?4:2)}`);let n=e.generation?.latencyMs??e.usage?.latencyMs;return n!=null&&t.push(`${(n/1e3).toFixed(1)}s`),t.join(` · `)||null}function ue(e){let t=e.slice(0,2).map(e=>`${e.provider}/${e.id}`),n=e.length-t.length;return`${t.join(`, `)}${n>0?`, plus ${n} more`:``}`}function de({candidates:e,modelPools:t,availableModels:n,activeTargetKey:a,activeTask:o,generationUnavailableReason:u,promptCharacters:d,activeCandidateId:f,activeModelPoolId:p,selectedCandidateId:m,isGenerating:h,onSelectCandidate:g,onSelectModelPool:_,onGenerate:y,onChoose:b,onInsert:x,onRegenerate:S}){let[C,w]=(0,H.useState)(`rendered`),[T,D]=(0,H.useState)(null),O=(0,H.useRef)(null),A=(0,H.useMemo)(()=>e.filter(e=>e.targetKey===a).sort((e,t)=>t.updatedAt-e.updatedAt),[e,a]),j=(0,H.useMemo)(()=>o?ae(t,o):[],[t,o]),M=A.find(e=>e.id===f)??A[0],N=o?se(t,o,p)??``:``,F=j.find(e=>e.id===N),L=o&&F?oe(F,o,n):void 0,R=!!(F?.models.length&&F.models.every(e=>e.provider===`browser`||e.api===`browser`||Object.values(e.cost).some(e=>e>0))),ee=F?v(F,d):0,V=!!(L?.ready&&a&&!h),W=M?j.find(e=>e.id===M.poolId):void 0,G=o&&W?oe(W,o,n):void 0,K=!!(M&&M.state!==`running`&&G?.ready);(0,H.useEffect)(()=>{N&&N!==p&&_(N)},[p,a,o,_,N]),(0,H.useEffect)(()=>{w(`rendered`),D(null)},[M?.id]),(0,H.useEffect)(()=>()=>{O.current&&clearTimeout(O.current)},[]);function q(){!V||!F||y(F.id,a)}function J(){!K||!M||S(M.id)}async function Y(){if(M?.content?.trim()){O.current&&clearTimeout(O.current);try{if(!navigator.clipboard)throw Error(`Clipboard access is unavailable`);await navigator.clipboard.writeText(M.content),D({candidateId:M.id,state:`copied`})}catch{D({candidateId:M.id,state:`failed`})}O.current=setTimeout(()=>D(null),1800)}}return(0,U.jsxs)(`div`,{className:i({display:`flex`,minHeight:0,flexDirection:`column`,gap:`0.75rem`}),children:[(0,U.jsxs)(`div`,{className:i({display:`flex`,flexWrap:`wrap`,alignItems:`baseline`,justifyContent:`space-between`,gap:`0.5rem`}),children:[(0,U.jsxs)(`div`,{children:[(0,U.jsx)(`h2`,{className:i({fontSize:`1rem`,fontWeight:750,color:`var(--foreground)`}),children:`Model results`}),(0,U.jsx)(`p`,{className:r(P,i({marginTop:`0.2rem`})),children:`Compare parallel teaching moves against the active transcript turn or artifact.`})]}),(0,U.jsxs)(`div`,{className:P,children:[A.length,` result`,A.length===1?``:`s`,` for this target`]})]}),(0,U.jsxs)(`div`,{className:i({display:`flex`,alignItems:`flex-end`,gap:`0.5rem`}),children:[(0,U.jsxs)(`label`,{className:i({minWidth:0,flex:1,fontSize:`0.6875rem`,fontWeight:650,color:`var(--foreground)`}),children:[o?`Model pool for ${ce(o).toLowerCase()}`:`Model pool`,(0,U.jsxs)(l,{"aria-label":`Candidate model pool`,value:N,className:r(k,i({marginTop:`0.25rem`})),disabled:j.length===0,onValueChange:e=>_(e),children:[j.length===0?(0,U.jsx)(`option`,{value:``,children:`No compatible pools`}):null,j.map(e=>{let t=o?oe(e,o,n):void 0,r=t?.hasModels?t.unavailableModels.length>0?` · ${t.unavailableModels.length} unavailable`:``:` · no models`;return(0,U.jsxs)(`option`,{value:e.id,children:[e.name,r]},e.id)})]})]}),(0,U.jsxs)(`button`,{type:`button`,className:z,disabled:!V,onClick:q,children:[(0,U.jsx)(E,{icon:h?B.retry:B.pass,size:13,active:h,className:h?i({animation:`spin 1s linear infinite`,_motionReduce:{animation:`none`}}):void 0}),h?`Generating`:`Generate`]})]}),(0,U.jsx)(`div`,{className:P,children:o?j.length===0?`No model pool supports ${ce(o).toLowerCase()}. Add this task in the model-pool editor.`:L?.hasModels?L.unavailableModels.length>0?`Unavailable in the current model catalog: ${ue(L.unavailableModels)}. Update this pool before generating.`:F&&R?`Estimated $${ee.toFixed(ee<.01?4:2)} for ${F.candidateCount} candidate${F.candidateCount===1?``:`s`} · stored provider model rates`:`Pricing unknown · every stored model rate in this pool is zero`:`This compatible pool has no models. Add a model before generating.`:u??`Select a tutor response or text-backed artifact to generate candidates.`}),(0,U.jsx)(`p`,{className:i({borderTop:`1px solid var(--border)`,paddingTop:`0.625rem`,fontSize:`0.6875rem`,lineHeight:1.45,color:`var(--muted-foreground)`}),children:`Review records stay local. If this pool uses a remote model, generating sends that provider redacted session context and the selected feedback.`}),(0,U.jsx)(`div`,{className:i({minHeight:0,borderTop:`1px solid var(--border)`,paddingTop:`0.75rem`}),children:A.length>0?(0,U.jsxs)(`div`,{className:i({display:`grid`,minHeight:0,gap:`1rem`,md:{gridTemplateColumns:`13rem minmax(0, 1fr)`}}),children:[(0,U.jsx)(`div`,{role:`radiogroup`,"aria-label":`Generated candidates`,className:i({display:`flex`,gap:`0.375rem`,overflowX:`auto`,paddingBottom:`0.375rem`,md:{flexDirection:`column`,overflowX:`visible`,paddingRight:`1rem`,paddingBottom:0,borderRight:`1px solid var(--border)`}}),children:A.map((e,t)=>{let n=m===e.id||e.preferred,r=M?.id===e.id;return(0,U.jsxs)(`button`,{type:`button`,role:`radio`,"aria-checked":r,className:i({display:`inline-flex`,minWidth:`8rem`,alignItems:`center`,gap:`0.5rem`,borderRadius:`0.375rem`,border:`1px solid`,borderColor:r?`var(--ink)`:`transparent`,background:r?`var(--muted)`:`transparent`,padding:`0.5rem`,textAlign:`left`,_hover:{borderColor:`var(--border)`,background:`var(--muted)`},_focusVisible:{outline:`3px solid var(--accent)`,outlineOffset:`1px`},md:{width:`100%`}}),onClick:()=>g(e.id),children:[(0,U.jsx)(`span`,{className:i({display:`inline-flex`,width:`1.25rem`,height:`1.25rem`,flex:`0 0 auto`,alignItems:`center`,justifyContent:`center`,borderRadius:`9999px`,background:n?`var(--accent-green)`:`var(--muted)`,fontSize:`0.625rem`,fontWeight:700,color:n?`var(--ink)`:`var(--muted-foreground)`}),children:n?(0,U.jsx)(E,{icon:B.accept,size:11,active:!0}):t+1}),(0,U.jsxs)(`span`,{className:i({minWidth:0}),children:[(0,U.jsx)(`span`,{className:i({display:`block`,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`,fontSize:`0.6875rem`,fontWeight:650,color:`var(--foreground)`}),children:e.model.name}),(0,U.jsx)(`span`,{className:i({display:`block`,fontSize:`0.625rem`,color:e.state===`failed`?`var(--destructive)`:`var(--muted-foreground)`}),children:Z(e.state)})]})]},e.id)})}),M?(0,U.jsxs)(`article`,{className:i({minWidth:0}),children:[(0,U.jsxs)(`header`,{className:i({display:`flex`,flexWrap:`wrap`,alignItems:`flex-start`,justifyContent:`space-between`,gap:`0.625rem`,borderBottom:`1px solid var(--border)`,paddingBottom:`0.75rem`}),children:[(0,U.jsxs)(`div`,{className:i({minWidth:0}),children:[(0,U.jsxs)(`div`,{className:i({overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`,fontSize:`0.875rem`,fontWeight:750,color:`var(--foreground)`}),children:[M.model.provider,` / `,M.model.name]}),(0,U.jsx)(`div`,{className:P,children:le(M)??Z(M.state)})]}),(0,U.jsxs)(`div`,{className:i({display:`flex`,alignItems:`center`,gap:`0.375rem`}),children:[(0,U.jsx)(`div`,{role:`group`,"aria-label":`Candidate view`,className:i({display:`inline-flex`,border:`1px solid var(--border)`,borderRadius:`0.375rem`,padding:`0.125rem`}),children:[`rendered`,`raw`].map(e=>(0,U.jsx)(`button`,{type:`button`,"aria-pressed":C===e,className:i({borderRadius:`0.25rem`,background:C===e?`var(--ink)`:`transparent`,padding:`0.25rem 0.45rem`,fontSize:`0.625rem`,fontWeight:700,textTransform:`capitalize`,color:C===e?`var(--paper, var(--background))`:`var(--muted-foreground)`,_focusVisible:{outline:`3px solid var(--accent)`,outlineOffset:`1px`}}),onClick:()=>w(e),children:e},e))}),(0,U.jsxs)(`button`,{type:`button`,className:I,disabled:!M.content?.trim(),onClick:()=>void Y(),children:[(0,U.jsx)(E,{icon:T?.candidateId===M.id&&T.state===`copied`?B.accept:T?.candidateId===M.id&&T.state===`failed`?B.problem:B.copy,size:12,active:T?.candidateId===M.id}),(0,U.jsx)(`span`,{"aria-live":`polite`,children:T?.candidateId===M.id?T.state===`copied`?`Copied`:`Copy failed`:`Copy response`})]}),(0,U.jsxs)(`button`,{type:`button`,className:I,disabled:!K,title:K?void 0:G?.unavailableModels.length?`Unavailable model: ${ue(G.unavailableModels)}`:`The original pool no longer supports this target or has no models.`,onClick:J,children:[(0,U.jsx)(E,{icon:B.retry,size:12}),` Regenerate`]})]})]}),G?.unavailableModels.length?(0,U.jsxs)(`div`,{className:r(P,i({marginTop:`0.375rem`})),children:[`Cannot regenerate. Unavailable in the current model catalog: `,ue(G.unavailableModels),`.`]}):null,M.error?(0,U.jsx)(`div`,{role:`alert`,className:i({marginTop:`0.75rem`,border:`1px solid color-mix(in srgb, var(--destructive) 45%, var(--border))`,borderRadius:`0.375rem`,background:`color-mix(in srgb, var(--destructive) 8%, transparent)`,padding:`0.625rem`,fontSize:`0.75rem`,color:`var(--destructive)`}),children:M.error}):null,M.content?(0,U.jsx)(`div`,{className:i({marginTop:`1rem`,maxWidth:`72ch`,overflowWrap:`anywhere`,fontSize:`0.875rem`,lineHeight:1.65,color:`var(--foreground)`}),children:C===`rendered`?(0,U.jsx)(c,{blocks:s(M.content,{sessionId:`candidate`,messageId:M.id})}):(0,U.jsx)(`pre`,{className:i({overflow:`auto`,whiteSpace:`pre-wrap`,overflowWrap:`anywhere`,fontFamily:`var(--font-mono, ui-monospace, monospace)`,fontSize:`0.8125rem`,lineHeight:1.6}),children:M.content})}):M.state===`running`||M.state===`queued`?(0,U.jsx)(`div`,{className:r(P,i({marginTop:`0.75rem`})),children:`Waiting for model output...`}):null,(0,U.jsxs)(`div`,{className:i({display:`flex`,flexWrap:`wrap`,justifyContent:`flex-end`,gap:`0.375rem`,borderTop:`1px solid var(--border)`,marginTop:`0.75rem`,paddingTop:`0.625rem`}),children:[(0,U.jsxs)(`button`,{type:`button`,className:I,disabled:M.state!==`completed`||!M.content?.trim(),onClick:()=>b(M.id),children:[(0,U.jsx)(E,{icon:B.accept,size:12}),` Choose`]}),(0,U.jsxs)(`button`,{type:`button`,className:z,disabled:M.state!==`completed`||!M.content?.trim(),onClick:()=>x(M.id),children:[(0,U.jsx)(E,{icon:B.add,size:12}),` Insert`]})]})]}):null]}):(0,U.jsx)(`div`,{className:i({display:`grid`,minHeight:`10rem`,placeItems:`center`,padding:`1rem`,textAlign:`center`,fontSize:`0.75rem`,color:`var(--muted-foreground)`}),children:`Generate parallel teaching moves for the active turn or artifact.`})})]})}var fe=i({display:`flex`,alignItems:`center`,justifyContent:`space-between`,gap:`0.5rem`,marginBottom:`0.4rem`}),pe=i({fontSize:`0.7rem`,lineHeight:1.45,color:`var(--ink-soft)`}),me=i({display:`flex`,alignItems:`center`,gap:`0.25rem`,flexShrink:0}),he=i({display:`inline-flex`,width:`1.75rem`,height:`1.75rem`,flexShrink:0,alignItems:`center`,justifyContent:`center`,borderRadius:`{radii.keating}`,color:`var(--ink-soft)`,cursor:`pointer`,transitionProperty:`background-color, color`,transitionDuration:`{durations.base}`,_hover:{background:`color-mix(in srgb, var(--ink) 8%, transparent)`,color:`var(--ink)`},_focusVisible:{outline:`3px solid var(--accent)`,outlineOffset:`1px`}}),ge=i({fontFamily:`var(--mono-body)`,fontSize:`10px`,fontWeight:600,letterSpacing:`0.09em`,textTransform:`uppercase`,color:`var(--ink-soft)`,cursor:`pointer`,_hover:{color:`var(--ink)`,textDecoration:`underline`},_focusVisible:{outline:`3px solid var(--accent)`,outlineOffset:`2px`}});function _e({quote:e,anchored:t}){return t&&e?(0,U.jsx)(`blockquote`,{className:i({marginTop:`0.35rem`,borderInlineStart:`2px solid var(--line)`,paddingInlineStart:`0.45rem`,fontSize:`0.7rem`,lineHeight:1.45,fontStyle:`italic`,color:`var(--ink-soft)`}),children:e.length>180?`${e.slice(0,177)}…`:e}):(0,U.jsxs)(`p`,{className:r(pe,i({marginTop:`0.3rem`,display:`flex`,alignItems:`center`,gap:`0.3rem`})),children:[(0,U.jsx)(E,{icon:B.problem,size:12}),`Unanchored — no matching quote in that turn.`]})}function ve({proposals:e,onAccept:t,onDismiss:n,onDismissAll:a,onReveal:o,busy:s}){return e.length===0?null:(0,U.jsxs)(`section`,{"aria-label":`Proposed notes`,children:[(0,U.jsxs)(`div`,{className:fe,children:[(0,U.jsxs)(`span`,{className:m(),children:[`Proposed · `,e.length]}),(0,U.jsx)(`button`,{type:`button`,className:ge,onClick:a,children:`Dismiss all`})]}),(0,U.jsx)(`ul`,{className:i({display:`grid`,gap:`0.4rem`}),children:e.map(e=>(0,U.jsxs)(`li`,{className:h({kind:e.kind,state:`proposed`}),children:[(0,U.jsxs)(`div`,{className:i({display:`flex`,alignItems:`flex-start`,justifyContent:`space-between`,gap:`0.5rem`}),children:[(0,U.jsxs)(`div`,{className:i({minWidth:0}),children:[(0,U.jsxs)(`span`,{className:r(m(),i({fontSize:`10px`})),children:[M(e.kind),e.severity?` · ${V(e.severity)}`:``,e.category?` · ${e.category}`:``]}),(0,U.jsx)(`p`,{className:i({marginTop:`0.2rem`,color:`var(--ink)`}),children:e.note})]}),(0,U.jsxs)(`div`,{className:me,children:[(0,U.jsx)(`button`,{type:`button`,className:he,"aria-label":`Accept this note`,disabled:s,onClick:()=>t(e),children:(0,U.jsx)(E,{icon:B.accept,size:14})}),(0,U.jsx)(`button`,{type:`button`,className:he,"aria-label":`Dismiss this note`,onClick:()=>n(e.id),children:(0,U.jsx)(E,{icon:B.dismiss,size:14})})]})]}),(0,U.jsx)(_e,{quote:e.anchor?.quote,anchored:e.anchored}),e.pedagogicalImpact?(0,U.jsxs)(`p`,{className:r(pe,i({marginTop:`0.35rem`})),children:[(0,U.jsx)(`strong`,{className:i({color:`var(--ink)`,fontWeight:650}),children:`Impact. `}),e.pedagogicalImpact]}):null,e.suggestedAlternative?(0,U.jsxs)(`p`,{className:r(pe,i({marginTop:`0.25rem`})),children:[(0,U.jsx)(`strong`,{className:i({color:`var(--ink)`,fontWeight:650}),children:`Instead. `}),e.suggestedAlternative]}):null,o&&e.messageId?(0,U.jsx)(`button`,{type:`button`,className:r(ge,i({marginTop:`0.35rem`})),onClick:()=>o(e),children:`Show the turn`}):null]},e.id))})]})}function ye({proposal:e,onApply:t,onDismiss:n,busy:a}){if(e.ratings.length===0&&!e.summary)return null;let o=new Map(e.ratings.map(e=>[e.key,e]));return(0,U.jsxs)(`section`,{"aria-label":`Proposed rubric scores`,className:h({state:`proposed`}),children:[(0,U.jsxs)(`div`,{className:fe,children:[(0,U.jsx)(`span`,{className:m(),children:`Proposed scoring`}),(0,U.jsxs)(`div`,{className:me,children:[(0,U.jsx)(`button`,{type:`button`,className:ge,disabled:a||e.ratings.length===0,onClick:()=>t(e),children:`Apply`}),(0,U.jsx)(`button`,{type:`button`,className:he,"aria-label":`Dismiss proposed scoring`,onClick:n,children:(0,U.jsx)(E,{icon:B.dismiss,size:14})})]})]}),e.judgement?(0,U.jsxs)(`p`,{className:pe,children:[e.judgement.calibrated?`Calibrated model estimate`:`Uncalibrated model estimate`,` · ${e.judgement.backend.backend}/${e.judgement.backend.model}. Review the cited evidence before applying.`]}):null,(0,U.jsx)(`dl`,{className:i({display:`grid`,gap:`0.3rem`}),children:C.map(e=>{let t=o.get(e);return t?(0,U.jsxs)(`div`,{children:[(0,U.jsxs)(`dt`,{className:i({display:`flex`,alignItems:`baseline`,justifyContent:`space-between`,gap:`0.5rem`,fontSize:`0.72rem`,fontWeight:650,color:`var(--ink)`}),children:[(0,U.jsx)(`span`,{children:F[e]}),(0,U.jsxs)(`span`,{className:i({fontFamily:`var(--mono-body)`,color:`var(--accent-dim)`}),children:[t.rating,`/5 · `,D(t.rating)]})]}),(0,U.jsx)(`dd`,{className:pe,children:t.justification}),t.anchored&&t.anchor?(0,U.jsx)(_e,{quote:t.anchor.quote,anchored:!0}):null]},e):null})}),e.summary?(0,U.jsxs)(`p`,{className:r(pe,i({marginTop:`0.45rem`})),children:[(0,U.jsx)(`strong`,{className:i({color:`var(--ink)`,fontWeight:650}),children:`Summary. `}),e.summary]}):null,e.overallRating||e.verdict?(0,U.jsxs)(`p`,{className:r(m(),i({marginTop:`0.4rem`,fontSize:`10px`})),children:[e.overallRating?`Overall ${e.overallRating}/5`:``,e.overallRating&&e.verdict?` · `:``,e.verdict?O(e.verdict):``]}):null]})}function be(e){return[e.input.includes(`image`)?`Vision`:``,e.reasoning?`Thinking`:``,e.contextWindow>=256e3?`Long context`:``].filter(Boolean)}function xe(e){return`${e.provider}::${e.api}::${e.id}`}function Se({pools:e,availableModels:t,activePoolId:n,onSelectPool:a,onChange:o,onAddModel:s,onRemoveModel:c,onCreatePool:f,onDeletePool:p}){let[m,h]=(0,H.useState)(!1),g=e.find(e=>e.id===n)??e[0],v=(0,H.useMemo)(()=>g?g.models.map(xe):[],[g]),b=(0,H.useMemo)(()=>new Set(t.map(xe)),[t]);function S(e,t){g&&o({...g,models:g.models.map((n,r)=>r===e?{...n,...t}:n)})}function C(e){if(!g)return;let t=g.tasks.includes(e)?g.tasks.filter(t=>t!==e):[...g.tasks,e];o({...g,tasks:t})}return(0,U.jsxs)(`div`,{className:i({display:`flex`,flexDirection:`column`,gap:`0.875rem`}),children:[(0,U.jsxs)(`div`,{className:i({display:`flex`,alignItems:`flex-end`,gap:`0.5rem`}),children:[(0,U.jsxs)(`label`,{className:i({minWidth:0,flex:1,fontSize:`0.6875rem`,fontWeight:650,color:`var(--foreground)`}),children:[`Pool`,(0,U.jsxs)(l,{"aria-label":`Model pool`,value:g?.id??``,className:r(k,i({marginTop:`0.25rem`})),disabled:e.length===0,onValueChange:e=>a(e),children:[e.length===0?(0,U.jsx)(`option`,{value:``,children:`No model pools`}):null,e.map(e=>(0,U.jsx)(`option`,{value:e.id,children:e.name},e.id))]})]}),(0,U.jsxs)(`button`,{type:`button`,className:I,onClick:f,children:[(0,U.jsx)(u,{size:12,"aria-hidden":`true`}),` New`]})]}),g?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)(`div`,{className:i({display:`grid`,gridTemplateColumns:`minmax(0, 1fr) auto`,alignItems:`end`,gap:`0.5rem`}),children:[(0,U.jsxs)(`label`,{className:i({fontSize:`0.6875rem`,fontWeight:650,color:`var(--foreground)`}),children:[`Pool name`,(0,U.jsx)(`input`,{value:g.name,className:r(k,i({marginTop:`0.25rem`})),onChange:e=>o({...g,name:e.currentTarget.value})})]}),(0,U.jsx)(`button`,{type:`button`,className:R,"aria-label":`Delete ${g.name}`,onClick:()=>p(g.id),children:(0,U.jsx)(d,{size:14,"aria-hidden":`true`})})]}),(0,U.jsxs)(`div`,{className:i({display:`grid`,gridTemplateColumns:`repeat(3, minmax(0, 1fr))`,gap:`0.5rem`}),children:[(0,U.jsxs)(`label`,{className:i({fontSize:`0.625rem`,fontWeight:650,color:`var(--muted-foreground)`}),children:[`Candidates`,(0,U.jsx)(`input`,{type:`number`,min:1,max:8,step:1,value:g.candidateCount,className:r(k,i({marginTop:`0.25rem`,paddingInline:`0.375rem`})),onChange:e=>o({...g,candidateCount:Number(e.currentTarget.value)})})]}),(0,U.jsxs)(`label`,{className:i({fontSize:`0.625rem`,fontWeight:650,color:`var(--muted-foreground)`}),children:[`Temperature`,(0,U.jsx)(`input`,{type:`number`,min:0,max:2,step:.1,value:g.temperature,className:r(k,i({marginTop:`0.25rem`,paddingInline:`0.375rem`})),onChange:e=>o({...g,temperature:Number(e.currentTarget.value)})})]}),(0,U.jsxs)(`label`,{className:i({fontSize:`0.625rem`,fontWeight:650,color:`var(--muted-foreground)`}),children:[`Max tokens`,(0,U.jsx)(`input`,{type:`number`,min:64,max:65536,step:64,value:g.maxTokens,className:r(k,i({marginTop:`0.25rem`,paddingInline:`0.375rem`})),onChange:e=>o({...g,maxTokens:Number(e.currentTarget.value)})})]})]}),(0,U.jsxs)(`fieldset`,{className:i({borderTop:`1px solid var(--border)`,paddingTop:`0.75rem`}),children:[(0,U.jsx)(`legend`,{className:A,children:`Generation tasks`}),(0,U.jsx)(`div`,{className:i({display:`flex`,flexWrap:`wrap`,gap:`0.25rem`,paddingTop:`0.5rem`}),children:re.map(e=>(0,U.jsxs)(`label`,{className:i({cursor:`pointer`,borderRadius:`9999px`,border:`1px solid`,borderColor:g.tasks.includes(e.value)?`var(--ink)`:`var(--border)`,background:g.tasks.includes(e.value)?`var(--ink)`:`var(--background)`,padding:`0.25rem 0.5rem`,fontSize:`0.625rem`,fontWeight:650,color:g.tasks.includes(e.value)?`var(--paper)`:`var(--foreground)`,_focusWithin:{outline:`3px solid var(--accent)`,outlineOffset:`1px`}}),children:[(0,U.jsx)(`input`,{type:`checkbox`,checked:g.tasks.includes(e.value),className:i({position:`absolute`,opacity:0,pointerEvents:`none`}),onChange:()=>C(e.value)}),e.label]},e.value))})]}),(0,U.jsxs)(`section`,{className:i({borderTop:`1px solid var(--border)`,paddingTop:`0.75rem`}),"aria-labelledby":`trajectory-pool-models-heading`,children:[(0,U.jsxs)(`div`,{className:i({display:`flex`,alignItems:`baseline`,justifyContent:`space-between`,gap:`0.5rem`}),children:[(0,U.jsx)(`div`,{id:`trajectory-pool-models-heading`,className:A,children:`Models`}),(0,U.jsxs)(`div`,{className:P,children:[g.models.length,` configured`]})]}),(0,U.jsxs)(`div`,{className:i({display:`flex`,flexDirection:`column`,gap:`0.625rem`,paddingTop:`0.5rem`}),children:[g.models.map((e,t)=>{let n=be(y(e)),a=!b.has(xe(e));return(0,U.jsxs)(`div`,{className:i({borderBottom:`1px solid var(--border)`,paddingBottom:`0.625rem`}),children:[(0,U.jsxs)(`div`,{className:i({display:`flex`,alignItems:`flex-start`,gap:`0.5rem`}),children:[(0,U.jsxs)(`div`,{className:i({minWidth:0,flex:1}),children:[(0,U.jsx)(`div`,{className:i({fontSize:`0.8125rem`,fontWeight:700,lineHeight:1.25,overflowWrap:`anywhere`}),children:e.name}),(0,U.jsxs)(`div`,{className:i({marginTop:`0.125rem`,fontSize:`0.6875rem`,color:`var(--muted-foreground)`,overflowWrap:`anywhere`}),children:[`Provider: `,e.provider,e.name===e.id?``:` · ${e.id}`]})]}),(0,U.jsx)(`button`,{type:`button`,className:r(R,i({width:`2rem`,height:`2rem`,flexShrink:0})),"aria-label":`Remove ${e.name}`,onClick:()=>c(g.id,e),children:(0,U.jsx)(d,{size:13,"aria-hidden":`true`})})]}),n.length>0||a?(0,U.jsxs)(`div`,{className:i({display:`flex`,flexWrap:`wrap`,gap:`0.25rem`,marginTop:`0.375rem`}),children:[a?(0,U.jsx)(`span`,{className:i({borderRadius:`9999px`,background:`color-mix(in srgb, var(--destructive) 15%, transparent)`,padding:`0.125rem 0.5rem`,fontSize:`0.625rem`,fontWeight:600,color:`var(--destructive)`}),children:`Not in catalog`}):null,n.map(e=>(0,U.jsx)(`span`,{className:i({borderRadius:`9999px`,background:`var(--muted)`,padding:`0.125rem 0.5rem`,fontSize:`0.625rem`,fontWeight:600,color:`var(--muted-foreground)`}),children:e},e))]}):null,(0,U.jsxs)(`label`,{className:i({display:`block`,marginTop:`0.375rem`,fontSize:`0.625rem`,color:`var(--muted-foreground)`}),children:[`Pool display name`,(0,U.jsx)(`input`,{value:e.name,className:r(k,i({marginTop:`0.2rem`,minHeight:`2rem`,paddingInline:`0.375rem`})),onChange:e=>S(t,{name:e.currentTarget.value})})]}),(0,U.jsxs)(`div`,{className:r(P,i({marginTop:`0.375rem`})),children:[e.contextWindow.toLocaleString(),` context · `,e.maxTokens.toLocaleString(),` max output`]})]},`${e.provider}:${e.id}:${t}`)}),g.models.length===0?(0,U.jsx)(`div`,{className:i({paddingBlock:`0.75rem`,textAlign:`center`,fontSize:`0.75rem`,color:`var(--muted-foreground)`}),children:`Add at least one named model before generating candidates.`}):null,(0,U.jsx)(`div`,{className:i({borderTop:`1px solid var(--border)`,paddingTop:`0.625rem`}),children:(0,U.jsxs)(`button`,{type:`button`,className:r(I,i({width:`100%`,justifyContent:`center`})),onClick:()=>h(!0),children:[(0,U.jsx)(u,{size:12,"aria-hidden":`true`}),` Add model`]})}),(0,U.jsx)(`div`,{className:P,children:`Picks come from the same catalog as chat, so hidden providers and custom models agree across both.`})]})]})]}):(0,U.jsx)(`div`,{className:i({display:`grid`,minHeight:`10rem`,placeItems:`center`,padding:`1rem`,textAlign:`center`,fontSize:`0.75rem`,color:`var(--muted-foreground)`}),children:`Create a pool to group the models used for parallel review candidates.`}),(0,U.jsx)(_,{open:m&&!!g,currentModel:null,title:`Add a model to this pool`,description:g?`Candidates for “${g.name}” are generated once per model in the pool.`:``,actionLabel:`Add to pool`,excludeKeys:v,preloadBrowserModel:!1,onClose:()=>h(!1),onSelect:e=>{g&&s(g.id,x(e)),h(!1)}})]})}var Ce=i({position:`relative`,borderBottom:`1px solid var(--line)`,background:`color-mix(in srgb, var(--accent) 5%, var(--paper))`,overflow:`hidden`}),we=i({position:`absolute`,insetInline:0,top:0,height:`2px`,background:`linear-gradient(90deg, transparent, var(--accent-dim), transparent)`,animation:`socratic-sweep 1.6s {easings.standard} infinite`,pointerEvents:`none`}),Te=i({display:`flex`,width:`100%`,alignItems:`center`,gap:`0.55rem`,padding:`0.7rem 0.75rem`,cursor:`pointer`,textAlign:`left`,color:`var(--ink)`,transitionProperty:`background-color`,transitionDuration:`{durations.base}`,_hover:{background:`color-mix(in srgb, var(--accent) 10%, transparent)`,"& .keating-duo-icon":{transform:`rotate(-10deg) scale(1.12)`}},_focusVisible:{outline:`3px solid var(--accent)`,outlineOffset:`-3px`}}),Ee=i({animation:`socratic-nib 900ms ease-in-out infinite`}),De=i({display:`grid`,gap:`0.4rem`,padding:`0 0.75rem 0.75rem`}),Oe=i({marginTop:`0.15rem`,fontSize:`0.7rem`,lineHeight:1.45,color:`var(--ink-soft)`});function ke({options:e,pools:t,poolId:n,onPoolChange:a,running:o,onRun:s,onCancel:c,footnote:u,className:d}){let[f,h]=(0,H.useState)(!1),g=(0,H.useId)(),_=(0,H.useRef)(null);(0,H.useEffect)(()=>{o&&h(!1)},[o]),(0,H.useEffect)(()=>{f&&_.current?.focus()},[f]);let v=o?e.find(e=>e.kind===o):void 0;return(0,U.jsxs)(`section`,{className:r(Ce,d),"aria-label":`Socratic pass`,children:[o?(0,U.jsx)(`span`,{className:we,"aria-hidden":`true`}):null,(0,U.jsxs)(`button`,{type:`button`,className:Te,"aria-expanded":o?void 0:f,"aria-controls":o?void 0:g,"data-active":o?`true`:void 0,onClick:()=>o?c():h(e=>!e),children:[(0,U.jsx)(E,{icon:B[v?.icon??`pass`],size:17,active:!!o,className:o?Ee:void 0}),(0,U.jsxs)(`span`,{className:i({minWidth:0,flex:1}),children:[(0,U.jsx)(`span`,{className:i({display:`block`,fontFamily:`var(--mono-display)`,fontSize:`0.8rem`,fontWeight:700,letterSpacing:`0.01em`}),children:o?`${v?.label??`Pass`}…`:`Socratic pass`}),(0,U.jsx)(`span`,{className:Oe,children:o?`Reading the session. Click to stop.`:`Have Keating read this session with you.`})]}),(0,U.jsx)(`span`,{className:r(m(),i({fontSize:`10px`})),"aria-hidden":`true`,children:o?`STOP`:f?`CLOSE`:`OPEN`})]}),f&&!o?(0,U.jsxs)(`div`,{id:g,className:De,children:[t.length>1?(0,U.jsxs)(`label`,{className:i({display:`grid`,gap:`0.25rem`,marginBottom:`0.15rem`}),children:[(0,U.jsx)(`span`,{className:r(m(),i({fontSize:`10px`})),children:`Model pool`}),(0,U.jsx)(l,{"aria-label":`Socratic model pool`,value:n,onValueChange:e=>a(e),className:i({width:`100%`,minHeight:`2rem`,border:`1.5px solid var(--ink)`,borderRadius:`{radii.keating}`,background:`var(--card)`,color:`var(--ink)`,paddingInline:`0.5rem`,fontSize:`0.75rem`,_focusVisible:{outline:`3px solid var(--accent)`,outlineOffset:`1px`}}),children:t.map(e=>(0,U.jsx)(`option`,{value:e.id,children:e.name},e.id))})]}):null,e.map((e,t)=>(0,U.jsx)(`button`,{ref:t===0?_:void 0,type:`button`,className:p(),disabled:e.disabled,title:e.disabled?e.disabledReason:void 0,onClick:()=>s(e.kind),children:(0,U.jsxs)(`span`,{className:i({display:`flex`,alignItems:`flex-start`,gap:`0.5rem`}),children:[(0,U.jsx)(E,{icon:B[e.icon],size:16,className:i({marginTop:`0.1rem`,color:`var(--accent-dim)`})}),(0,U.jsxs)(`span`,{className:i({minWidth:0}),children:[(0,U.jsx)(`span`,{className:i({display:`block`,fontSize:`0.78rem`,fontWeight:650,color:`var(--ink)`}),children:e.label}),(0,U.jsx)(`span`,{className:Oe,children:e.disabled?e.disabledReason??e.blurb:e.blurb})]})]})},e.kind)),u?(0,U.jsx)(`p`,{className:r(Oe,i({paddingInline:`0.15rem`})),children:u}):null]}):null]})}var Ae=[{kind:`critique-sweep`,label:`Read the session`,blurb:`Marks the moments an examiner would flag — strengths included — each quoting the line it is about.`,icon:`sweep`},{kind:`rubric-score`,label:`Score the rubric`,blurb:`Uses Judgement settings to estimate supported dimensions with citations; uncertain dimensions stay unscored.`,icon:`measure`}],je=[{kind:`annotation-expand`,label:`Finish this note`,blurb:`Takes the note you are writing and fills in its impact and a concrete alternative.`,icon:`expand`},...Ae],Me=i({padding:`0.75rem`}),Ne=i({fontFamily:`var(--mono-body)`,fontSize:`0.6875rem`,fontWeight:700,letterSpacing:`0.09em`,textTransform:`uppercase`,color:`var(--ink-soft)`}),Pe=i({fontSize:`0.6875rem`,fontWeight:650,color:`var(--ink)`});function Fe(e,t){return{...e,...t,updatedAt:Date.now()}}function Ie({name:e,label:t,hint:n,value:r,onChange:a}){return(0,U.jsxs)(`fieldset`,{title:n,className:i({display:`grid`,gridTemplateColumns:`minmax(6.5rem, 1fr) auto`,alignItems:`center`,gap:`0.5rem`,borderBottom:`1px solid var(--line-soft)`,paddingBlock:`0.5rem`}),children:[(0,U.jsx)(`legend`,{className:i({float:`left`,fontSize:`0.75rem`,fontWeight:600,color:`var(--ink)`}),children:t}),(0,U.jsx)(`div`,{className:i({display:`flex`,gap:`0.2rem`}),children:[1,2,3,4,5].map(t=>(0,U.jsxs)(`label`,{title:`${t}: ${D(t)}`,className:i({cursor:`pointer`}),children:[(0,U.jsx)(`input`,{type:`radio`,name:e,value:t,checked:r===t,className:i({position:`absolute`,opacity:0,pointerEvents:`none`}),onChange:()=>a(t)}),(0,U.jsx)(`span`,{className:i({display:`inline-flex`,width:`1.65rem`,height:`1.65rem`,alignItems:`center`,justifyContent:`center`,borderRadius:`{radii.keating}`,border:`1.5px solid`,borderColor:r===t?`var(--ink)`:`var(--line)`,background:r===t?`var(--ink)`:`var(--card)`,boxShadow:r===t?`2px 2px 0 var(--ink-soft)`:`none`,fontFamily:`var(--mono-body)`,fontSize:`0.6875rem`,fontWeight:700,color:r===t?`var(--paper)`:`var(--ink-soft)`,transitionProperty:`background-color, color, box-shadow, transform`,transitionDuration:`{durations.fast}`,_hover:{borderColor:`var(--ink)`,transform:`translateY(-1px)`},_focusWithin:{outline:`3px solid var(--accent)`,outlineOffset:`1px`}}),children:t})]},t))})]})}function Le({id:e,controls:t,label:n,icon:a,state:o,badge:s,open:c,onToggle:l}){return(0,U.jsxs)(`button`,{type:`button`,id:e,"aria-controls":t,"aria-expanded":c,className:i({display:`flex`,width:`100%`,alignItems:`center`,gap:`0.5rem`,borderBottom:`1px solid var(--line-soft)`,background:c?`var(--muted)`:`transparent`,padding:`0.55rem 0.7rem`,fontSize:`0.75rem`,fontWeight:700,color:`var(--ink)`,textAlign:`left`,_hover:{background:`var(--muted)`},_focusVisible:{outline:`3px solid var(--accent)`,outlineOffset:`-2px`}}),onClick:l,children:[(0,U.jsx)(E,{icon:B[a],size:14}),(0,U.jsx)(`span`,{children:n}),s&&s>0?(0,U.jsx)(`span`,{"aria-label":`${s} proposed`,className:i({minWidth:`1.05rem`,borderRadius:`9999px`,background:`var(--accent-dim)`,paddingInline:`0.3rem`,fontSize:`9px`,fontWeight:700,color:`var(--paper)`,textAlign:`center`}),children:s}):null,(0,U.jsx)(`span`,{className:r(P,i({marginLeft:`auto`,fontVariantNumeric:`tabular-nums`})),children:o})]})}function Re({data:e,callbacks:t,activeTarget:n,passes:a,passCallbacks:o,draftAnchored:s,onOpenCandidates:c,className:u}){let[d,p]=(0,H.useState)(`margin`),{review:g,annotations:_,annotationDraft:v,candidates:y,modelPools:b,busy:x}=e,S=[..._].sort((t,n)=>{let r=+(t.targetKey===e.activeTargetKey);return+(n.targetKey===e.activeTargetKey)-r||n.updatedAt-t.updatedAt}),w=v?.note.trim()?je:Ae,T=C.filter(e=>g.ratings[e]).length,D=Object.keys(g.selectedCandidateIds).length,A=_.length===0?`empty`:`${_.length} note${_.length===1?``:`s`}`,M=`${O(g.verdict)} · ${T}/${C.length}`,N=y.length===0?`none generated`:`${y.length} candidate${y.length===1?``:`s`} · ${D===0?`none chosen`:`${D} chosen`}`,V=_.filter(e=>e.note.trim().length>0).length+D,W=a?.critique.length??0;return(0,U.jsxs)(`aside`,{className:r(f({tone:`margin`}),i({height:`100%`}),u),"aria-label":`Review Desk`,children:[(0,U.jsxs)(`header`,{className:i({display:`flex`,minHeight:`3.25rem`,alignItems:`center`,justifyContent:`space-between`,gap:`0.5rem`,borderBottom:`1px solid var(--line)`,paddingInline:`0.75rem`}),children:[(0,U.jsxs)(`div`,{className:i({minWidth:0}),children:[(0,U.jsx)(`div`,{className:i({fontFamily:`var(--mono-display)`,fontSize:`0.8125rem`,fontWeight:700,letterSpacing:`0.01em`,color:`var(--ink)`}),children:`The Margin`}),(0,U.jsx)(`div`,{className:P,children:g.status===`final`?`Final review`:`Working draft`})]}),(0,U.jsxs)(`div`,{className:i({display:`flex`,gap:`0.25rem`}),children:[(0,U.jsx)(`button`,{type:`button`,className:R,"aria-label":x?.exporting?`Exporting review`:`Export review`,disabled:x?.exporting,onClick:t.onExport,children:(0,U.jsx)(E,{icon:B.export,size:15})}),(0,U.jsxs)(`button`,{type:`button`,className:z,disabled:x?.saving,onClick:t.onSave,children:[(0,U.jsx)(E,{icon:B.save,size:14}),` `,x?.saving?`Saving`:`Save`]})]})]}),a&&o?(0,U.jsx)(ke,{options:w,pools:b,poolId:e.activeModelPoolId??b[0]?.id??``,onPoolChange:t.onSelectModelPool,running:a.running,onRun:o.onRunPass,onCancel:o.onCancelPass,footnote:a.footnote}):null,a?.error?(0,U.jsxs)(`div`,{role:`alert`,className:i({display:`flex`,alignItems:`flex-start`,gap:`0.4rem`,borderBottom:`1px solid color-mix(in srgb, var(--destructive) 35%, var(--line))`,background:`color-mix(in srgb, var(--destructive) 8%, var(--paper))`,padding:`0.55rem 0.75rem`,fontSize:`0.72rem`,lineHeight:1.45,color:`var(--destructive)`}),children:[(0,U.jsx)(E,{icon:B.problem,size:14,className:i({marginTop:`0.05rem`})}),(0,U.jsx)(`span`,{className:i({minWidth:0,flex:1}),children:a.error}),(0,U.jsx)(`button`,{type:`button`,className:R,"aria-label":`Dismiss pass error`,onClick:o?.onDismissPassError,children:(0,U.jsx)(E,{icon:B.dismiss,size:13})})]}):null,e.error?(0,U.jsx)(`div`,{role:`alert`,className:i({borderBottom:`1px solid color-mix(in srgb, var(--destructive) 35%, var(--line))`,background:`color-mix(in srgb, var(--destructive) 8%, var(--paper))`,padding:`0.625rem 0.75rem`,fontSize:`0.75rem`,lineHeight:1.4,color:`var(--destructive)`}),children:e.error}):null,(0,U.jsxs)(`div`,{className:i({minHeight:0,flex:1,overflowY:`auto`}),children:[(0,U.jsx)(Le,{id:`trajectory-desk-margin-tab`,controls:`trajectory-desk-margin-panel`,label:`Margin`,icon:`annotate`,state:A,badge:W,open:d===`margin`,onToggle:()=>p(d===`margin`?null:`margin`)}),(0,U.jsx)(`section`,{id:`trajectory-desk-margin-panel`,role:`region`,"aria-labelledby":`trajectory-desk-margin-tab`,hidden:d!==`margin`,className:Me,children:v?(0,U.jsx)(`div`,{className:s?i({md:{display:`none`}}):void 0,children:(0,U.jsx)(ne,{draft:v,onChange:t.onAnnotationDraftChange,onSave:t.onSaveAnnotation,onCancel:t.onCancelAnnotation,isSaving:x?.saving,onExpand:a&&o?()=>o.onRunPass(`annotation-expand`):void 0,isExpanding:a?.running===`annotation-expand`})}):(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)(`div`,{className:i({display:`flex`,alignItems:`center`,justifyContent:`space-between`,gap:`0.5rem`}),children:[(0,U.jsxs)(`div`,{children:[(0,U.jsx)(`div`,{className:Ne,children:`Marginalia`}),(0,U.jsxs)(`div`,{className:P,children:[_.length,` on this session`]})]}),(0,U.jsxs)(`button`,{type:`button`,className:z,onClick:()=>t.onStartAnnotation(n),children:[(0,U.jsx)(E,{icon:B.add,size:13}),` Add`]})]}),a&&o&&W>0?(0,U.jsx)(`div`,{className:i({marginTop:`0.75rem`}),children:(0,U.jsx)(ve,{proposals:a.critique,onAccept:o.onAcceptProposal,onDismiss:o.onDismissProposal,onDismissAll:o.onDismissAllProposals,onReveal:o.onRevealProposal,busy:x?.saving})}):null,S.length>0?(0,U.jsx)(`ul`,{className:i({marginTop:`0.75rem`,display:`grid`,gap:`0.4rem`}),children:S.map(n=>(0,U.jsxs)(`li`,{className:r(h({kind:n.kind,state:`saved`}),i({display:`grid`,gridTemplateColumns:`minmax(0, 1fr) auto`,gap:`0.375rem`,alignItems:`start`})),children:[(0,U.jsxs)(`button`,{type:`button`,"aria-current":n.id===e.activeAnnotationId?`true`:void 0,className:i({minWidth:0,borderRadius:`{radii.keating}`,textAlign:`left`,cursor:`pointer`,_focusVisible:{outline:`3px solid var(--accent)`,outlineOffset:`2px`}}),onClick:()=>t.onEditAnnotation(n),children:[(0,U.jsxs)(`span`,{className:i({display:`flex`,alignItems:`center`,gap:`0.375rem`}),children:[(0,U.jsx)(`span`,{className:r(m(),i({fontSize:`10px`,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`})),children:n.category}),n.targetKey===e.activeTargetKey?(0,U.jsx)(`span`,{className:i({borderRadius:`9999px`,background:`color-mix(in srgb, var(--ink) 10%, transparent)`,padding:`0.1rem 0.35rem`,fontSize:`0.5625rem`,fontWeight:700,color:`var(--ink-soft)`}),children:`Current`}):null]}),(0,U.jsx)(`span`,{className:i({display:`block`,marginTop:`0.2rem`,maxHeight:`2.4rem`,overflow:`hidden`,fontSize:`0.72rem`,lineHeight:1.4,color:`var(--ink)`}),children:n.note}),(0,U.jsx)(`span`,{className:r(P,i({display:`block`,marginTop:`0.2rem`,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`})),children:ee(n.target)})]}),(0,U.jsx)(`button`,{type:`button`,className:R,"aria-label":`Delete ${n.category} annotation`,onClick:()=>t.onDeleteAnnotation(n.id),children:(0,U.jsx)(E,{icon:B.discard,size:13})})]},n.id))}):W===0?(0,U.jsx)(`div`,{className:i({display:`grid`,minHeight:`10rem`,placeItems:`center`,padding:`1rem`,textAlign:`center`,fontSize:`0.75rem`,color:`var(--ink-soft)`}),children:(0,U.jsxs)(`div`,{children:[(0,U.jsx)(E,{icon:B.quote,size:22,className:i({marginInline:`auto`,marginBottom:`0.5rem`})}),`Select a line in the transcript, or add a note on the active target.`]})}):null]})}),(0,U.jsx)(Le,{id:`trajectory-desk-assessment-tab`,controls:`trajectory-desk-assessment-panel`,label:`Assess`,icon:`rubric`,state:M,open:d===`assessment`,onToggle:()=>p(d===`assessment`?null:`assessment`)}),(0,U.jsxs)(`section`,{id:`trajectory-desk-assessment-panel`,role:`region`,"aria-labelledby":`trajectory-desk-assessment-tab`,hidden:d!==`assessment`,className:Me,children:[(0,U.jsxs)(`p`,{className:i({fontSize:`0.72rem`,color:`var(--ink-soft)`,marginBottom:`0.65rem`}),children:[`Rubric scoring uses your independent `,(0,U.jsx)(`a`,{href:`/chat?settings=judgement`,target:`_blank`,rel:`noopener noreferrer`,children:`Judgement settings`}),`.`]}),g.rubricJudgement?(0,U.jsxs)(`p`,{className:i({fontSize:`0.72rem`,color:`var(--ink-soft)`,marginBottom:`0.65rem`}),children:[g.rubricJudgement.calibrated?`Applied model estimate`:`Applied uncalibrated estimate`,` · ${g.rubricJudgement.backend.backend}/${g.rubricJudgement.backend.model}. Original evidence is retained; your edits remain separate from that estimate.`]}):null,a?.rubric&&o?(0,U.jsx)(`div`,{className:i({marginBottom:`0.85rem`}),children:(0,U.jsx)(ye,{proposal:a.rubric,onApply:o.onApplyRubric,onDismiss:o.onDismissRubric,busy:x?.saving})}):null,(0,U.jsxs)(`div`,{className:i({display:`grid`,gridTemplateColumns:`minmax(0, 1fr) minmax(0, 1fr)`,gap:`0.5rem`}),children:[(0,U.jsxs)(`label`,{className:Pe,children:[`Verdict`,(0,U.jsxs)(l,{"aria-label":`Review verdict`,value:g.verdict,className:r(k,i({marginTop:`0.25rem`})),onValueChange:e=>t.onReviewChange(Fe(g,{verdict:e})),children:[(0,U.jsx)(`option`,{value:`undecided`,children:`Undecided`}),(0,U.jsx)(`option`,{value:`accepted`,children:`Accepted`}),(0,U.jsx)(`option`,{value:`review`,children:`Needs revision`}),(0,U.jsx)(`option`,{value:`rejected`,children:`Rejected`})]})]}),(0,U.jsxs)(`label`,{className:Pe,children:[`Status`,(0,U.jsxs)(l,{"aria-label":`Review status`,value:g.status,className:r(k,i({marginTop:`0.25rem`})),onValueChange:e=>t.onReviewChange(Fe(g,{status:e})),children:[(0,U.jsx)(`option`,{value:`draft`,children:`Draft`}),(0,U.jsx)(`option`,{value:`final`,children:`Final`})]})]})]}),(0,U.jsxs)(`div`,{className:i({marginTop:`1rem`}),children:[(0,U.jsxs)(`div`,{className:i({display:`flex`,alignItems:`baseline`,justifyContent:`space-between`}),children:[(0,U.jsx)(`div`,{className:Ne,children:`Pedagogy rubric`}),(0,U.jsx)(`div`,{className:P,children:`1 poor · 5 excellent`})]}),(0,U.jsxs)(`div`,{className:i({marginTop:`0.25rem`}),children:[C.map(e=>(0,U.jsx)(Ie,{name:`rubric-${e}`,label:F[e],hint:L[e],value:g.ratings[e],onChange:n=>t.onReviewChange(Fe(g,{ratings:{...g.ratings,[e]:n}}))},e)),(0,U.jsx)(Ie,{name:`rubric-overall`,label:`Overall`,value:g.overallRating,onChange:e=>t.onReviewChange(Fe(g,{overallRating:e}))})]})]}),(0,U.jsxs)(`label`,{className:r(Pe,i({display:`block`,marginTop:`1rem`})),children:[`Review summary`,(0,U.jsx)(`textarea`,{value:g.summary??``,className:r(j,i({marginTop:`0.375rem`,minHeight:`7rem`})),placeholder:`What worked, what failed, and the next teaching move.`,onChange:e=>t.onReviewChange(Fe(g,{summary:e.currentTarget.value}))})]})]}),(0,U.jsx)(Le,{id:`trajectory-desk-alternatives-tab`,controls:`trajectory-desk-alternatives-panel`,label:`Rewrite`,icon:`alternatives`,state:N,open:d===`alternatives`,onToggle:()=>p(d===`alternatives`?null:`alternatives`)}),(0,U.jsxs)(`section`,{id:`trajectory-desk-alternatives-panel`,role:`region`,"aria-labelledby":`trajectory-desk-alternatives-tab`,hidden:d!==`alternatives`,className:Me,children:[(0,U.jsxs)(`div`,{className:i({display:`grid`,gap:`0.625rem`,border:`1px solid var(--line)`,borderRadius:`0.5rem`,padding:`0.75rem`}),children:[(0,U.jsxs)(`div`,{children:[(0,U.jsx)(`div`,{className:Ne,children:`Model results`}),(0,U.jsxs)(`div`,{className:r(P,i({marginTop:`0.2rem`})),children:[N,`. Compare full responses in the main page.`]})]}),(0,U.jsxs)(`button`,{type:`button`,className:z,onClick:c,children:[(0,U.jsx)(E,{icon:B.alternatives,size:13}),` Open model results`]})]}),(0,U.jsxs)(`details`,{className:i({marginTop:`1rem`,borderTop:`1px solid var(--line)`,paddingTop:`0.75rem`}),children:[(0,U.jsxs)(`summary`,{className:r(I,i({width:`100%`,justifyContent:`space-between`,cursor:`pointer`,listStyle:`none`,"&::-webkit-details-marker":{display:`none`}})),children:[(0,U.jsxs)(`span`,{className:i({display:`inline-flex`,alignItems:`center`,gap:`0.4rem`}),children:[(0,U.jsx)(E,{icon:B.settings,size:13}),`Model pools`]}),(0,U.jsx)(`span`,{className:r(m(),i({fontSize:`10px`})),children:b.length})]}),(0,U.jsx)(`div`,{className:i({marginTop:`0.75rem`}),children:(0,U.jsx)(Se,{pools:b,availableModels:e.availableModels,activePoolId:e.activeModelPoolId,onSelectPool:t.onSelectModelPool,onChange:t.onModelPoolChange,onAddModel:t.onAddModel,onRemoveModel:t.onRemoveModel,onCreatePool:t.onCreateModelPool,onDeletePool:t.onDeleteModelPool})})]})]})]}),(0,U.jsxs)(`footer`,{className:i({display:`flex`,alignItems:`baseline`,gap:`0.45rem`,borderTop:`1px solid var(--line)`,background:`var(--paper, var(--background))`,padding:`0.55rem 0.7rem`}),children:[(0,U.jsx)(`span`,{className:i({fontFamily:`var(--mono-display, inherit)`,fontSize:`1.35rem`,fontWeight:700,color:`var(--accent-dim)`,fontVariantNumeric:`tabular-nums`}),children:V}),(0,U.jsxs)(`span`,{className:r(m(),i({fontSize:`9px`,lineHeight:1.3})),children:[`contrast records`,(0,U.jsx)(`br`,{}),`produced this session`]})]})]})}var ze=i({color:`var(--muted-foreground)`,fontSize:`0.75rem`,lineHeight:1.5}),Be=i({cursor:`pointer`,fontSize:`0.75rem`,fontWeight:650,_focusVisible:{outline:`3px solid var(--accent)`,outlineOffset:`1px`}}),Ve=i({marginTop:`0.35rem`,overflowX:`auto`,whiteSpace:`pre-wrap`,overflowWrap:`anywhere`,fontSize:`0.6875rem`,lineHeight:1.5}),He={none:`no activity recommended`,create:`activity recommended`,continue:`continue the open activity`,"grade-first":`grade pending work first`},Ue={"graded-attempt":`a graded attempt`,"stalled-focus":`a stalled plan item`,"progression-requested":`a pacing request`,"goal-requested":`a new goal`},We={continue:`continue the current item`,"suggest-advance":`propose marking the item done`,"insert-prerequisite":`propose a prerequisite`,"expand-item":`propose splitting the item`,"propose-new-plan":`propose a new plan`},Ge=e=>e&&e!=="default"?e:null;function Ke({interaction:e}){let t=e.families.map(({family:e,components:t})=>`${e} (${t.join(`, `)})`).join(`; `);return(0,U.jsxs)(`div`,{"data-testid":`draft-interaction`,children:[(0,U.jsxs)(`p`,{className:ze,children:[`Interaction: `,He[e.action],t?` · ${t}`:``,e.continueNodeId?` · node ${e.continueNodeId}`:``,e.lead===`answer-first`?` · answer first`:``,` · ${e.paired?`interactive and prose drafts competed blind`:`single draft style`}`]}),(0,U.jsxs)(`p`,{className:ze,children:[`Material features judged true: `,e.features.length?e.features.join(`, `):`none`]})]})}function qe({receipt:e}){let t=e.snapshot,r=n(e.activeWork),a=t.phase===`released`,o=Ge(t.attempts.find(({attempt:e})=>e===t.selectedAttempt)?.variant);return(0,U.jsxs)(`details`,{"data-testid":`draft-review-receipt`,className:i({marginTop:`1rem`,border:`1px solid var(--border)`,borderRadius:`0.5rem`,padding:`0.625rem 0.75rem`}),children:[(0,U.jsxs)(`summary`,{className:Be,children:[`Draft review · `,a?`released`:t.phase,t.selectedAttempt?` draft ${t.selectedAttempt}`:``,o?` (${o})`:``,` · `,t.attempts.length,` `,t.attempts.length===1?`draft`:`drafts`,` checked`]}),(0,U.jsxs)(`div`,{className:i({display:`grid`,gap:`0.625rem`,marginTop:`0.5rem`}),children:[(0,U.jsxs)(`p`,{className:ze,children:[t.judgeModel??`No reviewer dispatched`,` · `,t.reasoning,` reasoning · `,t.standard,` response · `,(t.elapsedMs/1e3).toFixed(1),` s`,t.reason?` · outcome: ${t.reason}`:``,t.planningMs===void 0?``:` · planning ${Math.round(t.planningMs)} ms`]}),t.interaction?(0,U.jsx)(Ke,{interaction:t.interaction}):null,t.planReview?(0,U.jsxs)(`p`,{className:ze,"data-testid":`draft-plan-review`,children:[`Plan review after `,Ue[t.planReview.trigger],`: `,We[t.planReview.action],t.planReview.action===`continue`?``:` (the learner decides)`]}):null,(0,U.jsx)(`p`,{className:ze,children:`Uncalibrated probability estimates. A check passes at P(violation) ≤ 0.20.`}),t.attempts.map(e=>(0,U.jsxs)(`details`,{open:e.attempt===t.selectedAttempt,children:[(0,U.jsxs)(`summary`,{className:Be,children:[`Draft `,e.attempt,Ge(e.variant)?` · ${e.variant}`:``,` · `,e.status,` · `,e.reasoning,` reasoning · `,e.standard]}),(0,U.jsxs)(`p`,{className:ze,children:[`Generation `,Math.round(e.generationMs),` ms · review `,Math.round(e.judgementMs),` ms`]}),(0,U.jsx)(`div`,{className:i({overflowX:`auto`,maxWidth:`100%`}),children:(0,U.jsxs)(`table`,{className:i({width:`100%`,fontSize:`0.6875rem`,textAlign:`left`,borderCollapse:`collapse`}),children:[(0,U.jsx)(`thead`,{children:(0,U.jsxs)(`tr`,{children:[(0,U.jsx)(`th`,{scope:`col`,children:`Check`}),(0,U.jsx)(`th`,{scope:`col`,children:`Source`}),(0,U.jsx)(`th`,{scope:`col`,children:`Result`}),(0,U.jsx)(`th`,{scope:`col`,children:`P(violation)`})]})}),(0,U.jsx)(`tbody`,{children:e.checks.map(e=>(0,U.jsxs)(`tr`,{className:i({color:e.status===`pass`?`var(--foreground)`:`var(--destructive)`}),children:[(0,U.jsx)(`th`,{scope:`row`,className:i({fontWeight:400,overflowWrap:`anywhere`,paddingBlock:`0.2rem`}),children:e.id}),(0,U.jsx)(`td`,{children:e.source}),(0,U.jsx)(`td`,{children:e.status}),(0,U.jsx)(`td`,{children:e.probability===null?`Unknown`:e.probability.toFixed(3)})]},e.id))})]})})]},e.attempt)),r?(0,U.jsxs)(`details`,{children:[(0,U.jsx)(`summary`,{className:Be,children:`Active work at this turn`}),(0,U.jsx)(`pre`,{className:Ve,children:r})]}):null]})]})}function Je(e){return Number.isFinite(e)&&e>0}function Ye(e,t,n){return Math.max(t,Math.min(n,e))}function Xe(e,t){if(!Number.isFinite(e.x)||!Number.isFinite(e.y)||!Je(e.width)||!Je(e.height)||!Je(t.width)||!Je(t.height))return null;let n=Math.min(e.width/t.width,e.height/t.height),r=t.width*n,i=t.height*n;return{x:e.x+(e.width-r)/2,y:e.y+(e.height-i)/2,width:r,height:i}}function Ze(e,t,n,r=!1){if(!Number.isFinite(e.x)||!Number.isFinite(e.y))return null;let i=Xe(t,n);if(!i)return null;let a=i.x+i.width,o=i.y+i.height;return!r&&(e.x<i.x||e.x>a||e.y<i.y||e.y>o)?null:{x:Ye((e.x-i.x)/i.width,0,1),y:Ye((e.y-i.y)/i.height,0,1)}}var Qe=[`note`,`pedagogicalImpact`,`suggestedAlternative`];function $e(e,t){let n={...e};for(let e of t)n[e]=`pass-drafted`;return n}function et(e,t,n){let r={...n};for(let n of Qe){let i=e[n]??``,a=t[n]??``;if(i===a)continue;let o=r[n];if(o===`pass-drafted`||o===`pass-edited`){r[n]=a.trim()?`pass-edited`:void 0;continue}r[n]=a.trim()?`human`:void 0}return r}function tt(e){if(!e)return`human`;let t=Qe.map(t=>e[t]).filter(Boolean);return t.includes(`pass-drafted`)?`pass-drafted`:t.includes(`pass-edited`)?`pass-edited`:`human`}function nt(e){switch(e.authorship){case`human`:return`human`;case`pass-drafted`:return`pass · accepted`;case`pass-edited`:return`pass · edited`;default:return`unrecorded`}}var rt=i({display:`inline-flex`,alignItems:`center`,gap:`0.25rem`,borderRadius:`0.25rem`,border:`1px solid var(--border)`,background:`var(--background)`,paddingInline:`0.35rem`,paddingBlock:`0.1rem`,fontSize:`0.6875rem`,fontWeight:600,color:`var(--foreground)`,_hover:{borderColor:`var(--ink)`,background:`var(--muted)`},_focusVisible:{outline:`3px solid var(--accent)`,outlineOffset:`1px`}});function it({annotations:e,readOnly:t=!1,onEdit:n,onDelete:a}){return e.length===0?null:(0,U.jsx)(`div`,{className:i({display:`flex`,flexDirection:`column`,width:`22rem`,maxWidth:`84vw`}),children:e.map((e,o)=>{let s=N(e.kind),c=S(e)?e.revision:void 0;return(0,U.jsxs)(`article`,{className:i({padding:`0.625rem 0.75rem`,borderTop:o===0?`none`:`1px solid var(--line-soft)`}),children:[(0,U.jsxs)(`div`,{className:i({display:`flex`,alignItems:`center`,gap:`0.4rem`,marginBottom:`0.35rem`}),children:[(0,U.jsx)(`span`,{"aria-hidden":`true`,className:i({width:`0.5rem`,height:`0.5rem`,flex:`0 0 auto`,borderRadius:`9999px`}),style:{background:s}}),(0,U.jsx)(`span`,{className:i({fontSize:`0.625rem`,fontWeight:700,letterSpacing:`0.12em`,textTransform:`uppercase`}),style:{color:s},children:M(e.kind)}),e.category?(0,U.jsxs)(`span`,{className:P,children:[`· `,e.category]}):null,e.severity?(0,U.jsxs)(`span`,{title:V(e.severity),className:i({marginLeft:`auto`,borderRadius:`9999px`,border:`1px solid var(--border)`,paddingInline:`0.4rem`,fontSize:`0.625rem`,fontWeight:700,color:`var(--muted-foreground)`,fontVariantNumeric:`tabular-nums`}),children:[`sev `,e.severity]}):null]}),(0,U.jsx)(`p`,{className:i({margin:0,fontSize:`0.78rem`,lineHeight:1.5,color:`var(--foreground)`}),children:e.note}),c&&e.suggestedAlternative?(0,U.jsxs)(`div`,{className:i({display:`grid`,gap:`0.2rem`,marginTop:`0.5rem`,fontSize:`0.74rem`}),children:[(0,U.jsx)(`span`,{className:i({borderRadius:`0.25rem`,background:`color-mix(in srgb, var(--destructive) 12%, transparent)`,padding:`0.25rem 0.4rem`,color:`var(--muted-foreground)`,textDecoration:`line-through`,textDecorationColor:`var(--destructive)`}),children:c.original}),(0,U.jsx)(`span`,{className:i({borderRadius:`0.25rem`,background:`color-mix(in srgb, var(--accent-green) 14%, transparent)`,padding:`0.25rem 0.4rem`,color:`var(--foreground)`}),children:e.suggestedAlternative})]}):null,(0,U.jsxs)(`div`,{className:i({display:`flex`,alignItems:`center`,gap:`0.3rem`,marginTop:`0.5rem`,borderTop:`1px solid var(--line-soft)`,paddingTop:`0.45rem`}),children:[t?null:(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)(`button`,{type:`button`,className:rt,onClick:()=>n?.(e.id),children:[(0,U.jsx)(E,{icon:B.annotate,size:12}),`Edit`]}),(0,U.jsxs)(`button`,{type:`button`,className:r(rt,i({borderColor:`transparent`,color:`var(--muted-foreground)`})),onClick:()=>a?.(e.id),children:[(0,U.jsx)(E,{icon:B.discard,size:12}),`Delete`]})]}),(0,U.jsx)(`span`,{className:r(m(),i({marginLeft:`auto`,fontSize:`9px`})),children:nt(e)})]})]},e.id)})})}var at=[`problem`,`strength`,`suggestion`],ot=i({display:`inline-flex`,alignItems:`center`,gap:`0.3rem`,borderRadius:`0.25rem`,border:`1px solid var(--border)`,background:`var(--background)`,paddingInline:`0.45rem`,paddingBlock:`0.2rem`,fontSize:`0.6875rem`,fontWeight:650,color:`var(--foreground)`,_hover:{borderColor:`var(--ink)`,background:`var(--muted)`},_focusVisible:{outline:`3px solid var(--accent)`,outlineOffset:`1px`}});function st({onPick:e,onRewrite:t}){return(0,U.jsxs)(`div`,{className:i({display:`flex`,alignItems:`center`,gap:`0.25rem`,padding:`0.3rem`}),onMouseDown:e=>e.preventDefault(),children:[(0,U.jsx)(`span`,{className:i({paddingInline:`0.3rem`,fontSize:`0.5625rem`,fontWeight:700,letterSpacing:`0.12em`,textTransform:`uppercase`,color:`var(--muted-foreground)`}),children:`Mark as`}),at.map(t=>(0,U.jsxs)(`button`,{type:`button`,className:ot,onClick:()=>e(t),children:[(0,U.jsx)(`span`,{"aria-hidden":`true`,className:i({width:`0.4rem`,height:`0.4rem`,borderRadius:`9999px`}),style:{background:N(t)}}),M(t)]},t)),(0,U.jsxs)(`button`,{type:`button`,className:ot,onClick:t,children:[(0,U.jsx)(E,{icon:B.alternatives,size:12}),`Rewrite…`]})]})}function ct(e,t,n,r={}){let i=r.offset??8,a=r.padding??8,o=r.preferred??`below`,s=e.left+e.width/2-t.width/2,c=Math.max(a,n.width-t.width-a),l=Math.min(Math.max(s,a),c),u=e.top-t.height-i,d=e.top+e.height+i,f=u>=a,p=d+t.height<=n.height-a,m;m=o===`above`?f?`above`:p?`below`:`above`:p?`below`:f?`above`:`below`;let h=m===`above`?u:d,g=Math.max(a,n.height-t.height-a);return{left:l,top:Math.min(Math.max(h,a),g),side:m}}function lt(e,t){return{left:e.left-t.left,top:e.top-t.top,width:e.width,height:e.height}}var ut=i({position:`absolute`,zIndex:40,borderRadius:`0.375rem`,border:`1px solid var(--ink)`,background:`var(--card)`,boxShadow:`3px 3px 0 var(--line), 0 14px 30px -20px rgba(0, 0, 0, 0.55)`});function dt({anchorRect:e,hostRef:t,preferred:n=`below`,role:i=`dialog`,label:a,className:o,children:s,onPointerEnter:c,onPointerLeave:l}){let u=(0,H.useRef)(null),[d,f]=(0,H.useState)(null);return(0,H.useLayoutEffect)(()=>{let r=t.current,i=u.current;if(!r||!i||!e){f(null);return}let a=ct(lt(e,r.getBoundingClientRect()),{width:i.offsetWidth,height:i.offsetHeight},{width:r.clientWidth,height:r.clientHeight},{preferred:n});f({left:a.left,top:a.top})},[e,t,n]),e?(0,U.jsx)(`div`,{ref:u,role:i,"aria-label":a,className:r(ut,o),style:{left:d?.left??0,top:d?.top??0,visibility:d?`visible`:`hidden`},onPointerEnter:c,onPointerLeave:l,children:s}):null}function ft({anchorRect:e,hostRef:t,onCancel:n,...r}){let a=(0,H.useRef)(null);return(0,H.useEffect)(()=>{function e(e){e.key===`Escape`&&(e.stopPropagation(),n())}let t=a.current;return t?.addEventListener(`keydown`,e),()=>t?.removeEventListener(`keydown`,e)},[n]),e?(0,U.jsx)(`div`,{ref:a,className:i({display:`none`,md:{display:`block`}}),children:(0,U.jsx)(dt,{anchorRect:e,hostRef:t,preferred:`below`,label:`Annotation editor`,children:(0,U.jsx)(`div`,{className:i({width:`24rem`,maxWidth:`88vw`,maxHeight:`26rem`,overflowY:`auto`,padding:`0.75rem`}),children:(0,U.jsx)(ne,{...r,onCancel:n,autoFocus:!0})})})}):null}function pt(e){let t=window.getSelection();if(!t||t.rangeCount===0||t.isCollapsed)return null;let n=t.getRangeAt(0);if(!e.contains(n.startContainer)||!e.contains(n.endContainer))return null;let r=(t,n)=>{let r=(t.nodeType===Node.ELEMENT_NODE?t:t.parentElement)?.closest(`[data-source-start]`);if(!r||!e.contains(r))return null;let i=Number(r.dataset.sourceStart);if(!Number.isFinite(i))return null;let a=document.createRange();a.selectNodeContents(r);try{a.setEnd(t,n)}catch{return null}return i+a.toString().length},i=r(n.startContainer,n.startOffset),a=r(n.endContainer,n.endOffset),o=n.cloneRange();o.selectNodeContents(e),o.setEnd(n.startContainer,n.startOffset);let s=i??o.toString().length,c=n.toString();return c.trim()?{start:s,end:a??s+c.length,text:c}:null}function mt(e,t){return e.filter(e=>(e.target.kind===`message`||e.target.kind===`message-span`)&&e.target.messageId===t)}function ht(e,t){let n=T(t.reference);return e.filter(e=>{let t=e.target;return t.kind.startsWith(`artifact`)&&`artifact`in t&&T(t.artifact)===n})}function gt(e,t,n,r){let a=t.flatMap(t=>{if(t.target.kind!==`message-span`&&t.target.kind!==`artifact-span`)return[];let n=b(e,t.target.anchor);return n.status===`stale`||n.end<=n.start?[]:[{annotation:t,start:n.start,end:n.end}]});if(a.length===0)return[e];let o=Array.from(new Set([0,e.length,...a.flatMap(e=>[e.start,e.end])])).filter(t=>t>=0&&t<=e.length).sort((e,t)=>e-t);return o.slice(0,-1).map((t,s)=>{let c=o[s+1],l=a.filter(e=>e.start<=t&&e.end>=c),u=e.slice(t,c);if(l.length===0)return(0,U.jsx)(`span`,{children:u},`${t}-${c}`);let d=l.find(e=>e.annotation.kind===`problem`)??l[0],f=l.some(e=>e.annotation.id===n),p=l.map(e=>e.annotation.id),m=N(d.annotation.kind);return(0,U.jsx)(`mark`,{tabIndex:0,role:`button`,"aria-label":`${l.length} note${l.length===1?``:`s`} on “${u}”`,"data-annotation-mark":d.annotation.id,className:i({borderBottom:`1.5px solid`,borderBottomStyle:d.annotation.revision?`dashed`:`solid`,background:f?`color-mix(in srgb, var(--accent) 18%, transparent)`:`transparent`,color:`inherit`,cursor:`pointer`,transitionProperty:`background-color`,transitionDuration:`120ms`,_motionReduce:{transitionDuration:`0ms`},_focusVisible:{outline:`3px solid var(--accent)`,outlineOffset:`1px`}}),style:{borderBottomColor:m},onMouseEnter:e=>r.onReveal?.(p,e.currentTarget.getBoundingClientRect()),onFocus:e=>r.onReveal?.(p,e.currentTarget.getBoundingClientRect()),onMouseLeave:()=>r.onConceal?.(),onBlur:()=>r.onConceal?.(),onClick:e=>r.onOpen?.(p,e.currentTarget.getBoundingClientRect()),onKeyDown:e=>{e.key!==`Enter`&&e.key!==` `||(e.preventDefault(),r.onOpen?.(p,e.currentTarget.getBoundingClientRect()))},children:u},`${t}-${c}`)})}function _t(e,t,n){return t.flatMap(t=>{if(t.target.kind!==`message-span`&&t.target.kind!==`artifact-span`)return[];let r=b(e,t.target.anchor);return r.status===`stale`||r.end<=r.start?[]:[{start:r.start,end:r.end,ids:[t.id],color:N(t.kind),active:t.id===n,dashed:!!t.revision}]})}function vt({textRef:e,annotations:t,activeAnnotationId:n,onReveal:r,onConceal:a,onOpen:o}){let[s,c]=(0,H.useState)([]);return(0,H.useEffect)(()=>{let t=e.current;if(!t)return;function n(){let t=e.current;if(!t)return;let n=t.getBoundingClientRect().top,r=Array.from(t.querySelectorAll(`[data-annotation-mark]`)),i=new Set,a=[];for(let e of r){let t=e.dataset.annotationMark;!t||i.has(t)||(i.add(t),a.push({id:t,top:e.getBoundingClientRect().top-n}))}c(a)}n();let r=new ResizeObserver(n);return r.observe(t),()=>r.disconnect()},[e,t]),s.length===0?null:(0,U.jsx)(`div`,{"aria-hidden":!1,className:i({position:`absolute`,top:0,bottom:0,left:0,width:`1rem`}),children:s.map(e=>{let s=t.find(t=>t.id===e.id);if(!s)return null;let c=N(s.kind);return(0,U.jsx)(`button`,{type:`button`,"aria-label":`${s.kind} note: ${s.note.slice(0,60)}`,"aria-current":s.id===n?`true`:void 0,className:i({position:`absolute`,left:0,display:`grid`,width:`0.85rem`,height:`0.85rem`,placeItems:`center`,borderRadius:`9999px`,border:`1.5px solid var(--border)`,background:`var(--background)`,_hover:{borderColor:`var(--ink)`},_focusVisible:{outline:`3px solid var(--accent)`,outlineOffset:`1px`}}),style:{top:`${e.top+3}px`},onMouseEnter:t=>r?.([e.id],t.currentTarget.getBoundingClientRect()),onFocus:t=>r?.([e.id],t.currentTarget.getBoundingClientRect()),onMouseLeave:()=>a?.(),onBlur:()=>a?.(),onClick:t=>o?.([e.id],t.currentTarget.getBoundingClientRect()),children:(0,U.jsx)(`span`,{"aria-hidden":`true`,className:i({width:`0.4rem`,height:`0.4rem`,borderRadius:`9999px`}),style:{background:c}})},e.id)})})}function yt({message:e,annotations:t,activeAnnotationId:n,handlers:a,readOnly:l,onStartAnnotation:u,onCaptureSelection:d,onFocus:f,conversational:p=!1}){let m=(0,H.useRef)(null),[h,g]=(0,H.useState)(l&&t.some(e=>e.target.kind===`message-span`)?`raw`:`rendered`),_=e.role===`user`,v=e.label??(e.role===`assistant`?`Tutor response`:_?`Learner message`:e.role),y=e.markdown?.trim()||e.text,b=e.rawSource??e.text,x=b!==e.text,S=e.tools??[],C=(0,H.useMemo)(()=>_t(e.text,t,n),[n,t,e.text]),w=(0,H.useMemo)(()=>s(y,{sessionId:e.id,messageId:String(e.ordinal)}),[y,e.id,e.ordinal]),T=(0,H.useMemo)(()=>{let t=e.text.indexOf(y);return t<=0?C:C.map(e=>({...e,start:e.start-t,end:e.end-t}))},[y,e.text,C]);return(0,U.jsxs)(`article`,{className:i({width:`100%`,maxWidth:`44rem`,marginInline:`auto`,padding:{base:`1rem`,md:`1.5rem`}}),style:p?{paddingBlock:`0.85rem`}:void 0,children:[(0,U.jsxs)(`header`,{className:i({display:`flex`,flexWrap:`wrap`,alignItems:`baseline`,justifyContent:`space-between`,gap:`0.5rem`,paddingBottom:`0.625rem`}),style:p?void 0:{borderBottom:`1px solid var(--border)`},children:[(0,U.jsxs)(`div`,{children:[(0,U.jsx)(`h2`,{className:i({fontSize:`0.875rem`,fontWeight:700,color:`var(--foreground)`}),style:p&&_?{color:`var(--muted-foreground)`}:void 0,children:v}),(0,U.jsxs)(`div`,{className:r(P,i({marginTop:`0.125rem`})),children:[`Turn `,e.ordinal+1,e.model?` · ${e.model}`:``]})]}),(0,U.jsxs)(`div`,{className:i({display:`flex`,flexWrap:`wrap`,alignItems:`center`,justifyContent:`flex-end`,gap:`0.375rem`}),children:[f?(0,U.jsxs)(`button`,{type:`button`,title:`Open this turn in focused review`,className:i({display:`inline-flex`,alignItems:`center`,gap:`0.3rem`,borderRadius:`0.375rem`,padding:`0.375rem 0.5rem`,fontSize:`0.6875rem`,fontWeight:650,color:`var(--muted-foreground)`,_hover:{background:`var(--muted)`,color:`var(--foreground)`},_focusVisible:{outline:`3px solid var(--accent)`,outlineOffset:`1px`}}),onClick:()=>f(e.id),children:[(0,U.jsx)(E,{icon:B.inspect,size:12}),` Focus turn`]}):null,(0,U.jsx)(`div`,{role:`group`,"aria-label":`Message view`,className:i({display:`inline-flex`,border:`1px solid var(--border)`,borderRadius:`0.375rem`,padding:`0.125rem`}),children:[`rendered`,`raw`].map(e=>(0,U.jsx)(`button`,{type:`button`,"aria-pressed":h===e,className:i({borderRadius:`0.25rem`,background:h===e?`var(--ink)`:`transparent`,padding:`0.25rem 0.45rem`,fontSize:`0.625rem`,fontWeight:700,color:h===e?`var(--paper, var(--background))`:`var(--muted-foreground)`,textTransform:`capitalize`,_hover:{color:h===e?`var(--paper, var(--background))`:`var(--foreground)`},_focusVisible:{outline:`3px solid var(--accent)`,outlineOffset:`1px`}}),onClick:()=>g(e),children:e},e))}),l||!u?null:(0,U.jsx)(`button`,{type:`button`,title:`Open a note about this whole turn`,className:i({borderRadius:`0.375rem`,padding:`0.375rem 0.5rem`,fontSize:`0.6875rem`,fontWeight:650,color:`var(--muted-foreground)`,_hover:{background:`var(--accent)`,color:`var(--accent-foreground)`},_focusVisible:{outline:`3px solid var(--accent)`,outlineOffset:`1px`}}),onClick:()=>u({kind:`message`,messageId:e.id,role:e.role,messageTimestamp:e.timestamp,contentFingerprint:e.contentFingerprint}),children:`Note on this turn`})]})]}),(0,U.jsxs)(`div`,{className:i({position:`relative`,marginTop:`1rem`,paddingLeft:`1.5rem`}),children:[(0,U.jsx)(vt,{textRef:m,annotations:t,activeAnnotationId:n,onReveal:a.onReveal,onConceal:a.onConceal,onOpen:a.onOpen}),h===`rendered`?(0,U.jsx)(`div`,{ref:m,"data-message-text":e.id,className:i({overflowWrap:`anywhere`,fontSize:`0.9375rem`,lineHeight:1.72,color:`var(--foreground)`,_selection:{background:`color-mix(in srgb, var(--accent) 65%, transparent)`}}),style:p&&_?{color:`var(--muted-foreground)`}:void 0,onMouseUp:l||!d?void 0:t=>d(t.currentTarget,e),onKeyUp:l||!d?void 0:t=>d(t.currentTarget,e),children:y?(0,U.jsx)(c,{blocks:w,sourceMapped:!0,highlights:T,onHighlightReveal:a.onReveal,onHighlightConceal:a.onConceal,onHighlightOpen:a.onOpen}):null}):(0,U.jsx)(`div`,{ref:m,"data-message-text":e.id,className:i({whiteSpace:`pre-wrap`,overflowWrap:`anywhere`,fontFamily:`var(--font-mono, ui-monospace, monospace)`,fontSize:`0.8125rem`,lineHeight:1.65,color:`var(--foreground)`,_selection:{background:`color-mix(in srgb, var(--accent) 65%, transparent)`}}),style:p&&_?{color:`var(--muted-foreground)`}:void 0,onMouseUp:l||x||!d?void 0:t=>d(t.currentTarget,e),onKeyUp:l||x||!d?void 0:t=>d(t.currentTarget,e),children:x?b:gt(e.text,t,n,a)}),e.draftReview?(0,U.jsx)(qe,{receipt:e.draftReview}):null,S.length>0?(0,U.jsxs)(`div`,{className:i({display:`grid`,gap:`0.5rem`,marginTop:`1rem`}),children:[S.map((e,t)=>(0,U.jsxs)(`details`,{open:e.status===`failed`||e.kind===`result`,className:i({border:`1px solid var(--border)`,borderRadius:`0.5rem`,background:`var(--card, var(--background))`}),children:[(0,U.jsxs)(`summary`,{className:i({display:`flex`,cursor:`pointer`,listStyle:`none`,alignItems:`center`,gap:`0.5rem`,padding:`0.625rem 0.75rem`,fontSize:`0.75rem`,fontWeight:700,color:e.isError?`var(--destructive)`:`var(--foreground)`,_focusVisible:{outline:`3px solid var(--accent)`,outlineOffset:`-3px`},"&::-webkit-details-marker":{display:`none`}}),children:[(0,U.jsx)(E,{icon:B.tool,size:14}),(0,U.jsxs)(`span`,{children:[e.kind===`call`?`Tool call`:e.isError?`Tool error`:`Tool result`,`: `,e.name]}),(0,U.jsxs)(`span`,{className:i({marginLeft:`auto`,display:`inline-flex`,alignItems:`center`,gap:`0.25rem`,borderRadius:`9999px`,background:e.status===`succeeded`?`color-mix(in srgb, var(--accent-green) 22%, transparent)`:e.status===`failed`?`color-mix(in srgb, var(--destructive) 10%, transparent)`:`var(--muted)`,padding:`0.15rem 0.4rem`,fontSize:`0.625rem`,fontWeight:700,color:e.status===`failed`?`var(--destructive)`:`var(--foreground)`}),children:[(0,U.jsx)(E,{icon:e.status===`succeeded`?B.accept:e.status===`failed`?B.problem:B.retry,size:10,active:e.status!==`pending`}),e.status===`succeeded`?`Succeeded`:e.status===`failed`?`Failed`:`Pending`]}),e.callId?(0,U.jsx)(`code`,{className:i({fontSize:`0.625rem`,fontWeight:500,color:`var(--muted-foreground)`}),children:e.callId}):null]}),(0,U.jsxs)(`div`,{className:i({display:`grid`,gap:`0.75rem`,borderTop:`1px solid var(--border)`,padding:`0.75rem`}),children:[e.input?(0,U.jsxs)(`div`,{children:[(0,U.jsx)(`div`,{className:P,children:`Input`}),(0,U.jsx)(`pre`,{className:i({marginTop:`0.35rem`,overflowX:`auto`,whiteSpace:`pre-wrap`,overflowWrap:`anywhere`,fontSize:`0.75rem`,lineHeight:1.55}),children:e.input})]}):null,e.output?(0,U.jsxs)(`div`,{children:[(0,U.jsx)(`div`,{className:P,children:`Output`}),(0,U.jsx)(`div`,{className:i({marginTop:`0.35rem`,fontSize:`0.8125rem`,lineHeight:1.6}),children:(0,U.jsx)(o,{content:e.output})})]}):null,e.details?(0,U.jsxs)(`details`,{children:[(0,U.jsx)(`summary`,{className:i({cursor:`pointer`,fontSize:`0.6875rem`,fontWeight:650,color:`var(--muted-foreground)`}),children:`Raw details`}),(0,U.jsx)(`pre`,{className:i({marginTop:`0.35rem`,overflowX:`auto`,whiteSpace:`pre-wrap`,overflowWrap:`anywhere`,fontSize:`0.6875rem`,lineHeight:1.5}),children:e.details})]}):null]})]},`${e.kind}:${e.callId??e.name}:${t}`)),e.raw?(0,U.jsxs)(`details`,{className:i({fontSize:`0.6875rem`}),children:[(0,U.jsx)(`summary`,{className:i({cursor:`pointer`,color:`var(--muted-foreground)`,_hover:{color:`var(--foreground)`}}),children:`Inspect message record`}),(0,U.jsx)(`pre`,{className:i({marginTop:`0.5rem`,maxHeight:`20rem`,overflow:`auto`,whiteSpace:`pre-wrap`,overflowWrap:`anywhere`,fontSize:`0.6875rem`,lineHeight:1.5}),children:e.raw})]}):null]}):null]}),h===`rendered`?(0,U.jsx)(xt,{annotations:t,activeAnnotationId:n}):null]})}function bt(e){let t=e.target;return t.kind===`message-span`||t.kind===`artifact-span`?`“${t.anchor.quote}”`:t.kind===`artifact-region`?`${Math.round(t.x*100)}%, ${Math.round(t.y*100)}% · ${Math.round(t.width*100)} × ${Math.round(t.height*100)}%`:t.kind===`artifact-time-range`?`${(t.startMs/1e3).toFixed(1)}s to ${(t.endMs/1e3).toFixed(1)}s`:t.kind.replaceAll(`-`,` `)}function xt({annotations:e,activeAnnotationId:t,onSelect:n}){return e.length===0?null:(0,U.jsx)(`ul`,{className:i({display:`flex`,flexDirection:`column`,gap:`0.375rem`,borderTop:`1px solid var(--border)`,paddingTop:`0.625rem`}),children:e.map(e=>(0,U.jsx)(`li`,{children:(0,U.jsxs)(`button`,{type:`button`,"aria-current":e.id===t?`true`:void 0,className:i({display:`grid`,width:`100%`,gridTemplateColumns:`auto minmax(0, 1fr)`,gap:`0.5rem`,borderRadius:`0.25rem`,background:e.id===t?`var(--muted)`:`transparent`,padding:`0.375rem`,textAlign:`left`,_hover:{background:`var(--muted)`},_focusVisible:{outline:`3px solid var(--accent)`,outlineOffset:`1px`}}),onClick:()=>n?.(e.id),children:[(0,U.jsx)(`span`,{className:i({marginTop:`0.125rem`,width:`0.5rem`,height:`0.5rem`,borderRadius:`9999px`,background:e.kind===`problem`?`var(--destructive)`:e.kind===`strength`?`var(--accent-green)`:`var(--amber)`})}),(0,U.jsxs)(`span`,{className:i({minWidth:0}),children:[(0,U.jsx)(`span`,{className:i({display:`block`,fontSize:`0.75rem`,fontWeight:650,color:`var(--foreground)`}),children:e.category||e.kind}),(0,U.jsx)(`span`,{className:i({display:`block`,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`,fontSize:`0.6875rem`,color:`var(--muted-foreground)`}),children:bt(e)})]})]})},e.id))})}function Q(e,t,n){return Math.max(t,Math.min(n,e))}function St({artifact:e,media:t,annotations:n,activeAnnotationId:a,onStartAnnotation:o,readOnly:s=!1}){let c=(0,H.useRef)(null),[l,u]=(0,H.useState)(null),[d,f]=(0,H.useState)(null),[p,m]=(0,H.useState)({x:0,y:0,width:100,height:100}),[h,g]=(0,H.useState)(null),_=n.filter(e=>e.target.kind===`artifact-region`&&e.target.assetHash===t.assetHash),v=(0,H.useMemo)(()=>({width:t.naturalWidth,height:t.naturalHeight}),[t.naturalHeight,t.naturalWidth]),y=h?Xe({x:0,y:0,width:h.width,height:h.height},v):null;(0,H.useEffect)(()=>{let e=c.current;if(!e)return;let t=()=>{let t=e.getBoundingClientRect();g(e=>e?.width===t.width&&e.height===t.height?e:{width:t.width,height:t.height})};if(t(),typeof ResizeObserver>`u`)return window.addEventListener(`resize`,t),()=>window.removeEventListener(`resize`,t);let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[t.assetHash]);function b(e,t=!1){let n=e.currentTarget.getBoundingClientRect();return Ze({x:e.clientX,y:e.clientY},{x:n.left,y:n.top,width:n.width,height:n.height},v,t)}function x(n){return{kind:`artifact-region`,artifact:e.reference,assetHash:t.assetHash,coordinateSpace:`normalized-intrinsic`,x:Q(n.x,0,1),y:Q(n.y,0,1),width:Q(n.width,0,1-n.x),height:Q(n.height,0,1-n.y),naturalWidth:t.naturalWidth,naturalHeight:t.naturalHeight}}function S(e){if(s||!o||e.button!==0)return;let t=b(e);t&&(e.currentTarget.setPointerCapture(e.pointerId),u(t),f({x:t.x,y:t.y,width:0,height:0}))}function C(e){if(!l||!e.currentTarget.hasPointerCapture(e.pointerId))return;let t=b(e,!0);t&&f({x:Math.min(l.x,t.x),y:Math.min(l.y,t.y),width:Math.abs(t.x-l.x),height:Math.abs(t.y-l.y)})}function w(e){e.currentTarget.hasPointerCapture(e.pointerId)&&e.currentTarget.releasePointerCapture(e.pointerId);let t=l?b(e,!0):null,n=l&&t?{x:Math.min(l.x,t.x),y:Math.min(l.y,t.y),width:Math.abs(t.x-l.x),height:Math.abs(t.y-l.y)}:d;u(null),f(null),n&&n.width>=.01&&n.height>=.01&&o?.(x(n))}function T(e){e.currentTarget.hasPointerCapture(e.pointerId)&&e.currentTarget.releasePointerCapture(e.pointerId),u(null),f(null)}function E(){if(s||!o)return;let e=Q(p.x/100,0,1),t=Q(p.y/100,0,1);o(x({x:e,y:t,width:Q(p.width/100,.01,1-e),height:Q(p.height/100,.01,1-t)}))}return(0,U.jsxs)(`div`,{children:[(0,U.jsxs)(`div`,{className:i({position:`relative`,overflow:`hidden`,border:`1px solid var(--border)`,background:`var(--muted)`,touchAction:s?`auto`:`none`}),children:[(0,U.jsx)(`img`,{src:t.src,alt:t.alt,draggable:!1,width:t.naturalWidth,height:t.naturalHeight,className:i({display:`block`,width:`100%`,height:`auto`,maxHeight:`38rem`,objectFit:`contain`,userSelect:`none`})}),(0,U.jsx)(`div`,{ref:c,"aria-label":s?void 0:`Drag to select an image region for annotation`,className:i({position:`absolute`,inset:0,cursor:s?`default`:`crosshair`,pointerEvents:s?`none`:`auto`}),onPointerDown:s?void 0:S,onPointerMove:s?void 0:C,onPointerUp:s?void 0:w,onPointerCancel:s?void 0:T,children:y?(0,U.jsxs)(`div`,{"aria-hidden":`true`,className:i({position:`absolute`,pointerEvents:`none`}),style:{left:y.x,top:y.y,width:y.width,height:y.height},children:[_.map(e=>e.target.kind===`artifact-region`?(0,U.jsx)(`span`,{className:i({position:`absolute`,border:`2px solid`,borderColor:e.id===a?`var(--ink)`:`var(--accent-dim)`,background:`color-mix(in srgb, var(--accent) 14%, transparent)`}),style:{left:`${e.target.x*100}%`,top:`${e.target.y*100}%`,width:`${e.target.width*100}%`,height:`${e.target.height*100}%`}},e.id):null),d?(0,U.jsx)(`span`,{className:i({position:`absolute`,border:`2px dashed var(--ink)`,background:`color-mix(in srgb, var(--accent) 18%, transparent)`}),style:{left:`${d.x*100}%`,top:`${d.y*100}%`,width:`${d.width*100}%`,height:`${d.height*100}%`}}):null]}):null})]}),s?null:(0,U.jsx)(`div`,{className:r(P,i({marginTop:`0.375rem`})),children:`Drag over the image to anchor feedback to an intrinsic, normalized region.`}),s?null:(0,U.jsxs)(`details`,{className:i({marginTop:`0.5rem`,borderTop:`1px solid var(--border)`,paddingTop:`0.5rem`}),children:[(0,U.jsx)(`summary`,{className:i({cursor:`pointer`,fontSize:`0.6875rem`,fontWeight:650,color:`var(--foreground)`,_focusVisible:{outline:`3px solid var(--accent)`,outlineOffset:`2px`}}),children:`Enter region coordinates`}),(0,U.jsx)(`div`,{className:i({display:`grid`,gridTemplateColumns:`repeat(4, minmax(0, 1fr))`,gap:`0.375rem`,paddingTop:`0.5rem`}),children:[`x`,`y`,`width`,`height`].map(e=>(0,U.jsxs)(`label`,{className:i({fontSize:`0.625rem`,color:`var(--muted-foreground)`}),children:[e===`x`?`Left %`:e===`y`?`Top %`:`${e[0].toUpperCase()}${e.slice(1)} %`,(0,U.jsx)(`input`,{type:`number`,min:0,max:100,step:1,value:p[e],className:r(k,i({marginTop:`0.2rem`,minHeight:`2rem`,paddingInline:`0.375rem`})),onChange:t=>m({...p,[e]:Number(t.currentTarget.value)})})]},e))}),(0,U.jsx)(`button`,{type:`button`,className:r(I,i({marginTop:`0.5rem`})),onClick:E,children:`Annotate region`})]})]})}function Ct(e){let t=Math.max(0,e)/1e3;return`${Math.floor(t/60)}:${(t%60).toFixed(1).padStart(4,`0`)}`}function wt({artifact:e,media:t,annotations:n,onStartAnnotation:r,readOnly:a=!1}){let o=(0,H.useRef)(null),[s,c]=(0,H.useState)(0),[l,u]=(0,H.useState)(t.durationMs),d=Math.max(1,t.durationMs),f=n.filter(e=>e.target.kind===`artifact-time-range`&&e.target.mediaHash===t.mediaHash);(0,H.useEffect)(()=>{c(0),u(t.durationMs)},[t.mediaHash,t.durationMs]);function p(){return Q(Math.round((o.current?.currentTime??0)*1e3),0,d)}function m(){a||!r||r({kind:`artifact-time-range`,artifact:e.reference,mediaHash:t.mediaHash,timeBasis:`media-time`,startMs:Math.min(s,l),endMs:Math.max(s,l),durationMs:t.durationMs})}return(0,U.jsxs)(`div`,{children:[(0,U.jsx)(`video`,{ref:o,src:t.src,poster:t.poster,title:t.title,controls:!0,preload:`metadata`,className:i({display:`block`,width:`100%`,maxHeight:`34rem`,background:`var(--ink)`})}),(0,U.jsx)(`div`,{className:i({position:`relative`,height:`0.5rem`,marginTop:`0.5rem`,overflow:`hidden`,borderRadius:`9999px`,background:`var(--muted)`}),"aria-hidden":`true`,children:f.map(e=>e.target.kind===`artifact-time-range`?(0,U.jsx)(`span`,{className:i({position:`absolute`,top:0,bottom:0,background:`var(--accent-dim)`}),style:{left:`${Q(e.target.startMs/d,0,1)*100}%`,width:`${Q((e.target.endMs-e.target.startMs)/d,0,1)*100}%`}},e.id):null)}),a?null:(0,U.jsxs)(`fieldset`,{className:i({marginTop:`0.75rem`,borderTop:`1px solid var(--border)`,paddingTop:`0.625rem`}),children:[(0,U.jsx)(`legend`,{className:i({fontSize:`0.6875rem`,fontWeight:700,color:`var(--foreground)`}),children:`Time range`}),(0,U.jsxs)(`div`,{className:i({display:`grid`,gridTemplateColumns:`auto minmax(0, 1fr) auto`,alignItems:`center`,gap:`0.5rem`,marginTop:`0.375rem`}),children:[(0,U.jsx)(`span`,{className:i({fontSize:`0.6875rem`,fontVariantNumeric:`tabular-nums`,color:`var(--muted-foreground)`}),children:Ct(s)}),(0,U.jsx)(`input`,{type:`range`,min:0,max:d,step:100,value:s,"aria-label":`Annotation start time`,onChange:e=>c(Math.min(Number(e.currentTarget.value),l))}),(0,U.jsx)(`button`,{type:`button`,className:I,onClick:()=>c(Math.min(p(),l)),children:`Use current`}),(0,U.jsx)(`span`,{className:i({fontSize:`0.6875rem`,fontVariantNumeric:`tabular-nums`,color:`var(--muted-foreground)`}),children:Ct(l)}),(0,U.jsx)(`input`,{type:`range`,min:0,max:d,step:100,value:l,"aria-label":`Annotation end time`,onChange:e=>u(Math.max(Number(e.currentTarget.value),s))}),(0,U.jsx)(`button`,{type:`button`,className:I,onClick:()=>u(Math.max(p(),s)),children:`Use current`})]}),(0,U.jsxs)(`div`,{className:i({display:`flex`,alignItems:`center`,justifyContent:`space-between`,gap:`0.75rem`,marginTop:`0.625rem`}),children:[(0,U.jsxs)(`div`,{className:P,children:[`Media time · `,Ct(d),` duration · fingerprinted source`]}),(0,U.jsx)(`button`,{type:`button`,className:z,disabled:l<=s,onClick:m,children:`Annotate range`})]})]})]})}function Tt(e,t,n){if(![`ArrowLeft`,`ArrowRight`,`Home`,`End`].includes(e.key))return;e.preventDefault();let r=Array.from(e.currentTarget.parentElement?.querySelectorAll(`[data-canvas-mode]`)??[]).map(e=>e.dataset.canvasMode),i=Math.max(0,r.indexOf(t)),a=r[e.key===`Home`?0:e.key===`End`?r.length-1:e.key===`ArrowRight`?(i+1)%r.length:(i-1+r.length)%r.length];a&&(n(a),(e.currentTarget.parentElement?.querySelector(`[data-canvas-mode="${a}"]`))?.focus())}function Et({messages:e,artifacts:t,annotations:n,activeMessageId:a,activeArtifactId:s,activeAnnotationId:c,mode:l,onModeChange:u,onSelectMessage:d,onSelectArtifact:f,onSelectAnnotation:p,onTextSelection:m,onStartAnnotation:h,onDeleteAnnotation:g,annotationDraft:_,onAnnotationDraftChange:v,onSaveAnnotation:y,onCancelAnnotation:b,onExpandAnnotation:x,isSavingAnnotation:S,isExpandingAnnotation:C,onDraftAnchoredChange:T,readOnly:D=!1,transcript:O=`single`,onTranscriptChange:k,renderArtifact:A,candidatePanel:j,candidateCount:M=0,className:N}){let F=e.find(e=>e.id===a)??e[0],I=t.find(e=>e.id===s)??t[0],L=I?.reference.format.toLowerCase().includes(`markdown`)??!1,R=(0,H.useMemo)(()=>F?mt(n,F.id):[],[F,n]),z=(0,H.useMemo)(()=>I?ht(n,I):[],[I,n]),ee=(0,H.useMemo)(()=>I?.plainText?_t(I.plainText,z,c):[],[c,I?.plainText,z]),V=(0,H.useRef)(null),W=(0,H.useRef)(null),G=(0,H.useRef)(null),[K,q]=(0,H.useState)(null),[J,Y]=(0,H.useState)(null),[te,ne]=(0,H.useState)(`rendered`),[re,ie]=(0,H.useState)(null);(0,H.useEffect)(()=>{_||ie(null)},[_]),(0,H.useEffect)(()=>{ne(L?`rendered`:`raw`)},[I?.id,L]);let ae=!!(_&&re);(0,H.useEffect)(()=>{T?.(ae)},[ae,T]),(0,H.useEffect)(()=>()=>{G.current&&clearTimeout(G.current)},[]);let X={onReveal:(e,t)=>{G.current&&clearTimeout(G.current),Y(null),q({ids:e,rect:t})},onConceal:()=>{G.current&&clearTimeout(G.current),G.current=setTimeout(()=>q(null),180)},onOpen:(e,t)=>{q(null),ie(t),p?.(e[0])}},oe=K?K.ids.map(e=>n.find(t=>t.id===e)).filter(e=>!!e):[];function se(e){let t=window.getSelection();if(!t||t.rangeCount===0||t.isCollapsed)return null;let n=t.getRangeAt(0);if(!e.contains(n.commonAncestorContainer))return null;let r=n.getBoundingClientRect();return r.width>0||r.height>0?r:null}function ce(e,t){let n=t??F;if(D||!n||!m)return;let r=pt(e);if(!r)return;let i=w(n.text,r.start,r.end),a={kind:`message-span`,messageId:n.id,role:n.role,messageTimestamp:n.timestamp,anchor:i},o=se(e);o&&(q(null),Y({selection:{source:`message`,messageId:n.id,anchor:i,target:a},rect:o}))}function Z(e){if(D||!I?.plainText||!m)return;let t=pt(e);if(!t)return;let n=w(I.plainText,t.start,t.end),r={kind:`artifact-span`,artifact:I.reference,anchor:n},i=se(e);i&&(q(null),Y({selection:{source:`artifact`,artifact:I.reference,anchor:n,target:r},rect:i}))}function le(e,t){J&&(ie(J.rect),m?.({...J.selection,kind:t??`suggestion`,intent:e}),Y(null),window.getSelection()?.removeAllRanges())}return(0,U.jsxs)(`section`,{ref:V,className:r(i({position:`relative`,display:`flex`,height:`100%`,minHeight:0,flexDirection:`column`,background:`var(--paper, var(--background))`}),N),"aria-label":`Session content`,onKeyDown:e=>{e.key===`Escape`&&(!K&&!J||(e.stopPropagation(),q(null),Y(null)))},children:[(0,U.jsxs)(`header`,{className:i({display:`flex`,minHeight:`3.25rem`,alignItems:`center`,justifyContent:`space-between`,gap:`0.75rem`,borderBottom:`1px solid var(--border)`,paddingInline:`0.75rem`}),children:[(0,U.jsx)(`div`,{role:`tablist`,"aria-label":`Session content`,className:i({display:`flex`,alignSelf:`stretch`,gap:`0.125rem`}),children:[`transcript`,...t.length>0?[`artifact`]:[],...j?[`candidates`]:[]].map(e=>{let n=l===e;return(0,U.jsxs)(`button`,{type:`button`,role:`tab`,id:`trajectory-${e}-tab`,"aria-controls":`trajectory-${e}-panel`,"aria-selected":n,tabIndex:n?0:-1,"data-canvas-mode":e,className:i({display:`inline-flex`,alignItems:`center`,gap:`0.375rem`,borderBottom:n?`2px solid var(--accent-dim)`:`2px solid transparent`,paddingInline:`0.625rem`,fontSize:`0.75rem`,fontWeight:n?700:550,color:n?`var(--foreground)`:`var(--muted-foreground)`,_hover:{color:`var(--foreground)`},_focusVisible:{outline:`3px solid var(--accent)`,outlineOffset:`-3px`}}),onClick:()=>u(e),onKeyDown:t=>Tt(t,e,u),children:[(0,U.jsx)(E,{icon:e===`transcript`?B.message:e===`artifact`?B.page:B.alternatives,size:14}),e===`transcript`?`Transcript`:e===`artifact`?`Artifacts ${t.length?`(${t.length})`:``}`:`Model results ${M?`(${M})`:``}`]},e)})}),(0,U.jsxs)(`div`,{className:i({display:`flex`,alignItems:`center`,gap:`0.5rem`}),children:[l===`transcript`&&k?(0,U.jsx)(`div`,{role:`group`,"aria-label":`Transcript layout`,className:i({display:`inline-flex`,border:`1px solid var(--border)`,borderRadius:`0.375rem`,padding:`0.125rem`}),children:[`continuous`,`single`].map(e=>(0,U.jsx)(`button`,{type:`button`,"aria-pressed":O===e,className:i({borderRadius:`0.25rem`,background:O===e?`var(--ink)`:`transparent`,padding:`0.25rem 0.45rem`,fontSize:`0.625rem`,fontWeight:700,color:O===e?`var(--paper, var(--background))`:`var(--muted-foreground)`,_hover:{color:O===e?`var(--paper, var(--background))`:`var(--foreground)`},_focusVisible:{outline:`3px solid var(--accent)`,outlineOffset:`1px`}}),onClick:()=>k(e),children:e===`continuous`?`Session`:`Focused turn`},e))}):null,(0,U.jsxs)(`div`,{className:r(P,i({display:`none`,alignItems:`center`,gap:`0.25rem`,sm:{display:`flex`}})),children:[(0,U.jsx)(E,{icon:B.annotate,size:12}),` `,D?`${n.length} published note${n.length===1?``:`s`}`:`Select text to annotate`]})]})]}),(0,U.jsx)(`div`,{id:`trajectory-transcript-panel`,role:`tabpanel`,"aria-labelledby":`trajectory-transcript-tab`,hidden:l!==`transcript`,className:i({minHeight:0,flex:1,overflowY:`auto`}),children:O===`continuous`?e.length>0?(0,U.jsx)(`div`,{className:i({display:`flex`,flexDirection:`column`}),children:e.map((e,t)=>(0,U.jsx)(`div`,{className:i({borderTop:t===0?`none`:`1px solid var(--line-soft, var(--border))`}),children:(0,U.jsx)(yt,{message:e,annotations:mt(n,e.id),activeAnnotationId:c,handlers:X,readOnly:D,onStartAnnotation:h,onCaptureSelection:ce,onFocus:k?e=>{d(e),k(`single`)}:void 0,conversational:!0})},e.id))}):(0,U.jsx)(`div`,{className:i({display:`grid`,minHeight:`16rem`,placeItems:`center`,padding:`2rem`,textAlign:`center`,color:`var(--muted-foreground)`}),children:`This session has no recorded turns.`}):F?(0,U.jsx)(yt,{message:F,annotations:R,activeAnnotationId:c,handlers:X,readOnly:D,onStartAnnotation:h,onCaptureSelection:ce}):(0,U.jsx)(`div`,{className:i({display:`grid`,minHeight:`16rem`,placeItems:`center`,padding:`2rem`,textAlign:`center`,color:`var(--muted-foreground)`}),children:`Select a turn to review it.`})}),(0,U.jsx)(`div`,{id:`trajectory-artifact-panel`,role:`tabpanel`,"aria-labelledby":`trajectory-artifact-tab`,hidden:l!==`artifact`,className:i({minHeight:0,flex:1,overflowY:`auto`}),children:t.length>0?(0,U.jsxs)(`div`,{className:i({display:`flex`,minHeight:`100%`,flexDirection:`column`}),children:[(0,U.jsx)(`div`,{className:i({display:`flex`,flexWrap:`wrap`,gap:`0.375rem`,borderBottom:`1px solid var(--border)`,padding:`0.625rem 0.75rem`}),children:t.map(e=>{let t=I?.id===e.id;return(0,U.jsxs)(`button`,{type:`button`,"aria-pressed":t,className:i({display:`inline-flex`,alignItems:`center`,gap:`0.25rem`,borderRadius:`9999px`,border:`1px solid`,borderColor:t?`var(--ink)`:`var(--border)`,background:t?`var(--ink)`:`var(--background)`,padding:`0.25rem 0.5rem`,fontSize:`0.6875rem`,fontWeight:650,color:t?`var(--paper)`:`var(--foreground)`,_hover:{borderColor:`var(--ink)`},_focusVisible:{outline:`3px solid var(--accent)`,outlineOffset:`2px`}}),onClick:()=>f(e.id),children:[(0,U.jsx)(E,{icon:B.page,size:12}),e.title]},e.id)})}),I?(0,U.jsxs)(`article`,{className:i({width:`100%`,maxWidth:`60rem`,marginInline:`auto`,padding:{base:`1rem`,md:`1.5rem`}}),children:[(0,U.jsxs)(`header`,{className:i({display:`flex`,flexWrap:`wrap`,justifyContent:`space-between`,gap:`0.75rem`,borderBottom:`1px solid var(--border)`,paddingBottom:`0.625rem`}),children:[(0,U.jsxs)(`div`,{children:[(0,U.jsx)(`h2`,{className:i({fontSize:`0.875rem`,fontWeight:700,color:`var(--foreground)`}),children:I.title}),(0,U.jsxs)(`div`,{className:r(P,i({marginTop:`0.125rem`})),children:[I.reference.artifactType,` · `,I.reference.format,` · `,I.reference.frozen?`frozen`:`mutable source`]})]}),(0,U.jsxs)(`div`,{className:i({display:`flex`,flexWrap:`wrap`,alignItems:`center`,gap:`0.375rem`}),children:[I.plainText&&L&&!A&&!I.renderContent?(0,U.jsx)(`div`,{role:`group`,"aria-label":`Artifact view`,className:i({display:`inline-flex`,border:`1px solid var(--border)`,borderRadius:`0.375rem`,padding:`0.125rem`}),children:[`rendered`,`raw`].map(e=>(0,U.jsx)(`button`,{type:`button`,"aria-pressed":te===e,className:i({borderRadius:`0.25rem`,background:te===e?`var(--ink)`:`transparent`,padding:`0.25rem 0.45rem`,fontSize:`0.625rem`,fontWeight:700,textTransform:`capitalize`,color:te===e?`var(--paper, var(--background))`:`var(--muted-foreground)`,_focusVisible:{outline:`3px solid var(--accent)`,outlineOffset:`1px`}}),onClick:()=>ne(e),children:e},e))}):null,D||!h?null:(0,U.jsx)(`button`,{type:`button`,className:i({borderRadius:`0.375rem`,padding:`0.375rem 0.5rem`,fontSize:`0.6875rem`,fontWeight:650,color:`var(--muted-foreground)`,_hover:{background:`var(--accent)`,color:`var(--accent-foreground)`},_focusVisible:{outline:`3px solid var(--accent)`,outlineOffset:`1px`}}),onClick:()=>h({kind:`artifact`,artifact:I.reference}),children:`Annotate artifact`})]})]}),I.summary?(0,U.jsx)(`p`,{className:i({marginTop:`0.75rem`,fontSize:`0.8125rem`,color:`var(--muted-foreground)`}),children:I.summary}):null,(0,U.jsx)(`div`,{className:i({marginTop:`1rem`,minHeight:`8rem`}),children:I.media?.kind===`image`?(0,U.jsx)(St,{artifact:I,media:I.media,annotations:z,activeAnnotationId:c,onStartAnnotation:h,readOnly:D}):I.media?.kind===`video`?(0,U.jsx)(wt,{artifact:I,media:I.media,annotations:z,onStartAnnotation:h,readOnly:D}):A?A(I):I.renderContent?I.renderContent:I.plainText&&L&&te===`rendered`?(0,U.jsx)(`div`,{ref:W,"data-artifact-text":I.id,className:i({maxWidth:`72ch`,fontSize:`0.875rem`,lineHeight:1.65,color:`var(--foreground)`,_selection:{background:`color-mix(in srgb, var(--accent) 65%, transparent)`}}),onMouseUp:D?void 0:e=>Z(e.currentTarget),onKeyUp:D?void 0:e=>Z(e.currentTarget),children:(0,U.jsx)(o,{content:I.plainText,sourceMapped:!0,highlights:ee,onHighlightReveal:X.onReveal,onHighlightConceal:X.onConceal,onHighlightOpen:X.onOpen})}):I.plainText?(0,U.jsxs)(`div`,{className:i({position:`relative`,paddingLeft:`1.5rem`}),children:[(0,U.jsx)(vt,{textRef:W,annotations:z,activeAnnotationId:c,onReveal:X.onReveal,onConceal:X.onConceal,onOpen:X.onOpen}),(0,U.jsx)(`div`,{ref:W,"data-artifact-text":I.id,className:i({overflow:`visible`,whiteSpace:`pre-wrap`,overflowWrap:`anywhere`,fontFamily:`inherit`,fontSize:`0.875rem`,lineHeight:1.65,color:`var(--foreground)`,_selection:{background:`color-mix(in srgb, var(--accent) 65%, transparent)`}}),onMouseUp:D?void 0:e=>Z(e.currentTarget),onKeyUp:D?void 0:e=>Z(e.currentTarget),children:gt(I.plainText,z,c,X)})]}):(0,U.jsx)(`div`,{className:i({display:`grid`,minHeight:`10rem`,placeItems:`center`,border:`1px dashed var(--border)`,padding:`1.5rem`,textAlign:`center`,fontSize:`0.8125rem`,color:`var(--muted-foreground)`}),children:`No normalized preview was supplied for this artifact.`})}),(0,U.jsx)(xt,{annotations:z,activeAnnotationId:c,onSelect:p})]}):null]}):(0,U.jsx)(`div`,{className:i({display:`grid`,minHeight:`16rem`,placeItems:`center`,padding:`2rem`,textAlign:`center`,color:`var(--muted-foreground)`}),children:`No reviewable artifacts are attached to this session.`})}),j?(0,U.jsx)(`div`,{id:`trajectory-candidates-panel`,role:`tabpanel`,"aria-labelledby":`trajectory-candidates-tab`,hidden:l!==`candidates`,className:i({minHeight:0,flex:1,overflowY:`auto`,padding:{base:`1rem`,md:`1.25rem`}}),children:j}):null,K&&oe.length>0?(0,U.jsx)(dt,{anchorRect:K.rect,hostRef:V,preferred:`above`,label:`Annotation details`,onPointerEnter:()=>{G.current&&clearTimeout(G.current)},onPointerLeave:()=>q(null),children:(0,U.jsx)(it,{annotations:oe,readOnly:D,onEdit:e=>{q(null),p?.(e)},onDelete:g})}):null,_&&v&&y&&b?(0,U.jsx)(ft,{anchorRect:re,hostRef:V,draft:_,onChange:v,onSave:y,onCancel:()=>{ie(null),b()},isSaving:S,onExpand:x,isExpanding:C}):null,J&&!D?(0,U.jsx)(dt,{anchorRect:J.rect,hostRef:V,preferred:`above`,role:`toolbar`,label:`Annotate selection`,children:(0,U.jsx)(st,{onPick:e=>le(`note`,e),onRewrite:()=>le(`rewrite`,`suggestion`)})}):null]})}var Dt=`keating.trajectory.surface`;function Ot(e,t){try{let n=globalThis.localStorage?.getItem(`${Dt}.${e}`);return n==null?t:n===`open`}catch{return t}}function kt(e,t){try{globalThis.localStorage?.setItem(`${Dt}.${e}`,t?`open`:`closed`)}catch{}}function At(e,t){let[n,r]=(0,H.useState)(t);(0,H.useEffect)(()=>{r(Ot(e,t))},[e,t]);let i=(0,H.useCallback)(t=>{r(t),kt(e,t)},[e]);return{open:n,set:i,toggle:(0,H.useCallback)(()=>i(!n),[n,i])}}function jt(e){if(e.target.kind===`message`||e.target.kind===`message-span`)return e.target.messageId}function Mt({role:e,active:t}){return(0,U.jsx)(E,{icon:e===`assistant`?B.teacher:e===`user`?B.learner:e===`tool`?B.tool:B.message,size:14,active:t})}function Nt(e){let t=e.replace(/\s+/g,` `).trim();return t.length>72?`${t.slice(0,69)}...`:t||`Empty turn`}function Pt({messages:e,annotations:t,activeMessageId:n,onSelect:a,selectionIndicator:o=`edge`,className:s}){let c=new Map;for(let e of t){let t=jt(e);if(!t)continue;let n=c.get(t)??{total:0,problems:0};n.total+=1,e.kind===`problem`&&(n.problems+=1),c.set(t,n)}return(0,U.jsxs)(`nav`,{"aria-label":`Session turns`,className:r(f({tone:`contents`}),i({height:`100%`}),s),children:[(0,U.jsxs)(`div`,{className:i({borderBottom:`1px solid var(--line)`,padding:`0.75rem`}),children:[(0,U.jsxs)(`div`,{className:i({display:`flex`,alignItems:`center`,gap:`0.4rem`,fontFamily:`var(--mono-display)`,fontSize:`0.75rem`,fontWeight:700,color:`var(--ink)`}),children:[(0,U.jsx)(E,{icon:B.contents,size:14}),`Contents`]}),(0,U.jsxs)(`div`,{className:r(P,i({marginTop:`0.125rem`})),children:[e.length,` recorded`]})]}),(0,U.jsx)(`ol`,{className:i({minHeight:0,flex:1,overflowY:`auto`,paddingBlock:`0.25rem`}),children:e.map((e,t)=>{let s=c.get(e.id),l=e.id===n;return(0,U.jsx)(`li`,{children:(0,U.jsxs)(`button`,{type:`button`,"aria-current":l?`true`:void 0,className:i({display:`grid`,width:`100%`,gridTemplateColumns:`1.5rem minmax(0, 1fr) auto`,alignItems:`start`,gap:`0.375rem`,borderLeft:o===`edge`&&l?`3px solid var(--accent-dim)`:`3px solid transparent`,background:l?`var(--card)`:`transparent`,padding:`0.625rem 0.5rem`,textAlign:`left`,color:`var(--ink)`,cursor:`pointer`,transitionProperty:`background-color, border-color`,transitionDuration:`{durations.base}`,_hover:{background:`var(--card)`,borderLeftColor:l?`var(--accent-dim)`:`var(--line)`},_focusVisible:{outline:`3px solid var(--accent)`,outlineOffset:`-3px`}}),onClick:()=>a(e.id),children:[(0,U.jsx)(`span`,{className:i({display:`inline-flex`,width:`1.5rem`,height:`1.5rem`,alignItems:`center`,justifyContent:`center`,borderRadius:`9999px`,background:l?`var(--ink)`:`color-mix(in srgb, var(--ink) 8%, transparent)`,color:l?`var(--paper)`:`var(--ink-soft)`,transitionProperty:`background-color, color`,transitionDuration:`{durations.base}`}),children:(0,U.jsx)(Mt,{role:e.role,active:l})}),(0,U.jsxs)(`span`,{className:i({minWidth:0}),children:[(0,U.jsx)(`span`,{className:r(m(),i({display:`block`,fontSize:`10px`})),children:e.label??`${e.role===`assistant`?`Tutor`:e.role===`user`?`Learner`:e.role} ${t+1}`}),(0,U.jsx)(`span`,{className:i({display:`block`,marginTop:`0.1rem`,maxHeight:`1.9rem`,overflow:`hidden`,fontSize:`0.6875rem`,lineHeight:1.35,color:`var(--ink-soft)`}),children:Nt(e.text)})]}),s?(0,U.jsxs)(`span`,{className:i({display:`inline-flex`,minWidth:`1.25rem`,height:`1.25rem`,alignItems:`center`,justifyContent:`center`,gap:`0.125rem`,borderRadius:`9999px`,background:s.problems?`color-mix(in srgb, var(--destructive) 12%, transparent)`:`color-mix(in srgb, var(--accent) 55%, transparent)`,paddingInline:`0.25rem`,fontSize:`0.625rem`,fontWeight:700,color:s.problems?`var(--destructive)`:`var(--foreground)`}),"aria-label":`${s.total} annotation${s.total===1?``:`s`}`,children:[s.problems>0?(0,U.jsx)(E,{icon:B.problem,size:10,active:!0}):null,s.total]}):null]})},e.id)})})]})}function Ft({messages:e,activeMessageId:t,onSelect:n,className:a}){return(0,U.jsxs)(`label`,{className:r(i({display:`flex`,minWidth:0,alignItems:`center`,gap:`0.5rem`}),a),children:[(0,U.jsx)(`span`,{className:i({flex:`0 0 auto`,fontSize:`0.6875rem`,fontWeight:700,color:`var(--muted-foreground)`}),children:`Turn`}),(0,U.jsx)(l,{value:t??``,"aria-label":`Active session turn`,className:i({minWidth:0,width:`100%`,height:`2rem`,borderRadius:`0.375rem`,border:`1px solid var(--border)`,background:`var(--background)`,paddingInline:`0.5rem`,fontSize:`0.75rem`,color:`var(--foreground)`,_focusVisible:{outline:`3px solid var(--accent)`,outlineOffset:`1px`}}),onValueChange:e=>n(e),children:e.map((e,t)=>(0,U.jsxs)(`option`,{value:e.id,children:[t+1,`. `,e.label??e.role]},e.id))})]})}var $=[{value:`turns`,label:`Contents`,icon:`contents`},{value:`session`,label:`Page`,icon:`page`},{value:`review`,label:`Margin`,icon:`margin`}];function It(e,t,n){if(![`ArrowLeft`,`ArrowRight`,`Home`,`End`].includes(e.key))return;e.preventDefault();let r=$.findIndex(e=>e.value===t),i=$[e.key===`Home`?0:e.key===`End`?$.length-1:e.key===`ArrowRight`?(r+1)%$.length:(r-1+$.length)%$.length].value;n(i),e.currentTarget.parentElement?.querySelector(`[data-workspace-tab="${i}"]`)?.focus()}function Lt(e){return!e||!Number.isFinite(e)?null:new Intl.DateTimeFormat(void 0,{month:`short`,day:`numeric`,year:`numeric`,hour:`numeric`,minute:`2-digit`}).format(e)}var Rt=i({display:`grid`,width:`1.9rem`,height:`1.9rem`,flex:`0 0 auto`,placeItems:`center`,borderRadius:`0.25rem`,border:`1px solid var(--border)`,background:`var(--background)`,color:`var(--foreground)`,_hover:{borderColor:`var(--ink)`,background:`var(--muted)`},_focusVisible:{outline:`3px solid var(--accent)`,outlineOffset:`2px`}}),zt=i({fontSize:`0.5625rem`,letterSpacing:`0.04em`,color:`var(--muted-foreground)`,fontVariantNumeric:`tabular-nums`});function Bt({data:e,callbacks:t,renderArtifact:n,passes:a,passCallbacks:o,className:s}){let[c,l]=(0,H.useState)(`session`),{open:u,set:d}=At(`rail`,!1),{open:f,set:p}=At(`desk`,!1),[m,h]=(0,H.useState)(!1),[_,v]=(0,H.useState)(()=>e.activeTargetKey.startsWith(`artifact:`)?`artifact`:`transcript`),[y,b]=(0,H.useState)(`continuous`),x=e.messages.find(t=>t.id===e.activeTurnId)??e.messages[0],S=e.artifacts.find(t=>t.id===e.activeArtifactId)??e.artifacts[0],w=e.activeTargetKey.startsWith(`artifact:`),T=w&&S?ie(S.reference.artifactType):null,D=w?T:x?.role===`assistant`?`response`:null,k=w&&S&&T===null?`Annotate this ${S.reference.artifactType} directly. Parallel candidates currently return text only and cannot materialize native media.`:void 0,A=w&&S?{kind:`artifact`,artifact:S.reference}:x?{kind:`message`,messageId:x.id,role:x.role,messageTimestamp:x.timestamp,contentFingerprint:x.contentFingerprint}:{kind:`session`},j=1500+e.messages.reduce((e,t)=>e+t.text.length,0)+(w?S?.plainText?.length??0:0)+e.annotations.reduce((e,t)=>e+t.note.length+(t.pedagogicalImpact?.length??0)+(t.suggestedAlternative?.length??0),0),M=Lt(e.session.startedAt),F=C.filter(t=>e.review.ratings[t]).length,L=e.messages.map(t=>{let n=new Set(e.annotations.filter(e=>(e.target.kind===`message`||e.target.kind===`message-span`)&&e.target.messageId===t.id).map(e=>e.kind)),r=n.has(`problem`)?`problem`:n.has(`suggestion`)?`suggestion`:n.has(`strength`)?`strength`:void 0;return{id:t.id,tone:r?N(r):void 0,label:`Turn ${t.ordinal+1} · ${t.role}${r?` · ${r}`:``}`}});(0,H.useEffect)(()=>{e.annotationDraft&&l(`review`)},[e.annotationDraft]),(0,H.useEffect)(()=>{v(e.activeTargetKey.startsWith(`artifact:`)?`artifact`:`transcript`)},[e.activeTargetKey,e.session.id]),(0,H.useEffect)(()=>{b(`continuous`)},[e.session.id]),(0,H.useEffect)(()=>{_===`artifact`&&e.artifacts.length===0&&v(`transcript`)},[_,e.artifacts.length]);function R(e){t.onSelectTurn(e),v(`transcript`),b(`single`),l(`session`)}function ee(e){t.onSelectArtifact(e),v(`artifact`),l(`session`)}function V(e){if(e===`candidates`){v(e);return}if(e===`artifact`){if(!S)return;t.onSelectArtifact(S.id)}else{if(!x)return;t.onSelectTurn(x.id)}v(e)}function W(e){t.onStartAnnotation(e),p(!0),l(`review`)}function G(e){t.onTextSelection(e),p(!0),l(`review`)}function K(n){let r=e.annotations.find(e=>e.id===n);r&&(t.onEditAnnotation(r),p(!0),l(`review`))}return(0,U.jsxs)(`main`,{className:r(i({display:`flex`,width:`100%`,height:{base:`auto`,md:`min(88dvh, 58rem)`},minHeight:{base:`36rem`,md:`40rem`},flexDirection:`column`,overflow:`hidden`,border:`1px solid var(--border)`,borderRadius:{base:0,md:`0.5rem`},background:`var(--paper, var(--background))`,color:`var(--foreground)`}),s),children:[(0,U.jsxs)(`header`,{className:i({display:`flex`,minHeight:`4rem`,flexWrap:`wrap`,alignItems:`center`,justifyContent:`space-between`,gap:`0.625rem`,borderBottom:`1px solid var(--border)`,background:`var(--paper, var(--background))`,padding:{base:`0.625rem 0.75rem`,md:`0.625rem 1rem`}}),children:[(0,U.jsxs)(`div`,{className:i({display:`flex`,minWidth:0,alignItems:`center`,gap:`0.75rem`}),children:[(0,U.jsxs)(`a`,{href:`/chat?session=${encodeURIComponent(e.session.id)}`,className:I,title:`Return to this chat session`,children:[(0,U.jsx)(E,{icon:B.back,size:13}),` Back to session`]}),(0,U.jsxs)(`div`,{className:i({minWidth:0}),children:[(0,U.jsxs)(`div`,{className:i({display:`flex`,alignItems:`center`,gap:`0.5rem`}),children:[(0,U.jsx)(`h1`,{className:i({overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`,fontFamily:`serif`,fontSize:{base:`1rem`,md:`1.125rem`},fontWeight:700,color:`var(--foreground)`}),children:e.session.title}),(0,U.jsx)(`span`,{className:i({display:`inline-flex`,flex:`0 0 auto`,alignItems:`center`,gap:`0.2rem`,borderRadius:`9999px`,background:e.review.status===`final`?`color-mix(in srgb, var(--accent-green) 25%, transparent)`:`var(--muted)`,padding:`0.15rem 0.4rem`,fontSize:`0.5625rem`,fontWeight:750,letterSpacing:`0.04em`,textTransform:`uppercase`,color:`var(--muted-foreground)`}),children:e.review.status})]}),(0,U.jsxs)(`div`,{className:r(P,i({display:`flex`,flexWrap:`wrap`,alignItems:`center`,gap:`0.35rem`,marginTop:`0.125rem`})),children:[(0,U.jsxs)(`span`,{className:i({display:`inline-flex`,alignItems:`center`,gap:`0.2rem`}),children:[(0,U.jsx)(E,{icon:B.verdict,size:11}),` Review records stay local`]}),e.session.subtitle?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`span`,{"aria-hidden":`true`,children:`·`}),(0,U.jsx)(`span`,{children:e.session.subtitle})]}):null,M?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`span`,{"aria-hidden":`true`,children:`·`}),(0,U.jsx)(`span`,{children:M})]}):null]})]})]}),(0,U.jsxs)(`div`,{className:i({display:`flex`,alignItems:`center`,gap:`0.375rem`}),children:[(0,U.jsx)(`span`,{role:`status`,"aria-live":`polite`,className:P,children:e.busy?.saving?`Saving changes...`:e.busy?.exporting?`Preparing export...`:e.reviewDirty?`Unsaved changes`:``}),(0,U.jsxs)(`button`,{type:`button`,className:I,disabled:e.busy?.exporting,onClick:t.onExport,children:[(0,U.jsx)(E,{icon:B.export,size:13}),` `,(0,U.jsx)(`span`,{className:i({display:`none`,sm:{display:`inline`}}),children:`Export`})]}),(0,U.jsxs)(`button`,{type:`button`,className:z,disabled:e.busy?.saving||!e.reviewDirty,onClick:t.onSave,children:[(0,U.jsx)(E,{icon:B.save,size:13}),` `,(0,U.jsx)(`span`,{className:i({display:`none`,sm:{display:`inline`}}),children:e.busy?.saving?`Saving`:`Save review`})]})]})]}),(0,U.jsx)(`div`,{role:`tablist`,"aria-label":`Review workspace`,className:i({display:`grid`,gridTemplateColumns:`repeat(3, minmax(0, 1fr))`,borderBottom:`1px solid var(--border)`,md:{display:`none`}}),children:$.map(e=>{let t=c===e.value;return(0,U.jsxs)(`button`,{type:`button`,role:`tab`,id:`trajectory-workspace-${e.value}-tab`,"aria-controls":`trajectory-workspace-${e.value}-panel`,"aria-selected":t,tabIndex:t?0:-1,"data-workspace-tab":e.value,className:g(),onClick:()=>l(e.value),onKeyDown:t=>It(t,e.value,l),children:[(0,U.jsx)(E,{icon:B[e.icon],size:14}),` `,e.label]},e.value)})}),(0,U.jsxs)(`div`,{className:i({position:`relative`,display:{base:`block`,md:`grid`},minHeight:0,flex:1,gridTemplateColumns:{md:`2.75rem minmax(0, 1fr) 2.75rem`}}),onKeyDown:e=>{if(e.key===`Escape`){if(f){p(!1),e.stopPropagation();return}u&&(d(!1),e.stopPropagation())}},children:[(0,U.jsxs)(`nav`,{"aria-label":`Turns`,className:i({display:`none`,md:{display:`flex`,flexDirection:`column`,alignItems:`center`,gap:`0.4rem`,borderRight:`1px solid var(--border)`,background:`var(--card, var(--background))`,paddingBlock:`0.6rem`}}),children:[(0,U.jsx)(`button`,{type:`button`,"aria-expanded":u,"aria-controls":`trajectory-workspace-turns-panel`,title:u?`Collapse turn list`:`Expand turn list`,className:Rt,onClick:()=>d(!u),children:(0,U.jsx)(E,{icon:B.contents,size:14})}),L.map(t=>(0,U.jsx)(`button`,{type:`button`,title:t.label,"aria-label":t.label,"aria-current":t.id===e.activeTurnId?`true`:void 0,className:i({width:`0.7rem`,height:`0.7rem`,flex:`0 0 auto`,cursor:`pointer`,borderRadius:`9999px`,border:`1.5px solid var(--border)`,_hover:{outline:`2px solid var(--ink)`,outlineOffset:`3px`},_focusVisible:{outline:`3px solid var(--accent)`,outlineOffset:`2px`}}),style:{background:t.tone??`transparent`,borderColor:t.tone??`var(--border)`,boxShadow:t.id===e.activeTurnId?`0 0 0 3px color-mix(in srgb, var(--accent) 30%, transparent)`:void 0},onClick:()=>R(t.id)},t.id))]}),(0,U.jsx)(`div`,{id:`trajectory-workspace-turns-panel`,role:`tabpanel`,"aria-labelledby":`trajectory-workspace-turns-tab`,className:i({display:c===`turns`?`block`:`none`,minHeight:`32rem`,md:{display:u?`block`:`none`,position:`absolute`,insetBlock:0,left:`2.75rem`,zIndex:25,width:`15rem`,minHeight:0,borderRight:`1px solid var(--ink)`,background:`var(--card, var(--background))`,boxShadow:`14px 0 30px -24px rgba(0, 0, 0, 0.8)`}}),children:(0,U.jsx)(Pt,{messages:e.messages,annotations:e.annotations,activeMessageId:e.activeTurnId,onSelect:R})}),(0,U.jsxs)(`div`,{id:`trajectory-workspace-session-panel`,role:`tabpanel`,"aria-labelledby":`trajectory-workspace-session-tab`,className:i({display:c===`session`?`flex`:`none`,minWidth:0,minHeight:`32rem`,flexDirection:`column`,md:{display:`flex`,minHeight:0}}),children:[(0,U.jsx)(`div`,{className:i({display:`none`,borderBottom:`1px solid var(--border)`,padding:`0.5rem 0.75rem`,md:{display:`block`},xl:{display:`none`}}),children:(0,U.jsx)(Ft,{messages:e.messages,activeMessageId:e.activeTurnId,onSelect:R})}),(0,U.jsx)(Et,{messages:e.messages,artifacts:e.artifacts,annotations:e.annotations,activeMessageId:e.activeTurnId,activeArtifactId:e.activeArtifactId,activeAnnotationId:e.activeAnnotationId,mode:_,onModeChange:V,transcript:y,onTranscriptChange:b,onSelectMessage:R,onSelectArtifact:ee,onSelectAnnotation:K,onTextSelection:G,onStartAnnotation:W,onDeleteAnnotation:t.onDeleteAnnotation,annotationDraft:e.annotationDraft,onAnnotationDraftChange:t.onAnnotationDraftChange,onSaveAnnotation:t.onSaveAnnotation,onCancelAnnotation:t.onCancelAnnotation,onExpandAnnotation:a&&o?()=>o.onRunPass(`annotation-expand`):void 0,isSavingAnnotation:e.busy?.saving,isExpandingAnnotation:a?.running===`annotation-expand`,onDraftAnchoredChange:h,renderArtifact:n,candidateCount:e.candidates.filter(t=>t.targetKey===e.activeTargetKey).length,candidatePanel:(0,U.jsx)(de,{candidates:e.candidates,modelPools:e.modelPools,availableModels:e.availableModels,activeTargetKey:e.activeTargetKey,activeTask:D,generationUnavailableReason:k,promptCharacters:j,activeCandidateId:e.activeCandidateId,activeModelPoolId:e.activeModelPoolId,selectedCandidateId:e.review.selectedCandidateIds[e.activeTargetKey],isGenerating:e.busy?.generating,onSelectCandidate:t.onSelectCandidate,onSelectModelPool:t.onSelectModelPool,onGenerate:t.onGenerateCandidates,onChoose:t.onChooseCandidate,onInsert:t.onInsertCandidate,onRegenerate:t.onRegenerateCandidate}),className:i({minHeight:0,flex:1})})]}),(0,U.jsx)(`div`,{id:`trajectory-workspace-review-panel`,role:`tabpanel`,"aria-labelledby":`trajectory-workspace-review-tab`,className:i({display:c===`review`?`block`:`none`,minWidth:0,minHeight:`32rem`,md:{display:f?`block`:`none`,position:`absolute`,insetBlock:0,right:`2.75rem`,zIndex:25,width:`22rem`,maxWidth:`70vw`,minHeight:0,borderLeft:`1px solid var(--ink)`,background:`var(--card, var(--background))`,boxShadow:`-14px 0 30px -24px rgba(0, 0, 0, 0.8)`}}),children:(0,U.jsx)(Re,{data:e,callbacks:t,activeTarget:A,passes:a,passCallbacks:o,draftAnchored:m,onOpenCandidates:()=>{v(`candidates`),l(`session`)}})}),(0,U.jsxs)(`nav`,{"aria-label":`Review desk`,className:i({display:`none`,md:{display:`flex`,flexDirection:`column`,alignItems:`center`,gap:`0.5rem`,borderLeft:`1px solid var(--border)`,background:`var(--card, var(--background))`,paddingBlock:`0.6rem`}}),children:[(0,U.jsx)(`button`,{type:`button`,"aria-expanded":f,"aria-controls":`trajectory-workspace-review-panel`,title:f?`Collapse review desk`:`Open review desk`,className:Rt,onClick:()=>p(!f),children:(0,U.jsx)(E,{icon:B.margin,size:14})}),(0,U.jsx)(`span`,{title:`Verdict: ${O(e.review.verdict)}`,className:zt,children:e.review.verdict===`accepted`?`✓`:e.review.verdict===`rejected`?`✕`:e.review.verdict===`review`?`!`:`—`}),(0,U.jsxs)(`span`,{title:`Rubric: ${F} of ${C.length} scored`,className:zt,children:[F,`/`,C.length]}),(0,U.jsxs)(`span`,{title:`${e.candidates.length} candidates`,className:zt,children:[e.candidates.length,`◇`]}),a?.rubric?(0,U.jsx)(`span`,{title:`A rubric proposal is waiting`,className:r(zt,i({color:`var(--accent-dim)`,fontWeight:700})),children:`●`}):null]})]})]})}export{et as a,tt as i,Et as n,$e as r,Bt as t};