akumatus
d048ac6c91
feat(core): support chat panel chips and suggest current doc for embedding ( #9747 )
...
Support issue [BS-2347](https://linear.app/affine-design/issue/BS-2347 ).
## What Changed?
- Add chat panel components
- `chat-panel-chips`
- `chat-panel-doc-chip`
- `chat-panel-file-chip`
- `chat-panel-chip`
- Add `chips` and `docs` field in `ChatContextValue`
- Add `extractMarkdownFromDoc` function to extract markdown content of a doc
- Add e2e test
Click a candidate card to add it into AI chat context:
<div class='graphite__hidden'>
<div>🎥 Video uploaded on Graphite:</div>
<a href="https://app.graphite.dev/media/video/sJGviKxfE3Ap685cl5bj/4e6b11ef-f993-4e6a-9f40-b2826af1990c.mov ">
<img src="https://app.graphite.dev/api/v1/graphite/video/thumbnail/sJGviKxfE3Ap685cl5bj/4e6b11ef-f993-4e6a-9f40-b2826af1990c.mov ">
</a>
</div>
<video src="https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/sJGviKxfE3Ap685cl5bj/4e6b11ef-f993-4e6a-9f40-b2826af1990c.mov ">录屏2025-01-17 01.02.04.mov</video>
2025-01-18 08:35:19 +00:00
akumatus
562e358dac
fix(core): downward arrow is visible when message panel is not scrollable ( #9670 )
...
Fix issue [AF-2056](https://linear.app/affine-design/issue/AF-2056 ).
### What changed?
- Check both `showDownIndicator` and `filteredItems.length` when rendering `DownArrowIcon`.
- Use `scrollIntoView` instead of `scrollToEnd` during AI result transmission.

2025-01-16 08:49:10 +00:00
akumatus
c8e550138d
fix(core): add ai send button test ( #9685 )
2025-01-14 10:06:31 +00:00
akumatus
2f49c064eb
feat(editor): remove chat-cards and Open AI Chat menu item ( #9626 )
...
Support issue [BS-2353](https://linear.app/affine-design/issue/BS-2353 ).
### What changed?
- Remove `Open AI Chat` menu item.
- Remove `chat-cards` web component.
- Add `extractAll` function for page and edgeless doc full content extract.
2025-01-10 03:53:11 +00:00
akumatus
c2d8c23f13
fix(core): update chat session after session created or reused ( #9613 )
...
For an existing AI chat session, the prompt will not be updated when the front-end calls the `createChatSession` gql interface. Thus update it manually here.
In the future, the architecture needs to be adjusted to support multiple LLM model calls in one chat session.
2025-01-09 10:56:24 +00:00
akumatus
58ce86533e
feat(core): support ai network search ( #9357 )
...
### What Changed?
- Add `PerplexityProvider` in backend.
- Update session prompt name if user toggle network search mode in chat panel.
- Add experimental flag for AI network search feature.
- Add unit tests and e2e tests.
Search results are streamed and appear word for word:
<div class='graphite__hidden'>
<div>🎥 Video uploaded on Graphite:</div>
<a href="https://app.graphite.dev/media/video/sJGviKxfE3Ap685cl5bj/56f6ec7b-4b21-405f-9612-43e083f6fb84.mov ">
<img src="https://app.graphite.dev/api/v1/graphite/video/thumbnail/sJGviKxfE3Ap685cl5bj/56f6ec7b-4b21-405f-9612-43e083f6fb84.mov ">
</a>
</div>
<video src="https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/sJGviKxfE3Ap685cl5bj/56f6ec7b-4b21-405f-9612-43e083f6fb84.mov ">录屏2024-12-27 18.58.40.mov</video>
Click the little globe icon to manually turn on/off Internet search:
<div class='graphite__hidden'>
<div>🎥 Video uploaded on Graphite:</div>
<a href="https://app.graphite.dev/media/video/sJGviKxfE3Ap685cl5bj/778f1406-bf29-498e-a90d-7dad813392d1.mov ">
<img src="https://app.graphite.dev/api/v1/graphite/video/thumbnail/sJGviKxfE3Ap685cl5bj/778f1406-bf29-498e-a90d-7dad813392d1.mov ">
</a>
</div>
<video src="https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/sJGviKxfE3Ap685cl5bj/778f1406-bf29-498e-a90d-7dad813392d1.mov ">录屏2024-12-27 19.01.16.mov</video>
When there is an image, it will automatically switch to the openai model:
<div class='graphite__hidden'>
<div>🎥 Video uploaded on Graphite:</div>
<a href="https://app.graphite.dev/media/video/sJGviKxfE3Ap685cl5bj/56431d8e-75e1-4d84-ab4a-b6636042cc6a.mov ">
<img src="https://app.graphite.dev/api/v1/graphite/video/thumbnail/sJGviKxfE3Ap685cl5bj/56431d8e-75e1-4d84-ab4a-b6636042cc6a.mov ">
</a>
</div>
<video src="https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/sJGviKxfE3Ap685cl5bj/56431d8e-75e1-4d84-ab4a-b6636042cc6a.mov ">录屏2024-12-27 19.02.13.mov</video>
2025-01-09 04:00:59 +00:00
akumatus
5e2e58de09
fix: font of AI panel should not be affected by the font of Editor settings ( #9305 )
...
Fix issue [BS-2210](https://linear.app/affine-design/issue/BS-2210 ).
2024-12-25 10:54:58 +00:00
akumatus
7bd980991e
fix(core): chat input will be sent repeatedly in two documents with split view ( #9289 )
...
Fix issue [AF-2011](https://linear.app/affine-design/issue/AF-2011 ).
Add `host` strict equality check before ai request send.
2024-12-24 11:17:42 +00:00
akumatus
6c0544b239
fix(core): ai chat panel content will be inconsistent when switching to journals ( #9288 )
...
Fix issue [BS-2153](https://linear.app/affine-design/issue/BS-2153 ).
Optimize DOM reuse by explicitly providing an identifier (similar to React's key).
2024-12-24 10:48:16 +00:00
akumatus
563da3b6f4
fix(core): in page mode, AI replace selection did not correctly replace the selected text ( #9179 )
...
Fix issue [BS-1980](https://linear.app/affine-design/issue/BS-1980 ).
2024-12-17 02:22:48 +00:00
akumatus
2f79104bdb
feat(core): support ai insert image, mindmap, slides and make it real in page mode ( #9164 )
...
Support issue [BS-2085](https://linear.app/affine-design/issue/BS-2085 ).
### What changed?
- Refactor the `actionToAnswerRenderer` function to support reuse in both page mode and edgeless mode.
- Add a new `page-response.ts` module to handle AI-generated answers in page mode.
- Remove the redundant `edgelessHandler` function from `_common/config.ts`.
- Introduce the `AIContext` class along with the `ctx` TypeScript type to standardize context management.
- Implement the `createTemplateJob` function to enable AI slide insertion in both page mode and edgeless mode.
Insert mindmap on page mode:
<div class='graphite__hidden'>
<div>🎥 Video uploaded on Graphite:</div>
<a href="https://app.graphite.dev/media/video/sJGviKxfE3Ap685cl5bj/30630d3e-ebd9-416b-9bb9-5f27086e48a3.mov ">
<img src="https://app.graphite.dev/api/v1/graphite/video/thumbnail/sJGviKxfE3Ap685cl5bj/30630d3e-ebd9-416b-9bb9-5f27086e48a3.mov ">
</a>
</div>
<video src="https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/sJGviKxfE3Ap685cl5bj/30630d3e-ebd9-416b-9bb9-5f27086e48a3.mov ">mindmap.mov</video>
Insert image on edgeless note
<div class='graphite__hidden'>
<div>🎥 Video uploaded on Graphite:</div>
<a href="https://app.graphite.dev/media/video/sJGviKxfE3Ap685cl5bj/b850ee5a-a06b-4ae7-8b68-ed5929a6e81a.mov ">
<img src="https://app.graphite.dev/api/v1/graphite/video/thumbnail/sJGviKxfE3Ap685cl5bj/b850ee5a-a06b-4ae7-8b68-ed5929a6e81a.mov ">
</a>
</div>
<video src="https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/sJGviKxfE3Ap685cl5bj/b850ee5a-a06b-4ae7-8b68-ed5929a6e81a.mov ">image3.mov</video>
Insert image on page mode:
<div class='graphite__hidden'>
<div>🎥 Video uploaded on Graphite:</div>
<a href="https://app.graphite.dev/media/video/sJGviKxfE3Ap685cl5bj/c4f98e2d-0b15-4310-b3e0-0725e330302b.mov ">
<img src="https://app.graphite.dev/api/v1/graphite/video/thumbnail/sJGviKxfE3Ap685cl5bj/c4f98e2d-0b15-4310-b3e0-0725e330302b.mov ">
</a>
</div>
<video src="https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/sJGviKxfE3Ap685cl5bj/c4f98e2d-0b15-4310-b3e0-0725e330302b.mov ">image.mov</video>
Generate image from image:
<div class='graphite__hidden'>
<div>🎥 Video uploaded on Graphite:</div>
<a href="https://app.graphite.dev/media/video/sJGviKxfE3Ap685cl5bj/2776a55f-cbb7-47ce-8e7d-7cae243fa3e9.mov ">
<img src="https://app.graphite.dev/api/v1/graphite/video/thumbnail/sJGviKxfE3Ap685cl5bj/2776a55f-cbb7-47ce-8e7d-7cae243fa3e9.mov ">
</a>
</div>
<video src="https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/sJGviKxfE3Ap685cl5bj/2776a55f-cbb7-47ce-8e7d-7cae243fa3e9.mov ">image2.mov</video>
Insert presentation on page mode:
<div class='graphite__hidden'>
<div>🎥 Video uploaded on Graphite:</div>
<a href="https://app.graphite.dev/media/video/sJGviKxfE3Ap685cl5bj/4e228fa5-88f4-478c-8b79-647612d5515c.mov ">
<img src="https://app.graphite.dev/api/v1/graphite/video/thumbnail/sJGviKxfE3Ap685cl5bj/4e228fa5-88f4-478c-8b79-647612d5515c.mov ">
</a>
</div>
<video src="https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/sJGviKxfE3Ap685cl5bj/4e228fa5-88f4-478c-8b79-647612d5515c.mov ">ppt.mov</video>
Insert make it real on page mode:
<div class='graphite__hidden'>
<div>🎥 Video uploaded on Graphite:</div>
<a href="https://app.graphite.dev/media/video/sJGviKxfE3Ap685cl5bj/c71139b2-fb55-4d89-84e2-d52eeb905b57.mov ">
<img src="https://app.graphite.dev/api/v1/graphite/video/thumbnail/sJGviKxfE3Ap685cl5bj/c71139b2-fb55-4d89-84e2-d52eeb905b57.mov ">
</a>
</div>
<video src="https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/sJGviKxfE3Ap685cl5bj/c71139b2-fb55-4d89-84e2-d52eeb905b57.mov ">make it real.mov</video>
2024-12-16 10:04:16 +00:00
akumatus
6b14e1cf10
feat(core): after the user clicks ask ai, the input pops up directly ( #9039 )
...
Issue [AF-1762](https://linear.app/affine-design/issue/AF-1762 ).
Ask AI on edgeless mode:
<div class='graphite__hidden'>
<div>🎥 Video uploaded on Graphite:</div>
<a href="https://app.graphite.dev/media/video/sJGviKxfE3Ap685cl5bj/1218afba-466f-4570-afd4-679b6b09cc8d.mov ">
<img src="https://app.graphite.dev/api/v1/graphite/video/thumbnail/sJGviKxfE3Ap685cl5bj/1218afba-466f-4570-afd4-679b6b09cc8d.mov ">
</a>
</div>
<video src="https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/sJGviKxfE3Ap685cl5bj/1218afba-466f-4570-afd4-679b6b09cc8d.mov ">录屏2024-12-06 09.54.52.mov</video>
Ask AI on page mode:
<div class='graphite__hidden'>
<div>🎥 Video uploaded on Graphite:</div>
<a href="https://app.graphite.dev/media/video/sJGviKxfE3Ap685cl5bj/58d19705-f646-4957-8628-15845b47222b.mov ">
<img src="https://app.graphite.dev/api/v1/graphite/video/thumbnail/sJGviKxfE3Ap685cl5bj/58d19705-f646-4957-8628-15845b47222b.mov ">
</a>
</div>
<video src="https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/sJGviKxfE3Ap685cl5bj/58d19705-f646-4957-8628-15845b47222b.mov ">录屏2024-12-06 09.52.51.mov</video>
2024-12-06 12:12:05 +00:00
akumatus
c95e6ec518
feat(core): support copy as image in electron app ( #8939 )
...
Close issue [AF-1785](https://linear.app/affine-design/issue/AF-1785 ).
### What changed?
- Support copy as image in electron app:
- Select the whole mindmap if any of the mindmap nodes is selected.
- Hide unselected overlap elements before taking a snapshot.
- Fit the selected elements to the screen.
- Add CSS style to hide irrelevant dom nodes, like widgets, whiteboard background and so on.
- Due to the usage of Shadow Dom in our code, not all node styles can be controlled. Thus this PR use `-2px` padding for `affine:frame` snapshots.
- Using electron `capturePage` API to take a snapshot of selected elements.
<div class='graphite__hidden'>
<div>🎥 Video uploaded on Graphite:</div>
<a href="https://app.graphite.dev/media/video/sJGviKxfE3Ap685cl5bj/c1b7b772-ddf8-4a85-b670-e96af7bd5cc0.mov ">
<img src="https://app.graphite.dev/api/v1/graphite/video/thumbnail/sJGviKxfE3Ap685cl5bj/c1b7b772-ddf8-4a85-b670-e96af7bd5cc0.mov ">
</a>
</div>
<video src="https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/sJGviKxfE3Ap685cl5bj/c1b7b772-ddf8-4a85-b670-e96af7bd5cc0.mov ">录屏2024-11-27 16.11.03.mov</video>
2024-11-28 03:58:04 +00:00
akumatus
d2eef768ba
fix: ai generation of mindmap fail from note text context ( #8952 )
...
Fix issue [AF-1632](https://linear.app/affine-design/issue/AF-1632 ).
### What Changed?
- Keep the note selection and do not set the widget tool to copilot if asking AI from selection in a note in edgeless mode.
- Remove `content` from `AIImageActionOptions`, using `input` as AI context like other actions.
2024-11-28 02:35:06 +00:00
akumatus
c6ac426b4c
fix: ai ppt preview with toolbar widget ( #8882 )
...
Fix issue [AF-1716](https://linear.app/affine-design/issue/AF-1716 ).
2024-11-21 06:56:26 +00:00
akumatus
b0ca3c6d58
fix(core): linked doc named input box has excessive desire to select all ( #8861 )
...
Fix issue [AF-1706](https://linear.app/affine-design/issue/AF-1706 ).
2024-11-20 06:25:36 +00:00
akumatus
e2b221a451
fix: color of canvas element under embed whiteboard is wrong ( #8712 )
...
Fix issue [BS-1762](https://linear.app/affine-design/issue/BS-1762 ). Related [PR](https://github.com/toeverything/blocksuite/pull/8677 ) in Blocksuite.
`light` whiteboard with embedded `dark` whiteboard:

`dark` whiteboard with embedded `light` whiteboard:

`light` doc with `dark` frame:

2024-11-12 08:03:05 +00:00
akumatus
5823353733
fix: edgeless note preview on the editor settings is editable ( #8735 )
...
Fix issue [BS-1779](https://linear.app/affine-design/issue/BS-1779 ).
The attribute `contenteditable` will be `true` if the document is not read-only. In this case, the note preview can be focused on and users can edit the note content.
But we can not simply make the document read-only. If the user changes the editor settings, we also need to update the document model, which requires that the document is not read-only.
Thus following code sets the document editable before the model updates and resets the document to read-only after the model is updated.
2024-11-08 08:39:09 +00:00
akumatus
7e71395c8e
fix: old document edgelessColorTheme shows auto but always render white ( #8666 )
...
Fix issue [AF-1593](https://linear.app/affine-design/issue/AF-1593 ).
2024-11-01 09:55:29 +00:00
akumatus
a0d6a28ff4
fix: default style of new document does not follow AFFiNE settings ( #8291 )
...
Close issue [BS-1377](https://linear.app/affine-design/issue/BS-1377 ).
### What changed?
- Add `initDocFromProps` function to initialize the document with specific props.
- Extract `docProps` from editor settings and pass it to `docsService.createDoc` function.
<div class='graphite__hidden'>
<div>🎥 Video uploaded on Graphite:</div>
<a href="https://app.graphite.dev/media/video/sJGviKxfE3Ap685cl5bj/8082a8bd-ab3d-432c-9d3e-2f1d1a8398eb.mov ">
<img src="https://app.graphite.dev/api/v1/graphite/video/thumbnail/sJGviKxfE3Ap685cl5bj/8082a8bd-ab3d-432c-9d3e-2f1d1a8398eb.mov ">
</a>
</div>
<video src="https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/sJGviKxfE3Ap685cl5bj/8082a8bd-ab3d-432c-9d3e-2f1d1a8398eb.mov ">录屏2024-09-18 16.13.43.mov</video>
2024-09-18 08:45:58 +00:00
akumatus
456aa047cb
fix: missing font in text preview of editor settings ( #8213 )
...
Close issue [BS-1394](https://linear.app/affine-design/issue/BS-1394 ).
Add `FontConfigExtension` to `edgeless:preview` spec.
2024-09-12 04:40:17 +00:00
akumatus
f12655655e
feat: add mindmap and connector settings ( #8198 )
...
### What changed?
- Add `connector` label settings.
- Add `mindmap` style settings.
- Add skeleton loading placeholder.
<div class='graphite__hidden'>
<div>🎥 Video uploaded on Graphite:</div>
<a href="https://app.graphite.dev/media/video/sJGviKxfE3Ap685cl5bj/31159d74-ef62-4c7f-b1d9-cde73047cf29.mov ">
<img src="https://app.graphite.dev/api/v1/graphite/video/thumbnail/sJGviKxfE3Ap685cl5bj/31159d74-ef62-4c7f-b1d9-cde73047cf29.mov ">
</a>
</div>
<video src="https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/sJGviKxfE3Ap685cl5bj/31159d74-ef62-4c7f-b1d9-cde73047cf29.mov ">录屏2024-09-11 16.30.17.mov</video>
2024-09-11 09:17:11 +00:00
akumatus
16bb00ed78
fix: load snapshot files in parallel ( #8145 )
2024-09-06 09:12:57 +00:00
akumatus
9cbe416c2c
feat(core): shape editor settings ( #8122 )
...
<div class='graphite__hidden'>
<div>🎥 Video uploaded on Graphite:</div>
<a href="https://app.graphite.dev/media/video/sJGviKxfE3Ap685cl5bj/cdf4f95c-15b4-4eac-be57-26974f9ca02b.mov ">
<img src="https://app.graphite.dev/api/v1/graphite/video/thumbnail/sJGviKxfE3Ap685cl5bj/cdf4f95c-15b4-4eac-be57-26974f9ca02b.mov ">
</a>
</div>
<video src="https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/sJGviKxfE3Ap685cl5bj/cdf4f95c-15b4-4eac-be57-26974f9ca02b.mov ">录屏2024-09-05 21.20.31.mov</video>
2024-09-05 15:24:37 +00:00
akumatus
4bbb94c32d
feat(core): bump blocksuite ( #8114 )
2024-09-05 13:54:56 +00:00
akumatus
19a7d1eb92
feat(core): observe editor settings change and update edgeless editor ( #8105 )
...
<div class='graphite__hidden'>
<div>🎥 Video uploaded on Graphite:</div>
<a href="https://app.graphite.dev/media/video/sJGviKxfE3Ap685cl5bj/cfdd0578-274c-42e3-9ef5-5528e8b25306.mov ">
<img src="https://app.graphite.dev/api/v1/graphite/video/thumbnail/sJGviKxfE3Ap685cl5bj/cfdd0578-274c-42e3-9ef5-5528e8b25306.mov ">
</a>
</div>
<video src="https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/sJGviKxfE3Ap685cl5bj/cfdd0578-274c-42e3-9ef5-5528e8b25306.mov ">录屏2024-09-05 14.32.41.mov</video>
2024-09-05 07:30:20 +00:00
akumatus
5f3dd867ad
feat(core): support snapshot preview in editor settings ( #8094 )
...
<div class='graphite__hidden'>
<div>🎥 Video uploaded on Graphite:</div>
<a href="https://app.graphite.dev/media/video/sJGviKxfE3Ap685cl5bj/a991f7d2-f9c6-4241-a24b-b8c01cb86af3.mov ">
<img src="https://app.graphite.dev/api/v1/graphite/video/thumbnail/sJGviKxfE3Ap685cl5bj/a991f7d2-f9c6-4241-a24b-b8c01cb86af3.mov ">
</a>
</div>
<video src="https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/sJGviKxfE3Ap685cl5bj/a991f7d2-f9c6-4241-a24b-b8c01cb86af3.mov ">录屏2024-09-04 22.26.47.mov</video>
2024-09-05 02:58:54 +00:00
akumatus
2e37ee0e33
feat(core): add actions to editor settings ( #8030 )
...
# What Changed?
- Add actions of following edgeless-elements editor settings:
- note
- connector
- edgeless text
- pen
2024-09-02 14:23:04 +00:00
akumatus
f3855c57b4
fix: can not create a new edgeless doc with "@" on edgeless ( #7772 )
...
Close issue [BS-935](https://linear.app/affine-design/issue/BS-935 ).
2024-08-07 04:46:13 +00:00
Akumatus
4a032eb260
fix: modify experimental features to app-level ( #6823 )
2024-05-08 12:21:02 +08:00