@agent-native/core 0.111.4 → 0.113.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/corpus/README.md +4 -2
- package/corpus/core/CHANGELOG.md +34 -0
- package/corpus/core/docs/AGENTS.md +7 -0
- package/corpus/core/docs/content/integrations.mdx +63 -2
- package/corpus/core/docs/design/provider-integration-authority.md +117 -0
- package/corpus/core/package.json +8 -1
- package/corpus/core/scripts/materialize-source-corpus.mjs +9 -2
- package/corpus/core/src/cli/atomic-json-file.ts +324 -0
- package/corpus/core/src/cli/claude-code-participant.ts +515 -0
- package/corpus/core/src/cli/code-agent-executor.ts +35 -15
- package/corpus/core/src/cli/code-agent-runs.concurrent-worker.ts +33 -0
- package/corpus/core/src/cli/code-agent-runs.ts +70 -36
- package/corpus/core/src/cli/codex-cli-participant.ts +496 -0
- package/corpus/core/src/cli/multi-frontier-runs.ts +1952 -0
- package/corpus/core/src/client/chat/ChatHistoryList.tsx +7 -404
- package/corpus/core/src/coding-tools/index.ts +27 -8
- package/corpus/core/src/embeddings/index.ts +233 -0
- package/corpus/core/src/index.ts +2 -0
- package/corpus/core/src/integrations/index.ts +10 -0
- package/corpus/core/src/integrations/slack-oauth.ts +1 -0
- package/corpus/core/src/integrations/webhook-delivery.ts +55 -0
- package/corpus/core/src/notifications/channels.ts +4 -10
- package/corpus/core/src/provider-api/actions/custom-provider-registration.ts +197 -0
- package/corpus/core/src/provider-api/actions/delete-staged-dataset.ts +3 -42
- package/corpus/core/src/provider-api/actions/list-staged-datasets.ts +3 -45
- package/corpus/core/src/provider-api/actions/provider-api-audit.ts +88 -0
- package/corpus/core/src/provider-api/actions/provider-api.ts +460 -0
- package/corpus/core/src/provider-api/actions/query-staged-dataset.ts +3 -140
- package/corpus/core/src/provider-api/actions/staged-datasets.ts +359 -0
- package/corpus/core/src/provider-api/gong.ts +108 -0
- package/corpus/core/src/scripts/docs/source-search.ts +2 -1
- package/corpus/core/src/search/index.ts +413 -0
- package/corpus/core/src/server/google-oauth-credentials.ts +80 -3
- package/corpus/core/src/server/index.ts +6 -0
- package/corpus/core/src/styles/chat-history-list.css +1 -313
- package/corpus/core/src/templates/default/.agents/skills/actions/SKILL.md +32 -12
- package/corpus/core/src/templates/default/.agents/skills/agent-native-docs/SKILL.md +10 -0
- package/corpus/core/src/templates/default/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/core/src/templates/default/.agents/skills/integration-webhooks/SKILL.md +323 -0
- package/corpus/core/src/templates/default/.agents/skills/onboarding/SKILL.md +56 -0
- package/corpus/core/src/templates/default/.agents/skills/secrets/SKILL.md +273 -0
- package/corpus/core/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/corpus/core/src/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/core/src/templates/default/AGENTS.md +25 -18
- package/corpus/core/src/templates/headless/.agents/skills/actions/SKILL.md +512 -0
- package/corpus/core/src/templates/headless/.agents/skills/agent-native-docs/SKILL.md +10 -0
- package/corpus/core/src/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/core/src/templates/headless/.agents/skills/integration-webhooks/SKILL.md +323 -0
- package/corpus/core/src/templates/headless/.agents/skills/secrets/SKILL.md +273 -0
- package/corpus/core/src/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/core/src/templates/headless/AGENTS.md +7 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/actions/SKILL.md +32 -12
- package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +10 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/corpus/core/src/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/core/src/templates/workspace-core/AGENTS.md +4 -0
- package/corpus/core/src/templates/workspace-root/AGENTS.md +4 -0
- package/corpus/templates/analytics/.agents/skills/actions/SKILL.md +32 -12
- package/corpus/templates/analytics/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/templates/analytics/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/corpus/templates/analytics/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/templates/analytics/actions/delete-staged-dataset.ts +3 -23
- package/corpus/templates/analytics/actions/list-staged-datasets.ts +3 -27
- package/corpus/templates/analytics/actions/provider-api-catalog.ts +16 -19
- package/corpus/templates/analytics/actions/provider-api-docs.ts +3 -5
- package/corpus/templates/analytics/actions/provider-api-request.ts +162 -185
- package/corpus/templates/analytics/actions/query-staged-dataset.ts +3 -47
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +52 -161
- package/corpus/templates/assets/.agents/skills/actions/SKILL.md +32 -12
- package/corpus/templates/assets/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/templates/assets/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/corpus/templates/assets/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/templates/assets/app/components/layout/Sidebar.tsx +63 -160
- package/corpus/templates/brain/.agents/skills/actions/SKILL.md +32 -12
- package/corpus/templates/brain/.agents/skills/brain/RUNBOOK.md +48 -5
- package/corpus/templates/brain/.agents/skills/brain/SKILL.md +46 -14
- package/corpus/templates/brain/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/templates/brain/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/corpus/templates/brain/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/templates/brain/README.md +34 -3
- package/corpus/templates/brain/actions/_schemas.ts +13 -7
- package/corpus/templates/brain/actions/approve-proposal.ts +2 -0
- package/corpus/templates/brain/actions/claim-distillation.ts +24 -27
- package/corpus/templates/brain/actions/create-source.ts +1 -1
- package/corpus/templates/brain/actions/delete-staged-dataset.ts +3 -24
- package/corpus/templates/brain/actions/get-knowledge.ts +6 -2
- package/corpus/templates/brain/actions/get-pilot-report.ts +44 -8
- package/corpus/templates/brain/actions/import-capture.ts +21 -9
- package/corpus/templates/brain/actions/import-transcript.ts +42 -14
- package/corpus/templates/brain/actions/list-captures.ts +10 -1
- package/corpus/templates/brain/actions/list-distillation-queue.ts +39 -14
- package/corpus/templates/brain/actions/list-projects.ts +51 -0
- package/corpus/templates/brain/actions/list-proposals.ts +80 -4
- package/corpus/templates/brain/actions/list-sources.ts +17 -3
- package/corpus/templates/brain/actions/list-staged-datasets.ts +3 -28
- package/corpus/templates/brain/actions/manage-project.ts +118 -0
- package/corpus/templates/brain/actions/mark-capture-distilled.ts +68 -20
- package/corpus/templates/brain/actions/navigate.ts +1 -0
- package/corpus/templates/brain/actions/provider-api-catalog.ts +5 -11
- package/corpus/templates/brain/actions/provider-api-docs.ts +3 -5
- package/corpus/templates/brain/actions/provider-api-request.ts +3 -37
- package/corpus/templates/brain/actions/query-staged-dataset.ts +3 -48
- package/corpus/templates/brain/actions/reject-proposal.ts +6 -1
- package/corpus/templates/brain/actions/resanitize-captures.ts +159 -33
- package/corpus/templates/brain/actions/review-proposal.ts +2 -0
- package/corpus/templates/brain/actions/search-everything.ts +10 -1
- package/corpus/templates/brain/actions/search-knowledge.ts +1 -1
- package/corpus/templates/brain/actions/set-settings.ts +36 -1
- package/corpus/templates/brain/actions/update-proposal.ts +2 -0
- package/corpus/templates/brain/actions/update-source.ts +5 -1
- package/corpus/templates/brain/app/components/layout/Sidebar.tsx +48 -154
- package/corpus/templates/brain/app/hooks/use-distillation-bridge.ts +18 -9
- package/corpus/templates/brain/app/hooks/use-navigation-state.ts +3 -0
- package/corpus/templates/brain/app/i18n-data.ts +731 -2
- package/corpus/templates/brain/app/lib/brain.ts +88 -1
- package/corpus/templates/brain/app/lib/ingest-handoff.ts +35 -0
- package/corpus/templates/brain/app/routes/ops.tsx +47 -0
- package/corpus/templates/brain/app/routes/review.tsx +41 -2
- package/corpus/templates/brain/app/routes/search.tsx +33 -2
- package/corpus/templates/brain/app/routes/settings.tsx +158 -0
- package/corpus/templates/brain/app/routes/sources.tsx +31 -0
- package/corpus/templates/brain/changelog/2026-07-19-added-private-source-safe-semantic-search.md +6 -0
- package/corpus/templates/brain/changelog/2026-07-19-slack-backfills-can-now-join-configured-public-channels-befo.md +6 -0
- package/corpus/templates/brain/changelog/2026-07-19-slack-backfills-now-continue-across-the-configured-number-of.md +6 -0
- package/corpus/templates/brain/changelog/2026-07-19-slack-backfills-now-start-with-a-safe-four-week-window-and-r.md +6 -0
- package/corpus/templates/brain/jobs/process-ingest-queue.ts +270 -36
- package/corpus/templates/brain/package.json +1 -0
- package/corpus/templates/brain/server/db/index.ts +18 -0
- package/corpus/templates/brain/server/db/schema.ts +197 -1
- package/corpus/templates/brain/server/jobs/distillation-queue.ts +12 -5
- package/corpus/templates/brain/server/lib/audiences.ts +708 -0
- package/corpus/templates/brain/server/lib/brain-health.ts +251 -38
- package/corpus/templates/brain/server/lib/brain.ts +877 -50
- package/corpus/templates/brain/server/lib/capture-sanitization.ts +217 -53
- package/corpus/templates/brain/server/lib/connectors.ts +609 -72
- package/corpus/templates/brain/server/lib/demo.ts +17 -4
- package/corpus/templates/brain/server/lib/hybrid-search.ts +363 -0
- package/corpus/templates/brain/server/lib/ingest-queue.ts +104 -0
- package/corpus/templates/brain/server/lib/privacy-readiness.ts +24 -0
- package/corpus/templates/brain/server/lib/search-index-contracts.ts +72 -0
- package/corpus/templates/brain/server/lib/search-index.ts +714 -0
- package/corpus/templates/brain/server/lib/search.ts +120 -4
- package/corpus/templates/brain/server/lib/sensitivity-policy.ts +174 -0
- package/corpus/templates/brain/server/lib/slack-channel-membership.ts +44 -0
- package/corpus/templates/brain/server/lib/slack-events.ts +281 -0
- package/corpus/templates/brain/server/onboarding.ts +29 -0
- package/corpus/templates/brain/server/plugins/db.ts +204 -0
- package/corpus/templates/brain/server/register-secrets.ts +46 -0
- package/corpus/templates/brain/server/routes/api/_agent-native/brain/ingest.post.ts +36 -16
- package/corpus/templates/brain/server/routes/api/_agent-native/brain/slack-events.post.ts +28 -0
- package/corpus/templates/brain/shared/slack-source-config.ts +60 -0
- package/corpus/templates/brain/shared/types.ts +10 -0
- package/corpus/templates/calendar/.agents/skills/actions/SKILL.md +32 -12
- package/corpus/templates/calendar/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/templates/calendar/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/corpus/templates/calendar/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/templates/calendar/actions/delete-staged-dataset.ts +3 -24
- package/corpus/templates/calendar/actions/list-staged-datasets.ts +3 -28
- package/corpus/templates/calendar/actions/provider-api-catalog.ts +5 -11
- package/corpus/templates/calendar/actions/provider-api-docs.ts +3 -5
- package/corpus/templates/calendar/actions/provider-api-request.ts +3 -37
- package/corpus/templates/calendar/actions/query-staged-dataset.ts +3 -48
- package/corpus/templates/calendar/server/handlers/gong.ts +6 -61
- package/corpus/templates/calendar/server/handlers/google-auth.ts +10 -8
- package/corpus/templates/calendar/server/lib/google-calendar.ts +7 -45
- package/corpus/templates/chat/.agents/skills/actions/SKILL.md +32 -12
- package/corpus/templates/chat/.agents/skills/agent-native-docs/SKILL.md +10 -0
- package/corpus/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/templates/chat/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/corpus/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/templates/chat/AGENTS.md +5 -2
- package/corpus/templates/chat/app/components/layout/Sidebar.tsx +51 -157
- package/corpus/templates/clips/.agents/skills/actions/SKILL.md +32 -12
- package/corpus/templates/clips/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/templates/clips/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/corpus/templates/clips/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/templates/clips/AGENTS.md +11 -0
- package/corpus/templates/clips/actions/export-to-brain.ts +505 -171
- package/corpus/templates/clips/changelog/2026-07-19-ready-clips-transcripts-can-be-backfilled-to-brain-for-a-bou.md +6 -0
- package/corpus/templates/clips/server/lib/calendar-event-meetings.ts +1 -1
- package/corpus/templates/clips/server/lib/google-calendar-client.ts +12 -22
- package/corpus/templates/clips/server/lib/google-calendar-oauth.ts +9 -6
- package/corpus/templates/clips/server/lib/slack-oauth.ts +12 -47
- package/corpus/templates/clips/server/routes/_agent-native/google/auth-url.get.ts +2 -6
- package/corpus/templates/clips/server/routes/api/auth/google-calendar.get.ts +4 -4
- package/corpus/templates/content/.agents/skills/actions/SKILL.md +32 -12
- package/corpus/templates/content/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/templates/content/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/corpus/templates/content/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/templates/content/actions/delete-staged-dataset.ts +3 -24
- package/corpus/templates/content/actions/list-staged-datasets.ts +3 -28
- package/corpus/templates/content/actions/provider-api-catalog.ts +5 -11
- package/corpus/templates/content/actions/provider-api-docs.ts +3 -5
- package/corpus/templates/content/actions/provider-api-request.ts +3 -37
- package/corpus/templates/content/actions/query-staged-dataset.ts +3 -48
- package/corpus/templates/design/.agents/skills/actions/SKILL.md +32 -12
- package/corpus/templates/design/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/templates/design/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/corpus/templates/design/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/templates/design/actions/delete-staged-dataset.ts +4 -23
- package/corpus/templates/design/actions/list-staged-datasets.ts +4 -27
- package/corpus/templates/design/actions/provider-api-catalog.ts +15 -18
- package/corpus/templates/design/actions/provider-api-docs.ts +57 -48
- package/corpus/templates/design/actions/provider-api-request.ts +140 -164
- package/corpus/templates/design/actions/query-staged-dataset.ts +4 -47
- package/corpus/templates/dispatch/.agents/skills/actions/SKILL.md +32 -12
- package/corpus/templates/dispatch/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/templates/dispatch/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/corpus/templates/dispatch/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/templates/dispatch/actions/delete-staged-dataset.ts +4 -23
- package/corpus/templates/dispatch/actions/list-staged-datasets.ts +4 -30
- package/corpus/templates/dispatch/actions/provider-api-catalog.ts +15 -18
- package/corpus/templates/dispatch/actions/provider-api-docs.ts +57 -48
- package/corpus/templates/dispatch/actions/provider-api-request.ts +138 -163
- package/corpus/templates/dispatch/actions/query-staged-dataset.ts +4 -47
- package/corpus/templates/forms/.agents/skills/actions/SKILL.md +32 -12
- package/corpus/templates/forms/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/templates/forms/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/corpus/templates/forms/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/templates/forms/server/lib/integrations.ts +23 -22
- package/corpus/templates/macros/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/templates/macros/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/templates/mail/.agents/skills/actions/SKILL.md +32 -12
- package/corpus/templates/mail/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/templates/mail/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/corpus/templates/mail/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/templates/mail/actions/delete-staged-dataset.ts +4 -23
- package/corpus/templates/mail/actions/list-staged-datasets.ts +4 -27
- package/corpus/templates/mail/actions/provider-api-catalog.ts +15 -18
- package/corpus/templates/mail/actions/provider-api-docs.ts +57 -48
- package/corpus/templates/mail/actions/provider-api-request.ts +146 -173
- package/corpus/templates/mail/actions/query-staged-dataset.ts +4 -47
- package/corpus/templates/mail/server/handlers/gong.ts +6 -61
- package/corpus/templates/mail/server/lib/google-auth.ts +10 -13
- package/corpus/templates/plan/.agents/skills/actions/SKILL.md +32 -12
- package/corpus/templates/plan/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/templates/plan/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/corpus/templates/plan/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/templates/plan/app/components/layout/Sidebar.tsx +47 -156
- package/corpus/templates/slides/.agents/skills/actions/SKILL.md +32 -12
- package/corpus/templates/slides/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/templates/slides/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/corpus/templates/slides/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/templates/slides/actions/delete-staged-dataset.ts +4 -23
- package/corpus/templates/slides/actions/list-staged-datasets.ts +4 -27
- package/corpus/templates/slides/actions/provider-api-catalog.ts +15 -18
- package/corpus/templates/slides/actions/provider-api-docs.ts +57 -48
- package/corpus/templates/slides/actions/provider-api-request.ts +145 -172
- package/corpus/templates/slides/actions/query-staged-dataset.ts +4 -47
- package/corpus/templates/slides/server/lib/google-docs-oauth.ts +11 -36
- package/corpus/templates/tasks/.agents/skills/actions/SKILL.md +32 -12
- package/corpus/templates/tasks/.agents/skills/agent-native-docs/SKILL.md +10 -0
- package/corpus/templates/tasks/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/templates/tasks/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/corpus/templates/tasks/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/toolkit/CHANGELOG.md +125 -0
- package/corpus/toolkit/README.md +60 -0
- package/corpus/toolkit/export-snapshot.json +35 -0
- package/corpus/toolkit/migration-manifest.json +4 -0
- package/corpus/toolkit/package.json +281 -0
- package/corpus/toolkit/scripts/finalize-build.mjs +55 -0
- package/corpus/toolkit/src/app-shell/header-actions.tsx +84 -0
- package/corpus/toolkit/src/app-shell/index.ts +1 -0
- package/corpus/toolkit/src/chat-history/ChatHistoryList.tsx +469 -0
- package/corpus/toolkit/src/chat-history/index.ts +7 -0
- package/corpus/toolkit/src/chat-history.css +314 -0
- package/corpus/toolkit/src/collab-ui/AgentPresenceChip.tsx +69 -0
- package/corpus/toolkit/src/collab-ui/LiveCursorOverlay.tsx +241 -0
- package/corpus/toolkit/src/collab-ui/PresenceBar.tsx +346 -0
- package/corpus/toolkit/src/collab-ui/RecentEditHighlights.tsx +225 -0
- package/corpus/toolkit/src/collab-ui/RemoteSelectionRings.tsx +227 -0
- package/corpus/toolkit/src/collab-ui/agent-identity.ts +16 -0
- package/corpus/toolkit/src/collab-ui/index.ts +39 -0
- package/corpus/toolkit/src/collab-ui/lead-client.ts +32 -0
- package/corpus/toolkit/src/collab-ui/types.ts +96 -0
- package/corpus/toolkit/src/composer/AgentComposerFrame.tsx +59 -0
- package/corpus/toolkit/src/composer/ComposerPlusMenu.tsx +983 -0
- package/corpus/toolkit/src/composer/MentionPopover.tsx +412 -0
- package/corpus/toolkit/src/composer/PastedTextChip.tsx +150 -0
- package/corpus/toolkit/src/composer/PromptComposer.tsx +718 -0
- package/corpus/toolkit/src/composer/RealtimeVoiceMode.tsx +856 -0
- package/corpus/toolkit/src/composer/TiptapComposer.tsx +2936 -0
- package/corpus/toolkit/src/composer/VoiceButton.tsx +255 -0
- package/corpus/toolkit/src/composer/asset-picker-url.ts +80 -0
- package/corpus/toolkit/src/composer/attachment-accept.ts +71 -0
- package/corpus/toolkit/src/composer/draft-key.ts +7 -0
- package/corpus/toolkit/src/composer/extensions/FileReference.tsx +55 -0
- package/corpus/toolkit/src/composer/extensions/MentionReference.tsx +93 -0
- package/corpus/toolkit/src/composer/extensions/SkillReference.tsx +56 -0
- package/corpus/toolkit/src/composer/index.ts +79 -0
- package/corpus/toolkit/src/composer/pasted-text.ts +160 -0
- package/corpus/toolkit/src/composer/prompt-attachments.ts +93 -0
- package/corpus/toolkit/src/composer/realtime-voice-audio-level.ts +64 -0
- package/corpus/toolkit/src/composer/realtime-voice-transcript.ts +134 -0
- package/corpus/toolkit/src/composer/runtime-adapters.tsx +343 -0
- package/corpus/toolkit/src/composer/types.ts +66 -0
- package/corpus/toolkit/src/composer/use-file-search.ts +64 -0
- package/corpus/toolkit/src/composer/use-mention-search.ts +90 -0
- package/corpus/toolkit/src/composer/use-skills.ts +45 -0
- package/corpus/toolkit/src/composer/useRealtimeVoiceMode.tsx +2117 -0
- package/corpus/toolkit/src/composer/useVoiceDictation.ts +1191 -0
- package/corpus/toolkit/src/context-ui/ContextMeter.tsx +101 -0
- package/corpus/toolkit/src/context-ui/ContextSegmentRow.tsx +184 -0
- package/corpus/toolkit/src/context-ui/ContextTreemap.tsx +125 -0
- package/corpus/toolkit/src/context-ui/ContextXRayPanel.tsx +377 -0
- package/corpus/toolkit/src/context-ui/format.ts +42 -0
- package/corpus/toolkit/src/context-ui/index.ts +15 -0
- package/corpus/toolkit/src/context-ui/types.ts +43 -0
- package/corpus/toolkit/src/design-tweaks/index.ts +1 -0
- package/corpus/toolkit/src/design-tweaks/visual-style-controls.tsx +1084 -0
- package/corpus/toolkit/src/editor/BubbleToolbar.tsx +253 -0
- package/corpus/toolkit/src/editor/CodeBlockNode.tsx +254 -0
- package/corpus/toolkit/src/editor/DragHandle.ts +1437 -0
- package/corpus/toolkit/src/editor/ImageExtension.ts +306 -0
- package/corpus/toolkit/src/editor/RegistryBlockContext.tsx +107 -0
- package/corpus/toolkit/src/editor/RegistryBlockNode.tsx +652 -0
- package/corpus/toolkit/src/editor/RichMarkdownEditor.tsx +81 -0
- package/corpus/toolkit/src/editor/RunId.ts +61 -0
- package/corpus/toolkit/src/editor/SharedRichEditor.tsx +321 -0
- package/corpus/toolkit/src/editor/SlashCommandMenu.tsx +310 -0
- package/corpus/toolkit/src/editor/extensions.ts +402 -0
- package/corpus/toolkit/src/editor/gfmDoc.ts +92 -0
- package/corpus/toolkit/src/editor/index.ts +93 -0
- package/corpus/toolkit/src/editor/registrySlashCommands.ts +131 -0
- package/corpus/toolkit/src/editor/surgical-apply.ts +192 -0
- package/corpus/toolkit/src/editor/useCollabReconcile.ts +589 -0
- package/corpus/toolkit/src/editor.css +510 -0
- package/corpus/toolkit/src/hooks/index.ts +2 -0
- package/corpus/toolkit/src/hooks/use-mobile.tsx +21 -0
- package/corpus/toolkit/src/hooks/use-toast.ts +188 -0
- package/corpus/toolkit/src/index.ts +8 -0
- package/corpus/toolkit/src/onboarding/index.ts +1 -0
- package/corpus/toolkit/src/provider.tsx +47 -0
- package/corpus/toolkit/src/sharing/VisibilityBadge.tsx +37 -0
- package/corpus/toolkit/src/sharing/index.ts +4 -0
- package/corpus/toolkit/src/styles.css +21 -0
- package/corpus/toolkit/src/ui/accordion.tsx +56 -0
- package/corpus/toolkit/src/ui/alert-dialog.tsx +141 -0
- package/corpus/toolkit/src/ui/alert.tsx +59 -0
- package/corpus/toolkit/src/ui/aspect-ratio.tsx +5 -0
- package/corpus/toolkit/src/ui/avatar.tsx +48 -0
- package/corpus/toolkit/src/ui/badge.tsx +37 -0
- package/corpus/toolkit/src/ui/breadcrumb.tsx +115 -0
- package/corpus/toolkit/src/ui/button.tsx +78 -0
- package/corpus/toolkit/src/ui/calendar.tsx +214 -0
- package/corpus/toolkit/src/ui/card.tsx +86 -0
- package/corpus/toolkit/src/ui/carousel.tsx +260 -0
- package/corpus/toolkit/src/ui/chart.tsx +375 -0
- package/corpus/toolkit/src/ui/checkbox.tsx +28 -0
- package/corpus/toolkit/src/ui/collapsible.tsx +9 -0
- package/corpus/toolkit/src/ui/command.tsx +174 -0
- package/corpus/toolkit/src/ui/context-menu.tsx +202 -0
- package/corpus/toolkit/src/ui/date-picker.tsx +64 -0
- package/corpus/toolkit/src/ui/dialog.tsx +146 -0
- package/corpus/toolkit/src/ui/drawer.tsx +126 -0
- package/corpus/toolkit/src/ui/dropdown-menu.tsx +218 -0
- package/corpus/toolkit/src/ui/form.tsx +177 -0
- package/corpus/toolkit/src/ui/hover-card.tsx +27 -0
- package/corpus/toolkit/src/ui/index.ts +52 -0
- package/corpus/toolkit/src/ui/input-otp.tsx +69 -0
- package/corpus/toolkit/src/ui/input.tsx +22 -0
- package/corpus/toolkit/src/ui/label.tsx +24 -0
- package/corpus/toolkit/src/ui/logo.tsx +36 -0
- package/corpus/toolkit/src/ui/menubar.tsx +235 -0
- package/corpus/toolkit/src/ui/navigation-menu.tsx +128 -0
- package/corpus/toolkit/src/ui/pagination.tsx +121 -0
- package/corpus/toolkit/src/ui/popover.tsx +44 -0
- package/corpus/toolkit/src/ui/progress.tsx +26 -0
- package/corpus/toolkit/src/ui/radio-group.tsx +42 -0
- package/corpus/toolkit/src/ui/resizable.tsx +43 -0
- package/corpus/toolkit/src/ui/scroll-area.tsx +46 -0
- package/corpus/toolkit/src/ui/select.tsx +158 -0
- package/corpus/toolkit/src/ui/separator.tsx +29 -0
- package/corpus/toolkit/src/ui/sheet.tsx +160 -0
- package/corpus/toolkit/src/ui/sidebar.tsx +777 -0
- package/corpus/toolkit/src/ui/skeleton.tsx +18 -0
- package/corpus/toolkit/src/ui/slider.tsx +26 -0
- package/corpus/toolkit/src/ui/sonner.tsx +58 -0
- package/corpus/toolkit/src/ui/spinner.tsx +17 -0
- package/corpus/toolkit/src/ui/switch.tsx +27 -0
- package/corpus/toolkit/src/ui/table.tsx +117 -0
- package/corpus/toolkit/src/ui/tabs.tsx +53 -0
- package/corpus/toolkit/src/ui/textarea.tsx +23 -0
- package/corpus/toolkit/src/ui/toast.tsx +127 -0
- package/corpus/toolkit/src/ui/toaster.tsx +33 -0
- package/corpus/toolkit/src/ui/toggle-group.tsx +59 -0
- package/corpus/toolkit/src/ui/toggle.tsx +43 -0
- package/corpus/toolkit/src/ui/tooltip.tsx +53 -0
- package/corpus/toolkit/src/ui/use-toast.ts +3 -0
- package/corpus/toolkit/src/utils.ts +8 -0
- package/corpus/toolkit/tsconfig.json +23 -0
- package/dist/cli/atomic-json-file.d.ts +30 -0
- package/dist/cli/atomic-json-file.d.ts.map +1 -0
- package/dist/cli/atomic-json-file.js +240 -0
- package/dist/cli/atomic-json-file.js.map +1 -0
- package/dist/cli/claude-code-participant.d.ts +77 -0
- package/dist/cli/claude-code-participant.d.ts.map +1 -0
- package/dist/cli/claude-code-participant.js +355 -0
- package/dist/cli/claude-code-participant.js.map +1 -0
- package/dist/cli/code-agent-executor.d.ts +8 -9
- package/dist/cli/code-agent-executor.d.ts.map +1 -1
- package/dist/cli/code-agent-executor.js +27 -13
- package/dist/cli/code-agent-executor.js.map +1 -1
- package/dist/cli/code-agent-runs.concurrent-worker.d.ts +2 -0
- package/dist/cli/code-agent-runs.concurrent-worker.d.ts.map +1 -0
- package/dist/cli/code-agent-runs.concurrent-worker.js +32 -0
- package/dist/cli/code-agent-runs.concurrent-worker.js.map +1 -0
- package/dist/cli/code-agent-runs.d.ts +5 -0
- package/dist/cli/code-agent-runs.d.ts.map +1 -1
- package/dist/cli/code-agent-runs.js +51 -33
- package/dist/cli/code-agent-runs.js.map +1 -1
- package/dist/cli/codex-cli-participant.d.ts +77 -0
- package/dist/cli/codex-cli-participant.d.ts.map +1 -0
- package/dist/cli/codex-cli-participant.js +354 -0
- package/dist/cli/codex-cli-participant.js.map +1 -0
- package/dist/cli/multi-frontier-runs.d.ts +246 -0
- package/dist/cli/multi-frontier-runs.d.ts.map +1 -0
- package/dist/cli/multi-frontier-runs.js +1247 -0
- package/dist/cli/multi-frontier-runs.js.map +1 -0
- package/dist/client/chat/ChatHistoryList.d.ts +1 -87
- package/dist/client/chat/ChatHistoryList.d.ts.map +1 -1
- package/dist/client/chat/ChatHistoryList.js +1 -82
- package/dist/client/chat/ChatHistoryList.js.map +1 -1
- package/dist/coding-tools/index.d.ts +1 -0
- package/dist/coding-tools/index.d.ts.map +1 -1
- package/dist/coding-tools/index.js +25 -7
- package/dist/coding-tools/index.js.map +1 -1
- package/dist/collab/awareness.d.ts +2 -2
- package/dist/collab/awareness.d.ts.map +1 -1
- package/dist/embeddings/index.d.ts +24 -0
- package/dist/embeddings/index.d.ts.map +1 -0
- package/dist/embeddings/index.js +172 -0
- package/dist/embeddings/index.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/integrations/index.d.ts +2 -1
- package/dist/integrations/index.d.ts.map +1 -1
- package/dist/integrations/index.js +2 -1
- package/dist/integrations/index.js.map +1 -1
- package/dist/integrations/slack-manifest.d.ts +1 -1
- package/dist/integrations/slack-oauth.d.ts +1 -1
- package/dist/integrations/slack-oauth.d.ts.map +1 -1
- package/dist/integrations/slack-oauth.js +1 -0
- package/dist/integrations/slack-oauth.js.map +1 -1
- package/dist/integrations/webhook-delivery.d.ts +23 -0
- package/dist/integrations/webhook-delivery.d.ts.map +1 -0
- package/dist/integrations/webhook-delivery.js +32 -0
- package/dist/integrations/webhook-delivery.js.map +1 -0
- package/dist/notifications/channels.d.ts.map +1 -1
- package/dist/notifications/channels.js +4 -9
- package/dist/notifications/channels.js.map +1 -1
- package/dist/notifications/routes.d.ts +3 -3
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/actions/custom-provider-registration.d.ts +136 -0
- package/dist/provider-api/actions/custom-provider-registration.d.ts.map +1 -0
- package/dist/provider-api/actions/custom-provider-registration.js +154 -0
- package/dist/provider-api/actions/custom-provider-registration.js.map +1 -0
- package/dist/provider-api/actions/delete-staged-dataset.d.ts +1 -1
- package/dist/provider-api/actions/delete-staged-dataset.d.ts.map +1 -1
- package/dist/provider-api/actions/delete-staged-dataset.js +3 -34
- package/dist/provider-api/actions/delete-staged-dataset.js.map +1 -1
- package/dist/provider-api/actions/list-staged-datasets.d.ts +2 -3
- package/dist/provider-api/actions/list-staged-datasets.d.ts.map +1 -1
- package/dist/provider-api/actions/list-staged-datasets.js +3 -40
- package/dist/provider-api/actions/list-staged-datasets.js.map +1 -1
- package/dist/provider-api/actions/provider-api-audit.d.ts +7 -0
- package/dist/provider-api/actions/provider-api-audit.d.ts.map +1 -0
- package/dist/provider-api/actions/provider-api-audit.js +74 -0
- package/dist/provider-api/actions/provider-api-audit.js.map +1 -0
- package/dist/provider-api/actions/provider-api.d.ts +370 -0
- package/dist/provider-api/actions/provider-api.d.ts.map +1 -0
- package/dist/provider-api/actions/provider-api.js +280 -0
- package/dist/provider-api/actions/provider-api.js.map +1 -0
- package/dist/provider-api/actions/query-staged-dataset.d.ts +1 -1
- package/dist/provider-api/actions/query-staged-dataset.d.ts.map +1 -1
- package/dist/provider-api/actions/query-staged-dataset.js +3 -116
- package/dist/provider-api/actions/query-staged-dataset.js.map +1 -1
- package/dist/provider-api/actions/staged-datasets.d.ts +190 -0
- package/dist/provider-api/actions/staged-datasets.d.ts.map +1 -0
- package/dist/provider-api/actions/staged-datasets.js +210 -0
- package/dist/provider-api/actions/staged-datasets.js.map +1 -0
- package/dist/provider-api/gong.d.ts +44 -0
- package/dist/provider-api/gong.d.ts.map +1 -0
- package/dist/provider-api/gong.js +56 -0
- package/dist/provider-api/gong.js.map +1 -0
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/scripts/docs/source-search.d.ts +2 -1
- package/dist/scripts/docs/source-search.d.ts.map +1 -1
- package/dist/scripts/docs/source-search.js +2 -1
- package/dist/scripts/docs/source-search.js.map +1 -1
- package/dist/search/index.d.ts +88 -0
- package/dist/search/index.d.ts.map +1 -0
- package/dist/search/index.js +267 -0
- package/dist/search/index.js.map +1 -0
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/google-oauth-credentials.d.ts +35 -0
- package/dist/server/google-oauth-credentials.d.ts.map +1 -1
- package/dist/server/google-oauth-credentials.js +48 -2
- package/dist/server/google-oauth-credentials.js.map +1 -1
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/styles/chat-history-list.css +1 -313
- package/dist/templates/chat/.agents/skills/actions/SKILL.md +32 -12
- package/dist/templates/chat/.agents/skills/agent-native-docs/SKILL.md +10 -0
- package/dist/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/dist/templates/chat/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/dist/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/dist/templates/chat/AGENTS.md +5 -2
- package/dist/templates/chat/app/components/layout/Sidebar.tsx +51 -157
- package/dist/templates/default/.agents/skills/actions/SKILL.md +32 -12
- package/dist/templates/default/.agents/skills/agent-native-docs/SKILL.md +10 -0
- package/dist/templates/default/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/dist/templates/default/.agents/skills/integration-webhooks/SKILL.md +323 -0
- package/dist/templates/default/.agents/skills/onboarding/SKILL.md +56 -0
- package/dist/templates/default/.agents/skills/secrets/SKILL.md +273 -0
- package/dist/templates/default/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/dist/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/dist/templates/default/AGENTS.md +25 -18
- package/dist/templates/headless/.agents/skills/actions/SKILL.md +512 -0
- package/dist/templates/headless/.agents/skills/agent-native-docs/SKILL.md +10 -0
- package/dist/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/dist/templates/headless/.agents/skills/integration-webhooks/SKILL.md +323 -0
- package/dist/templates/headless/.agents/skills/secrets/SKILL.md +273 -0
- package/dist/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/dist/templates/headless/AGENTS.md +7 -0
- package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +32 -12
- package/dist/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +10 -0
- package/dist/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/dist/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/dist/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/dist/templates/workspace-core/AGENTS.md +4 -0
- package/dist/templates/workspace-root/AGENTS.md +4 -0
- package/docs/AGENTS.md +7 -0
- package/docs/content/integrations.mdx +63 -2
- package/docs/design/provider-integration-authority.md +117 -0
- package/package.json +9 -2
- package/src/templates/chat/.agents/skills/actions/SKILL.md +32 -12
- package/src/templates/chat/.agents/skills/agent-native-docs/SKILL.md +10 -0
- package/src/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/src/templates/chat/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/src/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/src/templates/chat/AGENTS.md +5 -2
- package/src/templates/chat/app/components/layout/Sidebar.tsx +51 -157
- package/src/templates/default/.agents/skills/actions/SKILL.md +32 -12
- package/src/templates/default/.agents/skills/agent-native-docs/SKILL.md +10 -0
- package/src/templates/default/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/src/templates/default/.agents/skills/integration-webhooks/SKILL.md +323 -0
- package/src/templates/default/.agents/skills/onboarding/SKILL.md +56 -0
- package/src/templates/default/.agents/skills/secrets/SKILL.md +273 -0
- package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/src/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/src/templates/default/AGENTS.md +25 -18
- package/src/templates/headless/.agents/skills/actions/SKILL.md +512 -0
- package/src/templates/headless/.agents/skills/agent-native-docs/SKILL.md +10 -0
- package/src/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/src/templates/headless/.agents/skills/integration-webhooks/SKILL.md +323 -0
- package/src/templates/headless/.agents/skills/secrets/SKILL.md +273 -0
- package/src/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/src/templates/headless/AGENTS.md +7 -0
- package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +32 -12
- package/src/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +10 -0
- package/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/src/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/src/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/src/templates/workspace-core/AGENTS.md +4 -0
- package/src/templates/workspace-root/AGENTS.md +4 -0
|
@@ -12,31 +12,24 @@ import { useT } from "@agent-native/core/client/i18n";
|
|
|
12
12
|
import { OrgSwitcher } from "@agent-native/core/client/org";
|
|
13
13
|
import { FeedbackButton } from "@agent-native/core/client/ui";
|
|
14
14
|
import {
|
|
15
|
-
|
|
15
|
+
ChatHistoryList,
|
|
16
|
+
type ChatHistoryItem,
|
|
17
|
+
} from "@agent-native/toolkit/chat-history";
|
|
18
|
+
import {
|
|
16
19
|
IconBrain,
|
|
17
20
|
IconClipboardList,
|
|
18
|
-
IconDots,
|
|
19
|
-
IconEdit,
|
|
20
21
|
IconLayoutSidebarLeftCollapse,
|
|
21
22
|
IconLayoutSidebarLeftExpand,
|
|
22
23
|
IconLayoutGrid,
|
|
23
24
|
IconPhotoPlus,
|
|
24
|
-
IconPin,
|
|
25
25
|
IconPlus,
|
|
26
26
|
IconSettings,
|
|
27
27
|
IconShare3,
|
|
28
28
|
} from "@tabler/icons-react";
|
|
29
|
-
import { useEffect, useMemo,
|
|
29
|
+
import { useEffect, useMemo, useState } from "react";
|
|
30
30
|
import { Link, useLocation, useNavigate } from "react-router";
|
|
31
31
|
import { toast } from "sonner";
|
|
32
32
|
|
|
33
|
-
import {
|
|
34
|
-
DropdownMenu,
|
|
35
|
-
DropdownMenuContent,
|
|
36
|
-
DropdownMenuItem,
|
|
37
|
-
DropdownMenuTrigger,
|
|
38
|
-
} from "@/components/ui/dropdown-menu";
|
|
39
|
-
import { Input } from "@/components/ui/input";
|
|
40
33
|
import {
|
|
41
34
|
Tooltip,
|
|
42
35
|
TooltipContent,
|
|
@@ -136,10 +129,6 @@ function AssetsChatsSection() {
|
|
|
136
129
|
autoCreate: false,
|
|
137
130
|
restoreActiveThread: false,
|
|
138
131
|
});
|
|
139
|
-
const [renamingThreadId, setRenamingThreadId] = useState<string | null>(null);
|
|
140
|
-
const [renameDraft, setRenameDraft] = useState("");
|
|
141
|
-
const renameInputRef = useRef<HTMLInputElement | null>(null);
|
|
142
|
-
const committingRenameRef = useRef(false);
|
|
143
132
|
|
|
144
133
|
const visibleThreads = useMemo(
|
|
145
134
|
() =>
|
|
@@ -149,6 +138,23 @@ function AssetsChatsSection() {
|
|
|
149
138
|
.slice(0, 10),
|
|
150
139
|
[threads],
|
|
151
140
|
);
|
|
141
|
+
const displayedActiveThreadId =
|
|
142
|
+
threadIdFromPath(location.pathname) ??
|
|
143
|
+
(location.pathname === "/" ? null : activeThreadId);
|
|
144
|
+
const chatItems = useMemo<ChatHistoryItem[]>(
|
|
145
|
+
() =>
|
|
146
|
+
visibleThreads.map((thread) => ({
|
|
147
|
+
id: thread.id,
|
|
148
|
+
title: threadTitle(thread),
|
|
149
|
+
titleText: threadTitle(thread),
|
|
150
|
+
timestamp:
|
|
151
|
+
thread.id === displayedActiveThreadId
|
|
152
|
+
? undefined
|
|
153
|
+
: formatThreadAge(threadUpdatedAt(thread)),
|
|
154
|
+
pinned: Boolean(thread.pinnedAt),
|
|
155
|
+
})),
|
|
156
|
+
[displayedActiveThreadId, visibleThreads],
|
|
157
|
+
);
|
|
152
158
|
|
|
153
159
|
useEffect(() => {
|
|
154
160
|
const refresh = () => refreshThreads();
|
|
@@ -169,14 +175,6 @@ function AssetsChatsSection() {
|
|
|
169
175
|
};
|
|
170
176
|
}, [refreshThreads]);
|
|
171
177
|
|
|
172
|
-
useEffect(() => {
|
|
173
|
-
if (!renamingThreadId) return;
|
|
174
|
-
requestAnimationFrame(() => {
|
|
175
|
-
renameInputRef.current?.focus();
|
|
176
|
-
renameInputRef.current?.select();
|
|
177
|
-
});
|
|
178
|
-
}, [renamingThreadId]);
|
|
179
|
-
|
|
180
178
|
function openThread(threadId: string, options?: { isNew?: boolean }) {
|
|
181
179
|
switchThread(threadId);
|
|
182
180
|
navigateWithAgentChatViewTransition(
|
|
@@ -230,36 +228,10 @@ function AssetsChatsSection() {
|
|
|
230
228
|
}
|
|
231
229
|
}
|
|
232
230
|
|
|
233
|
-
function
|
|
234
|
-
|
|
235
|
-
setRenameDraft(threadTitle(thread));
|
|
236
|
-
setRenamingThreadId(thread.id);
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
function cancelRenameThread() {
|
|
240
|
-
committingRenameRef.current = true;
|
|
241
|
-
setRenamingThreadId(null);
|
|
242
|
-
setRenameDraft("");
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
async function commitRenameThread() {
|
|
246
|
-
if (committingRenameRef.current) return;
|
|
247
|
-
const threadId = renamingThreadId;
|
|
248
|
-
const title = renameDraft.trim();
|
|
249
|
-
if (!threadId) return;
|
|
250
|
-
committingRenameRef.current = true;
|
|
251
|
-
setRenamingThreadId(null);
|
|
252
|
-
setRenameDraft("");
|
|
253
|
-
if (title) {
|
|
254
|
-
const renamed = await renameThread(threadId, title);
|
|
231
|
+
function handleRenameThread(threadId: string, title: string) {
|
|
232
|
+
void renameThread(threadId, title).then((renamed) => {
|
|
255
233
|
if (!renamed) toast.error(t("chat.renameFailed"));
|
|
256
|
-
}
|
|
257
|
-
committingRenameRef.current = false;
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
function handleRenameSubmit(event: FormEvent<HTMLFormElement>) {
|
|
261
|
-
event.preventDefault();
|
|
262
|
-
void commitRenameThread();
|
|
234
|
+
});
|
|
263
235
|
}
|
|
264
236
|
|
|
265
237
|
return (
|
|
@@ -282,114 +254,45 @@ function AssetsChatsSection() {
|
|
|
282
254
|
<TooltipContent side="right">{t("chat.newChat")}</TooltipContent>
|
|
283
255
|
</Tooltip>
|
|
284
256
|
</div>
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
257
|
+
{visibleThreads.length > 0 && (
|
|
258
|
+
<ChatHistoryList
|
|
259
|
+
items={chatItems}
|
|
260
|
+
activeId={displayedActiveThreadId}
|
|
261
|
+
onSelect={openThread}
|
|
262
|
+
onTogglePin={(threadId) => {
|
|
263
|
+
const thread = visibleThreads.find((item) => item.id === threadId);
|
|
264
|
+
if (thread) void pinThread(threadId, !thread.pinnedAt);
|
|
265
|
+
}}
|
|
266
|
+
onRename={handleRenameThread}
|
|
267
|
+
renameMaxLength={160}
|
|
268
|
+
onDelete={(threadId) => void handleArchiveThread(threadId)}
|
|
269
|
+
renderAdditionalRowActions={(item, closeMenu) => (
|
|
270
|
+
<button
|
|
271
|
+
type="button"
|
|
272
|
+
role="menuitem"
|
|
273
|
+
className="an-chat-history-row__menu-item"
|
|
274
|
+
onClick={() => {
|
|
275
|
+
closeMenu();
|
|
276
|
+
void handleCopyShareLink(item.id);
|
|
277
|
+
}}
|
|
301
278
|
>
|
|
302
|
-
{
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
aria-label={`Rename ${threadTitle(thread)}`}
|
|
320
|
-
className="h-6 min-w-0 rounded-sm border-border bg-background px-1.5 text-xs"
|
|
321
|
-
/>
|
|
322
|
-
</form>
|
|
323
|
-
) : (
|
|
324
|
-
<>
|
|
325
|
-
<button
|
|
326
|
-
type="button"
|
|
327
|
-
onClick={() => openThread(thread.id)}
|
|
328
|
-
className="flex h-full min-w-0 flex-1 items-center px-2 text-start outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
|
329
|
-
>
|
|
330
|
-
<span className="min-w-0 flex-1 truncate">
|
|
331
|
-
{threadTitle(thread)}
|
|
332
|
-
</span>
|
|
333
|
-
</button>
|
|
334
|
-
<div className="relative flex w-auto min-w-7 shrink-0 items-center justify-end pe-1">
|
|
335
|
-
<span className="whitespace-nowrap text-[11px] tabular-nums text-muted-foreground/75 transition-opacity group-hover:opacity-0 group-focus-within:opacity-0">
|
|
336
|
-
{isActive ? "" : formatThreadAge(threadUpdatedAt(thread))}
|
|
337
|
-
</span>
|
|
338
|
-
<DropdownMenu>
|
|
339
|
-
<DropdownMenuTrigger asChild>
|
|
340
|
-
<button
|
|
341
|
-
type="button"
|
|
342
|
-
aria-label={t("chat.optionsFor", {
|
|
343
|
-
title: threadTitle(thread),
|
|
344
|
-
})}
|
|
345
|
-
className="absolute end-1 flex size-6 items-center justify-center rounded-md text-muted-foreground opacity-0 transition-opacity hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring group-hover:opacity-100 group-focus-within:opacity-100 data-[state=open]:opacity-100"
|
|
346
|
-
>
|
|
347
|
-
<IconDots className="size-4" />
|
|
348
|
-
</button>
|
|
349
|
-
</DropdownMenuTrigger>
|
|
350
|
-
<DropdownMenuContent
|
|
351
|
-
align="end"
|
|
352
|
-
side="right"
|
|
353
|
-
sideOffset={6}
|
|
354
|
-
>
|
|
355
|
-
<DropdownMenuItem
|
|
356
|
-
onSelect={() => startRenameThread(thread)}
|
|
357
|
-
>
|
|
358
|
-
<IconEdit className="me-2 size-4" />
|
|
359
|
-
{t("chat.renameChat")}
|
|
360
|
-
</DropdownMenuItem>
|
|
361
|
-
<DropdownMenuItem
|
|
362
|
-
onSelect={() =>
|
|
363
|
-
void pinThread(thread.id, !thread.pinnedAt)
|
|
364
|
-
}
|
|
365
|
-
>
|
|
366
|
-
<IconPin className="me-2 size-4" />
|
|
367
|
-
{thread.pinnedAt
|
|
368
|
-
? t("chat.unpinChat")
|
|
369
|
-
: t("chat.pinChat")}
|
|
370
|
-
</DropdownMenuItem>
|
|
371
|
-
<DropdownMenuItem
|
|
372
|
-
onSelect={() => void handleCopyShareLink(thread.id)}
|
|
373
|
-
>
|
|
374
|
-
<IconShare3 className="me-2 size-4" />
|
|
375
|
-
{t("chat.copyShareLink")}
|
|
376
|
-
</DropdownMenuItem>
|
|
377
|
-
<DropdownMenuItem
|
|
378
|
-
className="text-destructive focus:text-destructive"
|
|
379
|
-
onSelect={() => void handleArchiveThread(thread.id)}
|
|
380
|
-
>
|
|
381
|
-
<IconArchive className="me-2 size-4" />
|
|
382
|
-
{t("chat.archiveChat")}
|
|
383
|
-
</DropdownMenuItem>
|
|
384
|
-
</DropdownMenuContent>
|
|
385
|
-
</DropdownMenu>
|
|
386
|
-
</div>
|
|
387
|
-
</>
|
|
388
|
-
)}
|
|
389
|
-
</div>
|
|
390
|
-
);
|
|
391
|
-
})}
|
|
392
|
-
</div>
|
|
279
|
+
<IconShare3 size={13} strokeWidth={1.8} />
|
|
280
|
+
<span>{t("chat.copyShareLink")}</span>
|
|
281
|
+
</button>
|
|
282
|
+
)}
|
|
283
|
+
labels={{
|
|
284
|
+
options: (item) =>
|
|
285
|
+
t("chat.optionsFor", { title: item.titleText ?? "" }),
|
|
286
|
+
renameInput: (item) => `Rename ${item.titleText ?? ""}`,
|
|
287
|
+
rename: t("chat.renameChat"),
|
|
288
|
+
pin: t("chat.pinChat"),
|
|
289
|
+
unpin: t("chat.unpinChat"),
|
|
290
|
+
delete: t("chat.archiveChat"),
|
|
291
|
+
}}
|
|
292
|
+
variant="rail"
|
|
293
|
+
className="min-w-0"
|
|
294
|
+
/>
|
|
295
|
+
)}
|
|
393
296
|
</div>
|
|
394
297
|
);
|
|
395
298
|
}
|
|
@@ -121,18 +121,38 @@ action trio instead:
|
|
|
121
121
|
provider host, injects configured credentials, blocks private/internal URLs,
|
|
122
122
|
and redacts secrets.
|
|
123
123
|
|
|
124
|
-
Use `@agent-native/core/provider-api` as the shared substrate
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
124
|
+
Use `@agent-native/core/provider-api` as the shared substrate, and build these
|
|
125
|
+
actions as thin factory imports rather than copying `defineAction` schemas and
|
|
126
|
+
handlers into each template:
|
|
127
|
+
|
|
128
|
+
```ts
|
|
129
|
+
import {
|
|
130
|
+
createProviderApiCatalogAction,
|
|
131
|
+
createProviderApiDocsAction,
|
|
132
|
+
createProviderApiRequestAction,
|
|
133
|
+
} from "@agent-native/core/provider-api/actions/provider-api";
|
|
134
|
+
import {
|
|
135
|
+
createDeleteStagedDatasetAction,
|
|
136
|
+
createListStagedDatasetsAction,
|
|
137
|
+
createQueryStagedDatasetAction,
|
|
138
|
+
} from "@agent-native/core/provider-api/actions/staged-datasets";
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Pass the app's existing provider runtime to the provider factories, and pass
|
|
142
|
+
its app id to the staged-dataset factories. Keep app-specific descriptions,
|
|
143
|
+
provider allow-lists, HTTP/tool-callability settings, and credential adapters
|
|
144
|
+
as factory options. Only add a thin credential adapter when the app has
|
|
145
|
+
app-specific credential lookup rules. If the app stores a built-in provider's
|
|
146
|
+
OAuth grant under a narrower local provider id, use the runtime's
|
|
147
|
+
`oauthProviderOverrides` instead of duplicating provider config. If credentials
|
|
148
|
+
are stored on shareable/resource rows rather than in the shared credential or
|
|
149
|
+
OAuth-token stores, build a resolver that enforces those access checks before
|
|
150
|
+
exposing raw provider requests. Keep `provider-api-request` `http: false`
|
|
151
|
+
unless a separate UI permission model authorizes arbitrary provider writes.
|
|
152
|
+
Specific actions such as `search-records`, `search-emails`, or `sync-source`
|
|
153
|
+
are convenience shortcuts, not capability limits; agents should fall back to
|
|
154
|
+
the provider API trio when a question requires an endpoint or filter that the
|
|
155
|
+
shortcut does not model.
|
|
136
156
|
|
|
137
157
|
This is a framework tenet. The safety boundary should be provider host
|
|
138
158
|
allow-listing, credential scoping, auth injection, private-network blocking,
|
|
@@ -15,6 +15,42 @@ in the public `template-brain.md` overview and previously sat inline in
|
|
|
15
15
|
intentionally not in the public docs. Read it when you are operating, rolling
|
|
16
16
|
out, or debugging Brain internals rather than answering an ordinary question.
|
|
17
17
|
|
|
18
|
+
## Privacy, Evidence Audiences, And Search
|
|
19
|
+
|
|
20
|
+
Brain applies the deterministic hard-category screen before any privacy model.
|
|
21
|
+
It blocks performance/discipline, layoffs or termination, compensation,
|
|
22
|
+
recruiting, health/accommodation, investigation, privileged legal, credentials,
|
|
23
|
+
and personal data. An approved privacy classifier may make handling stricter;
|
|
24
|
+
it cannot override a deterministic hit. When no classifier is configured,
|
|
25
|
+
Brain is in degraded deterministic-only mode: clearly clean company material
|
|
26
|
+
may be allowed, while uncertainty is quarantined and `get-brain-health` reports
|
|
27
|
+
the missing configuration.
|
|
28
|
+
|
|
29
|
+
Quarantined re-fetchable material from Slack, GitHub, or Granola keeps only a
|
|
30
|
+
metadata receipt because the content can be re-fetched during an authorized
|
|
31
|
+
review. Push-only generic and Clips payloads instead use an encrypted,
|
|
32
|
+
short-TTL private side store that no search, agent, source editor, log,
|
|
33
|
+
citation, or distillation surface can read; expiry converts it to a suppression
|
|
34
|
+
receipt. Review records policy metadata, never a shortcut to raw sensitive
|
|
35
|
+
content. HR-blocked evidence is never declassifiable: write a new,
|
|
36
|
+
non-identifying reviewed statement if it has durable organizational value.
|
|
37
|
+
|
|
38
|
+
Every allowed capture and derived row has an audience id and ACL hash. Public
|
|
39
|
+
and organization material use the trivial organization audience. Private Slack
|
|
40
|
+
material uses its channel membership audience, and meeting material uses its
|
|
41
|
+
attendee audience. Retrieval prefilters by audience before FTS/vector ranking;
|
|
42
|
+
answers spanning multiple sources may only cite the intersection of their
|
|
43
|
+
evidence audiences. Private Slack audiences fail closed when membership has not
|
|
44
|
+
been refreshed for 15 minutes, so removal upstream cannot leave indefinite
|
|
45
|
+
Brain access.
|
|
46
|
+
|
|
47
|
+
Semantic indexing starts when a capture is `allowed`, rather than waiting for
|
|
48
|
+
distillation. A derived row is current only when its staleness key matches
|
|
49
|
+
`contentHash + BRAIN_SEARCH_INDEX_VERSION + sensitivityPolicyVersion + aclHash`.
|
|
50
|
+
Changing content, policy, or membership invalidates indexed artifacts,
|
|
51
|
+
knowledge/proposal evidence, and mirrored canonical resources before they can
|
|
52
|
+
be served.
|
|
53
|
+
|
|
18
54
|
## Search model layers
|
|
19
55
|
|
|
20
56
|
Brain search has three layers:
|
|
@@ -60,8 +96,11 @@ pnpm --filter brain action create-source \
|
|
|
60
96
|
```
|
|
61
97
|
|
|
62
98
|
The connector verifies each configured conversation before reading history and
|
|
63
|
-
rejects DMs and MPIMs.
|
|
64
|
-
|
|
99
|
+
rejects DMs and MPIMs. Public discovery is opt-in and exclusion patterns are
|
|
100
|
+
applied before capture. Private channels are never silently joined: an operator
|
|
101
|
+
must manually invite the Slack app before validation and membership sync. Cursor
|
|
102
|
+
state is stored on the source so each sync can pick up where the last one
|
|
103
|
+
stopped, including after Slack rate limiting.
|
|
65
104
|
|
|
66
105
|
Use `test-slack-connection` before a production backfill. It validates the Slack
|
|
67
106
|
bot token with `auth.test` and, when channel refs are provided, checks channel
|
|
@@ -121,7 +160,8 @@ recommended rollout steps without returning raw capture bodies.
|
|
|
121
160
|
|
|
122
161
|
Recommended production rollout:
|
|
123
162
|
|
|
124
|
-
1. Start with one or two high-signal channels and
|
|
163
|
+
1. Start with one or two high-signal public channels and explicitly invited
|
|
164
|
+
private channels; never use discovery as implicit private-channel consent.
|
|
125
165
|
2. Keep `autoSync: false` until review quality is proven.
|
|
126
166
|
3. Run `test-slack-connection`, then `run-slack-pilot` without history.
|
|
127
167
|
4. Run one explicit `run-slack-pilot --readHistory true` sample when the report
|
|
@@ -246,8 +286,11 @@ with `mode: "retrieval"`.
|
|
|
246
286
|
|
|
247
287
|
The repository-level `pnpm test` command includes `pnpm test:brain-evals`, which
|
|
248
288
|
runs Brain's product-demo and retrieval action evals against a disposable local
|
|
249
|
-
SQLite database.
|
|
250
|
-
|
|
289
|
+
SQLite database. `pnpm test:brain-privacy-evals` is a separate CI lane with
|
|
290
|
+
must-block sensitive fixtures and must-allow benign false-positive fixtures
|
|
291
|
+
(such as API-limit raises, bonus features, and medical-device customers). Both
|
|
292
|
+
paths are fully seeded and offline; neither requires production Slack, Granola,
|
|
293
|
+
Clips, or external workspace data.
|
|
251
294
|
|
|
252
295
|
## Generic ingest payload validation
|
|
253
296
|
|
|
@@ -17,18 +17,48 @@ Use Brain actions rather than raw SQL.
|
|
|
17
17
|
for a capture that's already queued/processing refreshes the handoff
|
|
18
18
|
instructions instead of creating a duplicate queue row.
|
|
19
19
|
4. Before writing knowledge, call `get-capture` and copy short exact quotes.
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
Quotes and offsets always reference the persisted safe capture, never an
|
|
21
|
+
upstream raw payload. `get-capture` redacts `title`/`content`/`metadata` by
|
|
22
|
+
default; `includeRawContent: true` only reveals allowed, source-accessible
|
|
23
|
+
capture content and never bypasses a sensitivity disposition.
|
|
23
24
|
5. Call `write-knowledge` with `evidence` entries whose `quote` fields are exact capture substrings — `validateEvidence` throws otherwise.
|
|
24
25
|
6. If `write-knowledge` returns `mode: "proposal"`, leave it in review unless the user asks to approve. See AGENTS.md for the exact tier/confidence conditions that trigger a proposal.
|
|
25
26
|
|
|
27
|
+
## Privacy, Quarantine, And Safe Captures
|
|
28
|
+
|
|
29
|
+
Every ingest first receives a deterministic sensitivity screen. Performance,
|
|
30
|
+
discipline, termination/layoff, compensation, recruiting, health or
|
|
31
|
+
accommodation, investigation, privileged legal, credential, and personal-data
|
|
32
|
+
signals can only tighten handling; no model or workspace instruction can lower
|
|
33
|
+
that boundary.
|
|
34
|
+
|
|
35
|
+
- `allowed` captures persist safe content and may be indexed immediately. This
|
|
36
|
+
is independent of distillation: semantic coverage must not wait for an agent
|
|
37
|
+
to author a memory.
|
|
38
|
+
- `quarantined` or `suppressed` content is unavailable to search, citation,
|
|
39
|
+
distillation, source editors, agent tools, and logs. Review shows only the
|
|
40
|
+
minimal policy metadata needed to operate the queue.
|
|
41
|
+
- Re-fetchable providers (Slack, GitHub, Granola) retain metadata-only
|
|
42
|
+
quarantine records. Push-only `generic` and `clips` material is retained only
|
|
43
|
+
in the encrypted, short-TTL private quarantine store; expiry becomes a
|
|
44
|
+
suppression receipt.
|
|
45
|
+
- If no approved privacy classifier is configured, deterministic-only mode
|
|
46
|
+
allows clearly clean, company-relevant material and quarantines uncertainty.
|
|
47
|
+
Treat the health/setup warning as a requirement to configure the classifier
|
|
48
|
+
before broad ingestion.
|
|
49
|
+
|
|
50
|
+
Administrators may review a disposition but may not declassify HR-blocked
|
|
51
|
+
evidence. A broader statement must be a newly reviewed, non-identifying memory
|
|
52
|
+
with no private quotes, links, or identities.
|
|
53
|
+
|
|
26
54
|
## Capture Sanitization (Transcripts)
|
|
27
55
|
|
|
28
56
|
Transcript-kind captures are sanitized **before storage** by default
|
|
29
57
|
(`shouldSanitizeCaptureBeforeStorage` — true whenever `kind === "transcript"`,
|
|
30
58
|
unless `captureSanitizationEnabled: false` in settings or a per-capture
|
|
31
59
|
`metadata.sanitizeBeforeStorage` / source-config override says otherwise).
|
|
60
|
+
That override may skip relevance-oriented transcript cleanup, but deterministic
|
|
61
|
+
privacy and PII scrubbing always run and raw input is never retained.
|
|
32
62
|
Sanitization always strips, regardless of settings:
|
|
33
63
|
|
|
34
64
|
- Recruiting/hiring/candidate-evaluation content (`RECRUITING_SIGNAL`).
|
|
@@ -46,19 +76,20 @@ company-relevant survives, the stored content becomes the literal string "No
|
|
|
46
76
|
company-relevant content retained from this capture." — treat that string as
|
|
47
77
|
"this capture had nothing worth distilling," not as an error.
|
|
48
78
|
|
|
49
|
-
## Search:
|
|
79
|
+
## Search: Scoped Hybrid Retrieval
|
|
50
80
|
|
|
51
|
-
- `search-knowledge` —
|
|
52
|
-
|
|
53
|
-
X."
|
|
81
|
+
- `search-knowledge` — scoped retrieval over **distilled knowledge only**. Use
|
|
82
|
+
for "what does Brain officially know about X."
|
|
54
83
|
- `search-everything` — broader pass across knowledge, raw captures, and
|
|
55
84
|
sources in one call, plus `federatedCoverage` (delegation hints for other
|
|
56
|
-
apps).
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
85
|
+
apps). It uses full-text and available semantic signals after applying source,
|
|
86
|
+
project, kind, and audience filters. Use it as the default first search for
|
|
87
|
+
an open-ended question; narrow with `type: "knowledge" | "capture" |
|
|
88
|
+
"source"` when you already know which record type you need.
|
|
89
|
+
- Audience filtering happens before ranking. Public and organization sources
|
|
90
|
+
use the cheap organization audience; private channels and meetings use their
|
|
91
|
+
restricted audience. A multi-source answer must use the intersection of the
|
|
92
|
+
cited evidence audiences.
|
|
62
93
|
|
|
63
94
|
Follow `sourcePolicy` for how much of `search-everything`'s output an answer
|
|
64
95
|
may lean on: `strict` means reviewed knowledge only, `balanced` means raw
|
|
@@ -76,5 +107,6 @@ directly.
|
|
|
76
107
|
- `ingestion-and-connectors` — source creation, health states, sync scheduling,
|
|
77
108
|
and credential resolution order.
|
|
78
109
|
- `brain-runbook` — internal architecture and ops detail (Slack rollout,
|
|
79
|
-
distillation worker, scheduled sync cron,
|
|
110
|
+
privacy quarantine, semantic index, distillation worker, scheduled sync cron,
|
|
111
|
+
demo/eval seeding).
|
|
80
112
|
- `ask-across-everything`, `security`, `sharing`.
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: customizing-agent-native
|
|
3
|
+
description: >-
|
|
4
|
+
How to adopt, compose, or selectively copy Agent Native UI into app-owned
|
|
5
|
+
code. Use when overriding shared components, customizing a template, adding
|
|
6
|
+
UI to chat or headless apps, or inspecting installed framework source.
|
|
7
|
+
scope: dev
|
|
8
|
+
metadata:
|
|
9
|
+
internal: true
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Customizing Agent Native
|
|
13
|
+
|
|
14
|
+
## Rule
|
|
15
|
+
|
|
16
|
+
Start with the public component and its props, slots, callbacks, and stable
|
|
17
|
+
class names. If those seams are not enough, copy the smallest useful reference
|
|
18
|
+
implementation into the app and make that copy app-owned. Never edit
|
|
19
|
+
`node_modules`, deep-import a private source file at runtime, or patch an
|
|
20
|
+
`@agent-native/*` package.
|
|
21
|
+
|
|
22
|
+
Use this order:
|
|
23
|
+
|
|
24
|
+
1. Configure the public component.
|
|
25
|
+
2. Compose public primitives behind a local app component.
|
|
26
|
+
3. Copy one component or helper into app source and change the app import.
|
|
27
|
+
4. Propose a new Toolkit seam when the same override is useful in two apps.
|
|
28
|
+
|
|
29
|
+
Copying is for intentional product customization, not for hiding an upgrade
|
|
30
|
+
failure or replacing Core runtime behavior.
|
|
31
|
+
|
|
32
|
+
## Find The Installed Implementation
|
|
33
|
+
|
|
34
|
+
Use the source that matches the installed package version:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
pnpm action docs-search --query "<component or feature>"
|
|
38
|
+
pnpm action source-search --query "<component or symbol>"
|
|
39
|
+
rg -n "<component or symbol>" node_modules/@agent-native/toolkit/src
|
|
40
|
+
rg -n "<component or symbol>" node_modules/@agent-native/core/corpus
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
- Toolkit publishes readable TypeScript under
|
|
44
|
+
`node_modules/@agent-native/toolkit/src/` for selective UI adoption.
|
|
45
|
+
- Core and first-party template source lives under
|
|
46
|
+
`node_modules/@agent-native/core/corpus/core/` and
|
|
47
|
+
`node_modules/@agent-native/core/corpus/templates/`.
|
|
48
|
+
- Treat those trees as read-only references. Copy files into an app directory
|
|
49
|
+
such as `app/components/`, then import the local copy.
|
|
50
|
+
|
|
51
|
+
When a copied component imports sibling helpers, copy only the required
|
|
52
|
+
siblings or replace them with public package imports. Do not copy an entire
|
|
53
|
+
package or template to change one surface.
|
|
54
|
+
|
|
55
|
+
## Preserve The Agent-Native Contract
|
|
56
|
+
|
|
57
|
+
UI ownership may change; product contracts should not:
|
|
58
|
+
|
|
59
|
+
- Keep app operations in `defineAction` actions and call them through
|
|
60
|
+
`useActionQuery`, `useActionMutation`, or another named client helper.
|
|
61
|
+
- Keep navigation, selection, and focused-object state visible through the
|
|
62
|
+
existing application-state keys.
|
|
63
|
+
- Keep AI work in the shared agent chat instead of adding direct LLM calls.
|
|
64
|
+
- Keep auth, access checks, persistence, chat transport, and agent execution in
|
|
65
|
+
Core. Do not copy those runtimes into the app.
|
|
66
|
+
- Keep local adapters narrow so package upgrades still improve every surface
|
|
67
|
+
the app has not intentionally taken ownership of.
|
|
68
|
+
|
|
69
|
+
## App Shapes
|
|
70
|
+
|
|
71
|
+
- **Template app:** begin with its existing local adapters and domain UI. Use
|
|
72
|
+
Toolkit for repeated workspace UI; copy only the piece being customized.
|
|
73
|
+
- **Chat app:** keep `AgentChatSurface`, thread state, and chat transport in
|
|
74
|
+
Core. Compose or copy Toolkit presentation such as chat-history UI around it.
|
|
75
|
+
- **Headless app:** stay action-first while no UI is needed. When adding a UI,
|
|
76
|
+
use the Chat template as the on-ramp or add Toolkit components without
|
|
77
|
+
replacing the existing actions.
|
|
78
|
+
- **Workspace:** put one-app overrides in that app. Promote a local component
|
|
79
|
+
to `packages/shared` only when multiple workspace apps use it.
|
|
80
|
+
|
|
81
|
+
## After Copying
|
|
82
|
+
|
|
83
|
+
- Remove unused dependencies and imports from the copied file.
|
|
84
|
+
- Keep visible text in the app's localization catalogs.
|
|
85
|
+
- Run the app's formatter, typecheck, and focused tests.
|
|
86
|
+
- Re-check the installed source during future package upgrades; the app-owned
|
|
87
|
+
copy does not receive upstream fixes automatically.
|
|
88
|
+
|
|
89
|
+
## Don't
|
|
90
|
+
|
|
91
|
+
- Don't edit or import from `node_modules/@agent-native/*/src` at runtime.
|
|
92
|
+
- Don't add `pnpm.overrides`, patches, or resolutions for Agent Native packages.
|
|
93
|
+
- Don't copy Core auth, DB, action, agent-loop, or transport internals.
|
|
94
|
+
- Don't fork a full template when a prop, slot, wrapper, or one-file copy works.
|
|
95
|
+
|
|
96
|
+
## Related Skills
|
|
97
|
+
|
|
98
|
+
- `agent-native-docs` — version-matched docs and source lookup
|
|
99
|
+
- `agent-native-toolkit` — shared-vs-app-owned architecture boundary
|
|
100
|
+
- `self-modifying-code` — safe app source edits
|
|
101
|
+
- `upgrade-agent-native` — supported package upgrade path
|
|
102
|
+
- `adding-a-feature` — UI/action/instructions/application-state parity
|
|
@@ -35,8 +35,14 @@ Tier 4 includes **all** of the following — not only editing package source:
|
|
|
35
35
|
- Files under `node_modules/@agent-native/*` (core, dispatch, scheduling, …)
|
|
36
36
|
- `pnpm.overrides`, `overrides`, `resolutions`, or `patchedDependencies` that
|
|
37
37
|
target any `@agent-native/*` package
|
|
38
|
-
- Local patches
|
|
39
|
-
|
|
38
|
+
- Local package patches or invented "dispatch/core behavior" shims meant to
|
|
39
|
+
paper over a version skew or failed upgrade
|
|
40
|
+
|
|
41
|
+
This does not prohibit intentional app-owned UI customization. When public
|
|
42
|
+
props and composition are insufficient, the `customizing-agent-native` skill
|
|
43
|
+
allows copying the smallest reference UI component from the installed source
|
|
44
|
+
into the app. The copy must use public runtime contracts and must not replace
|
|
45
|
+
Core auth, DB, actions, agent execution, or transport behavior.
|
|
40
46
|
|
|
41
47
|
When an older branch needs current packages, use **`agent-native upgrade`**
|
|
42
48
|
(see the `upgrade-agent-native` skill). If upgrade or typecheck fails, fix
|
|
@@ -88,6 +94,8 @@ inline strings in components.
|
|
|
88
94
|
- Don't modify `.env` files or files containing secrets
|
|
89
95
|
- Don't modify `@agent-native/core`, `@agent-native/dispatch`, or other
|
|
90
96
|
`@agent-native/*` package internals (including under `node_modules`)
|
|
97
|
+
- Don't confuse a read-only reference copy with editing package internals: use
|
|
98
|
+
`customizing-agent-native` for selective app-owned UI adoption
|
|
91
99
|
- Don't add `pnpm.overrides` / `patchedDependencies` / `resolutions` for
|
|
92
100
|
`@agent-native/*` to "make the app run" after a version bump
|
|
93
101
|
- Don't invent local dispatch/core behavior overrides when upgrade fails —
|
|
@@ -99,6 +107,7 @@ inline strings in components.
|
|
|
99
107
|
## Related Skills
|
|
100
108
|
|
|
101
109
|
- **upgrade-agent-native** — supported path to bring an older app/workspace current
|
|
110
|
+
- **customizing-agent-native** — safe selective adoption of installed reference UI
|
|
102
111
|
- **storing-data** — Tier 1 modifications (data files) are the safest and most common
|
|
103
112
|
- **actions** — The agent can create or modify actions to add new capabilities
|
|
104
113
|
- **delegate-to-agent** — Self-modification requests come through the agent chat
|
|
@@ -63,6 +63,11 @@ install → refresh scaffold skills → verify, then fix **app** code only.
|
|
|
63
63
|
- Re-run `agent-native upgrade` or `pnpm typecheck`
|
|
64
64
|
- Stop and ask the user if you cannot fix the app-level error
|
|
65
65
|
|
|
66
|
+
Intentional app-level UI customization is a separate workflow. Read
|
|
67
|
+
`customizing-agent-native` when the product needs to own a selectively
|
|
68
|
+
copied component; do not use that path to reproduce framework runtime
|
|
69
|
+
behavior or hide version skew.
|
|
70
|
+
|
|
66
71
|
4. **Dry-run / partial runs**
|
|
67
72
|
|
|
68
73
|
```bash
|
|
@@ -91,4 +96,5 @@ install → refresh scaffold skills → verify, then fix **app** code only.
|
|
|
91
96
|
|
|
92
97
|
- **self-modifying-code** — Tier 4: framework packages are off limits
|
|
93
98
|
- **agent-native-docs** — version-matched docs after the bump
|
|
99
|
+
- **customizing-agent-native** — intentional app-owned UI copies, not upgrade patches
|
|
94
100
|
- **portability** — keep app code provider-agnostic across upgrades
|