@blocknote/xl-ai 0.48.1 → 0.50.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/blocknote-xl-ai.cjs +1 -1
- package/dist/{server-Ct45EOTu.cjs → server-D-Xyj9BS.cjs} +2 -2
- package/dist/{server-Ct45EOTu.cjs.map → server-D-Xyj9BS.cjs.map} +1 -1
- package/dist/server.cjs +1 -1
- package/dist/webpack-stats.json +1 -1
- package/package.json +6 -5
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Combined/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{add and update paragraph_1_380a0c02b5089b38247457135c044cf7.json → add and update paragraph_1_0acceced44cd885ee4439d4ef8639ba2.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Combined/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{add paragraph and update selection_1_298b51bb28c5f95ab9a00205d4e38460.json → add paragraph and update selection_1_9f552939a63a167da4dd5b1abffbfc43.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Combined/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{add and update paragraph_1_f6253c11196abdbeae0f898cc9df85eb.json → add and update paragraph_1_f5ce14780d38e0a320dc0246f9fa3fa7.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Combined/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{add paragraph and update selection_1_dc29d735348684d1ec3e290ad8c03a71.json → add paragraph and update selection_1_8157654938ade250b36e1dde3bf0a5c2.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Combined/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{add and update paragraph_1_a27ae10badcc3913a00eb86f77ac64db.json → add and update paragraph_1_eb11dd6643fc4f655a9d55dbd71b19b9.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Combined/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{add paragraph and update selection_1_86f10ca461ee44e74ae571fb9f214338.json → add paragraph and update selection_1_bcb205a92155b4f033637eb9f5fb2d3b.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Delete/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{delete first block_1_91346200727a71ab9ad8c5d014835688.json → delete first block_1_de1c4968c1329dacd5d81bcd2b3ed8d1.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Delete/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{delete first block_1_150a539024aa981c9f6bcb068875a6c9.json → delete first block_1_df7ac05af05cf3c79699aabb8ea42853.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Delete/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{delete first block_1_1b3c4ac85d448677697457098332ceba.json → delete first block_1_2c1689a55eb91228110b68a63451fd1a.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{drop mark and link and change text within mark_1_fe3cac9da9d1e17a20ee8c0c4380d925.json → drop mark and link and change text within mark_1_7269bbc0b34bc5775aa44079fb454ffb.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{drop mark and link_1_f6ee881e6d3b4cd9553256523e67683a.json → drop mark and link_1_e3dcd01b4daf96d961ea02871bebdc41.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{plain source block, add mention_1_ccd752aefdbc2252a5a09bebac393afb.json → plain source block, add mention_1_697fa8208493812d2a1e80e1aaf9c5de.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{standard update_1_c44a31a1631a3a10efcd5e17645998f1.json → standard update_1_1aee87323867b909b4239664f8b71087.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{styles + ic in source block, remove mark_1_df177a6a4f26b0fbcba307c6d21cab76.json → styles + ic in source block, remove mark_1_7e627acd5601089ce51f17d48a125d26.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{styles + ic in source block, remove mention_1_4ba9f3411694f807e85e8e33f4b3c8cd.json → styles + ic in source block, remove mention_1_191aa134e34de44ad154b02c452f2a13.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{styles + ic in source block, replace content_1_f5b001d0f8415a00e8b043f3e3e33535.json → styles + ic in source block, replace content_1_f1ad8291536f56abe5780af9c67a719e.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{styles + ic in source block, update mention prop_1_c197e3f5ce1dbc1a68765acbd198881a.json → styles + ic in source block, update mention prop_1_09e4b9d91e0003a97447e19e13c71fae.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{styles + ic in source block, update text_1_a0b93418bb2a5c0049e0a5c896f72191.json → styles + ic in source block, update text_1_135a07dea96ec03fd66a4f9d14bffaab.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{styles + ic in target block, add mark (paragraph)_1_fb2285b8d362cb8adcf78f6039ad3058.json → styles + ic in target block, add mark (paragraph)_1_057de0a27c49b9bc6acd8203ecddd838.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{styles + ic in target block, add mark (word)_1_e0087b91327576eaff9f8d4d368e0a03.json → styles + ic in target block, add mark (word)_1_cea1695dae5f5462ee9ab5a7400fee2f.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{translate selection_1_4706b49daa5ad7afe9dfadded2e335c5.json → translate selection_1_2164172c277a84ca943d79ae55a7c655.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{update block prop and content_1_5bb684c9ae46815b5367a39bd42d5257.json → update block prop and content_1_e89f2ff97bb5e14d9f8e7c4bbb03af6f.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{update block prop_1_8469a78802d46f3d9ec74dd1fbf49fd8.json → update block prop_1_fabe61c81d039e0c80c38121db6daef1.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{update block type and content_1_226cc5d7352c8c7e58a15d064543518c.json → update block type and content_1_92d996135152e832c6db18b41f6b6912.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{drop mark and link and change text within mark_1_e5c77f0f881e77f6ee27a25f203ffdcb.json → drop mark and link and change text within mark_1_02b8585f48a09784036175bf14c592cd.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{drop mark and link_1_b93576392cb38dc57acd85f7fc55c6cd.json → drop mark and link_1_5153f11ec2928539607eae3fc9554a2e.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{plain source block, add mention_1_b18afae076d7f7f423477f1e1bc5813a.json → plain source block, add mention_1_f33053e9ce75e3382e59f65f47268a07.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{standard update_1_529e09ae665507a31316cb632f5cabcd.json → standard update_1_3701c48442d9b752a7ea313e3255163c.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{styles + ic in source block, remove mark_1_20036398e12cf4a20b50024ad5f30018.json → styles + ic in source block, remove mark_1_dd318513d3f70effe9df402a04ebe20e.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{styles + ic in source block, remove mention_1_ed131f0383e7709a4e5fae2df28af29a.json → styles + ic in source block, remove mention_1_df29b6d9520b0719a02ff9f241d8fd12.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{styles + ic in source block, replace content_1_51bfdc443e43bbf18599fcc3a16c5683.json → styles + ic in source block, replace content_1_353407caea15e5886ca416c18085f09c.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{styles + ic in source block, update mention prop_1_7641f5691799d2666855c113b6659b71.json → styles + ic in source block, update mention prop_1_545d20572920e7098f9e71846d69942e.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{styles + ic in source block, update text_1_8fcb24a91437026c480205de77507871.json → styles + ic in source block, update text_1_f94a68a64c18b7537380682b3e0fa902.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{styles + ic in target block, add mark (paragraph)_1_be126322b804c53145dbd35a6aa1131f.json → styles + ic in target block, add mark (paragraph)_1_b625ba3069c0ee0677dbab599b173252.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{styles + ic in target block, add mark (word)_1_ec13a3b1d4f97b79148833b507295ffa.json → styles + ic in target block, add mark (word)_1_f9207412b6a2032fd012f61be3d16b7b.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{translate selection_1_f1a2ffb178b441d40625b8f110e3290f.json → translate selection_1_1d088b7563942b1405ced6473b89b3ea.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{update block prop and content_1_8557c5a4249c324adfff5d243645e3de.json → update block prop and content_1_7aec058255eb34b8dd1fcc434173ed62.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{update block prop_1_16dda1caa1f43ab624eb28a605179dd3.json → update block prop_1_f4d4d0847f49e3177b2090d2dfcdf4a8.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{update block type and content_1_8b167672c96bf3c69b9b146eb4f26451.json → update block type and content_1_bb2150f4fbbd0d60e298c14879b5d98c.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{update block type_1_7326b3d0db43c8f399aba2bc44c80194.json → update block type_1_0cc06aead6a8738ef5ae9397d449a4bb.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{drop mark and link and change text within mark_1_94f36faff958747b5d66a185e268bba7.json → drop mark and link and change text within mark_1_3b2d04fb8cc28b3327eac7fbb649212c.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{drop mark and link_1_60bf97139612cd25b1f99502383df8aa.json → drop mark and link_1_7376633d53b21fc3dbe3c1f051cd2940.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{plain source block, add mention_1_d5759fe9868f60a47538d31361c68b3c.json → plain source block, add mention_1_f44ed609f9d070a9db6e3357eb3b4b12.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{standard update_1_f6a167a6ea376d70d84dd9aac6ac7bb3.json → standard update_1_f38c18ce0c3c0d617287e458c9a79fc6.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{styles + ic in source block, remove mark_1_990c696cfe9af87de056328060fd1f93.json → styles + ic in source block, remove mark_1_58230e87771d121dabc82e08fdabeec9.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{styles + ic in source block, remove mention_1_fd4deb4dce4d79ae14939fda71c510fd.json → styles + ic in source block, remove mention_1_501a15f4ae0e22db498c2a018f67c304.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{styles + ic in source block, replace content_1_6cd810cd03bff509578637fe27d13a92.json → styles + ic in source block, replace content_1_3a53469420cab77a1672183bf403d5f1.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{styles + ic in source block, update mention prop_1_f0e30d1d6cbc94e6b7dcb8abb7e0221f.json → styles + ic in source block, update mention prop_1_d2d711f753398974c968fc07f4ded143.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{styles + ic in source block, update text_1_1104dff815f18f8f786fb7d4e4522d47.json → styles + ic in source block, update text_1_42c93de53980c01c69a514f6eea5f7c7.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{styles + ic in target block, add mark (paragraph)_1_e2f4cdb3df42b17c74cd1d2d00d2f8d5.json → styles + ic in target block, add mark (paragraph)_1_c899778ecf731961e7554d0dd99c1048.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{styles + ic in target block, add mark (word)_1_6b5073ce92485be7974a344d50247b4a.json → styles + ic in target block, add mark (word)_1_6de7b8e48053b34c8c48307442ebdaf9.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{translate selection_1_d343e10867cc7b3d9850847c99826b61.json → translate selection_1_2be264b1a0ad629a6626df5dc6dc95ff.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{update block prop and content_1_780bfe04d42dd48e9115cba7c4582c01.json → update block prop and content_1_cc8d5c88299059d82196af81416f61e4.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{update block prop_1_667c03220ba6e678d0c91b9de092484b.json → update block prop_1_c3507737f635c70e33af6d9967568ce6.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{update block type and content_1_f3c6521f6f12dc50dc16d0bbc277a858.json → update block type and content_1_0e4e3658327ed05d3accbdb2649b4409.json } +1 -1
- package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{update block type_1_7c4fbdcabcec0568ade27d2b47afbaab.json → update block type_1_14269fdf643fd47ec85aa390368ef71a.json } +1 -1
- package/src/api/formats/html-blocks/htmlBlocks.test.ts +3 -43
- package/src/api/formats/json/json.test.ts +3 -43
- package/src/api/formats/markdown-blocks/markdownBlocks.test.ts +3 -43
- package/src/api/formats/tests/snapshotPath.ts +33 -0
- package/src/prosemirror/__snapshots__/agent.test.ts.snap +119 -119
- package/src/prosemirror/__snapshots__/changeset.test.ts.snap +0 -6
- package/types/src/api/formats/tests/snapshotPath.d.ts +3 -0
- /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{update block type_1_c4cc00889532e0baa73998da5e79c303.json → update block type_1_be165931651bf1c2e817e30b34cacddd.json} +0 -0
package/dist/blocknote-xl-ai.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./server-Ct45EOTu.cjs`);let t=require(`@ai-sdk/react`),n=require(`@blocknote/core`),r=require(`@blocknote/core/extensions`),i=require(`@handlewithcare/prosemirror-suggest-changes`),a=require(`prosemirror-model`),o=require(`prosemirror-state`),s=require(`prosemirror-tables`),c=require(`prosemirror-view`),l=require(`y-prosemirror`),u=require(`@blocknote/react`),d=require(`react`),f=require(`react-icons/ri`),p=require(`react/jsx-runtime`),m=require(`@floating-ui/react`);var h=new o.PluginKey(`blocknote-agent-cursor`);function g(e){return new o.Plugin({key:h,view:e=>({}),state:{init:()=>({selection:void 0}),apply:(e,t)=>{let n=e.getMeta(`aiAgent`);return n?{selection:n.selection}:{selection:void 0}}},props:{decorations:t=>{let{doc:n}=t,{selection:r}=h.getState(t),i=[];if(!r)return c.DecorationSet.create(n,[]);i.push(c.Decoration.widget(r.head,()=>_(e),{key:`agent-cursor`,side:10}));let a=Math.min(r.anchor,r.head),o=Math.max(r.anchor,r.head);return i.push(c.Decoration.inline(a,o,(0,l.defaultSelectionBuilder)(e),{inclusiveEnd:!0,inclusiveStart:!1})),c.DecorationSet.create(n,i)}}})}var _=e=>{let t=document.createElement(`span`);t.classList.add(`bn-collaboration-cursor__base`),t.setAttribute(`data-active`,`true`);let n=document.createElement(`span`);n.setAttribute(`contentedEditable`,`false`),n.classList.add(`bn-collaboration-cursor__caret`),n.setAttribute(`style`,`background-color: ${e.color}`);let r=document.createElement(`span`);return r.classList.add(`bn-collaboration-cursor__label`),r.setAttribute(`style`,`background-color: ${e.color}`),r.insertBefore(document.createTextNode(e.name),null),n.insertBefore(r,null),t.insertBefore(document.createTextNode(``),null),t.insertBefore(n,null),t.insertBefore(document.createTextNode(``),null),t},v=new o.PluginKey(`blocknote-ai-plugin`),y=(0,n.createExtension)(({editor:c,options:l})=>{let u=(0,n.createStore)(l??{}),d=(0,n.createStore)({aiMenuState:`closed`}),f,p=!1,m=(0,i.suggestChanges)();return m.props.decorations=void 0,{key:`ai`,options:u,store:d,mount({signal:e}){let t=!1;document.addEventListener(`scroll`,()=>{t&&(p=!1),t=!0},{capture:!0,signal:e}),document.addEventListener(`scrollend`,()=>{t=!1},{capture:!0,signal:e})},prosemirrorPlugins:[new o.Plugin({key:v,filterTransaction:e=>{let t=d.state.aiMenuState;return!(t!==`closed`&&t.status===`ai-writing`&&e.getMeta(s.fixTablesKey)?.fixTables)}}),m,g(l?.agentCursor||{name:`AI`,color:`#8bc6ff`})],openAIMenuAtBlock(e){c.getExtension(r.ShowSelectionExtension)?.showSelection(!0,`aiMenu`),c.isEditable=!1,d.setState({aiMenuState:{blockId:e,status:`user-input`}}),(c.domElement?.querySelector(`[data-node-type="blockContainer"][data-id="${e}"]`))?.scrollIntoView({block:`center`})},closeAIMenu(){d.setState({aiMenuState:`closed`}),f=void 0,c.getExtension(r.ShowSelectionExtension)?.showSelection(!1,`aiMenu`),c.isEditable=!0,c.focus()},acceptChanges(){let e=c.prosemirrorState.doc;c.exec((e,t)=>(0,i.revertSuggestions)(e,e=>{t?.(e.setMeta(`addToHistory`,!1))})),c.exec((t,n)=>{let r=t.tr;return r.replace(0,r.doc.content.size,new a.Slice(a.Fragment.from(e),0,0)),(0,i.applySuggestions)(t.apply(r),e=>{n?.(r.replace(0,r.doc.content.size,new a.Slice(a.Fragment.from(e.doc),0,0)))})}),c.getExtension(r.ForkYDocExtension)?.merge({keepChanges:!0}),this.closeAIMenu()},rejectChanges(){c.exec((e,t)=>(0,i.revertSuggestions)(e,e=>{t?.(e.setMeta(`addToHistory`,!1))})),c.getExtension(r.ForkYDocExtension)?.merge({keepChanges:!1}),this.closeAIMenu()},async abort(e){let{aiMenuState:t}=d.state;if(t===`closed`||!f||t.status!==`thinking`&&t.status!==`ai-writing`)return;let n=f.chat;f.abortController.abort(e),await n.stop()},async retry(){let{aiMenuState:e}=d.state;if(e===`closed`||e.status!==`error`||!f)throw Error(`retry() is only valid when a previous response failed`);return f?.chat.status===`error`?this.invokeAI({...f.previousRequestOptions,userPrompt:`An error occured in the previous request. Please retry to accomplish the last user prompt.`}):this.invokeAI({...f.previousRequestOptions,userPrompt:`An error occured while executing the previous tool call. Please retry to accomplish the last user prompt.`})},setAIResponseStatus(e){let t=d.state.aiMenuState;if(t!==`closed`)if(e===`ai-writing`&&c.getExtension(r.ShowSelectionExtension)?.showSelection(!1,`aiMenu`),typeof e==`object`){if(e.status!==`error`)throw new n.UnreachableCaseError(e.status);this.store.setState({aiMenuState:{status:e.status,error:e.error,blockId:t.blockId}})}else this.store.setState({aiMenuState:{status:e,blockId:t.blockId}})},async callLLM(e){return this.invokeAI(e)},async invokeAI(i){this.setAIResponseStatus(`thinking`),c.getExtension(r.ForkYDocExtension)?.fork();try{let r=new AbortController;f?(f.previousRequestOptions=i,f.abortController=r):f={previousRequestOptions:i,chat:i.chatProvider?.()||this.options.state.chatProvider?.()||new t.Chat({sendAutomaticallyWhen:()=>!1,transport:i.transport||this.options.state.transport}),abortController:r};let a=f.chat;i={...u.state,...i};let o=await e.y({editor:c,useSelection:i.useSelection,deleteEmptyCursorBlock:i.deleteEmptyCursorBlock,streamToolsProvider:i.streamToolsProvider??this.options.state.streamToolsProvider,documentStateBuilder:i.documentStateBuilder??this.options.state.documentStateBuilder,onBlockUpdated:e=>{let t=d.state.aiMenuState,r=t===`closed`?void 0:t;if(!r||r.status!==`ai-writing`)return;let i=(0,n.getNodeById)(e,c.prosemirrorState.doc);i&&(d.setState({aiMenuState:{blockId:e,status:`ai-writing`}}),p&&c.prosemirrorView.domAtPos(i.posBeforeNode+1).node.scrollIntoView({block:`center`}))},onStart:()=>{p=!0,this.setAIResponseStatus(`ai-writing`),o.emptyCursorBlockToDelete&&o.editor.getBlock(o.emptyCursorBlockToDelete)&&o.editor.removeBlocks([o.emptyCursorBlockToDelete])}}),s=await e.s(a,o,{role:`user`,parts:[{type:`text`,text:i.userPrompt}]},i.chatRequestOptions||this.options.state.chatRequestOptions,f.abortController.signal);s.ok&&a.status!==`error`||r.signal.aborted?this.setAIResponseStatus(`user-reviewing`):(console.warn(`Error calling LLM`,{result:s,chatStatus:a.status,chatError:a.error}),this.setAIResponseStatus({status:`error`,error:s.ok?a.error:s.error}))}catch(e){this.setAIResponseStatus({status:`error`,error:e}),console.error(`Unexpected error calling LLM`,e,f?.chat.messages)}}}});function b(){return e.n((0,u.useBlockNoteContext)().editor)}var x=e=>{let t=(0,u.useComponentsContext)(),{onManualPromptSubmit:i,promptText:a,onPromptTextChange:o,disabled:s}=e,[c,l]=(0,d.useState)(``),f=a||c,m=(0,d.useCallback)(async e=>{e.key===`Enter`&&!e.nativeEvent.isComposing&&i(f)},[f,i]),h=(0,d.useCallback)(e=>{let t=e.currentTarget.value;o&&o(t),a===void 0&&l(t)},[o,l,a]),g=(0,d.useMemo)(()=>(0,r.filterSuggestionItems)(e.items,f),[f,e.items]),{selectedIndex:_,setSelectedIndex:v,handler:y}=(0,u.useSuggestionMenuKeyboardHandler)(g,e=>e.onItemClick()),b=g.length>0&&_>=0&&_<g.length?`bn-suggestion-menu-item-${_}`:void 0,x=(0,d.useCallback)(e=>{e.key===`Enter`&&!e.nativeEvent.isComposing?g.length>0?y(e):m(e):y(e)},[m,y,g.length]);(0,d.useEffect)(()=>{v(0)},[f,v]);let S=(0,d.useRef)(null),C=(0,d.useRef)(s);return(0,d.useEffect)(()=>{S.current&&C.current&&!s&&S.current.focus(),s&&(C.current=!0)},[s]),(0,p.jsxs)(`div`,{className:`bn-combobox`,children:[(0,p.jsx)(t.Generic.Form.Root,{children:(0,p.jsx)(t.Generic.Form.TextInput,{ref:S,className:`bn-combobox-input`,name:`ai-prompt`,variant:`large`,icon:e.icon,value:f||``,placeholder:e.placeholder,disabled:e.disabled,onKeyDown:x,onChange:h,autoComplete:`off`,rightSection:e.rightSection,"aria-activedescendant":b})}),g.length>0&&(0,p.jsx)(t.SuggestionMenu.Root,{className:`bn-combobox-items`,id:`ai-suggestion-menu`,children:g.map((e,r)=>(0,p.jsx)(t.SuggestionMenu.Item,{className:(0,n.mergeCSSClasses)(`bn-suggestion-menu-item`,e.size===`small`?`bn-suggestion-menu-item-small`:``),id:`bn-suggestion-menu-item-${r}`,isSelected:r===_,onClick:e.onItemClick,item:e},e.title))})]})};function S(t){let n=e.n(t),r=t.getExtension(y);return r?[{key:`continue_writing`,title:n.ai_default_commands.continue_writing.title,aliases:n.ai_default_commands.continue_writing.aliases,icon:(0,p.jsx)(f.RiBallPenLine,{size:18}),onItemClick:async()=>{await r.invokeAI({userPrompt:`Continue writing at the current cursor position related to the previous text. Add multiple blocks if needed. If the document looks like a template / draft, follow the template. Be extensive if needed.`,streamToolsProvider:e.i.html.getStreamToolsProvider({defaultStreamTools:{add:!0,delete:!1,update:!1}})})},size:`small`},{key:`summarize`,title:n.ai_default_commands.summarize.title,aliases:n.ai_default_commands.summarize.aliases,icon:(0,p.jsx)(f.RiTextWrap,{size:18}),onItemClick:async()=>{await r.invokeAI({userPrompt:`Summarize`,streamToolsProvider:e.i.html.getStreamToolsProvider({defaultStreamTools:{add:!0,delete:!1,update:!1}})})},size:`small`},{key:`action_items`,title:n.ai_default_commands.add_action_items.title,aliases:n.ai_default_commands.add_action_items.aliases,icon:(0,p.jsx)(f.RiListCheck3,{size:18}),onItemClick:async()=>{await r.invokeAI({userPrompt:`Add action items`,streamToolsProvider:e.i.html.getStreamToolsProvider({defaultStreamTools:{add:!0,delete:!1,update:!1}})})},size:`small`},{key:`write_anything`,title:n.ai_default_commands.write_anything.title,aliases:n.ai_default_commands.write_anything.aliases,icon:(0,p.jsx)(f.RiBallPenLine,{size:18}),onItemClick:e=>{e(n.ai_default_commands.write_anything.prompt_placeholder)},size:`small`}]:[]}function C(t){let n=e.n(t),r=t.getExtension(y);return r?[{key:`improve_writing`,title:n.ai_default_commands.improve_writing.title,aliases:n.ai_default_commands.improve_writing.aliases,icon:(0,p.jsx)(f.RiText,{size:18}),onItemClick:async()=>{await r.invokeAI({useSelection:!0,userPrompt:`Improve writing`,streamToolsProvider:e.i.html.getStreamToolsProvider({defaultStreamTools:{add:!1,delete:!1,update:!0}})})},size:`small`},{key:`fix_spelling`,title:n.ai_default_commands.fix_spelling.title,aliases:n.ai_default_commands.fix_spelling.aliases,icon:(0,p.jsx)(f.RiCheckLine,{size:18}),onItemClick:async()=>{await r.invokeAI({useSelection:!0,userPrompt:`Fix spelling`,streamToolsProvider:e.i.html.getStreamToolsProvider({defaultStreamTools:{add:!1,delete:!1,update:!0}})})},size:`small`},{key:`translate`,title:n.ai_default_commands.translate.title,aliases:n.ai_default_commands.translate.aliases,icon:(0,p.jsx)(f.RiEarthLine,{size:18}),onItemClick:e=>{e(n.ai_default_commands.translate.prompt_placeholder)},size:`small`},{key:`simplify`,title:n.ai_default_commands.simplify.title,aliases:n.ai_default_commands.simplify.aliases,icon:(0,p.jsx)(f.RiMagicLine,{size:18}),onItemClick:async()=>{await r.invokeAI({useSelection:!0,userPrompt:`Simplify`,streamToolsProvider:e.i.html.getStreamToolsProvider({defaultStreamTools:{add:!1,delete:!1,update:!0}})})},size:`small`}]:[]}function w(t){let n=e.n(t),r=t.getExtension(y);return r?[{key:`accept`,title:n.ai_menu.actions.accept.title,aliases:n.ai_menu.actions.accept.aliases,icon:(0,p.jsx)(f.RiCheckFill,{size:18}),onItemClick:()=>{r.acceptChanges()},size:`small`},{key:`revert`,title:n.ai_menu.actions.revert.title,aliases:n.ai_menu.actions.revert.aliases,icon:(0,p.jsx)(f.RiArrowGoBackFill,{size:18}),onItemClick:()=>{r.rejectChanges()},size:`small`}]:[]}function T(t){let n=e.n(t),r=t.getExtension(y);return r?[{key:`retry`,title:n.ai_menu.actions.retry.title,aliases:n.ai_menu.actions.retry.aliases,icon:(0,p.jsx)(f.RiLoopLeftFill,{size:18}),onItemClick:async()=>{await r.retry()},size:`small`},{key:`cancel`,title:n.ai_menu.actions.cancel.title,aliases:n.ai_menu.actions.cancel.aliases,icon:(0,p.jsx)(f.RiArrowGoBackFill,{size:18}),onItemClick:()=>{r.rejectChanges()},size:`small`}]:[]}function E(e,t){return t===`user-input`?e.getSelection()?C(e):S(e):t===`user-reviewing`?w(e):t===`error`?T(e):[]}var D=e=>{let t=(0,u.useBlockNoteEditor)(),[n,r]=(0,d.useState)(``),i=b(),a=(0,u.useComponentsContext)(),o=(0,u.useExtension)(y),s=(0,u.useExtensionState)(y,{selector:e=>e.aiMenuState===`closed`?`closed`:e.aiMenuState.status}),{items:c}=e,l=(0,d.useMemo)(()=>{let e=[];return e=c?c(t,s):E(t,s),e.map(e=>({...e,onItemClick:()=>{e.onItemClick(r)}}))},[c,s,t]),m=(0,d.useCallback)(async e=>{await o.invokeAI({userPrompt:e,useSelection:t.getSelection()!==void 0})},[o,t]);(0,d.useEffect)(()=>{(s===`ai-writing`||s===`user-reviewing`||s===`error`)&&r(``)},[s]);let h=(0,d.useMemo)(()=>s===`thinking`?i.ai_menu.status.thinking:s===`ai-writing`?i.ai_menu.status.editing:s===`error`?i.ai_menu.status.error:i.ai_menu.input_placeholder,[s,i]),g=(0,d.useMemo)(()=>{if(s===`thinking`||s===`ai-writing`)return(0,p.jsx)(a.SuggestionMenu.Loader,{className:`bn-suggestion-menu-loader bn-combobox-right-section`});if(s===`error`)return(0,p.jsx)(`div`,{className:`bn-combobox-right-section bn-combobox-error`,children:(0,p.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,height:`1em`,viewBox:`0 -960 960 960`,width:`1em`,fill:`currentColor`,children:(0,p.jsx)(`path`,{d:`M480-280q17 0 28.5-11.5T520-320q0-17-11.5-28.5T480-360q-17 0-28.5 11.5T440-320q0 17 11.5 28.5T480-280Zm0-160q17 0 28.5-11.5T520-480v-160q0-17-11.5-28.5T480-680q-17 0-28.5 11.5T440-640v160q0 17 11.5 28.5T480-440Zm0 360q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z`})})})},[a,s]);return(0,p.jsx)(x,{onManualPromptSubmit:e.onManualPromptSubmit||m,items:l,promptText:n,onPromptTextChange:r,placeholder:h,disabled:s===`thinking`||s===`ai-writing`,icon:(0,p.jsx)(`div`,{className:`bn-combobox-icon`,children:(0,p.jsx)(f.RiSparkling2Fill,{})}),rightSection:g})},O=e=>{let t=(0,u.useBlockNoteEditor)(),n=(0,u.useExtension)(y),r=(0,u.useExtensionState)(y,{editor:t,selector:e=>e.aiMenuState}),i=r===`closed`?void 0:r.blockId,a=(0,d.useMemo)(()=>({...e.floatingUIOptions,useFloatingOptions:{open:r!==`closed`,placement:`bottom`,middleware:[(0,m.offset)(10),(0,m.flip)(),(0,m.size)({apply({rects:e,elements:t}){Object.assign(t.floating.style,{width:`${e.reference.width}px`})}})],onOpenChange:e=>{e||r===`closed`||(r.status===`user-input`?n.closeAIMenu():(r.status===`user-reviewing`||r.status===`error`)&&n.rejectChanges())},whileElementsMounted(e,t,n){return(0,m.autoUpdate)(e,t,n,{animationFrame:!0})},...e.floatingUIOptions?.useFloatingOptions},useDismissProps:{enabled:r===`closed`||r.status===`user-input`,outsidePress:e=>{if(e.target instanceof Element){let t=e.target.closest(`.bn-block`);t&&t.getAttribute(`data-id`)===i&&n.closeAIMenu()}return!0},...e.floatingUIOptions?.useDismissProps},elementProps:{style:{zIndex:100},...e.floatingUIOptions?.elementProps},focusManagerProps:{disabled:!1,getInsideElements:()=>t.domElement?[t.domElement]:[],...e.floatingUIOptions?.focusManagerProps}}),[n,r,i,e.floatingUIOptions,t.domElement]),o=e.aiMenu||D;return(0,p.jsx)(u.BlockPopover,{blockId:i,...a,children:r!==`closed`&&(0,p.jsx)(o,{})})},k=()=>{let e=b(),t=(0,u.useComponentsContext)(),n=(0,u.useBlockNoteEditor)(),i=(0,u.useExtension)(y),a=(0,u.useExtension)(r.FormattingToolbarExtension);return n.isEditable?(0,p.jsx)(t.Generic.Toolbar.Button,{className:`bn-button`,label:e.formatting_toolbar.ai.tooltip,mainTooltip:e.formatting_toolbar.ai.tooltip,icon:(0,p.jsx)(f.RiSparkling2Fill,{}),onClick:()=>{let e=n.getSelection();if(!e)throw Error(`No selection`);let t=e.blocks[e.blocks.length-1].id;i.openAIMenuAtBlock(t),a.store.setState(!1)}}):null},A={AI:f.RiSparkling2Fill};function j(t){let n=t.getExtension(y);return n?[{key:`ai`,onItemClick:()=>{let e=t.getTextCursorPosition();e.block.content&&Array.isArray(e.block.content)&&e.block.content.length===0&&e.prevBlock?n.openAIMenuAtBlock(e.prevBlock.id):n.openAIMenuAtBlock(e.block.id)},...e.n(t).slash_menu.ai,icon:(0,p.jsx)(A.AI,{})}]:[]}exports.AIExtension=y,exports.AIMenu=D,exports.AIMenuController=O,exports.AIToolbarButton=k,exports.ClientSideTransport=e.u,exports.PROVIDER_OVERRIDES=e.d,exports.PromptSuggestionMenu=x,exports.StreamToolExecutor=e.g,exports._getApplySuggestionsTr=e.a,exports.aiDocumentFormats=e.i,exports.buildAIRequest=e.y,exports.createStreamToolsArraySchema=e._,exports.fetchViaProxy=e.t,exports.getAIDictionary=e.n,exports.getAISlashMenuItems=j,exports.getDefaultAIMenuItems=E,exports.getProviderOverrides=e.f,exports.injectDocumentStateMessages=e.h,exports.makeDocumentStateBuilder=e.o,exports.objectStreamToOperationsResult=e.l,exports.promptHelpers=e.r,exports.sendMessageWithAIRequest=e.s,exports.setupToolCallStreaming=e.c,exports.streamToolsToToolSet=e.v,exports.toolDefinitionsToToolSet=e.p,exports.toolSetToToolDefinitions=e.m,exports.useAIDictionary=b;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./server-D-Xyj9BS.cjs`);let t=require(`@ai-sdk/react`),n=require(`@blocknote/core`),r=require(`@blocknote/core/extensions`),i=require(`@handlewithcare/prosemirror-suggest-changes`),a=require(`prosemirror-model`),o=require(`prosemirror-state`),s=require(`prosemirror-tables`),c=require(`prosemirror-view`),l=require(`y-prosemirror`),u=require(`@blocknote/react`),d=require(`react`),f=require(`react-icons/ri`),p=require(`react/jsx-runtime`),m=require(`@floating-ui/react`);var h=new o.PluginKey(`blocknote-agent-cursor`);function g(e){return new o.Plugin({key:h,view:e=>({}),state:{init:()=>({selection:void 0}),apply:(e,t)=>{let n=e.getMeta(`aiAgent`);return n?{selection:n.selection}:{selection:void 0}}},props:{decorations:t=>{let{doc:n}=t,{selection:r}=h.getState(t),i=[];if(!r)return c.DecorationSet.create(n,[]);i.push(c.Decoration.widget(r.head,()=>_(e),{key:`agent-cursor`,side:10}));let a=Math.min(r.anchor,r.head),o=Math.max(r.anchor,r.head);return i.push(c.Decoration.inline(a,o,(0,l.defaultSelectionBuilder)(e),{inclusiveEnd:!0,inclusiveStart:!1})),c.DecorationSet.create(n,i)}}})}var _=e=>{let t=document.createElement(`span`);t.classList.add(`bn-collaboration-cursor__base`),t.setAttribute(`data-active`,`true`);let n=document.createElement(`span`);n.setAttribute(`contentedEditable`,`false`),n.classList.add(`bn-collaboration-cursor__caret`),n.setAttribute(`style`,`background-color: ${e.color}`);let r=document.createElement(`span`);return r.classList.add(`bn-collaboration-cursor__label`),r.setAttribute(`style`,`background-color: ${e.color}`),r.insertBefore(document.createTextNode(e.name),null),n.insertBefore(r,null),t.insertBefore(document.createTextNode(``),null),t.insertBefore(n,null),t.insertBefore(document.createTextNode(``),null),t},v=new o.PluginKey(`blocknote-ai-plugin`),y=(0,n.createExtension)(({editor:c,options:l})=>{let u=(0,n.createStore)(l??{}),d=(0,n.createStore)({aiMenuState:`closed`}),f,p=!1,m=(0,i.suggestChanges)();return m.props.decorations=void 0,{key:`ai`,options:u,store:d,mount({signal:e}){let t=!1;document.addEventListener(`scroll`,()=>{t&&(p=!1),t=!0},{capture:!0,signal:e}),document.addEventListener(`scrollend`,()=>{t=!1},{capture:!0,signal:e})},prosemirrorPlugins:[new o.Plugin({key:v,filterTransaction:e=>{let t=d.state.aiMenuState;return!(t!==`closed`&&t.status===`ai-writing`&&e.getMeta(s.fixTablesKey)?.fixTables)}}),m,g(l?.agentCursor||{name:`AI`,color:`#8bc6ff`})],openAIMenuAtBlock(e){c.getExtension(r.ShowSelectionExtension)?.showSelection(!0,`aiMenu`),c.isEditable=!1,d.setState({aiMenuState:{blockId:e,status:`user-input`}}),(c.domElement?.querySelector(`[data-node-type="blockContainer"][data-id="${e}"]`))?.scrollIntoView({block:`center`})},closeAIMenu(){d.setState({aiMenuState:`closed`}),f=void 0,c.getExtension(r.ShowSelectionExtension)?.showSelection(!1,`aiMenu`),c.isEditable=!0,c.focus()},acceptChanges(){let e=c.prosemirrorState.doc;c.exec((e,t)=>(0,i.revertSuggestions)(e,e=>{t?.(e.setMeta(`addToHistory`,!1))})),c.exec((t,n)=>{let r=t.tr;return r.replace(0,r.doc.content.size,new a.Slice(a.Fragment.from(e),0,0)),(0,i.applySuggestions)(t.apply(r),e=>{n?.(r.replace(0,r.doc.content.size,new a.Slice(a.Fragment.from(e.doc),0,0)))})}),c.getExtension(r.ForkYDocExtension)?.merge({keepChanges:!0}),this.closeAIMenu()},rejectChanges(){c.exec((e,t)=>(0,i.revertSuggestions)(e,e=>{t?.(e.setMeta(`addToHistory`,!1))})),c.getExtension(r.ForkYDocExtension)?.merge({keepChanges:!1}),this.closeAIMenu()},async abort(e){let{aiMenuState:t}=d.state;if(t===`closed`||!f||t.status!==`thinking`&&t.status!==`ai-writing`)return;let n=f.chat;f.abortController.abort(e),await n.stop()},async retry(){let{aiMenuState:e}=d.state;if(e===`closed`||e.status!==`error`||!f)throw Error(`retry() is only valid when a previous response failed`);return f?.chat.status===`error`?this.invokeAI({...f.previousRequestOptions,userPrompt:`An error occured in the previous request. Please retry to accomplish the last user prompt.`}):this.invokeAI({...f.previousRequestOptions,userPrompt:`An error occured while executing the previous tool call. Please retry to accomplish the last user prompt.`})},setAIResponseStatus(e){let t=d.state.aiMenuState;if(t!==`closed`)if(e===`ai-writing`&&c.getExtension(r.ShowSelectionExtension)?.showSelection(!1,`aiMenu`),typeof e==`object`){if(e.status!==`error`)throw new n.UnreachableCaseError(e.status);this.store.setState({aiMenuState:{status:e.status,error:e.error,blockId:t.blockId}})}else this.store.setState({aiMenuState:{status:e,blockId:t.blockId}})},async callLLM(e){return this.invokeAI(e)},async invokeAI(i){this.setAIResponseStatus(`thinking`),c.getExtension(r.ForkYDocExtension)?.fork();try{let r=new AbortController;f?(f.previousRequestOptions=i,f.abortController=r):f={previousRequestOptions:i,chat:i.chatProvider?.()||this.options.state.chatProvider?.()||new t.Chat({sendAutomaticallyWhen:()=>!1,transport:i.transport||this.options.state.transport}),abortController:r};let a=f.chat;i={...u.state,...i};let o=await e.y({editor:c,useSelection:i.useSelection,deleteEmptyCursorBlock:i.deleteEmptyCursorBlock,streamToolsProvider:i.streamToolsProvider??this.options.state.streamToolsProvider,documentStateBuilder:i.documentStateBuilder??this.options.state.documentStateBuilder,onBlockUpdated:e=>{let t=d.state.aiMenuState,r=t===`closed`?void 0:t;if(!r||r.status!==`ai-writing`)return;let i=(0,n.getNodeById)(e,c.prosemirrorState.doc);i&&(d.setState({aiMenuState:{blockId:e,status:`ai-writing`}}),p&&c.prosemirrorView.domAtPos(i.posBeforeNode+1).node.scrollIntoView({block:`center`}))},onStart:()=>{p=!0,this.setAIResponseStatus(`ai-writing`),o.emptyCursorBlockToDelete&&o.editor.getBlock(o.emptyCursorBlockToDelete)&&o.editor.removeBlocks([o.emptyCursorBlockToDelete])}}),s=await e.s(a,o,{role:`user`,parts:[{type:`text`,text:i.userPrompt}]},i.chatRequestOptions||this.options.state.chatRequestOptions,f.abortController.signal);s.ok&&a.status!==`error`||r.signal.aborted?this.setAIResponseStatus(`user-reviewing`):(console.warn(`Error calling LLM`,{result:s,chatStatus:a.status,chatError:a.error}),this.setAIResponseStatus({status:`error`,error:s.ok?a.error:s.error}))}catch(e){this.setAIResponseStatus({status:`error`,error:e}),console.error(`Unexpected error calling LLM`,e,f?.chat.messages)}}}});function b(){return e.n((0,u.useBlockNoteContext)().editor)}var x=e=>{let t=(0,u.useComponentsContext)(),{onManualPromptSubmit:i,promptText:a,onPromptTextChange:o,disabled:s}=e,[c,l]=(0,d.useState)(``),f=a||c,m=(0,d.useCallback)(async e=>{e.key===`Enter`&&!e.nativeEvent.isComposing&&i(f)},[f,i]),h=(0,d.useCallback)(e=>{let t=e.currentTarget.value;o&&o(t),a===void 0&&l(t)},[o,l,a]),g=(0,d.useMemo)(()=>(0,r.filterSuggestionItems)(e.items,f),[f,e.items]),{selectedIndex:_,setSelectedIndex:v,handler:y}=(0,u.useSuggestionMenuKeyboardHandler)(g,e=>e.onItemClick()),b=g.length>0&&_>=0&&_<g.length?`bn-suggestion-menu-item-${_}`:void 0,x=(0,d.useCallback)(e=>{e.key===`Enter`&&!e.nativeEvent.isComposing?g.length>0?y(e):m(e):y(e)},[m,y,g.length]);(0,d.useEffect)(()=>{v(0)},[f,v]);let S=(0,d.useRef)(null),C=(0,d.useRef)(s);return(0,d.useEffect)(()=>{S.current&&C.current&&!s&&S.current.focus(),s&&(C.current=!0)},[s]),(0,p.jsxs)(`div`,{className:`bn-combobox`,children:[(0,p.jsx)(t.Generic.Form.Root,{children:(0,p.jsx)(t.Generic.Form.TextInput,{ref:S,className:`bn-combobox-input`,name:`ai-prompt`,variant:`large`,icon:e.icon,value:f||``,placeholder:e.placeholder,disabled:e.disabled,onKeyDown:x,onChange:h,autoComplete:`off`,rightSection:e.rightSection,"aria-activedescendant":b})}),g.length>0&&(0,p.jsx)(t.SuggestionMenu.Root,{className:`bn-combobox-items`,id:`ai-suggestion-menu`,children:g.map((e,r)=>(0,p.jsx)(t.SuggestionMenu.Item,{className:(0,n.mergeCSSClasses)(`bn-suggestion-menu-item`,e.size===`small`?`bn-suggestion-menu-item-small`:``),id:`bn-suggestion-menu-item-${r}`,isSelected:r===_,onClick:e.onItemClick,item:e},e.title))})]})};function S(t){let n=e.n(t),r=t.getExtension(y);return r?[{key:`continue_writing`,title:n.ai_default_commands.continue_writing.title,aliases:n.ai_default_commands.continue_writing.aliases,icon:(0,p.jsx)(f.RiBallPenLine,{size:18}),onItemClick:async()=>{await r.invokeAI({userPrompt:`Continue writing at the current cursor position related to the previous text. Add multiple blocks if needed. If the document looks like a template / draft, follow the template. Be extensive if needed.`,streamToolsProvider:e.i.html.getStreamToolsProvider({defaultStreamTools:{add:!0,delete:!1,update:!1}})})},size:`small`},{key:`summarize`,title:n.ai_default_commands.summarize.title,aliases:n.ai_default_commands.summarize.aliases,icon:(0,p.jsx)(f.RiTextWrap,{size:18}),onItemClick:async()=>{await r.invokeAI({userPrompt:`Summarize`,streamToolsProvider:e.i.html.getStreamToolsProvider({defaultStreamTools:{add:!0,delete:!1,update:!1}})})},size:`small`},{key:`action_items`,title:n.ai_default_commands.add_action_items.title,aliases:n.ai_default_commands.add_action_items.aliases,icon:(0,p.jsx)(f.RiListCheck3,{size:18}),onItemClick:async()=>{await r.invokeAI({userPrompt:`Add action items`,streamToolsProvider:e.i.html.getStreamToolsProvider({defaultStreamTools:{add:!0,delete:!1,update:!1}})})},size:`small`},{key:`write_anything`,title:n.ai_default_commands.write_anything.title,aliases:n.ai_default_commands.write_anything.aliases,icon:(0,p.jsx)(f.RiBallPenLine,{size:18}),onItemClick:e=>{e(n.ai_default_commands.write_anything.prompt_placeholder)},size:`small`}]:[]}function C(t){let n=e.n(t),r=t.getExtension(y);return r?[{key:`improve_writing`,title:n.ai_default_commands.improve_writing.title,aliases:n.ai_default_commands.improve_writing.aliases,icon:(0,p.jsx)(f.RiText,{size:18}),onItemClick:async()=>{await r.invokeAI({useSelection:!0,userPrompt:`Improve writing`,streamToolsProvider:e.i.html.getStreamToolsProvider({defaultStreamTools:{add:!1,delete:!1,update:!0}})})},size:`small`},{key:`fix_spelling`,title:n.ai_default_commands.fix_spelling.title,aliases:n.ai_default_commands.fix_spelling.aliases,icon:(0,p.jsx)(f.RiCheckLine,{size:18}),onItemClick:async()=>{await r.invokeAI({useSelection:!0,userPrompt:`Fix spelling`,streamToolsProvider:e.i.html.getStreamToolsProvider({defaultStreamTools:{add:!1,delete:!1,update:!0}})})},size:`small`},{key:`translate`,title:n.ai_default_commands.translate.title,aliases:n.ai_default_commands.translate.aliases,icon:(0,p.jsx)(f.RiEarthLine,{size:18}),onItemClick:e=>{e(n.ai_default_commands.translate.prompt_placeholder)},size:`small`},{key:`simplify`,title:n.ai_default_commands.simplify.title,aliases:n.ai_default_commands.simplify.aliases,icon:(0,p.jsx)(f.RiMagicLine,{size:18}),onItemClick:async()=>{await r.invokeAI({useSelection:!0,userPrompt:`Simplify`,streamToolsProvider:e.i.html.getStreamToolsProvider({defaultStreamTools:{add:!1,delete:!1,update:!0}})})},size:`small`}]:[]}function w(t){let n=e.n(t),r=t.getExtension(y);return r?[{key:`accept`,title:n.ai_menu.actions.accept.title,aliases:n.ai_menu.actions.accept.aliases,icon:(0,p.jsx)(f.RiCheckFill,{size:18}),onItemClick:()=>{r.acceptChanges()},size:`small`},{key:`revert`,title:n.ai_menu.actions.revert.title,aliases:n.ai_menu.actions.revert.aliases,icon:(0,p.jsx)(f.RiArrowGoBackFill,{size:18}),onItemClick:()=>{r.rejectChanges()},size:`small`}]:[]}function T(t){let n=e.n(t),r=t.getExtension(y);return r?[{key:`retry`,title:n.ai_menu.actions.retry.title,aliases:n.ai_menu.actions.retry.aliases,icon:(0,p.jsx)(f.RiLoopLeftFill,{size:18}),onItemClick:async()=>{await r.retry()},size:`small`},{key:`cancel`,title:n.ai_menu.actions.cancel.title,aliases:n.ai_menu.actions.cancel.aliases,icon:(0,p.jsx)(f.RiArrowGoBackFill,{size:18}),onItemClick:()=>{r.rejectChanges()},size:`small`}]:[]}function E(e,t){return t===`user-input`?e.getSelection()?C(e):S(e):t===`user-reviewing`?w(e):t===`error`?T(e):[]}var D=e=>{let t=(0,u.useBlockNoteEditor)(),[n,r]=(0,d.useState)(``),i=b(),a=(0,u.useComponentsContext)(),o=(0,u.useExtension)(y),s=(0,u.useExtensionState)(y,{selector:e=>e.aiMenuState===`closed`?`closed`:e.aiMenuState.status}),{items:c}=e,l=(0,d.useMemo)(()=>{let e=[];return e=c?c(t,s):E(t,s),e.map(e=>({...e,onItemClick:()=>{e.onItemClick(r)}}))},[c,s,t]),m=(0,d.useCallback)(async e=>{await o.invokeAI({userPrompt:e,useSelection:t.getSelection()!==void 0})},[o,t]);(0,d.useEffect)(()=>{(s===`ai-writing`||s===`user-reviewing`||s===`error`)&&r(``)},[s]);let h=(0,d.useMemo)(()=>s===`thinking`?i.ai_menu.status.thinking:s===`ai-writing`?i.ai_menu.status.editing:s===`error`?i.ai_menu.status.error:i.ai_menu.input_placeholder,[s,i]),g=(0,d.useMemo)(()=>{if(s===`thinking`||s===`ai-writing`)return(0,p.jsx)(a.SuggestionMenu.Loader,{className:`bn-suggestion-menu-loader bn-combobox-right-section`});if(s===`error`)return(0,p.jsx)(`div`,{className:`bn-combobox-right-section bn-combobox-error`,children:(0,p.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,height:`1em`,viewBox:`0 -960 960 960`,width:`1em`,fill:`currentColor`,children:(0,p.jsx)(`path`,{d:`M480-280q17 0 28.5-11.5T520-320q0-17-11.5-28.5T480-360q-17 0-28.5 11.5T440-320q0 17 11.5 28.5T480-280Zm0-160q17 0 28.5-11.5T520-480v-160q0-17-11.5-28.5T480-680q-17 0-28.5 11.5T440-640v160q0 17 11.5 28.5T480-440Zm0 360q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z`})})})},[a,s]);return(0,p.jsx)(x,{onManualPromptSubmit:e.onManualPromptSubmit||m,items:l,promptText:n,onPromptTextChange:r,placeholder:h,disabled:s===`thinking`||s===`ai-writing`,icon:(0,p.jsx)(`div`,{className:`bn-combobox-icon`,children:(0,p.jsx)(f.RiSparkling2Fill,{})}),rightSection:g})},O=e=>{let t=(0,u.useBlockNoteEditor)(),n=(0,u.useExtension)(y),r=(0,u.useExtensionState)(y,{editor:t,selector:e=>e.aiMenuState}),i=r===`closed`?void 0:r.blockId,a=(0,d.useMemo)(()=>({...e.floatingUIOptions,useFloatingOptions:{open:r!==`closed`,placement:`bottom`,middleware:[(0,m.offset)(10),(0,m.flip)(),(0,m.size)({apply({rects:e,elements:t}){Object.assign(t.floating.style,{width:`${e.reference.width}px`})}})],onOpenChange:e=>{e||r===`closed`||(r.status===`user-input`?n.closeAIMenu():(r.status===`user-reviewing`||r.status===`error`)&&n.rejectChanges())},whileElementsMounted(e,t,n){return(0,m.autoUpdate)(e,t,n,{animationFrame:!0})},...e.floatingUIOptions?.useFloatingOptions},useDismissProps:{enabled:r===`closed`||r.status===`user-input`,outsidePress:e=>{if(e.target instanceof Element){let t=e.target.closest(`.bn-block`);t&&t.getAttribute(`data-id`)===i&&n.closeAIMenu()}return!0},...e.floatingUIOptions?.useDismissProps},elementProps:{style:{zIndex:100},...e.floatingUIOptions?.elementProps},focusManagerProps:{disabled:!1,getInsideElements:()=>t.domElement?[t.domElement]:[],...e.floatingUIOptions?.focusManagerProps}}),[n,r,i,e.floatingUIOptions,t.domElement]),o=e.aiMenu||D;return(0,p.jsx)(u.BlockPopover,{blockId:i,...a,children:r!==`closed`&&(0,p.jsx)(o,{})})},k=()=>{let e=b(),t=(0,u.useComponentsContext)(),n=(0,u.useBlockNoteEditor)(),i=(0,u.useExtension)(y),a=(0,u.useExtension)(r.FormattingToolbarExtension);return n.isEditable?(0,p.jsx)(t.Generic.Toolbar.Button,{className:`bn-button`,label:e.formatting_toolbar.ai.tooltip,mainTooltip:e.formatting_toolbar.ai.tooltip,icon:(0,p.jsx)(f.RiSparkling2Fill,{}),onClick:()=>{let e=n.getSelection();if(!e)throw Error(`No selection`);let t=e.blocks[e.blocks.length-1].id;i.openAIMenuAtBlock(t),a.store.setState(!1)}}):null},A={AI:f.RiSparkling2Fill};function j(t){let n=t.getExtension(y);return n?[{key:`ai`,onItemClick:()=>{let e=t.getTextCursorPosition();e.block.content&&Array.isArray(e.block.content)&&e.block.content.length===0&&e.prevBlock?n.openAIMenuAtBlock(e.prevBlock.id):n.openAIMenuAtBlock(e.block.id)},...e.n(t).slash_menu.ai,icon:(0,p.jsx)(A.AI,{})}]:[]}exports.AIExtension=y,exports.AIMenu=D,exports.AIMenuController=O,exports.AIToolbarButton=k,exports.ClientSideTransport=e.u,exports.PROVIDER_OVERRIDES=e.d,exports.PromptSuggestionMenu=x,exports.StreamToolExecutor=e.g,exports._getApplySuggestionsTr=e.a,exports.aiDocumentFormats=e.i,exports.buildAIRequest=e.y,exports.createStreamToolsArraySchema=e._,exports.fetchViaProxy=e.t,exports.getAIDictionary=e.n,exports.getAISlashMenuItems=j,exports.getDefaultAIMenuItems=E,exports.getProviderOverrides=e.f,exports.injectDocumentStateMessages=e.h,exports.makeDocumentStateBuilder=e.o,exports.objectStreamToOperationsResult=e.l,exports.promptHelpers=e.r,exports.sendMessageWithAIRequest=e.s,exports.setupToolCallStreaming=e.c,exports.streamToolsToToolSet=e.v,exports.toolDefinitionsToToolSet=e.p,exports.toolSetToToolDefinitions=e.m,exports.useAIDictionary=b;
|
|
2
2
|
//# sourceMappingURL=blocknote-xl-ai.cjs.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let c=require(`@blocknote/core`),l=require(`@handlewithcare/prosemirror-suggest-changes`),u=require(`prosemirror-model`),d=require(`prosemirror-state`),f=require(`lodash.merge`);f=s(f);let p=require(`ai`),m=require(`lodash.isequal`);m=s(m);let h=require(`@ai-sdk/provider-utils`),g=require(`prosemirror-transform`),_=require(`prosemirror-changeset`);function v(e){return(e.type===`paragraph`||!e.type)&&!e.content||Array.isArray(e.content)&&e.content.length===0}function ee(e,t,n=!0,r=!0){let i=0,a=e.length;if(n)for(;i<a&&t(e[i]);)i++;if(r)for(;a>i&&t(e[a-1]);)a--;return e.slice(i,a)}function y(e,t){return ee(e,e=>v(e)&&t?.cursorBlockId!==e.id,t?.trimStart??!1,t?.trimEnd??!0)}async function te(e){let{useSelection:t,deleteEmptyCursorBlock:n,streamToolsProvider:r,documentStateBuilder:i,onStart:a}={useSelection:e.useSelection??!1,deleteEmptyCursorBlock:e.deleteEmptyCursorBlock??!0,streamToolsProvider:e.streamToolsProvider??$.html.getStreamToolsProvider(),documentStateBuilder:e.documentStateBuilder??$.html.defaultDocumentStateBuilder,onStart:e.onStart??(()=>{})},o=t?void 0:e.editor.getTextCursorPosition().block,s=o&&n&&v(o)&&y(e.editor.document).length>0?o.id:void 0,c=t?e.editor.getSelectionCutBlocks(!0):void 0,l=r.getStreamTools(e.editor,c?{from:c._meta.startPos,to:c._meta.endPos}:void 0,e.onBlockUpdated),u={editor:e.editor,selectedBlocks:c?.blocks,streamTools:l,emptyCursorBlockToDelete:s,onStart:a};return{...u,documentState:await i(u)}}function ne(e){let{properties:t,required:n,$defs:r,...i}=e.inputSchema;return{schema:{type:`object`,description:e.description,properties:{type:{type:`string`,enum:[e.name]},...t},required:[`type`,...n??[]],additionalProperties:!1,...i},$defs:r}}function b(e){let t=e.map(e=>ne(e)),n={};for(let e of t)for(let t in e.$defs){if(n[t]&&!(0,m.default)(n[t],e.$defs[t]))throw Error(`Duplicate, but different definition for ${t}`);n[t]=e.$defs[t]}return{type:`object`,properties:{operations:{type:`array`,items:{anyOf:t.map(e=>e.schema)}}},additionalProperties:!1,required:[`operations`],$defs:Object.keys(n).length>0?n:void 0}}function x(e){return{applyDocumentOperations:{inputSchema:(0,p.jsonSchema)(b(e)),outputSchema:(0,p.jsonSchema)({type:`object`})}}}var S=class extends Error{aborted;constructor(e,t,n){super(e,n),this.chunk=t,this.name=`ChunkExecutionError`,this.aborted=n?.aborted??!1}},C=class{stream;constructor(e,t){this.streamTools=e,this.abortSignal=t,this.stream=this.createStream()}createStream(){let e,t=new TransformStream({transform:async(t,n)=>{let r=typeof t==`string`?await re(t,e?.isPossiblyPartial??!1,this.streamTools):t;r&&(e=r,n.enqueue(r))},flush:t=>{e?.isPossiblyPartial&&t.error(Error(`stream ended with a partial operation`))}}),[n,r]=t.readable.pipeThrough(this.createExecutor()).tee(),i=n.pipeTo(new WritableStream);return{writable:t.writable,readable:r,finishPromise:i}}createExecutor(){let e=this.streamTools.map(e=>e.executor());return new TransformStream({transform:async(t,n)=>{let r=!1;for(let i of e)try{if(await i.execute(t,this.abortSignal)){n.enqueue({status:`ok`,chunk:t}),r=!0;break}}catch(e){n.error(new S(`Tool execution failed: ${(0,h.getErrorMessage)(e)}`,t,{cause:e,aborted:this.abortSignal?.aborted??!1}));return}if(!r){let e=t.operation?.type||`unknown`;n.error(Error(`No tool could handle operation of type: ${e}`));return}}})}get writable(){return this.stream.writable}get readable(){return this.stream.readable}async finish(){await this.stream.finishPromise}async executeOperationsArray(e){let t=this.writable.getWriter();for await(let n of e){let e=await(0,p.parsePartialJson)(n);if(e.state===`undefined-input`||e.state===`failed-parse`||!e)return;await t.write(n)}await t.close(),await this.finish()}async execute(e){let t=this.writable.getWriter();for await(let n of e)await t.write(n);await t.close(),await this.finish()}async executeOne(e){await this.execute((async function*(){yield{operation:e,isUpdateToPreviousOperation:!1,isPossiblyPartial:!1,metadata:{}}})())}};async function re(e,t,n){let r=await(0,p.parsePartialJson)(e);if(r.state===`undefined-input`||r.state===`failed-parse`||!r)return;let i=n.find(e=>e.name===r.value?.type),a=i&&i.validate(r.value);if(a?.ok)return{operation:a.value,isPossiblyPartial:r.state===`repaired-parse`,isUpdateToPreviousOperation:t,metadata:void 0}}function w(e){return e.flatMap(e=>{if(e.role===`user`&&e.metadata?.documentState){let t=e.metadata.documentState;return[{role:`assistant`,id:`assistant-document-state-`+e.id,parts:[...t.selection?[{type:`text`,text:`This is the latest state of the selection (ignore previous selections, you MUST issue operations against this latest version of the selection):`},{type:`text`,text:JSON.stringify(t.selectedBlocks)},{type:`text`,text:`This is the latest state of the entire document (INCLUDING the selected text),
|
|
1
|
+
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let c=require(`@blocknote/core`),l=require(`@handlewithcare/prosemirror-suggest-changes`),u=require(`prosemirror-model`),d=require(`prosemirror-state`),f=require(`lodash.merge`);f=s(f,1);let p=require(`ai`),m=require(`lodash.isequal`);m=s(m,1);let h=require(`@ai-sdk/provider-utils`),g=require(`prosemirror-transform`),_=require(`prosemirror-changeset`);function v(e){return(e.type===`paragraph`||!e.type)&&!e.content||Array.isArray(e.content)&&e.content.length===0}function ee(e,t,n=!0,r=!0){let i=0,a=e.length;if(n)for(;i<a&&t(e[i]);)i++;if(r)for(;a>i&&t(e[a-1]);)a--;return e.slice(i,a)}function y(e,t){return ee(e,e=>v(e)&&t?.cursorBlockId!==e.id,t?.trimStart??!1,t?.trimEnd??!0)}async function te(e){let{useSelection:t,deleteEmptyCursorBlock:n,streamToolsProvider:r,documentStateBuilder:i,onStart:a}={useSelection:e.useSelection??!1,deleteEmptyCursorBlock:e.deleteEmptyCursorBlock??!0,streamToolsProvider:e.streamToolsProvider??$.html.getStreamToolsProvider(),documentStateBuilder:e.documentStateBuilder??$.html.defaultDocumentStateBuilder,onStart:e.onStart??(()=>{})},o=t?void 0:e.editor.getTextCursorPosition().block,s=o&&n&&v(o)&&y(e.editor.document).length>0?o.id:void 0,c=t?e.editor.getSelectionCutBlocks(!0):void 0,l=r.getStreamTools(e.editor,c?{from:c._meta.startPos,to:c._meta.endPos}:void 0,e.onBlockUpdated),u={editor:e.editor,selectedBlocks:c?.blocks,streamTools:l,emptyCursorBlockToDelete:s,onStart:a};return{...u,documentState:await i(u)}}function ne(e){let{properties:t,required:n,$defs:r,...i}=e.inputSchema;return{schema:{type:`object`,description:e.description,properties:{type:{type:`string`,enum:[e.name]},...t},required:[`type`,...n??[]],additionalProperties:!1,...i},$defs:r}}function b(e){let t=e.map(e=>ne(e)),n={};for(let e of t)for(let t in e.$defs){if(n[t]&&!(0,m.default)(n[t],e.$defs[t]))throw Error(`Duplicate, but different definition for ${t}`);n[t]=e.$defs[t]}return{type:`object`,properties:{operations:{type:`array`,items:{anyOf:t.map(e=>e.schema)}}},additionalProperties:!1,required:[`operations`],$defs:Object.keys(n).length>0?n:void 0}}function x(e){return{applyDocumentOperations:{inputSchema:(0,p.jsonSchema)(b(e)),outputSchema:(0,p.jsonSchema)({type:`object`})}}}var S=class extends Error{aborted;constructor(e,t,n){super(e,n),this.chunk=t,this.name=`ChunkExecutionError`,this.aborted=n?.aborted??!1}},C=class{stream;constructor(e,t){this.streamTools=e,this.abortSignal=t,this.stream=this.createStream()}createStream(){let e,t=new TransformStream({transform:async(t,n)=>{let r=typeof t==`string`?await re(t,e?.isPossiblyPartial??!1,this.streamTools):t;r&&(e=r,n.enqueue(r))},flush:t=>{e?.isPossiblyPartial&&t.error(Error(`stream ended with a partial operation`))}}),[n,r]=t.readable.pipeThrough(this.createExecutor()).tee(),i=n.pipeTo(new WritableStream);return{writable:t.writable,readable:r,finishPromise:i}}createExecutor(){let e=this.streamTools.map(e=>e.executor());return new TransformStream({transform:async(t,n)=>{let r=!1;for(let i of e)try{if(await i.execute(t,this.abortSignal)){n.enqueue({status:`ok`,chunk:t}),r=!0;break}}catch(e){n.error(new S(`Tool execution failed: ${(0,h.getErrorMessage)(e)}`,t,{cause:e,aborted:this.abortSignal?.aborted??!1}));return}if(!r){let e=t.operation?.type||`unknown`;n.error(Error(`No tool could handle operation of type: ${e}`));return}}})}get writable(){return this.stream.writable}get readable(){return this.stream.readable}async finish(){await this.stream.finishPromise}async executeOperationsArray(e){let t=this.writable.getWriter();for await(let n of e){let e=await(0,p.parsePartialJson)(n);if(e.state===`undefined-input`||e.state===`failed-parse`||!e)return;await t.write(n)}await t.close(),await this.finish()}async execute(e){let t=this.writable.getWriter();for await(let n of e)await t.write(n);await t.close(),await this.finish()}async executeOne(e){await this.execute((async function*(){yield{operation:e,isUpdateToPreviousOperation:!1,isPossiblyPartial:!1,metadata:{}}})())}};async function re(e,t,n){let r=await(0,p.parsePartialJson)(e);if(r.state===`undefined-input`||r.state===`failed-parse`||!r)return;let i=n.find(e=>e.name===r.value?.type),a=i&&i.validate(r.value);if(a?.ok)return{operation:a.value,isPossiblyPartial:r.state===`repaired-parse`,isUpdateToPreviousOperation:t,metadata:void 0}}function w(e){return e.flatMap(e=>{if(e.role===`user`&&e.metadata?.documentState){let t=e.metadata.documentState;return[{role:`assistant`,id:`assistant-document-state-`+e.id,parts:[...t.selection?[{type:`text`,text:`This is the latest state of the selection (ignore previous selections, you MUST issue operations against this latest version of the selection):`},{type:`text`,text:JSON.stringify(t.selectedBlocks)},{type:`text`,text:`This is the latest state of the entire document (INCLUDING the selected text),
|
|
2
2
|
you can use this to find the selected text to understand the context (but you MUST NOT issue operations against this document, you MUST issue operations against the selection):`},{type:`text`,text:JSON.stringify(t.blocks)}]:[{type:`text`,text:`There is no active selection. This is the latest state of the document (ignore previous documents, you MUST issue operations against this latest version of the document).
|
|
3
3
|
The cursor is BETWEEN two blocks as indicated by cursor: true.
|
|
4
4
|
`+(t.isEmptyDocument?`Because the document is empty, YOU MUST first update the empty block before adding new blocks.`:`Prefer updating existing blocks over removing and adding (but this also depends on the user's question).`)},{type:`text`,text:JSON.stringify(t.blocks)}]]},e]}return[e]})}async function T(e){let t=await Promise.all(Object.entries(e).map(async([e,t])=>[e,{description:t.description,inputSchema:await(0,p.asSchema)(t.inputSchema).jsonSchema,outputSchema:await(0,p.asSchema)(t.outputSchema).jsonSchema}]));return Object.fromEntries(t)}function E(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>[e,(0,p.tool)({...t,inputSchema:(0,p.jsonSchema)(t.inputSchema),outputSchema:(0,p.jsonSchema)(t.outputSchema)})]))}var D={"mistral.chat":{mode:`auto`},"google.generative-ai":{mode:`auto`},"groq.chat":{providerOptions:{groq:{structuredOutputs:!1}}}};function ie(e){return D[e.provider]||{}}var ae=class{constructor(e){this.opts=e}async streamText(e,t){let{model:n,_additionalOptions:r}=this.opts;return(0,p.streamText)({model:n,system:this.opts.systemPrompt,messages:await(0,p.convertToModelMessages)(w(e)),tools:t,toolChoice:`required`,...r??{}}).toUIMessageStream()}async sendMessages({messages:e,body:t}){let n=this.opts.stream??!0,r=t.toolDefinitions,i=await E(r);if(n)return await this.streamText(e,i);throw Error(`Not implemented (generateText)`)}reconnectToStream(){throw Error(`Not implemented`)}};function oe(){let e,t=Promise.resolve(),n=!1,r,i=new Promise((e,t)=>{r=t});i.catch(()=>{});let a=new ReadableStream({start(t){e=t},cancel(t){n=!0,e.error(t),r?.(t)}});async function o(r){if(n)throw Error(`Appendable stream canceled, can't append`);let a=r.getReader();return t=t.then(async()=>{for(;;)try{let{done:t,value:r}=await Promise.race([a.read(),i]);if(t||n)break;e.enqueue(r)}catch(t){n=!0,e.error(t);break}}),t}async function s(){await t,n||e.close()}return{output:a,append:o,finalize:s}}function se(e){return new ReadableStream({async start(t){try{for await(let n of e)t.enqueue(n);t.close()}catch(e){t.error(e)}}})}function ce(e){if(e.locked)throw Error(`Stream (source) is already locked and cannot be iterated.`);let t=e.pipeThrough(new TransformStream);return t[Symbol.asyncIterator]=()=>{if(t.locked)throw Error(`Stream is already locked and cannot be iterated again.`);let e=t.getReader();return{async next(){let{done:t,value:n}=await e.read();return t?{done:!0,value:void 0}:{done:!1,value:n}}}},t}function le(e){return ce(se(e))}async function*ue(e,t){let n=0,r=!0,i;for await(let a of e)if(a.operations?.length){for(let e=n;e<a.operations.length;e++){let o=a.operations[e];i=o,yield{partialOperation:o,isUpdateToPreviousOperation:e===n&&!r,isPossiblyPartial:e===a.operations.length-1,metadata:t},r=!1}n=a.operations.length-1}if(!i)throw Error(`No operations seen`);yield{partialOperation:i,isUpdateToPreviousOperation:!0,isPossiblyPartial:!1,metadata:t}}async function*de(e,t){let n=!1;for await(let r of e){let e=r.operation;e.ok?(yield{operation:e.value,isUpdateToPreviousOperation:n?!1:r.isUpdateToPreviousOperation,isPossiblyPartial:r.isPossiblyPartial,metadata:r.metadata},n=!1):(n||=!r.isUpdateToPreviousOperation,t?.({...r,operation:e}))}}async function*fe(e,t){for await(let n of e){if(!n.partialOperation.type){yield{operation:{ok:!1,error:"The `type` property of an operation is required."},isUpdateToPreviousOperation:n.isUpdateToPreviousOperation,isPossiblyPartial:n.isPossiblyPartial,metadata:n.metadata};continue}let e=t.find(e=>e.name===n.partialOperation.type);if(!e){yield{operation:{ok:!1,error:`No matching function for ${n.partialOperation.type}`},isUpdateToPreviousOperation:n.isUpdateToPreviousOperation,isPossiblyPartial:n.isPossiblyPartial,metadata:n.metadata};continue}yield{operation:e.validate(n.partialOperation),isUpdateToPreviousOperation:n.isUpdateToPreviousOperation,isPossiblyPartial:n.isPossiblyPartial,metadata:n.metadata}}}async function*pe(e,t){yield*de(fe(e,t),e=>{if(!e.isPossiblyPartial)throw new S(`Invalid operation. ${(0,h.getErrorMessage)(e.operation.error)}`,e,{cause:e.operation.error})})}function O(e,t,n){return le(pe(ue(ce(e),n),t))}async function k(e,t,n,r){let i=new C(e,r),a=oe(),o=a.output.pipeTo(i.writable),s=new Map,c=!0,l=t[`~registerMessagesCallback`](()=>{me(t,t=>{if(!s.has(t.toolCallId)){let r=he(e,t.toolName,t.toolCallId);a.append(r.operationsStream),s.set(t.toolCallId,r),c&&(c=!1,n?.())}return s.get(t.toolCallId)})});await new Promise(e=>{let n=t[`~registerStatusCallback`](()=>{(t.status===`ready`||t.status===`error`)&&(l(),n(),t.status!==`error`&&r(),e())}),r=t[`~registerErrorCallback`](()=>{if(t.error){r();for(let e of s.values())e.complete||e.writer.abort(t.error)}})}),await a.finalize();let u=await Promise.allSettled([i.finish(),o]),d=u[0];if(u[1].status===`rejected`&&(u[0].status!==`rejected`||u[0].reason!==u[1].reason))throw Error(`unexpected, pipeToPromise rejected but executor.finish() doesn't have same error!?`);let f;if(d.status===`rejected`){if(d.reason instanceof S)f=d.reason;else if(!t.error)throw Error(`Unexpected: no ChunkExecutionError but also no chat.error (network error?)`)}let p=!1,m=Array.from(s.values().filter(e=>e.complete));return m.forEach((e,n)=>{let r=e.toolCallId===f?.chunk.metadata.toolCallId;r&&(p=!0),p?t.addToolOutput({tool:m[n].toolName,toolCallId:m[n].toolCallId,state:`output-error`,errorText:JSON.stringify(r?{status:`error`,error:(0,h.getErrorMessage)(f)}:{status:`not-executed-previous-tool-errored`})}):t.addToolOutput({state:`output-available`,tool:m[n].toolName,toolCallId:m[n].toolCallId,output:{status:`ok`}})}),f?{ok:!1,error:f}:{ok:!0,value:void 0}}function me(e,t){for(let n of e.lastMessage?.parts??[]){if(!(0,p.isToolUIPart)(n)||n.type.replace(`tool-`,``)!==`applyDocumentOperations`)continue;let e=n.toolCallId;ge(n,t({toolName:n.type.replace(`tool-`,``),toolCallId:e}))}}function he(e,t,n){let r=new TransformStream,i=O(r.readable,e,{toolCallId:n});return{writer:r.writable.getWriter(),complete:!1,operationsStream:i,toolName:t,toolCallId:n}}function ge(e,t){if(e.state===`input-streaming`){let n=e.input;n!==void 0&&t.writer.write(n)}else if(e.state===`input-available`){let n=e.input;if(n===void 0)throw Error(`input is undefined`);t.complete||(t.complete=!0,t.writer.write(n),t.writer.close())}}async function _e(e,t,n,r,i){let a=n??e.lastMessage;if(!a)throw Error(`No message to send`);a.metadata=(0,f.default)(a.metadata,{documentState:t.documentState});let o=k(t.streamTools,e,t.onStart,i);return r=(0,f.default)(r,{metadata:{source:`blocknote-ai`},body:{toolDefinitions:await T(x(t.streamTools))}}),await e.sendMessage(n,r),await o}function A(e,t){let n=e.getTextCursorPosition(),r=[];for(let e of t){let t=e.id===n.block.id;r.push({id:e.id,block:e.block}),t&&r.push({cursor:!0})}return r}async function j(e,t){return await Promise.all(e.map(async e=>({id:e.id,block:await t(e)})))}function M(e){return e.flatMap(e=>[{...e,children:[]},...M(e.children)])}function N(e){return e.map(e=>typeof e==`object`&&e&&`id`in e?{...e,id:`${e.id}$`}:e)}function P(e){return async t=>t.selectedBlocks?await ye(t.editor,e,{selectedBlocks:t.selectedBlocks}):await ve(t.editor,e,{excludeBlockIds:t.emptyCursorBlockToDelete?[t.emptyCursorBlockToDelete]:void 0})}async function ve(e,t,n){let r=y(e.document).length===0,i=e.getTextCursorPosition().block.id;return{selection:!1,blocks:N(A(e,await j(M(y(e.document,{cursorBlockId:i})),async n=>t(e,n))).filter(e=>`cursor`in e||!(n.excludeBlockIds||[]).includes(e.id))),isEmptyDocument:r}}async function ye(e,t,n){return{isEmptyDocument:y(e.document).length===0,selection:!0,selectedBlocks:N(await j(M(n.selectedBlocks),async n=>t(e,n))),blocks:(await j(M(e.document),async n=>t(e,n))).map(({block:e})=>({block:e}))}}function be(e){let t,n=!1;return e.descendants((e,r)=>n?!1:(e.isText&&(n=!0,t=r),!0)),t}function F(e){let t=(0,c.getPmSchema)(e),{modification:n}=t.marks,r=[],i=new g.Transform(e.before);for(let a=0;a<e.steps.length;a++){let o=e.steps[a],s=new g.Mapping(e.mapping.maps.slice(0,a)).invert();if(o.structure){if(o instanceof g.ReplaceStep){if(o.to!==o.from+1||o.slice.openStart!==0||o.slice.openEnd!==1||o.slice.content.size!==2)throw Error(`Structure change is not in expected format (ReplaceStep)`)}else if(o instanceof g.ReplaceAroundStep){if(o.insert!==1||o.slice.size!==2||o.gapTo!==o.to-1||o.gapFrom!==o.from+1)throw Error(`Structure change is not in expected format (ReplaceAroundStep)`)}else throw Error(`Step is not a ReplaceStep or ReplaceAroundStep`);let e=s.map(o.from),t=o.slice.content.firstChild,a=i.doc.resolve(i.mapping.map(e)).nodeAfter,c=t.marks||[];t.type!==a.type&&(c=n.create({type:`nodeType`,previousValue:a.type.name,newValue:t.type.name}).addToSet(c));let l=new Set([...Object.keys(t.attrs),...Object.keys(a.attrs)]);for(let e of l)t.attrs[e]!==a.attrs[e]&&(c=n.create({type:`attr`,attrName:e,previousValue:a.attrs[e],newValue:t.attrs[e]}).addToSet(c));let u=i.steps.length;i.setNodeMarkup(i.mapping.map(e),t.type,t.attrs,c),r.push({prosemirrorSteps:i.steps.slice(u),selection:void 0,type:`replace`});continue}if(!(o instanceof g.ReplaceStep))throw Error(`Step is not a ReplaceStep`);let c=s.map(o.from),l=s.map(o.to);if(o.slice.openStart>0||o.slice.openEnd>0)throw Error(`Slice has openStart or openEnd > 0, but structure=false`);r.push({prosemirrorSteps:[],selection:{anchor:i.mapping.map(c),head:i.mapping.map(l)},type:`select`});let f=o.slice.content.textBetween(0,o.slice.size),p=f===i.doc.textBetween(i.mapping.map(c),i.mapping.map(l)),m;if(p)m=o.slice.content.size;else if(f.length===0)m=o.slice.content.size;else{let e=be(o.slice.content);if(e===void 0)throw Error(`unexpected: no first character found`);m=e+1}let h=i.mapping.map(l),_=i.mapping.map(l),v=!0;for(let e=m;e<=o.slice.content.size;e++){let n=v&&c!==l,a=i.steps.length;if(n){let e=i.doc.resolve(i.mapping.map(c));e.nodeAfter?.isBlock&&i.addNodeMark(e.pos,t.mark(`deletion`,{})),i.addMark(e.pos,h,t.mark(`deletion`,{})),h=i.mapping.map(l)}let s=new u.Slice(o.slice.content.cut(0,e),0,0);i.replace(_,h,s).addMark(_,_+s.content.size,t.mark(`insertion`,{})),i.doc.nodesBetween(_,_+s.content.size,(e,n)=>n<_||n>_+s.content.size?!0:(e.isBlock&&i.addNodeMark(n,t.mark(`insertion`,{})),!1)),h=i.mapping.slice(a).map(h);let f=d.TextSelection.near(i.doc.resolve(_+s.content.size),-1);r.push({prosemirrorSteps:i.steps.slice(a),selection:{anchor:f.from,head:f.from},type:n?`replace`:`insert`}),v=!1}}return r}async function I(e){let t=Math.random()*.3+.85;if(e.type===`select`)await new Promise(e=>setTimeout(e,100*t));else if(e.type===`insert`)await new Promise(e=>setTimeout(e,10*t));else if(e.type===`replace`)await new Promise(e=>setTimeout(e,200*t));else throw new c.UnreachableCaseError(e.type)}function L(e,t){e.setMeta(`addToHistory`,!1),t.selection&&e.setMeta(`aiAgent`,{selection:{anchor:t.selection.anchor,head:t.selection.head}});for(let n of t.prosemirrorSteps)if(e.maybeStep(n).failed)throw Error(`failed to apply step`);return e}function xe(e,t,n){let r=new g.Transform(t);for(let t of e){let e=new g.ReplaceStep(r.mapping.map(t.fromA),r.mapping.map(t.toA),n.slice(t.fromB,t.toB));r.step(e)}let i=r.mapping.invert(),a=r.doc.content.findDiffStart(n.content);for(;a!==null;){let t=n.resolve(a).nodeAfter,o=r.doc.resolve(a).nodeAfter;if(!t||!o)throw Error(`diffNode not found`);let s=!t.isLeaf&&t.content.eq(o.content),c=s?1:Math.min(t.nodeSize,o.nodeSize),l=a+c,u=i.map(a),d=i.map(l),f=e.length;for(let t=0;t<e.length;t++)if(e[t].fromA>=d){f=t;break}e.splice(f,0,{fromA:u,toA:d,fromB:a,toB:l,deleted:[],inserted:[],type:s?`node-type-or-attr-update`:`mark-update`}),r.step(new g.ReplaceStep(a,l,n.slice(a,l),s));let p=r.doc.content.findDiffStart(n.content);if(p===a)throw Error(`diffStart not moving`);a=p}return e}var R=(e,t)=>{let n=new Set,r=new Set;e.descendants(e=>{e.type.name===`tableCell`&&n.add(JSON.stringify(e.toJSON()))}),t.descendants(e=>{e.type.name===`tableCell`&&r.add(JSON.stringify(e.toJSON()))});let i=new Set([...n].filter(e=>r.has(e)));return{encodeCharacter:e=>e,encodeNodeStart:e=>{if(e.type.name===`tableCell`){let t=JSON.stringify(e.toJSON());return i.has(t)?t:e.type.name}return e.type.name},encodeNodeEnd:e=>{if(e.type.name===`tableCell`){let t=JSON.stringify(e.toJSON());return i.has(t)?t:-1}return-1},compareTokens:(e,t)=>e===t}};function z(e,t,n=!1,r,i){let a=(0,c.getNodeById)(e.id,t),o=new g.Transform(t);(0,c.updateBlockTr)(o,a.posBeforeNode,e.block,r,i);let s=o.doc,l=_.ChangeSet.create(t,void 0,R(t,s));if(l=l.addSteps(s,o.mapping.maps,0),n&&l.changes.length>0){let e=l.changes[l.changes.length-1],n=e.toA-e.fromA,r=e.toB-e.fromB;if(n>r){let n=t.slice(e.fromA+r,e.toA);o.step(new g.ReplaceStep(e.toB,e.toB,n)),s=o.doc,l=_.ChangeSet.create(l.startDoc,void 0,R(l.startDoc,s)),l=l.addSteps(s,o.mapping.maps,0)}}let u=[],d=(0,_.simplifyChanges)(l.changes,s);for(let e=0;e<d.length;e++){let t=d[e],n=s.slice(t.fromB,t.toB);if(n.openEnd===1&&n.openStart===0&&(t.type=`node-type-or-attr-update`,n.size>2)){let n={fromA:t.fromA,toA:t.fromA+1,fromB:t.fromB,toB:t.fromB+1,deleted:[],inserted:[],type:`node-type-or-attr-update`},r={fromA:t.fromA+1,toA:t.toA,fromB:t.fromB+1,toB:t.toB,deleted:[],inserted:[]};d.splice(e,1,n,r),e++}}xe(d,t,s);for(let e=0;e<d.length;e++){let t=d[e],r=s.slice(t.fromB,t.toB);if(r.openEnd>0&&r.size>1)throw Error(`unexpected, openEnd > 0 and size > 1, this should have been split into two steps`);e===d.length-1&&n&&t.type===`mark-update`||u.push(new g.ReplaceStep(t.fromA,t.toA,r,t.type===`node-type-or-attr-update`))}return u}function B(e){return e}var V=class extends Error{constructor(e,t){super(e,t),this.name=`AbortError`}};function Se(e,t){if(!e||!Array.isArray(e)||e.length===0)return{ok:!1,error:`blocks is required`};let n=[];for(let r of e){let e=t(r);if(!e.ok)return{ok:!1,error:`Invalid block: ${e.error}`};n.push(e.value)}return{ok:!0,value:n}}function H(e){return(t,n)=>{let r=typeof e.schema==`function`?e.schema(t):e.schema;return B({name:`add`,description:e.description,inputSchema:{type:`object`,properties:{referenceId:{type:`string`,description:`MUST be an id of a block in the document`},position:{type:`string`,enum:[`before`,`after`],description:"`after` to add blocks AFTER (below) the block with `referenceId`, `before` to add the block BEFORE (above)"},blocks:{items:r.block,type:`array`}},required:[`referenceId`,`position`,`blocks`],$defs:r.$defs},validate:r=>{if(r.type!==`add`)return{ok:!1,error:`invalid operation type`};if(r.position!==`before`&&r.position!==`after`)return{ok:!1,error:`invalid position`};if(!r.referenceId||!r.blocks)return{ok:!1,error:`referenceId and blocks are required`};let i=r.referenceId;if(n.idsSuffixed){if(!i?.endsWith(`$`))return{ok:!1,error:`referenceId must end with $`};i=i.slice(0,-1)}if(!t.getBlock(i))return{ok:!1,error:`referenceId not found`};let a=Se(r.blocks,n=>e.validateBlock(n,t));return a.ok?{ok:!0,value:{type:r.type,referenceId:i,position:r.position,blocks:a.value}}:a},executor:()=>{let r=[],i={};return{execute:async(a,o)=>{if(a.isUpdateToPreviousOperation||(r=[]),a.operation.type!==`add`)return!1;let s=a.operation,l=await e.toJSONToolCall(t,{...a,operation:s});if(!l||a.isPossiblyPartial&&v(l.blocks[l.blocks.length-1]))return!0;for(let a=0;a<l.blocks.length;a++){let u=l.blocks[a],d=t.prosemirrorState.tr,f=[];if(a<r.length){let n=await e.rebaseTool(r[a],t),i=z({id:r[a],block:u},n.doc,!1).map(e=>e.map(n.invertMap));for(let e of i)d.step(e.map(d.mapping));f=F(d),f=f.filter(e=>e.type!==`select`)}else{let e=s.position===`after`?i[s.referenceId]:void 0,t=(0,c.insertBlocks)(d,[u],a>0?r[a-1]:e||s.referenceId,a>0?`after`:s.position);r.push(...t.map(e=>e.id)),f=F(d)}for(let e of f){if(o?.aborted)throw new V(`Operation was aborted`);n.withDelays&&await I(e),t.transact(t=>{L(t,e)}),n.onBlockUpdate?.(r[a])}}return a.isPossiblyPartial||s.position===`after`&&(i[s.referenceId]=r[r.length-1]),!0}}}})}}function U(e){return(t,n)=>{let r=typeof e.schema==`function`?e.schema(t):e.schema;return B({name:`update`,description:e.description,inputSchema:{type:`object`,properties:{id:{type:`string`,description:`id of block to update`},block:r.block},required:[`id`,`block`],$defs:r.$defs},validate:r=>{if(r.type!==`update`)return{ok:!1,error:`invalid operation type`};if(!r.id)return{ok:!1,error:`id is required`};let i=r.id;if(n.idsSuffixed){if(!i?.endsWith(`$`))return{ok:!1,error:`id must end with $`};i=i.slice(0,-1)}if(!r.block)return{ok:!1,error:`block is required`};let a=t.getBlock(i);if(!a)return{ok:!1,error:Error(`Block not found (update)`,{cause:{blockId:i}})};let o=e.validateBlock(r.block,t,a.type);return o.ok?{ok:!0,value:{type:r.type,id:i,block:o.value}}:o},executor:()=>{let r=50,i=n.updateSelection?{from:(0,c.trackPosition)(t,n.updateSelection.from),to:(0,c.trackPosition)(t,n.updateSelection.to)}:void 0;return{execute:async(a,o)=>{if(a.operation.type!==`update`)return!1;let s=a.operation;if(a.isPossiblyPartial){let e=JSON.stringify(s.block).length;if(e<r)return!0;r=e+50}else r=50;let c=await e.rebaseTool(s.id,t),l=i?c.invertMap.invert().map(i.from()):void 0,u=i?c.invertMap.invert().map(i.to()):void 0,d=await e.toJSONToolCall(t,{...a,operation:s});if(!d)return!0;let f=z(d,c.doc,a.isPossiblyPartial,l,u);if(f.length===1&&a.isPossiblyPartial)return!0;let p=f.map(e=>e.map(c.invertMap)),m=new g.Transform(t.prosemirrorState.doc);for(let e of p)m.step(e.map(m.mapping));let h=F(m);for(let e of h){if(o?.aborted)throw new V(`Operation was aborted`);n.withDelays&&await I(e),t.transact(t=>{L(t,e)}),n.onBlockUpdate?.(s.id)}return!0}}}})}}var W=(e,t)=>B({name:`delete`,description:`Delete a block`,inputSchema:{type:`object`,properties:{id:{type:`string`,description:`id of block to delete`}},required:[`id`]},validate:n=>{if(n.type!==`delete`)return{ok:!1,error:`invalid operation type`};if(!n.id)return{ok:!1,error:`id is required`};let r=n.id;if(t.idsSuffixed){if(!r?.endsWith(`$`))return{ok:!1,error:`id must end with $`};r=r.slice(0,-1)}return e.getBlock(r)?{ok:!0,value:{type:`delete`,id:r}}:{ok:!1,error:Error(`Block not found (delete)`,{cause:{blockId:r}})}},executor:()=>({execute:async n=>{if(n.operation.type!==`delete`)return!1;let r=n.operation,i=e.prosemirrorState.tr;(0,c.removeAndInsertBlocks)(i,[r.id],[]);let a=F(i);for(let n of a)t.withDelays&&await I(n),e.transact(e=>{L(e,n)}),t.onBlockUpdate?.(r.id);return!0}})});function Ce(e){let t=e.lastIndexOf(`<`),n=e.lastIndexOf(`>`),r=e;if(t>n&&(r=e.substring(0,t),!r.trim()))return;let i=r.match(/&[a-zA-Z0-9]*$/);i&&(r=r.substring(0,r.length-i[0].length));let a=new DOMParser().parseFromString(`<div>${r}</div>`,`text/html`).body.firstChild;return a?a.innerHTML:``}function G(e){let t;if((0,l.applySuggestions)(e.prosemirrorState,e=>{t=e}),!t)throw Error(`applySuggestionsTr is not set`);return t}function K(e,t){let n=t.mapping.invert();return{doc:t.doc,tr:()=>new g.Transform(t.doc),invertMap:n,rebaseTr:t=>{if(t.steps.length===0)throw Error(`No steps to apply`);let r=e.prosemirrorState.tr;for(let e of t.steps){let t=e.map(n);if(!t)throw Error(`Step is not mapped`);r=r.step(t)}return r}}}async function q(e,t){let n=G(t),r=(0,c.getBlock)(n.doc,e);if(!r)throw Error(`block not found`);let i=await t.blocksToHTMLLossy([{...r,children:[]}]),a=window.__TEST_OPTIONS?.mockID,o=await t.tryParseHTMLToBlocks(i);if(window.__TEST_OPTIONS&&(window.__TEST_OPTIONS.mockID=a),o.length!==1)throw Error(`html diff invalid block count`);let s=o[0];if(s.id=e,z({id:e,block:s},n.doc).length)throw Error(`html diff`,{cause:{html:i,htmlBlock:s}});return K(t,n)}function we(e){return typeof e==`string`?{ok:!0,value:e}:{ok:!1,error:`block must be a string`}}var J={add:H({description:`Insert new blocks`,schema:{block:{type:`string`,description:`html of block (MUST be a single, VALID HTML element)`}},validateBlock:we,rebaseTool:q,toJSONToolCall:async(e,t)=>{let n=window.__TEST_OPTIONS?.mockID,r=(await Promise.all(t.operation.blocks.map(async n=>{let r=t.isPossiblyPartial?Ce(n):n;return r?(await e.tryParseHTMLToBlocks(r)).map(e=>(delete e.id,e)):[]}))).flat();if(window.__TEST_OPTIONS&&(window.__TEST_OPTIONS.mockID=n),r.length!==0)return{...t.operation,blocks:r}}}),update:U({description:`Update a block`,schema:{block:{type:`string`,description:`html of block (MUST be a single HTML element)`}},validateBlock:we,rebaseTool:q,toJSONToolCall:async(e,t)=>{let n=t.isPossiblyPartial?Ce(t.operation.block):t.operation.block;if(!n)return;let r=(await e.tryParseHTMLToBlocks(n))[0];return window.__TEST_OPTIONS&&(window.__TEST_OPTIONS.mockID=void 0),delete r.id,{...t.operation,block:r}}}),delete:W};function Te(e,t,n,r,i){if(typeof r==`boolean`){let t=r?e.getSelectionCutBlocks(!0):void 0;r=t?{from:t._meta.startPos,to:t._meta.endPos}:void 0}let a=n??{add:!0,update:!0,delete:!0};return[...a.update?[J.update(e,{idsSuffixed:!0,withDelays:t,updateSelection:r,onBlockUpdate:i})]:[],...a.add?[J.add(e,{idsSuffixed:!0,withDelays:t,onBlockUpdate:i})]:[],...a.delete?[J.delete(e,{idsSuffixed:!0,withDelays:t,onBlockUpdate:i})]:[]]}var Ee={getStreamToolsProvider:(e={})=>({getStreamTools:(t,n,r)=>Te(t,e.withDelays??!0,e.defaultStreamTools,n,r)}),systemPrompt:`You're manipulating a text document using HTML blocks.
|
|
@@ -33,4 +33,4 @@ IF there is no selection active in the latest state, first, determine what part
|
|
|
33
33
|
EXAMPLE: If you want to insert content AT the cursor position (UNLESS indicated otherwise by the user), then you need \`referenceId\` to point to the block before the cursor with position \`after\` (or block below and \`before\`
|
|
34
34
|
---
|
|
35
35
|
`,tools:Q,defaultDocumentStateBuilder:P(async(e,t)=>e.blocksToMarkdownLossy([t]))},html:Ee},Be={addCursorPosition:A,flattenBlocks:M,suffixIDs:N,trimEmptyBlocks:y,convertBlocks:j};function Ve(e){if(!e.dictionary.ai)throw Error(`AI dictionary not found`);return e.dictionary.ai}var He=e=>async(t,n)=>{let r=new Request(t,n),i=e(r.url),a=new Request(i,{headers:r.headers,body:n?.body||r.body,method:r.method,duplex:`half`});return await fetch(a)};Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return G}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return ie}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return $}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return Ve}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return Be}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return _e}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return He}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return ae}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return te}});
|
|
36
|
-
//# sourceMappingURL=server-
|
|
36
|
+
//# sourceMappingURL=server-D-Xyj9BS.cjs.map
|