@agent-native/core 0.100.2 → 0.101.2
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 +65 -0
- package/corpus/core/docs/content/locales/ar-SA/pr-visual-recap.mdx +48 -30
- package/corpus/core/docs/content/locales/ar-SA/template-plan.mdx +7 -0
- package/corpus/core/docs/content/locales/de-DE/pr-visual-recap.mdx +48 -30
- package/corpus/core/docs/content/locales/de-DE/template-plan.mdx +7 -0
- package/corpus/core/docs/content/locales/es-ES/pr-visual-recap.mdx +48 -30
- package/corpus/core/docs/content/locales/es-ES/template-plan.mdx +14 -0
- package/corpus/core/docs/content/locales/fr-FR/pr-visual-recap.mdx +48 -30
- package/corpus/core/docs/content/locales/fr-FR/template-plan.mdx +7 -0
- package/corpus/core/docs/content/locales/hi-IN/pr-visual-recap.mdx +48 -30
- package/corpus/core/docs/content/locales/hi-IN/template-plan.mdx +7 -0
- package/corpus/core/docs/content/locales/ja-JP/pr-visual-recap.mdx +48 -30
- package/corpus/core/docs/content/locales/ja-JP/template-plan.mdx +7 -0
- package/corpus/core/docs/content/locales/ko-KR/pr-visual-recap.mdx +48 -30
- package/corpus/core/docs/content/locales/ko-KR/template-plan.mdx +7 -0
- package/corpus/core/docs/content/locales/pt-BR/pr-visual-recap.mdx +48 -30
- package/corpus/core/docs/content/locales/pt-BR/template-plan.mdx +14 -0
- package/corpus/core/docs/content/locales/zh-CN/pr-visual-recap.mdx +48 -30
- package/corpus/core/docs/content/locales/zh-CN/template-plan.mdx +7 -0
- package/corpus/core/docs/content/locales/zh-TW/pr-visual-recap.mdx +48 -30
- package/corpus/core/docs/content/locales/zh-TW/template-plan.mdx +7 -0
- package/corpus/core/docs/content/pr-visual-recap.mdx +50 -32
- package/corpus/core/docs/content/template-plan.mdx +14 -0
- package/corpus/core/docs/content/toolkit-comments-review.mdx +16 -2
- package/corpus/core/package.json +4 -1
- package/corpus/core/src/a2a/index.ts +2 -1
- package/corpus/core/src/a2a/server.ts +34 -9
- package/corpus/core/src/agent/production-agent.ts +56 -10
- package/corpus/core/src/cli/create.ts +47 -19
- package/corpus/core/src/cli/pr-visual-recap-workflow.ts +2 -3
- package/corpus/core/src/cli/recap.ts +3 -4932
- package/corpus/core/src/cli/skills-content/visual-plan-skill.ts +6 -4
- package/corpus/core/src/cli/skills-content/visual-recap-skill.ts +7 -1
- package/corpus/core/src/client/AgentPanel.tsx +19 -17
- package/corpus/core/src/client/analytics.ts +8 -1
- package/corpus/core/src/client/chat/markdown-renderer.tsx +54 -8
- package/corpus/core/src/client/chat/message-components.tsx +8 -2
- package/corpus/core/src/client/clipboard.ts +28 -1
- package/corpus/core/src/client/guided-questions.tsx +4 -0
- package/corpus/core/src/client/i18n.tsx +2 -1
- package/corpus/core/src/client/index.ts +4 -0
- package/corpus/core/src/client/review/ReviewCommentComposer.tsx +108 -0
- package/corpus/core/src/client/review/ReviewThreadPanel.tsx +482 -150
- package/corpus/core/src/client/review/index.ts +8 -0
- package/corpus/core/src/client/review/use-review.ts +35 -1
- package/corpus/core/src/client/use-agent-chat-context.ts +3 -2
- package/corpus/core/src/review/actions/create-review-comment.ts +2 -1
- package/corpus/core/src/review/actions/get-review-feedback.ts +6 -11
- package/corpus/core/src/review/actions/list-review-comments.ts +38 -4
- package/corpus/core/src/review/actions/reply-review-comment.ts +33 -22
- package/corpus/core/src/review/actions/resolve-review-thread.ts +29 -2
- package/corpus/core/src/review/actions/send-review-thread-to-agent.ts +62 -0
- package/corpus/core/src/review/identity.ts +101 -0
- package/corpus/core/src/review/index.ts +14 -0
- package/corpus/core/src/review/store.ts +315 -8
- package/corpus/core/src/review/types.ts +4 -0
- package/corpus/core/src/server/action-discovery.ts +4 -0
- package/corpus/core/src/server/action-routes.ts +125 -4
- package/corpus/core/src/server/agent-chat/plugin-options.ts +16 -0
- package/corpus/core/src/server/agent-chat-plugin.ts +1 -0
- package/corpus/core/src/server/index.ts +8 -0
- package/corpus/core/src/vite/action-types-plugin.ts +4 -0
- package/corpus/templates/analytics/changelog/2026-07-14-daily-dashboard-email-captures-authenticate-with-a-sessi.md +6 -0
- package/corpus/templates/analytics/server/lib/dashboard-report.ts +156 -3
- package/corpus/templates/assets/app/components/generation/GenerationResults.tsx +402 -142
- package/corpus/templates/assets/app/i18n/zh-TW.ts +1 -0
- package/corpus/templates/assets/app/i18n-data.ts +1 -0
- package/corpus/templates/assets/app/routes/library.tsx +187 -48
- package/corpus/templates/assets/changelog/2026-07-13-merged-the-candidates-panel-into-the-library-as-a-drafts-tab.md +6 -0
- package/corpus/templates/chat/app/lib/agent-page.tsx +40 -0
- package/corpus/templates/chat/app/routes/agent.tsx +5 -3
- package/corpus/templates/chat/changelog/2026-07-14-fixed-chat-template-startup-with-older-core-versions.md +6 -0
- package/corpus/templates/clips/.agents/skills/ai-video-tools/SKILL.md +5 -0
- package/corpus/templates/clips/AGENTS.md +4 -0
- package/corpus/templates/clips/actions/get-feature-flags.ts +30 -0
- package/corpus/templates/clips/actions/lib/transcript-preview.ts +48 -0
- package/corpus/templates/clips/actions/request-transcript.ts +41 -1
- package/corpus/templates/clips/actions/view-screen.ts +5 -9
- package/corpus/templates/clips/app/components/library/library-layout.tsx +1 -1
- package/corpus/templates/clips/app/components/player/video-player.tsx +39 -1
- package/corpus/templates/clips/app/hooks/use-desktop-promo.ts +6 -12
- package/corpus/templates/clips/app/hooks/use-mse-video-source.ts +146 -0
- package/corpus/templates/clips/app/lib/capture-install-options.ts +21 -0
- package/corpus/templates/clips/app/lib/fmp4.ts +271 -0
- package/corpus/templates/clips/app/lib/mse-video-loader.ts +585 -0
- package/corpus/templates/clips/app/routes/_app.dictate.tsx +0 -4
- package/corpus/templates/clips/app/routes/_app.meetings.$meetingId.tsx +5 -13
- package/corpus/templates/clips/app/routes/_app.meetings._index.tsx +2 -37
- package/corpus/templates/clips/app/routes/download.tsx +3 -2
- package/corpus/templates/clips/changelog/2026-07-10-shared-clips-now-start-playing-instantly-instead-of-showing-.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-14-clips-now-distinguishes-transcript-previews-from-incomplete-.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-14-desktop-app-prompts-stay-hidden-after-you-download-the-insta.md +6 -0
- package/corpus/templates/clips/desktop/src/lib/recorder.ts +5 -0
- package/corpus/templates/clips/desktop/src/overlays/recording-pill.tsx +10 -0
- package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +4 -0
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen/custom_capture.rs +2518 -0
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen/live_upload.rs +353 -0
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +558 -67
- package/corpus/templates/clips/desktop/src-tauri/src/recording_indicator.rs +11 -1
- package/corpus/templates/clips/desktop/src-tauri/src/remote_flags.rs +188 -0
- package/corpus/templates/clips/desktop/src-tauri/src/whisper_speech.rs +1 -1
- package/corpus/templates/clips/server/lib/post-finalize-dispatch.ts +1 -0
- package/corpus/templates/clips/server/plugins/agent-chat.ts +5 -0
- package/corpus/templates/clips/server/routes/api/_agent-native-background/post-finalize-worker.post.ts +5 -1
- package/corpus/templates/clips/shared/feature-flags.ts +41 -0
- package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +3 -0
- package/corpus/templates/design/.agents/skills/design-review-feedback/SKILL.md +42 -0
- package/corpus/templates/design/AGENTS.md +6 -0
- package/corpus/templates/design/README.md +1 -0
- package/corpus/templates/design/actions/navigate.ts +4 -4
- package/corpus/templates/design/actions/view-screen.ts +116 -2
- package/corpus/templates/design/agent-native.app-skill.json +5 -0
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +52 -59
- package/corpus/templates/design/app/components/design/DesignExtensionsPanel.tsx +13 -9
- package/corpus/templates/design/app/components/design/EditPanel.tsx +79 -11
- package/corpus/templates/design/app/components/design/LayersPanel.tsx +78 -65
- package/corpus/templates/design/app/components/design/ReviewCommentsPanel.tsx +161 -0
- package/corpus/templates/design/app/components/design/ReviewStatusControl.tsx +96 -0
- package/corpus/templates/design/app/components/design/bridge/hit-test.bridge.ts +166 -0
- package/corpus/templates/design/app/components/layout/Layout.tsx +1 -0
- package/corpus/templates/design/app/components/visual-editor/ReviewCanvasPins.tsx +1077 -0
- package/corpus/templates/design/app/components/visual-editor/index.ts +1 -0
- package/corpus/templates/design/app/components/visual-editor/review-canvas-state.ts +42 -0
- package/corpus/templates/design/app/hooks/use-design-systems.ts +2 -2
- package/corpus/templates/design/app/hooks/use-navigation-state.ts +9 -6
- package/corpus/templates/design/app/hooks/use-question-flow.ts +7 -1
- package/corpus/templates/design/app/i18n/ar-SA.ts +56 -1
- package/corpus/templates/design/app/i18n/de-DE.ts +57 -1
- package/corpus/templates/design/app/i18n/en-US.ts +56 -1
- package/corpus/templates/design/app/i18n/es-ES.ts +56 -1
- package/corpus/templates/design/app/i18n/fr-FR.ts +57 -1
- package/corpus/templates/design/app/i18n/hi-IN.ts +56 -1
- package/corpus/templates/design/app/i18n/ja-JP.ts +56 -1
- package/corpus/templates/design/app/i18n/ko-KR.ts +56 -1
- package/corpus/templates/design/app/i18n/pt-BR.ts +57 -1
- package/corpus/templates/design/app/i18n/zh-CN.ts +56 -1
- package/corpus/templates/design/app/i18n/zh-TW.ts +51 -0
- package/corpus/templates/design/app/pages/Present.tsx +172 -14
- package/corpus/templates/design/app/pages/design-editor/overview-camera.ts +23 -0
- package/corpus/templates/design/app/pages/design-editor/tool-state.ts +10 -0
- package/corpus/templates/design/app/pages/present-review-state.ts +18 -0
- package/corpus/templates/design/app/public-routes.ts +8 -0
- package/corpus/templates/design/app/root.tsx +7 -6
- package/corpus/templates/design/changelog/2026-07-13-dragged-design-assets-now-appear-at-the-visible-drop-locatio.md +6 -0
- package/corpus/templates/design/changelog/2026-07-13-reviewers-can-pin-comments-on-shared-designs-and-apply-verif.md +6 -0
- package/corpus/templates/design/server/plugins/agent-chat.ts +10 -0
- package/corpus/templates/design/server/plugins/auth.ts +7 -5
- package/corpus/templates/design/server/plugins/review.ts +9 -0
- package/corpus/templates/design/shared/review-anchor.ts +83 -0
- package/corpus/templates/design/shared/review-summary.ts +25 -0
- package/corpus/templates/forms/.agents/skills/form-publishing/SKILL.md +2 -0
- package/corpus/templates/forms/AGENTS.md +4 -0
- package/corpus/templates/forms/actions/create-form.ts +2 -1
- package/corpus/templates/forms/actions/update-form.ts +5 -2
- package/corpus/templates/forms/app/i18n/ar-SA.ts +3 -0
- package/corpus/templates/forms/app/i18n/de-DE.ts +3 -0
- package/corpus/templates/forms/app/i18n/en-US.ts +3 -0
- package/corpus/templates/forms/app/i18n/es-ES.ts +3 -0
- package/corpus/templates/forms/app/i18n/fr-FR.ts +3 -0
- package/corpus/templates/forms/app/i18n/hi-IN.ts +3 -0
- package/corpus/templates/forms/app/i18n/ja-JP.ts +3 -0
- package/corpus/templates/forms/app/i18n/ko-KR.ts +3 -0
- package/corpus/templates/forms/app/i18n/pt-BR.ts +3 -0
- package/corpus/templates/forms/app/i18n/zh-CN.ts +3 -0
- package/corpus/templates/forms/app/i18n/zh-TW.ts +3 -0
- package/corpus/templates/forms/app/pages/FormBuilderPage.tsx +19 -0
- package/corpus/templates/forms/changelog/2026-07-14-fixed-the-ask-forms-loading-input-appearing-above-the-welcom.md +6 -0
- package/corpus/templates/forms/changelog/2026-07-14-form-social-previews-now-show-the-form-title-description-and.md +6 -0
- package/corpus/templates/forms/changelog/2026-07-14-forms-can-email-the-form-owner-when-new-responses-arrive.md +6 -0
- package/corpus/templates/forms/server/handlers/submissions.ts +17 -0
- package/corpus/templates/forms/server/lib/form-og-image.ts +64 -6
- package/corpus/templates/forms/server/lib/public-form-ssr.ts +6 -2
- package/corpus/templates/forms/server/lib/response-email.ts +65 -0
- package/corpus/templates/forms/server/plugins/agent-chat.ts +1 -0
- package/corpus/templates/forms/server/routes/api/forms/og/[...slug]/og.png.get.ts +184 -0
- package/corpus/templates/forms/shared/types.ts +2 -0
- package/corpus/templates/plan/.agents/skills/visual-plan/SKILL.md +6 -4
- package/corpus/templates/plan/.agents/skills/visual-recap/SKILL.md +7 -1
- package/dist/a2a/index.d.ts +2 -1
- package/dist/a2a/index.d.ts.map +1 -1
- package/dist/a2a/index.js +1 -1
- package/dist/a2a/index.js.map +1 -1
- package/dist/a2a/server.d.ts +25 -0
- package/dist/a2a/server.d.ts.map +1 -1
- package/dist/a2a/server.js +30 -6
- package/dist/a2a/server.js.map +1 -1
- package/dist/agent/production-agent.d.ts +2 -0
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +37 -12
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/cli/create.d.ts +5 -3
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +44 -19
- package/dist/cli/create.js.map +1 -1
- package/dist/cli/pr-visual-recap-workflow.d.ts +2 -2
- package/dist/cli/pr-visual-recap-workflow.d.ts.map +1 -1
- package/dist/cli/pr-visual-recap-workflow.js +2 -2
- package/dist/cli/pr-visual-recap-workflow.js.map +1 -1
- package/dist/cli/recap.d.ts +3 -562
- package/dist/cli/recap.d.ts.map +1 -1
- package/dist/cli/recap.js +3 -3875
- package/dist/cli/recap.js.map +1 -1
- package/dist/cli/skills-content/visual-plan-skill.d.ts +1 -1
- package/dist/cli/skills-content/visual-plan-skill.d.ts.map +1 -1
- package/dist/cli/skills-content/visual-plan-skill.js +6 -4
- package/dist/cli/skills-content/visual-plan-skill.js.map +1 -1
- package/dist/cli/skills-content/visual-recap-skill.d.ts +1 -1
- package/dist/cli/skills-content/visual-recap-skill.d.ts.map +1 -1
- package/dist/cli/skills-content/visual-recap-skill.js +7 -1
- package/dist/cli/skills-content/visual-recap-skill.js.map +1 -1
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +3 -3
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/analytics.d.ts +5 -0
- package/dist/client/analytics.d.ts.map +1 -1
- package/dist/client/analytics.js +3 -1
- package/dist/client/analytics.js.map +1 -1
- package/dist/client/chat/markdown-renderer.d.ts +1 -0
- package/dist/client/chat/markdown-renderer.d.ts.map +1 -1
- package/dist/client/chat/markdown-renderer.js +36 -1
- package/dist/client/chat/markdown-renderer.js.map +1 -1
- package/dist/client/chat/message-components.d.ts.map +1 -1
- package/dist/client/chat/message-components.js +5 -2
- package/dist/client/chat/message-components.js.map +1 -1
- package/dist/client/clipboard.d.ts +3 -1
- package/dist/client/clipboard.d.ts.map +1 -1
- package/dist/client/clipboard.js +24 -1
- package/dist/client/clipboard.js.map +1 -1
- package/dist/client/guided-questions.d.ts +3 -1
- package/dist/client/guided-questions.d.ts.map +1 -1
- package/dist/client/guided-questions.js +2 -1
- package/dist/client/guided-questions.js.map +1 -1
- package/dist/client/i18n.d.ts.map +1 -1
- package/dist/client/i18n.js +3 -1
- package/dist/client/i18n.js.map +1 -1
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +1 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/review/ReviewCommentComposer.d.ts +18 -0
- package/dist/client/review/ReviewCommentComposer.d.ts.map +1 -0
- package/dist/client/review/ReviewCommentComposer.js +30 -0
- package/dist/client/review/ReviewCommentComposer.js.map +1 -0
- package/dist/client/review/ReviewThreadPanel.d.ts +28 -1
- package/dist/client/review/ReviewThreadPanel.d.ts.map +1 -1
- package/dist/client/review/ReviewThreadPanel.js +151 -39
- package/dist/client/review/ReviewThreadPanel.js.map +1 -1
- package/dist/client/review/index.d.ts +3 -2
- package/dist/client/review/index.d.ts.map +1 -1
- package/dist/client/review/index.js +2 -1
- package/dist/client/review/index.js.map +1 -1
- package/dist/client/review/use-review.d.ts +23 -0
- package/dist/client/review/use-review.d.ts.map +1 -1
- package/dist/client/review/use-review.js +3 -0
- package/dist/client/review/use-review.js.map +1 -1
- package/dist/client/use-agent-chat-context.d.ts +1 -1
- package/dist/client/use-agent-chat-context.d.ts.map +1 -1
- package/dist/client/use-agent-chat-context.js +4 -2
- package/dist/client/use-agent-chat-context.js.map +1 -1
- package/dist/collab/awareness.d.ts +2 -2
- package/dist/collab/awareness.d.ts.map +1 -1
- package/dist/collab/struct-routes.d.ts +1 -1
- package/dist/notifications/routes.d.ts +3 -3
- package/dist/observability/routes.d.ts +5 -5
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/corpus-jobs.d.ts +2 -2
- package/dist/resources/handlers.d.ts +2 -2
- package/dist/review/actions/create-review-comment.js +2 -1
- package/dist/review/actions/create-review-comment.js.map +1 -1
- package/dist/review/actions/get-review-feedback.js +6 -11
- package/dist/review/actions/get-review-feedback.js.map +1 -1
- package/dist/review/actions/list-review-comments.d.ts +1 -0
- package/dist/review/actions/list-review-comments.js +25 -4
- package/dist/review/actions/list-review-comments.js.map +1 -1
- package/dist/review/actions/reply-review-comment.js +12 -5
- package/dist/review/actions/reply-review-comment.js.map +1 -1
- package/dist/review/actions/resolve-review-thread.d.ts +3 -0
- package/dist/review/actions/resolve-review-thread.js +20 -3
- package/dist/review/actions/resolve-review-thread.js.map +1 -1
- package/dist/review/actions/send-review-thread-to-agent.d.ts +17 -0
- package/dist/review/actions/send-review-thread-to-agent.d.ts.map +1 -0
- package/dist/review/actions/send-review-thread-to-agent.js +49 -0
- package/dist/review/actions/send-review-thread-to-agent.js.map +1 -0
- package/dist/review/identity.d.ts +6 -0
- package/dist/review/identity.d.ts.map +1 -0
- package/dist/review/identity.js +68 -0
- package/dist/review/identity.js.map +1 -0
- package/dist/review/index.d.ts +3 -1
- package/dist/review/index.d.ts.map +1 -1
- package/dist/review/index.js +2 -1
- package/dist/review/index.js.map +1 -1
- package/dist/review/store.d.ts +36 -0
- package/dist/review/store.d.ts.map +1 -1
- package/dist/review/store.js +223 -8
- package/dist/review/store.js.map +1 -1
- package/dist/review/types.d.ts +4 -0
- package/dist/review/types.d.ts.map +1 -1
- package/dist/review/types.js.map +1 -1
- package/dist/secrets/routes.d.ts +9 -9
- package/dist/server/action-discovery.d.ts.map +1 -1
- package/dist/server/action-discovery.js +4 -0
- package/dist/server/action-discovery.js.map +1 -1
- package/dist/server/action-routes.d.ts +45 -0
- package/dist/server/action-routes.d.ts.map +1 -1
- package/dist/server/action-routes.js +71 -5
- package/dist/server/action-routes.js.map +1 -1
- package/dist/server/agent-chat/plugin-options.d.ts +16 -0
- package/dist/server/agent-chat/plugin-options.d.ts.map +1 -1
- package/dist/server/agent-chat/plugin-options.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +1 -0
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/index.d.ts +3 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +2 -0
- package/dist/server/index.js.map +1 -1
- package/dist/vite/action-types-plugin.d.ts.map +1 -1
- package/dist/vite/action-types-plugin.js +4 -0
- package/dist/vite/action-types-plugin.js.map +1 -1
- package/docs/content/locales/ar-SA/pr-visual-recap.mdx +48 -30
- package/docs/content/locales/ar-SA/template-plan.mdx +7 -0
- package/docs/content/locales/de-DE/pr-visual-recap.mdx +48 -30
- package/docs/content/locales/de-DE/template-plan.mdx +7 -0
- package/docs/content/locales/es-ES/pr-visual-recap.mdx +48 -30
- package/docs/content/locales/es-ES/template-plan.mdx +14 -0
- package/docs/content/locales/fr-FR/pr-visual-recap.mdx +48 -30
- package/docs/content/locales/fr-FR/template-plan.mdx +7 -0
- package/docs/content/locales/hi-IN/pr-visual-recap.mdx +48 -30
- package/docs/content/locales/hi-IN/template-plan.mdx +7 -0
- package/docs/content/locales/ja-JP/pr-visual-recap.mdx +48 -30
- package/docs/content/locales/ja-JP/template-plan.mdx +7 -0
- package/docs/content/locales/ko-KR/pr-visual-recap.mdx +48 -30
- package/docs/content/locales/ko-KR/template-plan.mdx +7 -0
- package/docs/content/locales/pt-BR/pr-visual-recap.mdx +48 -30
- package/docs/content/locales/pt-BR/template-plan.mdx +14 -0
- package/docs/content/locales/zh-CN/pr-visual-recap.mdx +48 -30
- package/docs/content/locales/zh-CN/template-plan.mdx +7 -0
- package/docs/content/locales/zh-TW/pr-visual-recap.mdx +48 -30
- package/docs/content/locales/zh-TW/template-plan.mdx +7 -0
- package/docs/content/pr-visual-recap.mdx +50 -32
- package/docs/content/template-plan.mdx +14 -0
- package/docs/content/toolkit-comments-review.mdx +16 -2
- package/package.json +4 -1
- package/corpus/templates/forms/server/routes/api/forms/og/[slug]/og.png.get.ts +0 -45
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
} from "@agent-native/core/server";
|
|
12
12
|
import {
|
|
13
13
|
EMBED_MODE_QUERY_PARAM,
|
|
14
|
+
EMBED_SESSION_COOKIE,
|
|
14
15
|
EMBED_TOKEN_QUERY_PARAM,
|
|
15
16
|
} from "@agent-native/core/shared";
|
|
16
17
|
|
|
@@ -60,6 +61,7 @@ type DashboardScreenshotAttempt = {
|
|
|
60
61
|
readyTimeout?: number;
|
|
61
62
|
secondReadyTimeout?: number;
|
|
62
63
|
totalTimeout?: number;
|
|
64
|
+
reportPanelLimit?: number;
|
|
63
65
|
};
|
|
64
66
|
|
|
65
67
|
type LaunchedScreenshotBrowser = {
|
|
@@ -466,6 +468,96 @@ async function runBoundedBrowserCleanup(
|
|
|
466
468
|
}
|
|
467
469
|
}
|
|
468
470
|
|
|
471
|
+
const DIAGNOSTICS_PROBE_TIMEOUT_MS = 2_000;
|
|
472
|
+
const DIAGNOSTICS_MAX_LENGTH = 700;
|
|
473
|
+
const DIAGNOSTICS_COLLECTOR_LIMIT = 5;
|
|
474
|
+
|
|
475
|
+
// Best-effort page inspection used when the report surface never becomes
|
|
476
|
+
// visible, so failures carry enough state to tell wrong-page/wedged-renderer/
|
|
477
|
+
// auth-bounce apart. Must never throw and must stay bounded even if the page
|
|
478
|
+
// is hung.
|
|
479
|
+
async function collectPageDiagnostics(
|
|
480
|
+
page: any,
|
|
481
|
+
consoleErrors: string[],
|
|
482
|
+
failedRequests: string[],
|
|
483
|
+
): Promise<string> {
|
|
484
|
+
try {
|
|
485
|
+
let responsive = true;
|
|
486
|
+
let probeTimeout: ReturnType<typeof setTimeout> | undefined;
|
|
487
|
+
try {
|
|
488
|
+
await Promise.race([
|
|
489
|
+
Promise.resolve(page.evaluate("1")),
|
|
490
|
+
new Promise((_, reject) => {
|
|
491
|
+
probeTimeout = setTimeout(
|
|
492
|
+
() => reject(new Error("diagnostics probe timed out")),
|
|
493
|
+
DIAGNOSTICS_PROBE_TIMEOUT_MS,
|
|
494
|
+
);
|
|
495
|
+
}),
|
|
496
|
+
]);
|
|
497
|
+
} catch {
|
|
498
|
+
responsive = false;
|
|
499
|
+
} finally {
|
|
500
|
+
if (probeTimeout) clearTimeout(probeTimeout);
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
if (!responsive) {
|
|
504
|
+
return `page unresponsive (renderer hung or crashed); consoleErrors=${JSON.stringify(
|
|
505
|
+
consoleErrors,
|
|
506
|
+
)} failedRequests=${JSON.stringify(failedRequests)}`.slice(
|
|
507
|
+
0,
|
|
508
|
+
DIAGNOSTICS_MAX_LENGTH,
|
|
509
|
+
);
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
let url = "";
|
|
513
|
+
try {
|
|
514
|
+
url = page.url();
|
|
515
|
+
} catch {
|
|
516
|
+
// page may already be closed; leave url empty
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
let title = "";
|
|
520
|
+
let bodyText = "";
|
|
521
|
+
let detailsTimeout: ReturnType<typeof setTimeout> | undefined;
|
|
522
|
+
try {
|
|
523
|
+
// page.evaluate ignores setDefaultTimeout, so race it like the probe —
|
|
524
|
+
// a renderer that wedges after the probe must not stall diagnostics.
|
|
525
|
+
const details = await Promise.race([
|
|
526
|
+
Promise.resolve(
|
|
527
|
+
page.evaluate(
|
|
528
|
+
`(() => ({
|
|
529
|
+
title: document.title,
|
|
530
|
+
bodyText: document.body?.innerText?.slice(0, 240) ?? "",
|
|
531
|
+
}))()`,
|
|
532
|
+
),
|
|
533
|
+
),
|
|
534
|
+
new Promise<never>((_, reject) => {
|
|
535
|
+
detailsTimeout = setTimeout(
|
|
536
|
+
() => reject(new Error("diagnostics details timed out")),
|
|
537
|
+
DIAGNOSTICS_PROBE_TIMEOUT_MS,
|
|
538
|
+
);
|
|
539
|
+
}),
|
|
540
|
+
]);
|
|
541
|
+
title = (details as any)?.title ?? "";
|
|
542
|
+
bodyText = (details as any)?.bodyText ?? "";
|
|
543
|
+
} catch {
|
|
544
|
+
// best effort; leave title/bodyText empty
|
|
545
|
+
} finally {
|
|
546
|
+
if (detailsTimeout) clearTimeout(detailsTimeout);
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
return `page state: ${JSON.stringify({
|
|
550
|
+
url,
|
|
551
|
+
title,
|
|
552
|
+
bodyText,
|
|
553
|
+
consoleErrors,
|
|
554
|
+
failedRequests,
|
|
555
|
+
})}`.slice(0, DIAGNOSTICS_MAX_LENGTH);
|
|
556
|
+
} catch {
|
|
557
|
+
return "diagnostics unavailable";
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
|
|
469
561
|
async function captureDashboardPng(
|
|
470
562
|
sub: DashboardReportSubscription,
|
|
471
563
|
snapshot: ReportSnapshot,
|
|
@@ -488,6 +580,12 @@ async function captureDashboardPng(
|
|
|
488
580
|
const screenshotUrl = new URL(targetPath, `${dashboardBaseUrl()}/`);
|
|
489
581
|
screenshotUrl.searchParams.set(EMBED_MODE_QUERY_PARAM, "1");
|
|
490
582
|
screenshotUrl.searchParams.set(EMBED_TOKEN_QUERY_PARAM, token);
|
|
583
|
+
if (attempt.reportPanelLimit) {
|
|
584
|
+
screenshotUrl.searchParams.set(
|
|
585
|
+
"reportPanelLimit",
|
|
586
|
+
String(attempt.reportPanelLimit),
|
|
587
|
+
);
|
|
588
|
+
}
|
|
491
589
|
|
|
492
590
|
let browser: any;
|
|
493
591
|
let cleanup = async () => {};
|
|
@@ -498,6 +596,7 @@ async function captureDashboardPng(
|
|
|
498
596
|
let launchTimeout: ReturnType<typeof setTimeout> | undefined;
|
|
499
597
|
let captureStage = "launching the screenshot browser";
|
|
500
598
|
let attemptTimedOut = false;
|
|
599
|
+
let lastDiagnostics: string | null = null;
|
|
501
600
|
const attemptTimeout = attempt.totalTimeout
|
|
502
601
|
? setTimeout(() => {
|
|
503
602
|
attemptTimedOut = true;
|
|
@@ -530,6 +629,51 @@ async function captureDashboardPng(
|
|
|
530
629
|
|
|
531
630
|
const timeout = screenshotTimeoutMs();
|
|
532
631
|
const page = await newPage();
|
|
632
|
+
|
|
633
|
+
// Belt-and-braces auth: the query token authenticates only after the
|
|
634
|
+
// client-side bootstrap harvests it from the URL, which gives the
|
|
635
|
+
// stripped-down serverless browser several ways to end up session-less.
|
|
636
|
+
// Seeding the same signed token as a cookie authenticates every request
|
|
637
|
+
// server-side with no client cooperation. Never abort the capture over
|
|
638
|
+
// this — the query token path still exists.
|
|
639
|
+
try {
|
|
640
|
+
await page.context().addCookies([
|
|
641
|
+
{
|
|
642
|
+
name: EMBED_SESSION_COOKIE,
|
|
643
|
+
value: token,
|
|
644
|
+
url: `${dashboardBaseUrl()}/`,
|
|
645
|
+
},
|
|
646
|
+
]);
|
|
647
|
+
} catch (err) {
|
|
648
|
+
console.warn(
|
|
649
|
+
"[dashboard-report] Failed to pre-seed embed session cookie:",
|
|
650
|
+
errorMessage(err),
|
|
651
|
+
);
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
// Bounded diagnostics collectors so a failed wait carries evidence of
|
|
655
|
+
// wrong-page/wedged-renderer/auth-bounce instead of a bare timeout.
|
|
656
|
+
const consoleErrors: string[] = [];
|
|
657
|
+
page.on("console", (msg: any) => {
|
|
658
|
+
if (msg.type() !== "error") return;
|
|
659
|
+
if (consoleErrors.length >= DIAGNOSTICS_COLLECTOR_LIMIT) return;
|
|
660
|
+
consoleErrors.push(msg.text().slice(0, 160));
|
|
661
|
+
});
|
|
662
|
+
const failedRequests: string[] = [];
|
|
663
|
+
page.on("requestfailed", (req: any) => {
|
|
664
|
+
if (failedRequests.length >= DIAGNOSTICS_COLLECTOR_LIMIT) return;
|
|
665
|
+
failedRequests.push(
|
|
666
|
+
`${req.method()} ${req.url().slice(0, 120)}: ${req.failure()?.errorText ?? "failed"}`,
|
|
667
|
+
);
|
|
668
|
+
});
|
|
669
|
+
page.on("response", (res: any) => {
|
|
670
|
+
if (res.status() < 400) return;
|
|
671
|
+
if (failedRequests.length >= DIAGNOSTICS_COLLECTOR_LIMIT) return;
|
|
672
|
+
failedRequests.push(
|
|
673
|
+
`${res.request().method()} ${res.url().slice(0, 120)}: HTTP ${res.status()}`,
|
|
674
|
+
);
|
|
675
|
+
});
|
|
676
|
+
|
|
533
677
|
page.setDefaultTimeout(timeout);
|
|
534
678
|
await page.emulateMedia({ media: "screen", colorScheme: "light" });
|
|
535
679
|
await page.addInitScript(() => {
|
|
@@ -542,7 +686,14 @@ async function captureDashboardPng(
|
|
|
542
686
|
|
|
543
687
|
captureStage = "waiting for the report surface";
|
|
544
688
|
const capture = page.locator("[data-dashboard-report-capture]");
|
|
545
|
-
|
|
689
|
+
try {
|
|
690
|
+
await capture.waitFor({ state: "visible", timeout });
|
|
691
|
+
} catch (err) {
|
|
692
|
+
lastDiagnostics = errorMessage(
|
|
693
|
+
await collectPageDiagnostics(page, consoleErrors, failedRequests),
|
|
694
|
+
);
|
|
695
|
+
throw new Error(`${errorMessage(err)}; ${lastDiagnostics}`);
|
|
696
|
+
}
|
|
546
697
|
captureStage = "waiting for dashboard queries";
|
|
547
698
|
await waitForDashboardReportReady(page, attempt.readyTimeout ?? timeout);
|
|
548
699
|
captureStage = "rendering lazy dashboard panels";
|
|
@@ -569,7 +720,8 @@ async function captureDashboardPng(
|
|
|
569
720
|
} catch (err) {
|
|
570
721
|
if (attemptTimedOut) {
|
|
571
722
|
throw new Error(
|
|
572
|
-
`${attempt.label} capture exceeded ${attempt.totalTimeout}ms while ${captureStage}
|
|
723
|
+
`${attempt.label} capture exceeded ${attempt.totalTimeout}ms while ${captureStage}` +
|
|
724
|
+
(lastDiagnostics ? `; ${lastDiagnostics}` : ""),
|
|
573
725
|
);
|
|
574
726
|
}
|
|
575
727
|
throw new Error(`${captureStage}: ${errorMessage(err)}`);
|
|
@@ -612,7 +764,7 @@ function errorMessage(err: unknown): string {
|
|
|
612
764
|
|
|
613
765
|
function storedAttemptError(message: string): string {
|
|
614
766
|
const normalized = message.replace(/\s+/g, " ").trim();
|
|
615
|
-
return normalized.length >
|
|
767
|
+
return normalized.length > 400 ? `${normalized.slice(0, 399)}…` : normalized;
|
|
616
768
|
}
|
|
617
769
|
|
|
618
770
|
async function captureDashboardPngWithFallback(
|
|
@@ -640,6 +792,7 @@ async function captureDashboardPngWithFallback(
|
|
|
640
792
|
label: "full-lightweight",
|
|
641
793
|
viewport: { width: 1200, height: 1400 },
|
|
642
794
|
captureScale: 0.7,
|
|
795
|
+
reportPanelLimit: 8,
|
|
643
796
|
...(serverless
|
|
644
797
|
? {
|
|
645
798
|
readyTimeout: 55_000,
|