@agent-native/core 0.79.12 → 0.79.16
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/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +25 -0
- package/corpus/core/docs/content/locales/zh-TW/a2a-protocol.md +68 -68
- package/corpus/core/docs/content/locales/zh-TW/actions.md +82 -82
- package/corpus/core/docs/content/locales/zh-TW/agent-mentions.md +22 -22
- package/corpus/core/docs/content/locales/zh-TW/agent-surfaces.md +82 -82
- package/corpus/core/docs/content/locales/zh-TW/agent-teams.md +29 -29
- package/corpus/core/docs/content/locales/zh-TW/agent-web-surfaces.md +11 -11
- package/corpus/core/docs/content/locales/zh-TW/audit-log.md +16 -16
- package/corpus/core/docs/content/locales/zh-TW/authentication.md +32 -32
- package/corpus/core/docs/content/locales/zh-TW/automations.md +32 -32
- package/corpus/core/docs/content/locales/zh-TW/blueprint-installer.md +19 -19
- package/corpus/core/docs/content/locales/zh-TW/cli-adapters.md +17 -17
- package/corpus/core/docs/content/locales/zh-TW/client.md +62 -62
- package/corpus/core/docs/content/locales/zh-TW/cloneable-saas.md +32 -32
- package/corpus/core/docs/content/locales/zh-TW/code-agents-ui.md +91 -91
- package/corpus/core/docs/content/locales/zh-TW/components.md +51 -51
- package/corpus/core/docs/content/locales/zh-TW/context-awareness.md +66 -66
- package/corpus/core/docs/content/locales/zh-TW/creating-templates.md +39 -39
- package/corpus/core/docs/content/locales/zh-TW/cross-app-sso.md +29 -29
- package/corpus/core/docs/content/locales/zh-TW/database.md +21 -21
- package/corpus/core/docs/content/locales/zh-TW/deployment.md +37 -37
- package/corpus/core/docs/content/locales/zh-TW/dispatch.md +43 -43
- package/corpus/core/docs/content/locales/zh-TW/drop-in-agent.md +34 -34
- package/corpus/core/docs/content/locales/zh-TW/durable-resume.md +18 -18
- package/corpus/core/docs/content/locales/zh-TW/embedding-sdk.md +73 -73
- package/corpus/core/docs/content/locales/zh-TW/evals.md +16 -16
- package/corpus/core/docs/content/locales/zh-TW/extensions.md +81 -81
- package/corpus/core/docs/content/locales/zh-TW/external-agents.md +146 -146
- package/corpus/core/docs/content/locales/zh-TW/faq.md +43 -43
- package/corpus/core/docs/content/locales/zh-TW/file-uploads.md +11 -11
- package/corpus/core/docs/content/locales/zh-TW/frames.md +33 -33
- package/corpus/core/docs/content/locales/zh-TW/getting-started.md +28 -28
- package/corpus/core/docs/content/locales/zh-TW/harness-agents.md +78 -78
- package/corpus/core/docs/content/locales/zh-TW/human-approval.md +27 -27
- package/corpus/core/docs/content/locales/zh-TW/internationalization.md +19 -19
- package/corpus/core/docs/content/locales/zh-TW/key-concepts.md +68 -68
- package/corpus/core/docs/content/locales/zh-TW/local-file-mode.md +50 -50
- package/corpus/core/docs/content/locales/zh-TW/mcp-apps.md +38 -38
- package/corpus/core/docs/content/locales/zh-TW/mcp-clients.md +67 -67
- package/corpus/core/docs/content/locales/zh-TW/mcp-protocol.md +50 -50
- package/corpus/core/docs/content/locales/zh-TW/messaging.md +99 -99
- package/corpus/core/docs/content/locales/zh-TW/migration-workbench.md +6 -6
- package/corpus/core/docs/content/locales/zh-TW/multi-app-workspace.md +39 -39
- package/corpus/core/docs/content/locales/zh-TW/multi-tenancy.md +7 -7
- package/corpus/core/docs/content/locales/zh-TW/native-chat-ui.md +38 -38
- package/corpus/core/docs/content/locales/zh-TW/notifications.md +23 -23
- package/corpus/core/docs/content/locales/zh-TW/observability.md +49 -49
- package/corpus/core/docs/content/locales/zh-TW/observational-memory.md +23 -23
- package/corpus/core/docs/content/locales/zh-TW/onboarding.md +40 -40
- package/corpus/core/docs/content/locales/zh-TW/plan-plugin.md +37 -37
- package/corpus/core/docs/content/locales/zh-TW/pr-visual-recap.md +72 -72
- package/corpus/core/docs/content/locales/zh-TW/processors.md +17 -17
- package/corpus/core/docs/content/locales/zh-TW/progress.md +15 -15
- package/corpus/core/docs/content/locales/zh-TW/pure-agent-apps.md +10 -10
- package/corpus/core/docs/content/locales/zh-TW/real-time-collaboration.md +103 -103
- package/corpus/core/docs/content/locales/zh-TW/recurring-jobs.md +19 -19
- package/corpus/core/docs/content/locales/zh-TW/routing.md +9 -9
- package/corpus/core/docs/content/locales/zh-TW/sandbox-adapters.md +48 -48
- package/corpus/core/docs/content/locales/zh-TW/security.md +49 -49
- package/corpus/core/docs/content/locales/zh-TW/server.md +47 -47
- package/corpus/core/docs/content/locales/zh-TW/sharing.md +22 -22
- package/corpus/core/docs/content/locales/zh-TW/skills-guide.md +46 -46
- package/corpus/core/docs/content/locales/zh-TW/template-analytics.md +40 -40
- package/corpus/core/docs/content/locales/zh-TW/template-assets.md +69 -69
- package/corpus/core/docs/content/locales/zh-TW/template-brain.md +81 -81
- package/corpus/core/docs/content/locales/zh-TW/template-calendar.md +40 -40
- package/corpus/core/docs/content/locales/zh-TW/template-chat.md +27 -27
- package/corpus/core/docs/content/locales/zh-TW/template-clips.md +85 -85
- package/corpus/core/docs/content/locales/zh-TW/template-content.md +65 -66
- package/corpus/core/docs/content/locales/zh-TW/template-design.md +29 -29
- package/corpus/core/docs/content/locales/zh-TW/template-dispatch.md +51 -51
- package/corpus/core/docs/content/locales/zh-TW/template-forms.md +25 -25
- package/corpus/core/docs/content/locales/zh-TW/template-mail.md +71 -71
- package/corpus/core/docs/content/locales/zh-TW/template-plan.md +92 -92
- package/corpus/core/docs/content/locales/zh-TW/template-slides.md +52 -52
- package/corpus/core/docs/content/locales/zh-TW/template-videos.md +30 -30
- package/corpus/core/docs/content/locales/zh-TW/tracking.md +29 -29
- package/corpus/core/docs/content/locales/zh-TW/using-your-agent.md +18 -18
- package/corpus/core/docs/content/locales/zh-TW/voice-input.md +19 -19
- package/corpus/core/docs/content/locales/zh-TW/what-is-agent-native.md +61 -61
- package/corpus/core/docs/content/locales/zh-TW/workspace-connections.md +41 -41
- package/corpus/core/docs/content/locales/zh-TW/workspace-management.md +27 -27
- package/corpus/core/docs/content/locales/zh-TW/workspace.md +58 -58
- package/corpus/core/docs/content/locales/zh-TW/writing-agent-instructions.md +41 -41
- package/corpus/core/docs/content/template-clips.md +48 -2
- package/corpus/core/package.json +2 -1
- package/corpus/core/src/client/AgentPanel.tsx +29 -6
- package/corpus/core/src/deploy/build.ts +432 -42
- package/corpus/core/src/deploy/route-discovery.ts +1 -1
- package/corpus/core/src/server/edge.ts +50 -0
- package/corpus/core/src/styles/agent-native.css +123 -0
- package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +44 -44
- package/corpus/core/src/vite/client.ts +1 -0
- package/corpus/templates/analytics/app/components/layout/Layout.tsx +5 -3
- package/corpus/templates/analytics/app/i18n/zh-TW.ts +69 -70
- package/corpus/templates/analytics/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
- package/corpus/templates/assets/app/components/layout/Layout.tsx +3 -3
- package/corpus/templates/assets/app/i18n/zh-TW.ts +82 -82
- package/corpus/templates/assets/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
- package/corpus/templates/brain/app/components/layout/Layout.tsx +6 -4
- package/corpus/templates/brain/app/i18n/zh-TW.ts +90 -90
- package/corpus/templates/brain/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
- package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +1 -1
- package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +1 -1
- package/corpus/templates/calendar/app/i18n/zh-TW.ts +57 -57
- package/corpus/templates/calendar/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
- package/corpus/templates/calendar/server/lib/booking-og-fonts.ts +20 -6
- package/corpus/templates/calendar/server/lib/booking-og-image.ts +17 -9
- package/corpus/templates/chat/app/components/layout/Layout.tsx +5 -3
- package/corpus/templates/chat/app/i18n/zh-TW.ts +3 -3
- package/corpus/templates/chat/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
- package/corpus/templates/clips/AGENTS.md +6 -0
- package/corpus/templates/clips/actions/delete-recording-permanent.ts +7 -1
- package/corpus/templates/clips/actions/get-recording-player-data.ts +44 -2
- package/corpus/templates/clips/actions/navigate.ts +2 -0
- package/corpus/templates/clips/actions/save-bug-report-context.ts +173 -0
- package/corpus/templates/clips/actions/view-screen.ts +58 -7
- package/corpus/templates/clips/app/components/recorder/storage-setup-card.tsx +9 -3
- package/corpus/templates/clips/app/hooks/use-navigation-state.ts +17 -0
- package/corpus/templates/clips/app/i18n/ar-SA.ts +31 -0
- package/corpus/templates/clips/app/i18n/de-DE.ts +32 -0
- package/corpus/templates/clips/app/i18n/en-US.ts +32 -0
- package/corpus/templates/clips/app/i18n/es-ES.ts +32 -0
- package/corpus/templates/clips/app/i18n/fr-FR.ts +32 -0
- package/corpus/templates/clips/app/i18n/hi-IN.ts +32 -0
- package/corpus/templates/clips/app/i18n/ja-JP.ts +31 -0
- package/corpus/templates/clips/app/i18n/ko-KR.ts +32 -0
- package/corpus/templates/clips/app/i18n/pt-BR.ts +32 -0
- package/corpus/templates/clips/app/i18n/zh-CN.ts +30 -0
- package/corpus/templates/clips/app/i18n/zh-TW.ts +461 -451
- package/corpus/templates/clips/app/routes/bug-report.done.tsx +126 -0
- package/corpus/templates/clips/app/routes/bug-report.tsx +222 -0
- package/corpus/templates/clips/app/routes/record.tsx +104 -12
- package/corpus/templates/clips/changelog/2026-06-26-brief-network-blips-no-longer-block-recording-or-wrongly-pro.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-26-bug-report-recordings-can-keep-redacted-host-app-context-wit.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-26-bug-report-widgets-can-launch-clips-recordings-from-embedded.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-26-desktop-recording-keeps-connected-users-out-of-the-storage-s.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-26-if-a-recording-can-t-be-uploaded-the-chrome-extension-now-sa.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
- package/corpus/templates/clips/chrome-extension/public/manifest.json +9 -2
- package/corpus/templates/clips/chrome-extension/src/background.ts +43 -0
- package/corpus/templates/clips/chrome-extension/src/offscreen.ts +111 -6
- package/corpus/templates/clips/chrome-extension/src/popup.ts +18 -7
- package/corpus/templates/clips/desktop/src/app.tsx +53 -19
- package/corpus/templates/clips/server/db/schema.ts +26 -0
- package/corpus/templates/clips/server/lib/public-agent-context.ts +51 -0
- package/corpus/templates/clips/server/plugins/auth.ts +1 -0
- package/corpus/templates/clips/server/plugins/db.ts +28 -0
- package/corpus/templates/clips/server/routes/api/agent-context.json.get.ts +4 -1
- package/corpus/templates/clips/shared/bug-report.ts +161 -0
- package/corpus/templates/content/app/components/layout/Layout.tsx +10 -8
- package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +1 -1
- package/corpus/templates/content/app/i18n/zh-TW.ts +67 -66
- package/corpus/templates/content/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
- package/corpus/templates/design/app/components/layout/Layout.tsx +3 -3
- package/corpus/templates/design/app/i18n/zh-TW.ts +44 -44
- package/corpus/templates/design/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
- package/corpus/templates/dispatch/app/i18n/zh-TW.ts +5 -4
- package/corpus/templates/dispatch/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
- package/corpus/templates/forms/app/components/layout/Layout.tsx +4 -2
- package/corpus/templates/forms/app/components/layout/Sidebar.tsx +1 -1
- package/corpus/templates/forms/app/i18n/zh-TW.ts +48 -48
- package/corpus/templates/forms/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
- package/corpus/templates/macros/app/components/layout/AppLayout.tsx +3 -3
- package/corpus/templates/macros/app/i18n/zh-TW.ts +5 -5
- package/corpus/templates/macros/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
- package/corpus/templates/mail/app/i18n/zh-TW.ts +83 -83
- package/corpus/templates/mail/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
- package/corpus/templates/plan/app/components/layout/Layout.tsx +5 -3
- package/corpus/templates/plan/app/i18n/zh-TW.ts +69 -69
- package/corpus/templates/plan/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
- package/corpus/templates/slides/app/components/layout/Layout.tsx +3 -3
- package/corpus/templates/slides/app/i18n/zh-TW.ts +64 -64
- package/corpus/templates/slides/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
- package/corpus/templates/videos/app/components/layout/Layout.tsx +2 -2
- package/corpus/templates/videos/app/i18n/zh-TW.ts +54 -54
- package/corpus/templates/videos/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +6 -0
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +16 -6
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/collab/routes.d.ts +2 -2
- package/dist/deploy/build.d.ts +3 -1
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +372 -37
- package/dist/deploy/build.js.map +1 -1
- package/dist/deploy/route-discovery.d.ts +1 -1
- package/dist/deploy/route-discovery.js +1 -1
- package/dist/deploy/route-discovery.js.map +1 -1
- package/dist/notifications/routes.d.ts +1 -1
- package/dist/observability/routes.d.ts +5 -5
- package/dist/resources/handlers.d.ts +3 -3
- package/dist/server/agent-engine-api-key-route.d.ts +2 -2
- package/dist/server/edge.d.ts +11 -0
- package/dist/server/edge.d.ts.map +1 -0
- package/dist/server/edge.js +11 -0
- package/dist/server/edge.js.map +1 -0
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/styles/agent-native.css +123 -0
- package/dist/templates/default/app/i18n/zh-TW.ts +44 -44
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +1 -0
- package/dist/vite/client.js.map +1 -1
- package/docs/content/locales/zh-TW/a2a-protocol.md +68 -68
- package/docs/content/locales/zh-TW/actions.md +82 -82
- package/docs/content/locales/zh-TW/agent-mentions.md +22 -22
- package/docs/content/locales/zh-TW/agent-surfaces.md +82 -82
- package/docs/content/locales/zh-TW/agent-teams.md +29 -29
- package/docs/content/locales/zh-TW/agent-web-surfaces.md +11 -11
- package/docs/content/locales/zh-TW/audit-log.md +16 -16
- package/docs/content/locales/zh-TW/authentication.md +32 -32
- package/docs/content/locales/zh-TW/automations.md +32 -32
- package/docs/content/locales/zh-TW/blueprint-installer.md +19 -19
- package/docs/content/locales/zh-TW/cli-adapters.md +17 -17
- package/docs/content/locales/zh-TW/client.md +62 -62
- package/docs/content/locales/zh-TW/cloneable-saas.md +32 -32
- package/docs/content/locales/zh-TW/code-agents-ui.md +91 -91
- package/docs/content/locales/zh-TW/components.md +51 -51
- package/docs/content/locales/zh-TW/context-awareness.md +66 -66
- package/docs/content/locales/zh-TW/creating-templates.md +39 -39
- package/docs/content/locales/zh-TW/cross-app-sso.md +29 -29
- package/docs/content/locales/zh-TW/database.md +21 -21
- package/docs/content/locales/zh-TW/deployment.md +37 -37
- package/docs/content/locales/zh-TW/dispatch.md +43 -43
- package/docs/content/locales/zh-TW/drop-in-agent.md +34 -34
- package/docs/content/locales/zh-TW/durable-resume.md +18 -18
- package/docs/content/locales/zh-TW/embedding-sdk.md +73 -73
- package/docs/content/locales/zh-TW/evals.md +16 -16
- package/docs/content/locales/zh-TW/extensions.md +81 -81
- package/docs/content/locales/zh-TW/external-agents.md +146 -146
- package/docs/content/locales/zh-TW/faq.md +43 -43
- package/docs/content/locales/zh-TW/file-uploads.md +11 -11
- package/docs/content/locales/zh-TW/frames.md +33 -33
- package/docs/content/locales/zh-TW/getting-started.md +28 -28
- package/docs/content/locales/zh-TW/harness-agents.md +78 -78
- package/docs/content/locales/zh-TW/human-approval.md +27 -27
- package/docs/content/locales/zh-TW/internationalization.md +19 -19
- package/docs/content/locales/zh-TW/key-concepts.md +68 -68
- package/docs/content/locales/zh-TW/local-file-mode.md +50 -50
- package/docs/content/locales/zh-TW/mcp-apps.md +38 -38
- package/docs/content/locales/zh-TW/mcp-clients.md +67 -67
- package/docs/content/locales/zh-TW/mcp-protocol.md +50 -50
- package/docs/content/locales/zh-TW/messaging.md +99 -99
- package/docs/content/locales/zh-TW/migration-workbench.md +6 -6
- package/docs/content/locales/zh-TW/multi-app-workspace.md +39 -39
- package/docs/content/locales/zh-TW/multi-tenancy.md +7 -7
- package/docs/content/locales/zh-TW/native-chat-ui.md +38 -38
- package/docs/content/locales/zh-TW/notifications.md +23 -23
- package/docs/content/locales/zh-TW/observability.md +49 -49
- package/docs/content/locales/zh-TW/observational-memory.md +23 -23
- package/docs/content/locales/zh-TW/onboarding.md +40 -40
- package/docs/content/locales/zh-TW/plan-plugin.md +37 -37
- package/docs/content/locales/zh-TW/pr-visual-recap.md +72 -72
- package/docs/content/locales/zh-TW/processors.md +17 -17
- package/docs/content/locales/zh-TW/progress.md +15 -15
- package/docs/content/locales/zh-TW/pure-agent-apps.md +10 -10
- package/docs/content/locales/zh-TW/real-time-collaboration.md +103 -103
- package/docs/content/locales/zh-TW/recurring-jobs.md +19 -19
- package/docs/content/locales/zh-TW/routing.md +9 -9
- package/docs/content/locales/zh-TW/sandbox-adapters.md +48 -48
- package/docs/content/locales/zh-TW/security.md +49 -49
- package/docs/content/locales/zh-TW/server.md +47 -47
- package/docs/content/locales/zh-TW/sharing.md +22 -22
- package/docs/content/locales/zh-TW/skills-guide.md +46 -46
- package/docs/content/locales/zh-TW/template-analytics.md +40 -40
- package/docs/content/locales/zh-TW/template-assets.md +69 -69
- package/docs/content/locales/zh-TW/template-brain.md +81 -81
- package/docs/content/locales/zh-TW/template-calendar.md +40 -40
- package/docs/content/locales/zh-TW/template-chat.md +27 -27
- package/docs/content/locales/zh-TW/template-clips.md +85 -85
- package/docs/content/locales/zh-TW/template-content.md +65 -66
- package/docs/content/locales/zh-TW/template-design.md +29 -29
- package/docs/content/locales/zh-TW/template-dispatch.md +51 -51
- package/docs/content/locales/zh-TW/template-forms.md +25 -25
- package/docs/content/locales/zh-TW/template-mail.md +71 -71
- package/docs/content/locales/zh-TW/template-plan.md +92 -92
- package/docs/content/locales/zh-TW/template-slides.md +52 -52
- package/docs/content/locales/zh-TW/template-videos.md +30 -30
- package/docs/content/locales/zh-TW/tracking.md +29 -29
- package/docs/content/locales/zh-TW/using-your-agent.md +18 -18
- package/docs/content/locales/zh-TW/voice-input.md +19 -19
- package/docs/content/locales/zh-TW/what-is-agent-native.md +61 -61
- package/docs/content/locales/zh-TW/workspace-connections.md +41 -41
- package/docs/content/locales/zh-TW/workspace-management.md +27 -27
- package/docs/content/locales/zh-TW/workspace.md +58 -58
- package/docs/content/locales/zh-TW/writing-agent-instructions.md +41 -41
- package/docs/content/template-clips.md +48 -2
- package/package.json +2 -1
- package/src/templates/default/app/i18n/zh-TW.ts +44 -44
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: "
|
|
3
|
-
description: "多使用者協作編輯,其中 AI 代理是一流的同行:CRDT
|
|
2
|
+
title: "即時協作"
|
|
3
|
+
description: "多使用者協作編輯,其中 AI 代理是一流的同行:CRDT 合併、即時呈現、SSE 快速路徑和細粒度伺服器端合併 - 在任何 SQL 資料庫和任何主機上。"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# 即時協作
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
想象一下開啟檔案並看到同伴的游標滾動到某個段落,
|
|
9
|
+
然後文字會自行重寫——就像外科手術一樣,不會丟失你的位置。那
|
|
10
10
|
同伴可能是隊友。可能是代理吧來自框架的
|
|
11
|
-
|
|
11
|
+
從角度來看它們是相同的:都產生合併的 Yjs 操作
|
|
12
12
|
無衝突地進入共用檔案。這是
|
|
13
13
|
代理與本機協作模型。
|
|
14
14
|
|
|
@@ -17,28 +17,28 @@ description: "多使用者協作編輯,其中 AI 代理是一流的同行:CR
|
|
|
17
17
|
與代理一起編輯感覺就像在 Google Docs 或 Figma 中工作
|
|
18
18
|
一位既快速又不知疲倦的同事:
|
|
19
19
|
|
|
20
|
-
如果您只需要在代理或其他使用者寫入 SQL
|
|
20
|
+
如果您只需要在代理或其他使用者寫入 SQL 時重新整理 UI,則不需要任何這些 — 使用 [`useDbSync`](/docs/client)。此頁面用於對單一富文字檔案進行字符級共同編輯(共用游標、無衝突合併)。兩者都使用相同的 `/_agent-native/poll` 通道。
|
|
21
21
|
|
|
22
|
-
它建立在三項經過實战檢驗的技術之上:**Yjs**(CRDT
|
|
22
|
+
它建立在三項經過實战檢驗的技術之上:**Yjs**(CRDT,用於無衝突合併)、**TipTap**(富文字編輯器)和**基於輪詢的同步**(適用於所有部署環境,包括無伺服器和邊緣)。
|
|
23
23
|
|
|
24
|
-
- **CRDT
|
|
24
|
+
- **CRDT 合併** - 人類和代理的並發編輯無需合併
|
|
25
25
|
衝突。您輸入一個段落;代理重寫另一個;兩者
|
|
26
26
|
幹淨利落地著陸。
|
|
27
27
|
- **存在** - `PresenceBar` 顯示目前誰在檔案中,
|
|
28
|
-
|
|
29
|
-
- **代理作為對等編輯器** —
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
- **隨處可用** — Drizzle
|
|
33
|
-
Nitro
|
|
28
|
+
當代理正在積極編輯時,包括代理存在指示器。
|
|
29
|
+
- **代理作為對等編輯器** — 代理透過相同的 Yjs 進行編輯流程
|
|
30
|
+
作為人工編輯的基礎設施。它們顯示為即時狀態,不會幹擾游標
|
|
31
|
+
位置、選取或復原堆堆疊。
|
|
32
|
+
- **隨處可用** — Drizzle 支援的任何 SQL 資料庫(SQLite、Postgres)。
|
|
33
|
+
Nitro 支援的任何託管目標,包括無伺服器和邊緣。
|
|
34
34
|
|
|
35
35
|
## 架構 {#architecture}
|
|
36
36
|
|
|
37
37
|
協作系統有五個互鎖層。
|
|
38
38
|
|
|
39
|
-
```an-diagram title="五層互鎖" summary="
|
|
39
|
+
```an-diagram title="五層互鎖" summary="從記憶中的 CRDT 到在對等點之間傳送更新的傳輸 — 每一層都有一項工作。"
|
|
40
40
|
{
|
|
41
|
-
"html": "<div class=\"diagram-stack\"><div class=\"diagram-card layer\"><span class=\"diagram-pill accent\">1 · Yjs Y.Doc</span><small class=\"diagram-muted\">CRDT —
|
|
41
|
+
"html": "<div class=\"diagram-stack\"><div class=\"diagram-card layer\"><span class=\"diagram-pill accent\">1 · Yjs Y.Doc</span><small class=\"diagram-muted\">CRDT — 無衝突合併,無協調器</small></div><div class=\"diagram-card layer\"><span class=\"diagram-pill\">2 · SQL 規範內容</span><small class=\"diagram-muted\">_collab_docs — durable source of truth, versioned</small></div><div class=\"diagram-card layer\"><span class=\"diagram-pill\">3 · 由 updatedAt 門控的對帳</span><small class=\"diagram-muted\">代理編輯透過 SQL 更新時間傳播</small></div><div class=\"diagram-card layer\"><span class=\"diagram-pill\">4 · 主用戶端選舉</span><small class=\"diagram-muted\">恰好一個標籤頁面應用快照</small></div><div class=\"diagram-card layer\"><span class=\"diagram-pill ok\">5 · SSE 快速路徑 + 輪詢</span><small class=\"diagram-muted\">約幾十毫秒,任何地方都可降級為 2 秒輪詢</small></div></div>",
|
|
42
42
|
"css": ".diagram-stack{display:flex;flex-direction:column;gap:8px}.diagram-stack .layer{display:flex;flex-direction:column;gap:4px;padding:12px 14px}"
|
|
43
43
|
}
|
|
44
44
|
```
|
|
@@ -46,8 +46,8 @@ description: "多使用者協作編輯,其中 AI 代理是一流的同行:CR
|
|
|
46
46
|
### 1。 Yjs Y.Doc(CRDT層)
|
|
47
47
|
|
|
48
48
|
每個協作檔案都是一個包含共用型別的 `Y.Doc` — 通常是
|
|
49
|
-
`Y.XmlFragment`
|
|
50
|
-
`Y.Map` / `Y.Array` 用於結構化 JSON 資料。 Yjs
|
|
49
|
+
`Y.XmlFragment` 用於富文字(TipTap 讀取的 ProseMirror 節點樹)或
|
|
50
|
+
`Y.Map` / `Y.Array` 用於結構化 JSON 資料。 Yjs合併並發更新
|
|
51
51
|
沒有中央協調員;任何兩個交換狀態的用戶端
|
|
52
52
|
無論順序如何,結果都是相同的。
|
|
53
53
|
|
|
@@ -57,15 +57,15 @@ Yjs 狀態以 Base64 編碼的二進制形式儲存在 `_collab_docs` 表中。
|
|
|
57
57
|
該表由框架管理且與提供者無關(SQLite 和 Postgres 使用
|
|
58
58
|
相同的模式)。每行都有一個樂觀並發版本列
|
|
59
59
|
防止並發寫入競爭。墓碑壓縮會機會性地執行
|
|
60
|
-
|
|
60
|
+
當儲存的 blob 超過新編碼狀態的 4 倍時 — 無背景作業
|
|
61
61
|
必需。
|
|
62
62
|
|
|
63
63
|
### 3。 `updatedAt` 門控協調(代理編輯傳播)
|
|
64
64
|
|
|
65
|
-
代理 actions
|
|
65
|
+
代理 actions 不會推送到行程中的 Yjs。相反,該操作會編輯
|
|
66
66
|
規範的 SQL 內容列和凹凸 `updatedAt`。變更同步系統
|
|
67
|
-
|
|
68
|
-
|
|
67
|
+
偵測到碰撞,開啟的編輯器重新取得紀錄,並且主要用戶端
|
|
68
|
+
透過 `setContent` 將新內容應用到共用的 Y.Doc 中。一個`updatedAt`
|
|
69
69
|
gate 確保僅采用真正較新的內容 - 滯後的民意調查回應
|
|
70
70
|
無法恢復編輯。
|
|
71
71
|
|
|
@@ -80,27 +80,27 @@ gate 確保僅采用真正較新的內容 - 滯後的民意調查回應
|
|
|
80
80
|
|
|
81
81
|
### 5。 SSE 快速路徑+輪詢回退(傳輸)
|
|
82
82
|
|
|
83
|
-
|
|
83
|
+
協作更新事件透過兩條路徑傳輸:
|
|
84
84
|
|
|
85
85
|
- **SSE 快速路徑** — 用戶端訂閱 `/_agent-native/poll-events`
|
|
86
86
|
(`useDbSync` 使用的相同 `EventSource`)。協作更新事件到來
|
|
87
87
|
推送式,通常為數十毫秒。雖然 SSE 很健康
|
|
88
|
-
|
|
88
|
+
輪詢迴圈放松到較慢的節奏(預設情況下約為 12 秒)。
|
|
89
89
|
- **輪詢回退** — `/_agent-native/poll?since=N` 每 2 秒輪詢一次
|
|
90
90
|
當 SSE 不可用時。這使得協作可以在任何部署上進行
|
|
91
91
|
目標 - 包括持久連線的無伺服器功能
|
|
92
|
-
|
|
92
|
+
不可能,不同的呼叫可以處理不同的請求。
|
|
93
93
|
|
|
94
|
-
本機 Yjs 更新已去抖並與 `Y.mergeUpdates`
|
|
95
|
-
|
|
96
|
-
批次立即在 `visibilitychange` 或 `pagehide`
|
|
94
|
+
本機 Yjs 更新已去抖並與 `Y.mergeUpdates` 合併(約 80 毫秒)
|
|
95
|
+
在傳送到伺服器之前,減少擊鍵層級的網路流量。
|
|
96
|
+
批次立即在 `visibilitychange` 或 `pagehide` 上重新整理。一個
|
|
97
97
|
狀態向量差異(`GET /:docId/state?stateVector=…`)僅在
|
|
98
98
|
重新連線、環形緩衝區溢出或每 15 個輪詢週期 - 不是每個
|
|
99
|
-
|
|
99
|
+
迴圈。
|
|
100
100
|
|
|
101
101
|
網路錯誤使用帶抖動的指數退避,上限約為 15 秒。
|
|
102
102
|
|
|
103
|
-
```an-diagram title="
|
|
103
|
+
```an-diagram title="兩條編輯路徑,一條合併" summary="人類擊鍵流程 Y.Doc → 伺服器 → SSE。代理編輯經過 SQL:操作在更新時發生碰撞,主要客戶進行協調,然後更改重新進入 Yjs。"
|
|
104
104
|
{
|
|
105
105
|
"html": "<div class=\"diagram-collab\"><div class=\"lane\"><span class=\"diagram-pill\">人工編輯</span><div class=\"diagram-node\">Y.Doc update<br><small class=\"diagram-muted\">debounce 約 80ms</small></div><span class=\"diagram-arrow diagram-muted\" aria-hidden=\"true\">→</span><div class=\"diagram-box\" data-rough>POST /update<br><small class=\"diagram-muted\">apply + persist</small></div><span class=\"diagram-arrow diagram-accent\" aria-hidden=\"true\">→</span><div class=\"diagram-box diagram-accent\">SSE push<br><small class=\"diagram-muted\">to all peers</small></div></div><div class=\"lane\"><span class=\"diagram-pill warn\">代理編輯</span><div class=\"diagram-node\">Action 寫入 SQL<br><small class=\"diagram-muted\">更新 updatedAt</small></div><span class=\"diagram-arrow diagram-muted\" aria-hidden=\"true\">→</span><div class=\"diagram-box\" data-rough>主用戶端<br><small class=\"diagram-muted\">setContent 寫入 Y.Doc</small></div><span class=\"diagram-arrow diagram-accent\" aria-hidden=\"true\">→</span><div class=\"diagram-box diagram-accent\">POST /update<br><small class=\"diagram-muted\">re-enters Yjs · SSE push</small></div></div></div>",
|
|
106
106
|
"css": ".diagram-collab{display:flex;flex-direction:column;gap:14px}.diagram-collab .lane{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.diagram-collab .diagram-arrow{font-size:22px;line-height:1}"
|
|
@@ -115,9 +115,9 @@ gate 確保僅采用真正較新的內容 - 滯後的民意調查回應
|
|
|
115
115
|
pnpm add @tiptap/extension-collaboration @tiptap/extension-collaboration-caret @tiptap/y-tiptap @tiptap/core
|
|
116
116
|
```
|
|
117
117
|
|
|
118
|
-
### 2。新增Vite最佳化Deps
|
|
118
|
+
### 2。新增 Vite 最佳化Deps
|
|
119
119
|
|
|
120
|
-
防止 Vite
|
|
120
|
+
防止 Vite 在開發過程中以不相容的方式重新捆綁 TipTap:
|
|
121
121
|
|
|
122
122
|
```ts
|
|
123
123
|
// vite.config.ts
|
|
@@ -143,7 +143,7 @@ export default defineConfig({
|
|
|
143
143
|
### 3。新增協作伺服器外掛
|
|
144
144
|
|
|
145
145
|
始終將 `resourceType` 設定為註冊的可共用資源的名稱
|
|
146
|
-
|
|
146
|
+
透過 `registerShareableResource`。如果沒有它,協作推送事件就會被傳遞
|
|
147
147
|
所有經過驗證的使用者(沒有檔案級範圍)和伺服器
|
|
148
148
|
紀錄一次性警告。
|
|
149
149
|
|
|
@@ -216,31 +216,31 @@ useEffect(() => {
|
|
|
216
216
|
}, [ydoc, editor, isLoaded]);
|
|
217
217
|
```
|
|
218
218
|
|
|
219
|
-
|
|
219
|
+
使用者身分來源自工作階段電子郵件。此框架提供了 `emailToColor()` 和 `emailToName()` 幫助程式,用於根據電子郵件地址產生一致的游標顏色和顯示名稱。
|
|
220
220
|
|
|
221
221
|
## 評論 {#comments}
|
|
222
222
|
|
|
223
|
-
|
|
223
|
+
範本可以新增評論系統,對檔案進行對話串討論。內容範本的評論系統包括完整的實現:
|
|
224
224
|
|
|
225
|
-
- `document_comments` SQL
|
|
226
|
-
- 內容範本的REST路由,用於在`/api/comments/:id
|
|
227
|
-
-
|
|
228
|
-
-
|
|
229
|
-
-
|
|
225
|
+
- `document_comments` SQL 表(話題、回覆、已解決狀態)
|
|
226
|
+
- 內容範本的REST路由,用於在`/api/comments/:id`處更新/刪除;透過 `add-comment` / `list-comments` actions 建立並列出執行。自訂範本針對核心 `POST /_agent-native/collab/:docId/search-replace` 路由實現自己的等效端點。
|
|
227
|
+
- 帶有線索檢視和回覆的評論側邊欄 UI
|
|
228
|
+
- 解析/取消解析對話串
|
|
229
|
+
- **傳送到 AI** 按鈕 - 透過 `sendToAgentChat()` 將評論對話串脈絡傳送到代理聊天
|
|
230
230
|
- 代理actions:`list-comments`,`add-comment`
|
|
231
|
-
- Notion評論同步:`sync-notion-comments`雙向拉/推操作
|
|
231
|
+
- Notion 評論同步:`sync-notion-comments`雙向拉/推操作
|
|
232
232
|
|
|
233
|
-
##
|
|
233
|
+
## 協作路由 {#collab-routes}
|
|
234
234
|
|
|
235
235
|
所有協作路由均由協作外掛自動掛載在 `/_agent-native/collab/` 下:
|
|
236
236
|
|
|
237
|
-
|
|
|
237
|
+
| 路由 | 目的 |
|
|
238
238
|
| ----------------------------- | ------------------------------------------ |
|
|
239
|
-
| `GET /:docId/state` |
|
|
239
|
+
| `GET /:docId/state` | 取得完整的 Y.Doc 狀態 (base64) |
|
|
240
240
|
| `POST /:docId/update` | 應用用戶端 Yjs 更新 |
|
|
241
241
|
| `POST /:docId/text` | 應用全文替換(基於差異) |
|
|
242
|
-
| `POST /:docId/search-replace` | 在 Y.XmlFragment
|
|
243
|
-
| `POST /:docId/awareness` |
|
|
242
|
+
| `POST /:docId/search-replace` | 在 Y.XmlFragment 中進行外科手術式尋找/替換 |
|
|
243
|
+
| `POST /:docId/awareness` | 同步游標/存在狀態 |
|
|
244
244
|
| `GET /:docId/users` | 列出檔案上的活躍使用者 |
|
|
245
245
|
|
|
246
246
|
## 代理編輯操作 {#edit-document}
|
|
@@ -262,7 +262,7 @@ pnpm action edit-document --id doc123 --find "delete me" --replace ""
|
|
|
262
262
|
|
|
263
263
|
## 存在套件 {#presence-kit}
|
|
264
264
|
|
|
265
|
-
存在套件在現有感知層之上提供 Liveblocks/Figma
|
|
265
|
+
存在套件在現有感知層之上提供 Liveblocks/Figma 級即時游標和選取基元。
|
|
266
266
|
|
|
267
267
|
從焦點瀏覽器子路徑匯入用戶端狀態和編輯器 UI:
|
|
268
268
|
|
|
@@ -276,7 +276,7 @@ import {
|
|
|
276
276
|
} from "@agent-native/core/client/collab";
|
|
277
277
|
```
|
|
278
278
|
|
|
279
|
-
|
|
279
|
+
伺服器端代理存在幫助程式保留在較低階別的協作包中:
|
|
280
280
|
|
|
281
281
|
```ts
|
|
282
282
|
import {
|
|
@@ -286,19 +286,19 @@ import {
|
|
|
286
286
|
} from "@agent-native/core/collab";
|
|
287
287
|
```
|
|
288
288
|
|
|
289
|
-
### 公開API {#presence-public-api}
|
|
289
|
+
### 公開 API {#presence-public-api}
|
|
290
290
|
|
|
291
291
|
| API | 目的 |
|
|
292
292
|
| --------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
|
|
293
|
-
| `useCollaborativeDoc(options)` | 建立穩定的 `Y.Doc` 和感知執行個體,處理狀態向量同步、SSE
|
|
294
|
-
| `usePresence(awareness, localClientId)` |
|
|
295
|
-
| `<PresenceBar>` |
|
|
296
|
-
| `<LiveCursorOverlay>` | 根據標準化的 0-1
|
|
293
|
+
| `useCollaborativeDoc(options)` | 建立穩定的 `Y.Doc` 和感知執行個體,處理狀態向量同步、SSE 快速路徑、輪詢回退、活動使用者和代理存在標誌。 |
|
|
294
|
+
| `usePresence(awareness, localClientId)` | 派生遠端參與者並發布任意本機感知欄位,例如游標、選取、視口或工具模式。 |
|
|
295
|
+
| `<PresenceBar>` | 渲染活躍的協作者和人工智慧代理,並帶有可選的頭像點選跟隨模式連線。 |
|
|
296
|
+
| `<LiveCursorOverlay>` | 根據標準化的 0-1 坐標在定位容器上渲染遠端游標標籤。 |
|
|
297
297
|
| `<RemoteSelectionRings>` | 在您的應用解析的選定 DOM 元素週圍渲染彩色環和標籤。 |
|
|
298
|
-
| `useFollowUser(options)` |
|
|
298
|
+
| `useFollowUser(options)` | 當關注的參與者發布視口更改時呼叫回調。 |
|
|
299
299
|
| `toNormalized()` / `fromNormalized()` | 將指針坐標與標準化容器坐標相互轉換。 |
|
|
300
300
|
| `dedupeCollabUsersByEmail()` | 建置自訂頭像堆堆疊,無需一個使用者在每個開啟的分頁中顯示一次。 |
|
|
301
|
-
| `useCollaborativeMap()` / `useCollaborativeArray()` | 用於 Y.Map/Y.Array
|
|
301
|
+
| `useCollaborativeMap()` / `useCollaborativeArray()` | 用於 Y.Map/Y.Array 結構化協作的用戶端掛鉤。視為較低階別,直到範本證明準確的產品模式。 |
|
|
302
302
|
|
|
303
303
|
`UseCollaborativeDocOptions`:
|
|
304
304
|
|
|
@@ -309,15 +309,15 @@ import {
|
|
|
309
309
|
| `pollIntervalWithSse` | SSE 執行狀況良好時輪詢間隔較慢。預設值:`12000`。 |
|
|
310
310
|
| `pauseWhenHidden` | 隱藏時暫停遠端更新/狀態輪詢。預設值:`true`。 |
|
|
311
311
|
| `baseUrl` | 協作端點前綴。預設值:`/_agent-native/collab`。 |
|
|
312
|
-
| `requestSource` | 穩定的分頁/來源 ID
|
|
313
|
-
| `user` |
|
|
312
|
+
| `requestSource` | 穩定的分頁/來源 ID 用於忽略自產生的重新整理噪音。 |
|
|
313
|
+
| `user` | 游標中顯示 `{ name, email, color }` 並存在 UI。 |
|
|
314
314
|
|
|
315
315
|
`UseCollaborativeDocResult`:
|
|
316
316
|
|
|
317
317
|
| 欄位 | 描述 |
|
|
318
318
|
| -------------- | --------------------------------------------------- |
|
|
319
319
|
| `ydoc` | 目前`docId`的穩定`Y.Doc`。 |
|
|
320
|
-
| `awareness` |
|
|
320
|
+
| `awareness` | 游標、選取和跟隨模式使用的 Yjs Awareness 執行個體。 |
|
|
321
321
|
| `isLoading` | 初始伺服器狀態仍在載入中。 |
|
|
322
322
|
| `isSynced` | 掛鉤已趕上伺服器狀態。 |
|
|
323
323
|
| `activeUsers` | 來自意識的人類合作者。 |
|
|
@@ -328,12 +328,12 @@ import {
|
|
|
328
328
|
|
|
329
329
|
感知狀態更改現在以約 150 毫秒的速度傳播,而不是 2 秒的輪詢週期:
|
|
330
330
|
|
|
331
|
-
- **用戶端 → 伺服器**:對 `setPresence()` 或 `awareness.setLocalStateField()`
|
|
332
|
-
- **伺服器 → 用戶端**:`postAwareness`
|
|
331
|
+
- **用戶端 → 伺服器**:對 `setPresence()` 或 `awareness.setLocalStateField()` 的任何呼叫都會在 150 毫秒內觸發對 POST 到 `/_agent-native/collab/:docId/awareness` 的節流,將快速更改合併為一個請求。
|
|
332
|
+
- **伺服器 → 用戶端**:`postAwareness` 處理常式在儲存後發出 `AWARENESS_CHANGE_EVENT`。 `/_agent-native/poll-events` SSE 流將這些事件推送式轉發到連線的對等點。僅輪詢部署繼續工作 - 游標降級到輪詢節奏而不會出現錯誤。
|
|
333
333
|
|
|
334
334
|
### `usePresence(awareness, localClientId)` {#use-presence}
|
|
335
335
|
|
|
336
|
-
|
|
336
|
+
返回遠端參與者的反應清單和本機線上狀態有效負載的設定器:
|
|
337
337
|
|
|
338
338
|
```ts
|
|
339
339
|
import { usePresence } from "@agent-native/core/client";
|
|
@@ -352,11 +352,11 @@ setPresence({ cursor: { x: 0.4, y: 0.7 }, selection: "#hero" });
|
|
|
352
352
|
// }
|
|
353
353
|
```
|
|
354
354
|
|
|
355
|
-
代理 (AGENT_CLIENT_ID) 顯示為 `isAgent: true` 的一級參與者。當 `agentUpdateSelection()`
|
|
355
|
+
代理 (AGENT_CLIENT_ID) 顯示為 `isAgent: true` 的一級參與者。當 `agentUpdateSelection()` 被稱為伺服器端時,它的選取中繼資料像任何其他參與者一樣流經 `usePresence`。
|
|
356
356
|
|
|
357
357
|
### `LiveCursorOverlay` {#live-cursor-overlay}
|
|
358
358
|
|
|
359
|
-
|
|
359
|
+
將遠端游標呈現為容器元素上的絕對定位標籤:
|
|
360
360
|
|
|
361
361
|
```tsx
|
|
362
362
|
import { LiveCursorOverlay } from "@agent-native/core/client";
|
|
@@ -372,7 +372,7 @@ import { LiveCursorOverlay } from "@agent-native/core/client";
|
|
|
372
372
|
</div>;
|
|
373
373
|
```
|
|
374
374
|
|
|
375
|
-
|
|
375
|
+
代理的游標清晰地呈現為閃爍圖示。游標在 10 秒不活動後淡出,並以 120 毫秒平滑 CSS 過渡。
|
|
376
376
|
|
|
377
377
|
### `RemoteSelectionRings` {#remote-selection-rings}
|
|
378
378
|
|
|
@@ -396,7 +396,7 @@ import { RemoteSelectionRings } from "@agent-native/core/client";
|
|
|
396
396
|
|
|
397
397
|
### `useFollowUser` {#follow-user}
|
|
398
398
|
|
|
399
|
-
|
|
399
|
+
每當跟隨的參與者的視口發生變化時呼叫回調:
|
|
400
400
|
|
|
401
401
|
```ts
|
|
402
402
|
import { useFollowUser } from "@agent-native/core/client";
|
|
@@ -448,9 +448,9 @@ setPresence({ cursor: norm });
|
|
|
448
448
|
const px = fromNormalized(norm, container.getBoundingClientRect());
|
|
449
449
|
```
|
|
450
450
|
|
|
451
|
-
###
|
|
451
|
+
### 代理游標管道 {#agent-cursor}
|
|
452
452
|
|
|
453
|
-
伺服器端actions
|
|
453
|
+
伺服器端actions呼叫`agentUpdateSelection()`來發布代理在哪裡工作。設計範本的 `edit-design` 和 `generate-design` actions 自動呼叫此函式。其他範本也可以執行相同的操作:
|
|
454
454
|
|
|
455
455
|
```ts
|
|
456
456
|
import {
|
|
@@ -471,7 +471,7 @@ try {
|
|
|
471
471
|
}
|
|
472
472
|
```
|
|
473
473
|
|
|
474
|
-
|
|
474
|
+
選取中繼資料作為 `other.presence.selection` 在連線的用戶端上透過 `usePresence` 流動。
|
|
475
475
|
|
|
476
476
|
---
|
|
477
477
|
|
|
@@ -480,29 +480,29 @@ try {
|
|
|
480
480
|
所有路由均由協作自動掛載在`/_agent-native/collab/`下
|
|
481
481
|
外掛:
|
|
482
482
|
|
|
483
|
-
|
|
|
483
|
+
| 路由 | 目的 |
|
|
484
484
|
| ----------------------------- | --------------------------------------------------------- |
|
|
485
485
|
| `GET /:docId/state` | 完整的 Y.Doc 狀態 (base64)。接受 `?stateVector=` 進行差異 |
|
|
486
486
|
| `POST /:docId/update` | 應用用戶端 Yjs 更新 (base64)。預設最大 2 MB |
|
|
487
487
|
| `POST /:docId/text` | 應用全文替換(基於差異) |
|
|
488
|
-
| `POST /:docId/search-replace` | 在 Y.XmlFragment
|
|
488
|
+
| `POST /:docId/search-replace` | 在 Y.XmlFragment 中進行外科手術式尋找/替換 |
|
|
489
489
|
| `POST /:docId/json` | 將完整的 JSON 差異應用於 Y.Map/Y.Array |
|
|
490
490
|
| `GET /:docId/json` | 讀取目前JSON狀態 |
|
|
491
491
|
| `POST /:docId/patch` | 應用手術 JSON 補丁操作(更新插入/刪除/重新排序) |
|
|
492
|
-
| `POST /:docId/awareness` |
|
|
492
|
+
| `POST /:docId/awareness` | 同步游標/存在狀態 |
|
|
493
493
|
| `GET /:docId/users` | 列出檔案上的活躍使用者 |
|
|
494
494
|
|
|
495
495
|
## 傳輸和性能 {#transport}
|
|
496
496
|
|
|
497
497
|
| 財產 | 值 |
|
|
498
498
|
| -------------------- | -------------------------------------------- |
|
|
499
|
-
| 更新去抖 | ~80 ms
|
|
500
|
-
| 輪詢間隔(無 SSE) | 2
|
|
501
|
-
| 輪詢間隔(SSE 健康) | ~12
|
|
502
|
-
|
|
|
499
|
+
| 更新去抖 | ~80 ms(透過 `Y.mergeUpdates` 合併快速擊鍵) |
|
|
500
|
+
| 輪詢間隔(無 SSE) | 2秒(可透過`pollInterval`設定) |
|
|
501
|
+
| 輪詢間隔(SSE 健康) | ~12秒(可透過`pollIntervalWithSse`設定) |
|
|
502
|
+
| 狀態向量取得頻率 | 重新連線、環形緩衝區間隙或每 15 個輪詢週期時 |
|
|
503
503
|
| 出錯時退避 | 帶抖動的指數,上限約為 15 秒 |
|
|
504
|
-
| 最大有效負載(寫入) | 預設 2 MB
|
|
505
|
-
| 壓縮閾值 |
|
|
504
|
+
| 最大有效負載(寫入) | 預設 2 MB,可透過 `maxPayloadBytes` 設定 |
|
|
505
|
+
| 壓縮閾值 | 儲存的 blob > 4× 新編碼觸發墓碑緊湊 |
|
|
506
506
|
| 每次寫入資料庫讀取 | 1(僅在`persistMergedState`內部讀取CAS版本) |
|
|
507
507
|
|
|
508
508
|
## 安全 {#security}
|
|
@@ -516,7 +516,7 @@ createCollabPlugin({
|
|
|
516
516
|
```
|
|
517
517
|
|
|
518
518
|
如果沒有 `resourceType`,外掛會紀錄警告並廣播協作推送
|
|
519
|
-
|
|
519
|
+
部署中所有經過驗證的使用者的事件,無檔案層級
|
|
520
520
|
範圍。非所有者退回到狀態向量追趕(安全但更高
|
|
521
521
|
延遲),無論是否設定 `resourceType`。
|
|
522
522
|
|
|
@@ -524,7 +524,7 @@ createCollabPlugin({
|
|
|
524
524
|
|
|
525
525
|
所有協作路由都需要驗證。當 `resourceType` 設定時,讀取
|
|
526
526
|
至少需要檢視者存取權限,並且寫入需要編輯者存取權限,使用
|
|
527
|
-
與共用系統相同的 `resolveAccess` / `assertAccess`
|
|
527
|
+
與共用系統相同的 `resolveAccess` / `assertAccess` 幫助程式。 404
|
|
528
528
|
(不是 403)在存取失敗時返回,以避免泄漏檔案存在。
|
|
529
529
|
|
|
530
530
|
### 有效負載限制
|
|
@@ -542,13 +542,13 @@ createCollabPlugin({
|
|
|
542
542
|
|
|
543
543
|
### 意識範圍
|
|
544
544
|
|
|
545
|
-
|
|
545
|
+
意識路由(`POST /awareness`、`GET /users`)由相同的門控
|
|
546
546
|
讀取時進行存取檢查 - 缺乏檢視者存取權限的使用者無法了解其他人
|
|
547
547
|
正在編輯檔案。
|
|
548
548
|
|
|
549
549
|
## 模式 {#patterns}
|
|
550
550
|
|
|
551
|
-
###
|
|
551
|
+
### 結構化資料的粒度伺服器端合併
|
|
552
552
|
|
|
553
553
|
對於結構化檔案(幻燈片、表單建置器、設計檔案),Yjs
|
|
554
554
|
當兩個代理或使用者重寫相同的主體協作模型時,可能會發生衝突
|
|
@@ -571,7 +571,7 @@ type PatchDeckOp =
|
|
|
571
571
|
兩個使用者編輯不同的幻燈片均成功;
|
|
572
572
|
甲板層。
|
|
573
573
|
|
|
574
|
-
**表單 (`patch-form-fields`)** —
|
|
574
|
+
**表單 (`patch-form-fields`)** — 使用更新插入/刪除/重新排序進行欄位級合併
|
|
575
575
|
操作,因此對不同表單欄位的並發編輯都可以生存。
|
|
576
576
|
|
|
577
577
|
在以下情況下使用此模式:
|
|
@@ -582,13 +582,13 @@ type PatchDeckOp =
|
|
|
582
582
|
|
|
583
583
|
在以下情況下使用主體協作(Y.XmlFragment + TipTap):
|
|
584
584
|
|
|
585
|
-
-
|
|
586
|
-
- 游標級 CRDT
|
|
585
|
+
- 該檔案是自由格式的富文字,可以編輯任何區域。
|
|
586
|
+
- 游標級 CRDT 合併很重要。
|
|
587
587
|
|
|
588
|
-
###
|
|
588
|
+
### 協作復原範圍(Y.UndoManager)
|
|
589
589
|
|
|
590
|
-
設計範本使用 `Y.UndoManager`
|
|
591
|
-
|
|
590
|
+
設計範本使用 `Y.UndoManager` 將復原/重做範圍限制為本機
|
|
591
|
+
使用者自己的編輯。遠端對等編輯和代理編輯永遠不會被復原
|
|
592
592
|
使用者的 Cmd+Z。
|
|
593
593
|
|
|
594
594
|
```ts
|
|
@@ -614,7 +614,7 @@ undoManager.redo(); // Shift+Cmd+Z
|
|
|
614
614
|
關鍵屬性:
|
|
615
615
|
|
|
616
616
|
- `trackedOrigins` 必須是 `Set`。僅具有匹配來源的 transactions
|
|
617
|
-
|
|
617
|
+
在復原堆堆疊中捕獲。
|
|
618
618
|
- 遠端更新(來源 `"remote"`)和代理更新(來源 `"agent"`)
|
|
619
619
|
從未被捕獲。
|
|
620
620
|
- 當活動檔案發生變化時,重新建立並處置管理器;陳舊
|
|
@@ -625,23 +625,23 @@ undoManager.redo(); // Shift+Cmd+Z
|
|
|
625
625
|
```an-callout
|
|
626
626
|
{
|
|
627
627
|
"tone": "risk",
|
|
628
|
-
"body": "
|
|
628
|
+
"body": "**同一區域同時重寫是最後寫入獲勝。**如果代理重寫了一個段落,而人類在“完全相同的區域”中有未儲存的編輯,則主要用戶端快照可能會破壞正在進行的人類編輯。不同區域中的編輯始終透過 CRDT 幹淨地合併。對於結構化檔案,請使用粒度伺服器端合併來完全避免這種情況。"
|
|
629
629
|
}
|
|
630
630
|
```
|
|
631
631
|
|
|
632
632
|
- **同區域同時重寫為 LWW** — 如果代理重寫了
|
|
633
633
|
段落和人類在完全相同的區域中有未儲存的編輯,
|
|
634
634
|
主要客戶快照可以覆蓋人類正在進行的更改。編輯
|
|
635
|
-
|
|
635
|
+
不同區域透過 CRDT 正確合併。細粒度伺服器端合併
|
|
636
636
|
(見上文)避免了結構化檔案的這種情況。
|
|
637
|
-
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
637
|
+
- **無伺服器上的行程內寫入鎖** — `_writeLocks` 對應為
|
|
638
|
+
行程本機。並發請求登陸不同的Serverless
|
|
639
|
+
呼叫在 SQL CAS 層(樂觀並發)序列化
|
|
640
|
+
比記憶鎖。這是安全的,但意味著高吞吐量場景
|
|
641
641
|
無伺服器可能會看到更多 CAS 重試。
|
|
642
|
-
-
|
|
643
|
-
|
|
644
|
-
|
|
642
|
+
- **感知是針對每個行程的** — 感知記憶儲存是
|
|
643
|
+
行程本機。無伺服器/多行程部署看到部分感知
|
|
644
|
+
每次呼叫的狀態。客戶仍然會收到每個的完整認知快照
|
|
645
645
|
輪詢週期,因此狀態指示器會在一個輪詢間隔內更新。
|
|
646
646
|
|
|
647
647
|
## 存在 {#presence}
|
|
@@ -656,10 +656,10 @@ undoManager.redo(); // Shift+Cmd+Z
|
|
|
656
656
|
(持久存在心跳)。
|
|
657
657
|
|
|
658
658
|
Use `emailToColor(email)` and `emailToName(email)` from
|
|
659
|
-
`@agent-native/core/client`
|
|
659
|
+
`@agent-native/core/client` 產生一致的游標顏色和顯示
|
|
660
660
|
電子郵件地址中的姓名。
|
|
661
661
|
|
|
662
|
-
使用 `activeUsers` 渲染的 `PresenceBar`
|
|
662
|
+
使用 `activeUsers` 渲染的 `PresenceBar` 顯示活人和代理
|
|
663
663
|
合作者。每張幻燈片的存在(哪些使用者正在檢視給定的幻燈片)
|
|
664
664
|
同一意識狀態之上的層。
|
|
665
665
|
|
|
@@ -671,10 +671,10 @@ Use `emailToColor(email)` and `emailToName(email)` from
|
|
|
671
671
|
和`assertAccess`為`resourceType`引用的存取模型。
|
|
672
672
|
- [Sharing](/docs/sharing) — 如何共用檔案以及如何授予存取權限。
|
|
673
673
|
- [Template: Content](/docs/template-content) — 參考實現
|
|
674
|
-
|
|
674
|
+
協作富文字編輯。
|
|
675
675
|
- [Template: Slides](/docs/template-slides) — 精細的 `patch-deck` 操作
|
|
676
676
|
結構化並發編輯。
|
|
677
677
|
- [Template: Forms](/docs/template-forms) — 欄位級 `patch-form-fields`
|
|
678
|
-
|
|
679
|
-
- [Template: Design](/docs/template-design) — `Y.UndoManager`
|
|
678
|
+
伺服器端合併。
|
|
679
|
+
- [Template: Design](/docs/template-design) — `Y.UndoManager` 復原/重做範圍
|
|
680
680
|
本機使用者編輯。
|
|
@@ -17,17 +17,17 @@ description: "Cron 調度提示代理自行執行 - 每日摘要、每週報告
|
|
|
17
17
|
{
|
|
18
18
|
"filename": "jobs/morning-digest.md",
|
|
19
19
|
"language": "markdown",
|
|
20
|
-
"code": "---\nschedule: \"0 7 * * *\"\nenabled: true\nrunAs: creator\n---\n\n# 早間摘要\n\n總結隔夜收到的電子郵件。按發件人域分組。\n
|
|
20
|
+
"code": "---\nschedule: \"0 7 * * *\"\nenabled: true\nrunAs: creator\n---\n\n# 早間摘要\n\n總結隔夜收到的電子郵件。按發件人域分組。\n將今天看起來需要回覆的前 3 個對話串固定到\n\"Needs reply\" 標籤。對任何顯而易見的問題草擬答覆。",
|
|
21
21
|
"annotations": [
|
|
22
22
|
{ "lines": "2", "label": "當", "note": "標準 5 欄位 cron — `0 7 * * *` 是每天 07:00。" },
|
|
23
23
|
{ "lines": "3", "label": "暫停開關", "note": "Flip to `false` to stop the job without deleting it." },
|
|
24
24
|
{ "lines": "4", "label": "身分", "note": "`creator` runs with the owner's identity and `ANTHROPIC_API_KEY`; `shared` uses the org's key." },
|
|
25
|
-
{ "lines": "7-12", "label": "提示", "note": "主體只是一個提示 -
|
|
25
|
+
{ "lines": "7-12", "label": "提示", "note": "主體只是一個提示 - 代理在每次觸發時使用其所有一般工具和工作區脈絡執行它。" }
|
|
26
26
|
]
|
|
27
27
|
}
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
就是這樣。內文是代理在每次計畫觸發時執行的提示。代理可以存取其在互動式聊天中擁有的所有相同工具和工作區脈絡 - actions、skills、記憶、連線的 MCP 伺服器、子代理。
|
|
31
31
|
|
|
32
32
|
## 前線 {#frontmatter}
|
|
33
33
|
|
|
@@ -36,14 +36,14 @@ description: "Cron 調度提示代理自行執行 - 每日摘要、每週報告
|
|
|
36
36
|
| `schedule` | cron 表達式 | _(必填)_ | 標準 5 欄位 cron。 `"0 7 * * *"` = 每天 07:00; `"0 */4 * * *"` = 每 4 小時一次。 |
|
|
37
37
|
| `enabled` | 布爾值 | `true` | 翻轉到 `false` 以暫停而不刪除作業。 |
|
|
38
38
|
| `runAs` | `"creator"` \| `"shared"` | `"creator"` | `"creator"` 以作業所有者的身分和 `ANTHROPIC_API_KEY` 執行。 `"shared"` 使用組織的金鑰。 |
|
|
39
|
-
| `createdBy` | 電子郵件 | _(自動)_ |
|
|
39
|
+
| `createdBy` | 電子郵件 | _(自動)_ | 當透過工作區 UI 或代理建立作業時填充。 |
|
|
40
40
|
| `orgId` | 字串 | _(自動)_ | 組織範圍;從建立者的活動組織繼承。 |
|
|
41
|
-
| `lastRun` | ISO時間戳 | _(託管)_ |
|
|
41
|
+
| `lastRun` | ISO時間戳 | _(託管)_ | 由調度程式在每次執行後寫入。 |
|
|
42
42
|
| `lastStatus` | `"success"` \| `"error"` \| … | _(託管)_ | 最新結果。 |
|
|
43
43
|
| `lastError` | 字串 | _(託管)_ | 如果上次執行失敗,則會出現錯誤訊息。 |
|
|
44
|
-
| `nextRun` | ISO時間戳 | _(託管)_ | 由`schedule
|
|
44
|
+
| `nextRun` | ISO時間戳 | _(託管)_ | 由`schedule`計算得出;由調度程式用來決定下次何時觸發。 |
|
|
45
45
|
|
|
46
|
-
`last*` 和 `nextRun`
|
|
46
|
+
`last*` 和 `nextRun` 欄位由調度程式寫入。您可以閱讀它們以檢視歷史紀錄,但不要手動編輯它們 - 下次執行將覆蓋它們。
|
|
47
47
|
|
|
48
48
|
## cron 語法 {#cron}
|
|
49
49
|
|
|
@@ -59,7 +59,7 @@ description: "Cron 調度提示代理自行執行 - 每日摘要、每週報告
|
|
|
59
59
|
| `0 17 * * 1-5` | 工作日 17:00 |
|
|
60
60
|
| `0 0 1 * *` | 每個月的第一天 |
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
此框架包括用於驗證和呈現 cron 字串的 cron 實用程式(`isValidCron()` 和 `describeCron()`),由資源層和調度程式層在內部使用。
|
|
63
63
|
|
|
64
64
|
## 建立作業 {#creating}
|
|
65
65
|
|
|
@@ -67,7 +67,7 @@ description: "Cron 調度提示代理自行執行 - 每日摘要、每週報告
|
|
|
67
67
|
|
|
68
68
|
`+` → **工作區面板中的計畫工作**。填寫提示和時間表。另存為 `jobs/<slug>.md` 並在下一個匹配的刻度處開始執行。
|
|
69
69
|
|
|
70
|
-
###
|
|
70
|
+
### 透過詢問代理
|
|
71
71
|
|
|
72
72
|
> “建立一個計畫工作,每天早上 7 點總結我未讀的電子郵件。”
|
|
73
73
|
|
|
@@ -75,7 +75,7 @@ description: "Cron 調度提示代理自行執行 - 每日摘要、每週報告
|
|
|
75
75
|
|
|
76
76
|
### 手動
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
透過框架的資源 APIs 將 Markdown 檔案拖放到 `jobs/` 中:
|
|
79
79
|
|
|
80
80
|
```ts
|
|
81
81
|
import { resourcePut } from "@agent-native/core/resources";
|
|
@@ -91,11 +91,11 @@ Summarize overnight emails.`,
|
|
|
91
91
|
);
|
|
92
92
|
```
|
|
93
93
|
|
|
94
|
-
##
|
|
94
|
+
## 調度程式如何執行 {#how-scheduler-runs}
|
|
95
95
|
|
|
96
|
-
|
|
96
|
+
調度程式是一個在行程中執行的框架外掛(內部 `processRecurringJobs()` 例程):無論伺服器在何處執行,代理聊天外掛內的 `setInterval` 每 60 秒觸發一次(有 10 秒的啟動延遲)。
|
|
97
97
|
|
|
98
|
-
```an-diagram title="
|
|
98
|
+
```an-diagram title="一個調度程式勾選" summary="每 60 秒,調度程式就會找到到期的作業,將每個作業作為新的代理對話串執行,並將結果寫回作業檔案。"
|
|
99
99
|
{
|
|
100
100
|
"html": "<div class=\"sched\"><div class=\"diagram-box accent\"><code>setInterval</code> • 60s ↻</div><div class=\"diagram-arrow diagram-muted\" aria-hidden=\"true\">↓</div><div class=\"diagram-card\"><span class=\"diagram-pill\">1 · scan</span><small class=\"diagram-muted\">list every enabled <code>jobs/*.md</code> across all owners</small></div><div class=\"diagram-arrow diagram-muted\" aria-hidden=\"true\">↓</div><div class=\"diagram-card\"><span class=\"diagram-pill\">2 · due?</span><small class=\"diagram-muted\">compare <code>nextRun</code> to now</small></div><div class=\"diagram-arrow diagram-muted\" aria-hidden=\"true\">↓</div><div class=\"diagram-card accent\"><span class=\"diagram-pill accent\">3 · run</span><small class=\"diagram-muted\">fresh agent thread, job body as the user message — actions, SQL, A2A, email</small></div><div class=\"diagram-arrow diagram-muted\" aria-hidden=\"true\">↓</div><div class=\"diagram-card ok\"><span class=\"diagram-pill ok\">4 · record</span><small class=\"diagram-muted\">write <code>lastRun</code> / <code>lastStatus</code> / <code>lastError</code>, recompute <code>nextRun</code></small></div></div>",
|
|
101
101
|
"css": ".sched{display:flex;flex-direction:column;gap:6px;max-width:520px}.sched .diagram-card{display:flex;flex-direction:column;gap:2px;padding:10px 14px}.sched .diagram-box{align-self:flex-start}.sched .diagram-arrow{font-size:18px;align-self:center}"
|
|
@@ -109,7 +109,7 @@ Summarize overnight emails.`,
|
|
|
109
109
|
## 偵錯作業 {#debugging}
|
|
110
110
|
|
|
111
111
|
- 在工作區中開啟 `jobs/<name>.md` — frontmatter 顯示 `lastRun`、`lastStatus`、`lastError`、`nextRun`。
|
|
112
|
-
-
|
|
112
|
+
- **無需等待即可測試:**沒有強制發射工具。要按需執行相同的工作,可以將作業的提示貼上到代理聊天中並讓它在那裡執行,或者暫時將計畫設定為下一分鐘,以便調度程式在下一個時間點上選取它(然後恢復真正的 cron)。
|
|
113
113
|
- **暫停:**翻轉`enabled: false`。檔案保持不變,只是停止執行。
|
|
114
114
|
|
|
115
115
|
## 代理工具 {#agent-tool}
|
|
@@ -129,14 +129,14 @@ Summarize overnight emails.`,
|
|
|
129
129
|
|
|
130
130
|
不要將重複性作業與 `@agent-native/scheduling` 混淆:
|
|
131
131
|
|
|
132
|
-
- **重複作業(本頁面)** — cron
|
|
133
|
-
- **`@agent-native/scheduling`** —
|
|
132
|
+
- **重複作業(本頁面)** — cron 計畫*提示*代理在背景執行。框架層級。住在工作區。在任何 Agent-Native 應用程式上執行。
|
|
133
|
+
- **`@agent-native/scheduling`** — 用於建置行事曆/預訂功能(事件型別、可用視窗、預訂)的可重用域包。為 `calendar` 範本和自訂調度介面提供支援。
|
|
134
134
|
|
|
135
135
|
重複性工作是“如何讓代理自行行動?”日程安排包是“如何建置行事曆應用程式?”不同的關注點。
|
|
136
136
|
|
|
137
|
-
##
|
|
137
|
+
## 下一步是什麼
|
|
138
138
|
|
|
139
139
|
- [**Automations**](/docs/automations) — 將事件觸發器和條件新增到相同的 `jobs/` 格式
|
|
140
|
-
- [**Workspace**](/docs/workspace) — 作業與 skills
|
|
141
|
-
- [**Actions**](/docs/actions) —
|
|
140
|
+
- [**Workspace**](/docs/workspace) — 作業與 skills、記憶和自訂代理一起存在
|
|
141
|
+
- [**Actions**](/docs/actions) — 工作呼叫的工具
|
|
142
142
|
- [**Agent Teams**](/docs/agent-teams) - 作業通常會產生子代理來執行並行工作
|