@agent-native/core 0.94.1 → 0.94.3
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 +14 -0
- package/corpus/core/docs/content/cloneable-saas.mdx +15 -15
- package/corpus/core/docs/content/creating-templates.mdx +1 -1
- package/corpus/core/docs/content/extensions.mdx +1 -1
- package/corpus/core/docs/content/local-file-mode.mdx +6 -6
- package/corpus/core/docs/content/locales/ar-SA/voice-input.mdx +2 -2
- package/corpus/core/docs/content/locales/de-DE/voice-input.mdx +2 -2
- package/corpus/core/docs/content/locales/es-ES/voice-input.mdx +2 -2
- package/corpus/core/docs/content/locales/fr-FR/voice-input.mdx +2 -2
- package/corpus/core/docs/content/locales/hi-IN/voice-input.mdx +2 -2
- package/corpus/core/docs/content/locales/ja-JP/voice-input.mdx +2 -2
- package/corpus/core/docs/content/locales/ko-KR/voice-input.mdx +2 -2
- package/corpus/core/docs/content/locales/pt-BR/voice-input.mdx +2 -2
- package/corpus/core/docs/content/locales/zh-CN/voice-input.mdx +2 -2
- package/corpus/core/docs/content/locales/zh-TW/voice-input.mdx +2 -2
- package/corpus/core/docs/content/sharing.mdx +4 -4
- package/corpus/core/docs/content/template-analytics.mdx +2 -2
- package/corpus/core/docs/content/template-calendar.mdx +4 -4
- package/corpus/core/docs/content/template-clips.mdx +2 -2
- package/corpus/core/docs/content/template-content.mdx +12 -11
- package/corpus/core/docs/content/template-mail.mdx +1 -1
- package/corpus/core/docs/content/template-slides.mdx +2 -2
- package/corpus/core/docs/content/voice-input.mdx +2 -2
- package/corpus/core/docs/content/workspace.mdx +1 -1
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/a2a/artifact-response.ts +154 -1
- package/corpus/core/src/client/AssistantChat.tsx +30 -0
- package/corpus/core/src/client/MultiTabAssistantChat.tsx +19 -1
- package/corpus/core/src/client/agent-chat.ts +6 -0
- package/corpus/core/src/client/composer/RealtimeVoiceMode.tsx +72 -2
- package/corpus/core/src/client/composer/realtime-voice-audio-level.ts +64 -0
- package/corpus/core/src/client/composer/realtime-voice-transcript.ts +134 -0
- package/corpus/core/src/client/composer/useRealtimeVoiceMode.tsx +220 -6
- package/corpus/core/src/client/use-chat-threads.ts +33 -9
- package/corpus/core/src/integrations/a2a-continuation-processor.ts +118 -31
- package/corpus/core/src/integrations/a2a-continuations-store.ts +165 -7
- package/corpus/core/src/integrations/adapters/slack.ts +77 -7
- package/corpus/core/src/integrations/types.ts +30 -0
- package/corpus/core/src/integrations/webhook-handler.ts +54 -18
- package/corpus/core/src/scripts/call-agent.ts +1 -0
- package/corpus/core/src/server/request-context.ts +2 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +11 -5
- package/corpus/templates/clips/app/components/player/comments-panel.tsx +98 -1
- package/corpus/templates/clips/changelog/2026-07-10-comment-urls-open-as-clickable-links.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-desktop-recording-uploads-now-show-a-brief-uploaded-state-wi.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-desktop-recordings-now-retry-saving-their-locally-captured-t.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-desktop-update-prompts-are-more-compact-and-easier-to-dismiss.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-quiet-recordings-now-finish-saving-instead-of-getting-stuck.md +6 -0
- package/corpus/templates/clips/desktop/src/components/UpdateBanner.tsx +7 -4
- package/corpus/templates/clips/desktop/src/lib/recorder.ts +284 -85
- package/corpus/templates/clips/desktop/src/overlays/finalizing.tsx +148 -40
- package/corpus/templates/clips/desktop/src/overlays/meeting-notification.tsx +13 -13
- package/corpus/templates/clips/desktop/src/styles.css +83 -13
- package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +43 -28
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +130 -65
- package/corpus/templates/clips/desktop/src-tauri/src/notifications.rs +10 -4
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +82 -1
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/reset-chunks.post.ts +82 -1
- package/dist/a2a/artifact-response.d.ts.map +1 -1
- package/dist/a2a/artifact-response.js +127 -1
- package/dist/a2a/artifact-response.js.map +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +20 -0
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +9 -0
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/agent-chat.d.ts +6 -0
- package/dist/client/agent-chat.d.ts.map +1 -1
- package/dist/client/agent-chat.js.map +1 -1
- package/dist/client/composer/RealtimeVoiceMode.d.ts +3 -1
- package/dist/client/composer/RealtimeVoiceMode.d.ts.map +1 -1
- package/dist/client/composer/RealtimeVoiceMode.js +32 -3
- package/dist/client/composer/RealtimeVoiceMode.js.map +1 -1
- package/dist/client/composer/realtime-voice-audio-level.d.ts +14 -0
- package/dist/client/composer/realtime-voice-audio-level.d.ts.map +1 -0
- package/dist/client/composer/realtime-voice-audio-level.js +47 -0
- package/dist/client/composer/realtime-voice-audio-level.js.map +1 -0
- package/dist/client/composer/realtime-voice-transcript.d.ts +26 -0
- package/dist/client/composer/realtime-voice-transcript.d.ts.map +1 -0
- package/dist/client/composer/realtime-voice-transcript.js +103 -0
- package/dist/client/composer/realtime-voice-transcript.js.map +1 -0
- package/dist/client/composer/useRealtimeVoiceMode.d.ts +14 -0
- package/dist/client/composer/useRealtimeVoiceMode.d.ts.map +1 -1
- package/dist/client/composer/useRealtimeVoiceMode.js +177 -6
- package/dist/client/composer/useRealtimeVoiceMode.js.map +1 -1
- package/dist/client/use-chat-threads.d.ts.map +1 -1
- package/dist/client/use-chat-threads.js +26 -6
- package/dist/client/use-chat-threads.js.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/integrations/a2a-continuation-processor.d.ts.map +1 -1
- package/dist/integrations/a2a-continuation-processor.js +76 -21
- package/dist/integrations/a2a-continuation-processor.js.map +1 -1
- package/dist/integrations/a2a-continuations-store.d.ts +4 -1
- package/dist/integrations/a2a-continuations-store.d.ts.map +1 -1
- package/dist/integrations/a2a-continuations-store.js +130 -6
- package/dist/integrations/a2a-continuations-store.js.map +1 -1
- package/dist/integrations/adapters/slack.d.ts.map +1 -1
- package/dist/integrations/adapters/slack.js +56 -7
- package/dist/integrations/adapters/slack.js.map +1 -1
- package/dist/integrations/types.d.ts +25 -0
- package/dist/integrations/types.d.ts.map +1 -1
- package/dist/integrations/types.js.map +1 -1
- package/dist/integrations/webhook-handler.js +54 -16
- package/dist/integrations/webhook-handler.js.map +1 -1
- package/dist/observability/routes.d.ts +1 -1
- package/dist/provider-api/corpus-jobs.d.ts +2 -2
- package/dist/scripts/call-agent.d.ts.map +1 -1
- package/dist/scripts/call-agent.js +1 -0
- package/dist/scripts/call-agent.js.map +1 -1
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/request-context.d.ts +2 -0
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/request-context.js.map +1 -1
- package/dist/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +11 -5
- package/docs/content/cloneable-saas.mdx +15 -15
- package/docs/content/creating-templates.mdx +1 -1
- package/docs/content/extensions.mdx +1 -1
- package/docs/content/local-file-mode.mdx +6 -6
- package/docs/content/locales/ar-SA/voice-input.mdx +2 -2
- package/docs/content/locales/de-DE/voice-input.mdx +2 -2
- package/docs/content/locales/es-ES/voice-input.mdx +2 -2
- package/docs/content/locales/fr-FR/voice-input.mdx +2 -2
- package/docs/content/locales/hi-IN/voice-input.mdx +2 -2
- package/docs/content/locales/ja-JP/voice-input.mdx +2 -2
- package/docs/content/locales/ko-KR/voice-input.mdx +2 -2
- package/docs/content/locales/pt-BR/voice-input.mdx +2 -2
- package/docs/content/locales/zh-CN/voice-input.mdx +2 -2
- package/docs/content/locales/zh-TW/voice-input.mdx +2 -2
- package/docs/content/sharing.mdx +4 -4
- package/docs/content/template-analytics.mdx +2 -2
- package/docs/content/template-calendar.mdx +4 -4
- package/docs/content/template-clips.mdx +2 -2
- package/docs/content/template-content.mdx +12 -11
- package/docs/content/template-mail.mdx +1 -1
- package/docs/content/template-slides.mdx +2 -2
- package/docs/content/voice-input.mdx +2 -2
- package/docs/content/workspace.mdx +1 -1
- package/package.json +1 -1
- package/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +11 -5
|
@@ -717,6 +717,8 @@ function CommentCard({
|
|
|
717
717
|
return updatedReactions;
|
|
718
718
|
}
|
|
719
719
|
|
|
720
|
+
const commentContent = linkifyCommentContent(comment.content);
|
|
721
|
+
|
|
720
722
|
return (
|
|
721
723
|
<div className={cn("flex gap-2", comment.resolved && "opacity-60")}>
|
|
722
724
|
<Avatar className="h-7 w-7 shrink-0">
|
|
@@ -747,7 +749,7 @@ function CommentCard({
|
|
|
747
749
|
) : null}
|
|
748
750
|
</div>
|
|
749
751
|
<p className="text-sm text-foreground whitespace-pre-wrap break-words mt-0.5">
|
|
750
|
-
{
|
|
752
|
+
{commentContent}
|
|
751
753
|
</p>
|
|
752
754
|
|
|
753
755
|
<div className="flex items-center gap-2 mt-1.5 text-xs text-muted-foreground">
|
|
@@ -856,6 +858,101 @@ function CommentCard({
|
|
|
856
858
|
);
|
|
857
859
|
}
|
|
858
860
|
|
|
861
|
+
const COMMENT_URL_PATTERN = /\b(?:https?:\/\/|www\.)[^\s<]+/gi;
|
|
862
|
+
const ALWAYS_TRAILING_PUNCTUATION = new Set([
|
|
863
|
+
".",
|
|
864
|
+
",",
|
|
865
|
+
"!",
|
|
866
|
+
"?",
|
|
867
|
+
";",
|
|
868
|
+
":",
|
|
869
|
+
"'",
|
|
870
|
+
'"',
|
|
871
|
+
]);
|
|
872
|
+
const PAIRED_TRAILING_PUNCTUATION: Record<string, string> = {
|
|
873
|
+
")": "(",
|
|
874
|
+
"]": "[",
|
|
875
|
+
"}": "{",
|
|
876
|
+
};
|
|
877
|
+
|
|
878
|
+
function trimTrailingUrlPunctuation(value: string): {
|
|
879
|
+
url: string;
|
|
880
|
+
trailing: string;
|
|
881
|
+
} {
|
|
882
|
+
let end = value.length;
|
|
883
|
+
|
|
884
|
+
while (end > 0) {
|
|
885
|
+
const lastCharacter = value[end - 1];
|
|
886
|
+
if (ALWAYS_TRAILING_PUNCTUATION.has(lastCharacter)) {
|
|
887
|
+
end -= 1;
|
|
888
|
+
continue;
|
|
889
|
+
}
|
|
890
|
+
|
|
891
|
+
const openingCharacter = PAIRED_TRAILING_PUNCTUATION[lastCharacter];
|
|
892
|
+
if (openingCharacter) {
|
|
893
|
+
const candidate = value.slice(0, end);
|
|
894
|
+
const openingCount = candidate.split(openingCharacter).length - 1;
|
|
895
|
+
const closingCount = candidate.split(lastCharacter).length - 1;
|
|
896
|
+
if (closingCount > openingCount) {
|
|
897
|
+
end -= 1;
|
|
898
|
+
continue;
|
|
899
|
+
}
|
|
900
|
+
}
|
|
901
|
+
|
|
902
|
+
break;
|
|
903
|
+
}
|
|
904
|
+
|
|
905
|
+
return {
|
|
906
|
+
url: value.slice(0, end),
|
|
907
|
+
trailing: value.slice(end),
|
|
908
|
+
};
|
|
909
|
+
}
|
|
910
|
+
|
|
911
|
+
function linkifyCommentContent(content: string): React.ReactNode[] {
|
|
912
|
+
const result: React.ReactNode[] = [];
|
|
913
|
+
let lastIndex = 0;
|
|
914
|
+
|
|
915
|
+
for (const match of content.matchAll(COMMENT_URL_PATTERN)) {
|
|
916
|
+
const matchIndex = match.index;
|
|
917
|
+
const matchedText = match[0];
|
|
918
|
+
const { url, trailing } = trimTrailingUrlPunctuation(matchedText);
|
|
919
|
+
const href = url.toLowerCase().startsWith("www.") ? `https://${url}` : url;
|
|
920
|
+
|
|
921
|
+
let isValidUrl = false;
|
|
922
|
+
try {
|
|
923
|
+
isValidUrl = Boolean(new URL(href).hostname);
|
|
924
|
+
} catch {
|
|
925
|
+
// Leave malformed URL-like text unlinked.
|
|
926
|
+
}
|
|
927
|
+
|
|
928
|
+
if (!isValidUrl) continue;
|
|
929
|
+
|
|
930
|
+
if (matchIndex > lastIndex) {
|
|
931
|
+
result.push(content.slice(lastIndex, matchIndex));
|
|
932
|
+
}
|
|
933
|
+
result.push(
|
|
934
|
+
<a
|
|
935
|
+
key={`${matchIndex}-${url}`}
|
|
936
|
+
href={href}
|
|
937
|
+
target="_blank"
|
|
938
|
+
rel="noopener noreferrer"
|
|
939
|
+
className="text-primary hover:underline"
|
|
940
|
+
>
|
|
941
|
+
{url}
|
|
942
|
+
</a>,
|
|
943
|
+
);
|
|
944
|
+
if (trailing) result.push(trailing);
|
|
945
|
+
|
|
946
|
+
lastIndex = matchIndex + matchedText.length;
|
|
947
|
+
}
|
|
948
|
+
|
|
949
|
+
if (lastIndex < content.length) {
|
|
950
|
+
result.push(content.slice(lastIndex));
|
|
951
|
+
}
|
|
952
|
+
|
|
953
|
+
return result;
|
|
954
|
+
}
|
|
955
|
+
|
|
859
956
|
function parseReactions(raw: string): Record<string, string[]> {
|
|
860
957
|
try {
|
|
861
958
|
const v = JSON.parse(raw ?? "{}");
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { IconX } from "@tabler/icons-react";
|
|
1
2
|
import { useState } from "react";
|
|
2
3
|
|
|
3
4
|
import {
|
|
@@ -73,7 +74,7 @@ export function UpdateBanner() {
|
|
|
73
74
|
<div className="update-banner update-banner--pending">
|
|
74
75
|
<DownloadIcon />
|
|
75
76
|
<span className="update-banner-text">
|
|
76
|
-
Update
|
|
77
|
+
Update available — downloading…
|
|
77
78
|
</span>
|
|
78
79
|
</div>
|
|
79
80
|
);
|
|
@@ -94,15 +95,17 @@ export function UpdateBanner() {
|
|
|
94
95
|
return (
|
|
95
96
|
<div className="update-banner update-banner--ready">
|
|
96
97
|
<span className="update-banner-text">
|
|
97
|
-
Update
|
|
98
|
+
Update ready — restart to install
|
|
98
99
|
</span>
|
|
99
100
|
<div className="update-banner-actions">
|
|
100
101
|
<button
|
|
101
102
|
type="button"
|
|
102
|
-
className="update-banner-btn update-banner-btn--
|
|
103
|
+
className="update-banner-btn update-banner-btn--dismiss"
|
|
103
104
|
onClick={() => setDismissedVersion(status.version)}
|
|
105
|
+
aria-label="Dismiss update"
|
|
106
|
+
title="Dismiss update"
|
|
104
107
|
>
|
|
105
|
-
|
|
108
|
+
<IconX size={15} strokeWidth={1.8} aria-hidden />
|
|
106
109
|
</button>
|
|
107
110
|
<button
|
|
108
111
|
type="button"
|