@agent-native/core 0.175.2-nightly-20260826165737 → 0.175.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 +1 -1
- package/corpus/templates/clips/app/components/player/comments-panel.tsx +1 -1
- package/corpus/templates/clips/desktop/src/app.tsx +171 -51
- package/corpus/templates/clips/desktop/src/lib/pill-completion.ts +111 -0
- package/corpus/templates/clips/desktop/src/lib/pill-session.ts +34 -0
- package/corpus/templates/clips/desktop/src/lib/recorder.ts +181 -79
- package/corpus/templates/clips/desktop/src/lib/rewind-recording-start.ts +28 -4
- package/corpus/templates/clips/desktop/src/main.tsx +4 -4
- package/corpus/templates/clips/desktop/src/overlays/record-pill.tsx +1320 -0
- package/corpus/templates/clips/desktop/src/overlays/recording-pill.tsx +1 -1
- package/corpus/templates/clips/desktop/src/styles.css +20 -308
- package/corpus/templates/clips/desktop/src/tailwind.css +85 -0
- package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +153 -70
- package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +15 -0
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen/custom_capture.rs +25 -7
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen/live_upload.rs +3 -3
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +375 -24
- package/corpus/templates/clips/desktop/src-tauri/src/recording_indicator.rs +22 -30
- package/corpus/templates/clips/desktop/src-tauri/src/rewind_clip.rs +5 -0
- package/corpus/templates/clips/desktop/src-tauri/src/screen_memory.rs +134 -14
- package/corpus/templates/clips/desktop/src-tauri/src/tray.rs +233 -4
- package/corpus/templates/clips/desktop/src-tauri/src/util.rs +8 -5
- package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +50 -28
- package/corpus/templates/slides/app/context/DeckContext.tsx +78 -23
- package/corpus/templates/slides/app/pages/DeckEditor.tsx +5 -5
- package/dist/mcp/screen-memory-stdio.d.ts +7 -7
- package/dist/notifications/routes.d.ts +3 -3
- package/dist/observability/routes.d.ts +3 -3
- package/dist/secrets/routes.d.ts +9 -9
- package/package.json +3 -3
- package/corpus/templates/clips/desktop/src/overlays/toolbar.tsx +0 -458
|
@@ -662,9 +662,8 @@ interface SlideEditorProps {
|
|
|
662
662
|
deckId?: string;
|
|
663
663
|
/**
|
|
664
664
|
* Called the moment the user enters contentEditable inline edit mode.
|
|
665
|
-
* The parent should
|
|
666
|
-
* reconcile path knows not to replace
|
|
667
|
-
* edit, even before a `content` update has been flushed.
|
|
665
|
+
* The parent should mark the slide as actively edited so the SSE/poll
|
|
666
|
+
* reconcile path knows not to replace it before a `content` update is queued.
|
|
668
667
|
*/
|
|
669
668
|
onInlineEditStart?: (slideId: string) => void;
|
|
670
669
|
/** Called after inline edit mode exits and its draft has been handed off.
|
|
@@ -1558,12 +1557,10 @@ export default function SlideEditor({
|
|
|
1558
1557
|
// the keepalive queue before browser teardown.
|
|
1559
1558
|
useEffect(() => {
|
|
1560
1559
|
const flushInlineEditDraft = () => {
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
});
|
|
1566
|
-
inlineEditDraftRef.current = null;
|
|
1560
|
+
// Input captures already enqueue the current draft. Keep the ref while
|
|
1561
|
+
// the editor remains mounted so the first edit after tab restore queues
|
|
1562
|
+
// against the previous snapshot instead of being mistaken for setup.
|
|
1563
|
+
if (!inlineEditDraftRef.current) return;
|
|
1567
1564
|
flushPendingSaves();
|
|
1568
1565
|
};
|
|
1569
1566
|
const flushWhenHidden = () => {
|
|
@@ -1648,13 +1645,21 @@ export default function SlideEditor({
|
|
|
1648
1645
|
(slideId = slide.id) => {
|
|
1649
1646
|
const html = readCurrentSlideContentHtml();
|
|
1650
1647
|
if (html !== null) {
|
|
1648
|
+
const next = { slideId, content: html };
|
|
1649
|
+
const previous = inlineEditDraftRef.current;
|
|
1650
|
+
const initial = inlineEditInitialContentRef.current;
|
|
1651
|
+
if (!initial || initial.slideId !== slideId) {
|
|
1652
|
+
inlineEditInitialContentRef.current = next;
|
|
1653
|
+
}
|
|
1651
1654
|
if (
|
|
1652
|
-
|
|
1653
|
-
|
|
1655
|
+
previous?.slideId === slideId &&
|
|
1656
|
+
previous.content !== next.content
|
|
1654
1657
|
) {
|
|
1655
|
-
|
|
1658
|
+
onUpdateSlideRef.current({ content: html }, slideId, {
|
|
1659
|
+
preserveLocalState: true,
|
|
1660
|
+
});
|
|
1656
1661
|
}
|
|
1657
|
-
inlineEditDraftRef.current =
|
|
1662
|
+
inlineEditDraftRef.current = next;
|
|
1658
1663
|
}
|
|
1659
1664
|
},
|
|
1660
1665
|
[readCurrentSlideContentHtml, slide.id],
|
|
@@ -1920,14 +1925,18 @@ export default function SlideEditor({
|
|
|
1920
1925
|
|
|
1921
1926
|
const html = selected ? readCurrentSlideContentHtml() : null;
|
|
1922
1927
|
const initial = inlineEditInitialContentRef.current;
|
|
1923
|
-
if (
|
|
1924
|
-
|
|
1925
|
-
shouldPersistInlineEditContent(initial, {
|
|
1926
|
-
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
|
|
1930
|
-
|
|
1928
|
+
if (html !== null) {
|
|
1929
|
+
const current = { slideId: slide.id, content: html };
|
|
1930
|
+
if (shouldPersistInlineEditContent(initial, current)) {
|
|
1931
|
+
const latestDraft = inlineEditDraftRef.current;
|
|
1932
|
+
onUpdateSlideRef.current(
|
|
1933
|
+
{ content: html },
|
|
1934
|
+
slide.id,
|
|
1935
|
+
shouldPersistInlineEditContent(latestDraft, current)
|
|
1936
|
+
? undefined
|
|
1937
|
+
: { recordUndoOnly: true },
|
|
1938
|
+
);
|
|
1939
|
+
}
|
|
1931
1940
|
}
|
|
1932
1941
|
onInlineEditEnd?.(slide.id);
|
|
1933
1942
|
inlineEditDraftRef.current = null;
|
|
@@ -1966,9 +1975,9 @@ export default function SlideEditor({
|
|
|
1966
1975
|
// resize and auto-fit again on the second click.
|
|
1967
1976
|
setSelectedElementMeasurement(null);
|
|
1968
1977
|
captureInlineEditDraft(slide.id);
|
|
1969
|
-
// Mark the
|
|
1970
|
-
// the
|
|
1971
|
-
// types and triggers an onUpdateSlide flush.
|
|
1978
|
+
// Mark the slide active immediately so SSE/poll refreshes do not replace
|
|
1979
|
+
// the live DOM under an active contentEditable edit, even before the
|
|
1980
|
+
// user types and triggers an onUpdateSlide flush.
|
|
1972
1981
|
onInlineEditStart?.(slide.id);
|
|
1973
1982
|
// Don't override the selection. The browser's native double-click
|
|
1974
1983
|
// word-select (or single-click caret) is already on the element from the
|
|
@@ -2009,10 +2018,12 @@ export default function SlideEditor({
|
|
|
2009
2018
|
draft?.slideId === previousSlideId &&
|
|
2010
2019
|
shouldPersistInlineEditContent(initial, draft)
|
|
2011
2020
|
) {
|
|
2012
|
-
onUpdateSlideRef.current({ content: draft.content }, previousSlideId
|
|
2013
|
-
|
|
2021
|
+
onUpdateSlideRef.current({ content: draft.content }, previousSlideId, {
|
|
2022
|
+
recordUndoOnly: true,
|
|
2023
|
+
});
|
|
2014
2024
|
}
|
|
2015
2025
|
if (editing || draft) onInlineEditEnd?.(previousSlideId);
|
|
2026
|
+
inlineEditDraftRef.current = null;
|
|
2016
2027
|
inlineEditInitialContentRef.current = null;
|
|
2017
2028
|
|
|
2018
2029
|
previousSlideIdRef.current = slide.id;
|
|
@@ -2023,9 +2034,20 @@ export default function SlideEditor({
|
|
|
2023
2034
|
// otherwise never clear and permanently block live sync for that slide.
|
|
2024
2035
|
useEffect(() => {
|
|
2025
2036
|
return () => {
|
|
2026
|
-
|
|
2027
|
-
|
|
2037
|
+
const draft = inlineEditDraftRef.current;
|
|
2038
|
+
const initial = inlineEditInitialContentRef.current;
|
|
2039
|
+
if (shouldPersistInlineEditContent(initial, draft) && draft) {
|
|
2040
|
+
onUpdateSlideRef.current({ content: draft.content }, draft.slideId, {
|
|
2041
|
+
recordUndoOnly: true,
|
|
2042
|
+
});
|
|
2028
2043
|
}
|
|
2044
|
+
if (editingElRef.current || draft) {
|
|
2045
|
+
onInlineEditEndRef.current?.(
|
|
2046
|
+
draft?.slideId ?? previousSlideIdRef.current,
|
|
2047
|
+
);
|
|
2048
|
+
}
|
|
2049
|
+
inlineEditDraftRef.current = null;
|
|
2050
|
+
inlineEditInitialContentRef.current = null;
|
|
2029
2051
|
};
|
|
2030
2052
|
}, []);
|
|
2031
2053
|
|
|
@@ -68,6 +68,10 @@ function addSlideFields(
|
|
|
68
68
|
export type DeckReloadStatus = "loaded" | "failed" | "stale";
|
|
69
69
|
export interface UpdateSlideOptions {
|
|
70
70
|
persistence?: "debounced" | "immediate";
|
|
71
|
+
/** Queue a draft without replacing the active contentEditable DOM. */
|
|
72
|
+
preserveLocalState?: boolean;
|
|
73
|
+
/** Record the edit for undo without enqueueing a duplicate server write. */
|
|
74
|
+
recordUndoOnly?: boolean;
|
|
71
75
|
}
|
|
72
76
|
|
|
73
77
|
// ---------------------------------------------------------------------------
|
|
@@ -400,10 +404,9 @@ const pendingOpsQueue = new Map<string, GranularOp[]>();
|
|
|
400
404
|
// whole request duration, starving unrelated agent writes of live sync.
|
|
401
405
|
const inFlightOpSlides = new Map<string, GranularOp[]>();
|
|
402
406
|
|
|
403
|
-
// Slides currently mid inline-edit (contentEditable open
|
|
404
|
-
//
|
|
405
|
-
//
|
|
406
|
-
// ends, so this is the only signal that catches live, uncommitted typing.
|
|
407
|
+
// Slides currently mid inline-edit (contentEditable open). `onInlineEditStart`
|
|
408
|
+
// /`onInlineEditEnd` keep this current while content captures queue granular
|
|
409
|
+
// ops without replacing the live DOM.
|
|
407
410
|
const activeInlineEditSlides = new Map<string, Set<string>>();
|
|
408
411
|
|
|
409
412
|
/** Mark `slideId` as mid inline-edit so a concurrent agent write to the same
|
|
@@ -726,7 +729,10 @@ async function flushDeckSave(deckId: string): Promise<void> {
|
|
|
726
729
|
function enqueueDeckOp(
|
|
727
730
|
deckId: string,
|
|
728
731
|
op: GranularOp,
|
|
729
|
-
options?: {
|
|
732
|
+
options?: {
|
|
733
|
+
persistence?: "debounced" | "immediate";
|
|
734
|
+
coalesceContent?: boolean;
|
|
735
|
+
},
|
|
730
736
|
) {
|
|
731
737
|
const existing = pendingSaves.get(deckId);
|
|
732
738
|
if (existing) clearTimeout(existing);
|
|
@@ -743,7 +749,21 @@ function enqueueDeckOp(
|
|
|
743
749
|
pendingOpsQueue.set(deckId, [op]);
|
|
744
750
|
} else {
|
|
745
751
|
const queue = pendingOpsQueue.get(deckId) ?? [];
|
|
746
|
-
queue.
|
|
752
|
+
const previous = queue[queue.length - 1];
|
|
753
|
+
if (
|
|
754
|
+
options?.coalesceContent &&
|
|
755
|
+
previous?.op === "patch-slide" &&
|
|
756
|
+
op.op === "patch-slide" &&
|
|
757
|
+
previous.slideId === op.slideId &&
|
|
758
|
+
Object.keys(previous.fields).length === 1 &&
|
|
759
|
+
Object.keys(op.fields).length === 1 &&
|
|
760
|
+
"content" in previous.fields &&
|
|
761
|
+
"content" in op.fields
|
|
762
|
+
) {
|
|
763
|
+
queue[queue.length - 1] = op;
|
|
764
|
+
} else {
|
|
765
|
+
queue.push(op);
|
|
766
|
+
}
|
|
747
767
|
pendingOpsQueue.set(deckId, queue);
|
|
748
768
|
}
|
|
749
769
|
|
|
@@ -1694,7 +1714,8 @@ export function DeckProvider({ children }: { children: ReactNode }) {
|
|
|
1694
1714
|
|
|
1695
1715
|
const hasLocalEdits =
|
|
1696
1716
|
pendingCreateIdsRef.current.has(currentOpenId) ||
|
|
1697
|
-
hasUncommittedDeckChanges(currentOpenId, dirtyDeckIdsRef.current)
|
|
1717
|
+
hasUncommittedDeckChanges(currentOpenId, dirtyDeckIdsRef.current) ||
|
|
1718
|
+
(activeInlineEditSlides.get(currentOpenId)?.size ?? 0) > 0;
|
|
1698
1719
|
|
|
1699
1720
|
if (hasLocalEdits && clientDeck) {
|
|
1700
1721
|
// Content-preserving: only ADD server slides missing locally.
|
|
@@ -2447,23 +2468,57 @@ export function DeckProvider({ children }: { children: ReactNode }) {
|
|
|
2447
2468
|
: "Edit slide";
|
|
2448
2469
|
const before = decksRef.current.find((d) => d.id === deckId);
|
|
2449
2470
|
const op: PatchDeckOp = { op: "patch-slide", slideId, fields: updates };
|
|
2450
|
-
if (
|
|
2451
|
-
|
|
2452
|
-
|
|
2453
|
-
|
|
2454
|
-
|
|
2455
|
-
|
|
2456
|
-
|
|
2457
|
-
|
|
2458
|
-
|
|
2459
|
-
|
|
2460
|
-
|
|
2461
|
-
|
|
2462
|
-
|
|
2463
|
-
|
|
2471
|
+
if (
|
|
2472
|
+
before &&
|
|
2473
|
+
!deriveInverseOp(before, op) &&
|
|
2474
|
+
!options?.preserveLocalState
|
|
2475
|
+
) {
|
|
2476
|
+
return;
|
|
2477
|
+
}
|
|
2478
|
+
if (options?.recordUndoOnly) {
|
|
2479
|
+
if (before) {
|
|
2480
|
+
setDecksLocal((prev: Deck[]) =>
|
|
2481
|
+
prev.map((d) => {
|
|
2482
|
+
if (d.id !== deckId) return d;
|
|
2483
|
+
return {
|
|
2484
|
+
...d,
|
|
2485
|
+
slides: d.slides.map((s) =>
|
|
2486
|
+
s.id === slideId ? { ...s, ...updates } : s,
|
|
2487
|
+
),
|
|
2488
|
+
updatedAt: new Date().toISOString(),
|
|
2489
|
+
};
|
|
2490
|
+
}),
|
|
2491
|
+
);
|
|
2492
|
+
recordUndo(before, op, {
|
|
2493
|
+
label,
|
|
2494
|
+
coalesceKey: `${deckId}:${slideId}:${Object.keys(updates)
|
|
2495
|
+
.sort()
|
|
2496
|
+
.join(",")}`,
|
|
2497
|
+
});
|
|
2498
|
+
}
|
|
2499
|
+
return;
|
|
2500
|
+
}
|
|
2501
|
+
if (!options?.preserveLocalState) markDeckDirty(deckId);
|
|
2502
|
+
if (!options?.preserveLocalState) {
|
|
2503
|
+
setDecksLocal((prev: Deck[]) =>
|
|
2504
|
+
prev.map((d) => {
|
|
2505
|
+
if (d.id !== deckId) return d;
|
|
2506
|
+
return {
|
|
2507
|
+
...d,
|
|
2508
|
+
slides: d.slides.map((s) =>
|
|
2509
|
+
s.id === slideId ? { ...s, ...updates } : s,
|
|
2510
|
+
),
|
|
2511
|
+
updatedAt: new Date().toISOString(),
|
|
2512
|
+
};
|
|
2513
|
+
}),
|
|
2514
|
+
);
|
|
2515
|
+
}
|
|
2464
2516
|
// Granular op — only this slide's changed fields reach the server.
|
|
2465
|
-
enqueueDeckOp(deckId, op,
|
|
2466
|
-
|
|
2517
|
+
enqueueDeckOp(deckId, op, {
|
|
2518
|
+
persistence: options?.persistence,
|
|
2519
|
+
coalesceContent: options?.preserveLocalState,
|
|
2520
|
+
});
|
|
2521
|
+
if (before && !options?.preserveLocalState) {
|
|
2467
2522
|
// Coalesce a burst of edits to the SAME slide's SAME field-set into one
|
|
2468
2523
|
// undo step (e.g. typing characters into inline text). Distinct
|
|
2469
2524
|
// field-sets (content vs background vs layout) get distinct undo steps.
|
|
@@ -160,7 +160,6 @@ export default function DeckEditor() {
|
|
|
160
160
|
addSlide,
|
|
161
161
|
flushDeckSave,
|
|
162
162
|
reorderSlides,
|
|
163
|
-
markDeckDirty,
|
|
164
163
|
undo,
|
|
165
164
|
loading,
|
|
166
165
|
loadError,
|
|
@@ -180,11 +179,13 @@ export default function DeckEditor() {
|
|
|
180
179
|
}, []);
|
|
181
180
|
const [generatingSlideSelected, setGeneratingSlideSelected] = useState(false);
|
|
182
181
|
const { hasUnsavedChanges: hasUnsavedSave } = useSaveState();
|
|
183
|
-
|
|
184
|
-
|
|
182
|
+
// useSaveState re-renders this component when a preserved inline draft enters
|
|
183
|
+
// or leaves the shared save queue, so the deck-specific read stays current.
|
|
184
|
+
const hasPendingDeckWrites = id ? hasUnsavedDeckChanges(id) : hasUnsavedSave;
|
|
185
|
+
const hasPendingDeckEdits = inlineEditActive || hasPendingDeckWrites;
|
|
185
186
|
// Inline drafts flush through SlideEditor keepalive handlers. The native
|
|
186
187
|
// prompt only needs to cover queued or in-flight writes now.
|
|
187
|
-
usePendingDeckUnloadGuard(
|
|
188
|
+
usePendingDeckUnloadGuard(hasPendingDeckWrites);
|
|
188
189
|
const pendingDeckNavigationBlocker = useBlocker(
|
|
189
190
|
useCallback(
|
|
190
191
|
({ currentLocation, nextLocation }) =>
|
|
@@ -1775,7 +1776,6 @@ export default function DeckEditor() {
|
|
|
1775
1776
|
}
|
|
1776
1777
|
onInlineEditStart={(slideId) => {
|
|
1777
1778
|
setInlineEditActive(true);
|
|
1778
|
-
markDeckDirty(id);
|
|
1779
1779
|
if (id) markSlideEditingActive(id, slideId);
|
|
1780
1780
|
}}
|
|
1781
1781
|
onInlineEditEnd={(slideId) => {
|
|
@@ -137,13 +137,13 @@ export declare function screenMemoryMcpToolDefinitions(): ({
|
|
|
137
137
|
inputSchema: {
|
|
138
138
|
type: string;
|
|
139
139
|
properties: {
|
|
140
|
-
count?: undefined;
|
|
141
140
|
query?: undefined;
|
|
142
141
|
minutes?: undefined;
|
|
143
142
|
limit?: undefined;
|
|
144
143
|
clientHint?: undefined;
|
|
145
144
|
timestamp?: undefined;
|
|
146
145
|
chapterId?: undefined;
|
|
146
|
+
count?: undefined;
|
|
147
147
|
startAt?: undefined;
|
|
148
148
|
endAt?: undefined;
|
|
149
149
|
reason?: undefined;
|
|
@@ -159,7 +159,6 @@ export declare function screenMemoryMcpToolDefinitions(): ({
|
|
|
159
159
|
inputSchema: {
|
|
160
160
|
type: string;
|
|
161
161
|
properties: {
|
|
162
|
-
count?: undefined;
|
|
163
162
|
query: {
|
|
164
163
|
type: string;
|
|
165
164
|
description: string;
|
|
@@ -175,6 +174,7 @@ export declare function screenMemoryMcpToolDefinitions(): ({
|
|
|
175
174
|
clientHint?: undefined;
|
|
176
175
|
timestamp?: undefined;
|
|
177
176
|
chapterId?: undefined;
|
|
177
|
+
count?: undefined;
|
|
178
178
|
startAt?: undefined;
|
|
179
179
|
endAt?: undefined;
|
|
180
180
|
reason?: undefined;
|
|
@@ -190,7 +190,6 @@ export declare function screenMemoryMcpToolDefinitions(): ({
|
|
|
190
190
|
inputSchema: {
|
|
191
191
|
type: string;
|
|
192
192
|
properties: {
|
|
193
|
-
count?: undefined;
|
|
194
193
|
minutes: {
|
|
195
194
|
type: string;
|
|
196
195
|
description: string;
|
|
@@ -200,6 +199,7 @@ export declare function screenMemoryMcpToolDefinitions(): ({
|
|
|
200
199
|
clientHint?: undefined;
|
|
201
200
|
timestamp?: undefined;
|
|
202
201
|
chapterId?: undefined;
|
|
202
|
+
count?: undefined;
|
|
203
203
|
startAt?: undefined;
|
|
204
204
|
endAt?: undefined;
|
|
205
205
|
reason?: undefined;
|
|
@@ -216,7 +216,6 @@ export declare function screenMemoryMcpToolDefinitions(): ({
|
|
|
216
216
|
type: string;
|
|
217
217
|
required: string[];
|
|
218
218
|
properties: {
|
|
219
|
-
count?: undefined;
|
|
220
219
|
query: {
|
|
221
220
|
type: string;
|
|
222
221
|
description: string;
|
|
@@ -235,6 +234,7 @@ export declare function screenMemoryMcpToolDefinitions(): ({
|
|
|
235
234
|
};
|
|
236
235
|
timestamp?: undefined;
|
|
237
236
|
chapterId?: undefined;
|
|
237
|
+
count?: undefined;
|
|
238
238
|
startAt?: undefined;
|
|
239
239
|
endAt?: undefined;
|
|
240
240
|
reason?: undefined;
|
|
@@ -250,7 +250,6 @@ export declare function screenMemoryMcpToolDefinitions(): ({
|
|
|
250
250
|
type: string;
|
|
251
251
|
required: string[];
|
|
252
252
|
properties: {
|
|
253
|
-
count?: undefined;
|
|
254
253
|
query?: undefined;
|
|
255
254
|
minutes?: undefined;
|
|
256
255
|
limit?: undefined;
|
|
@@ -264,6 +263,7 @@ export declare function screenMemoryMcpToolDefinitions(): ({
|
|
|
264
263
|
description: string;
|
|
265
264
|
};
|
|
266
265
|
chapterId?: undefined;
|
|
266
|
+
count?: undefined;
|
|
267
267
|
startAt?: undefined;
|
|
268
268
|
endAt?: undefined;
|
|
269
269
|
includeMicrophone?: undefined;
|
|
@@ -314,13 +314,13 @@ export declare function screenMemoryMcpToolDefinitions(): ({
|
|
|
314
314
|
type: string;
|
|
315
315
|
required: string[];
|
|
316
316
|
properties: {
|
|
317
|
-
count?: undefined;
|
|
318
317
|
query?: undefined;
|
|
319
318
|
minutes?: undefined;
|
|
320
319
|
limit?: undefined;
|
|
321
320
|
clientHint?: undefined;
|
|
322
321
|
timestamp?: undefined;
|
|
323
322
|
chapterId?: undefined;
|
|
323
|
+
count?: undefined;
|
|
324
324
|
startAt: {
|
|
325
325
|
type: string;
|
|
326
326
|
description: string;
|
|
@@ -349,13 +349,13 @@ export declare function screenMemoryMcpToolDefinitions(): ({
|
|
|
349
349
|
type: string;
|
|
350
350
|
required: string[];
|
|
351
351
|
properties: {
|
|
352
|
-
count?: undefined;
|
|
353
352
|
query?: undefined;
|
|
354
353
|
minutes?: undefined;
|
|
355
354
|
limit?: undefined;
|
|
356
355
|
clientHint?: undefined;
|
|
357
356
|
timestamp?: undefined;
|
|
358
357
|
chapterId?: undefined;
|
|
358
|
+
count?: undefined;
|
|
359
359
|
startAt?: undefined;
|
|
360
360
|
endAt?: undefined;
|
|
361
361
|
reason?: undefined;
|
|
@@ -16,18 +16,18 @@ export declare function createNotificationsHandler(): import("h3").EventHandlerW
|
|
|
16
16
|
error?: undefined;
|
|
17
17
|
ok?: undefined;
|
|
18
18
|
} | {
|
|
19
|
-
count?: undefined;
|
|
20
19
|
updated: number;
|
|
21
20
|
error?: undefined;
|
|
22
21
|
ok?: undefined;
|
|
23
|
-
} | {
|
|
24
22
|
count?: undefined;
|
|
23
|
+
} | {
|
|
25
24
|
updated?: undefined;
|
|
26
25
|
error: string;
|
|
27
26
|
ok?: undefined;
|
|
28
|
-
} | {
|
|
29
27
|
count?: undefined;
|
|
28
|
+
} | {
|
|
30
29
|
updated?: undefined;
|
|
31
30
|
error?: undefined;
|
|
32
31
|
ok: boolean;
|
|
32
|
+
count?: undefined;
|
|
33
33
|
}>>;
|
|
@@ -42,22 +42,22 @@ export declare function createObservabilityHandler(): import("h3").EventHandlerW
|
|
|
42
42
|
avgEvalScore: number;
|
|
43
43
|
} | {
|
|
44
44
|
error?: undefined;
|
|
45
|
-
ok?: undefined;
|
|
46
45
|
summary: import("./types.js").TraceSummary;
|
|
47
46
|
spans: import("./types.js").TraceSpan[];
|
|
48
47
|
id?: undefined;
|
|
48
|
+
ok?: undefined;
|
|
49
49
|
} | {
|
|
50
50
|
error?: undefined;
|
|
51
|
-
ok?: undefined;
|
|
52
51
|
summary?: undefined;
|
|
53
52
|
spans?: undefined;
|
|
54
53
|
id: string;
|
|
55
|
-
} | {
|
|
56
54
|
ok?: undefined;
|
|
55
|
+
} | {
|
|
57
56
|
summary?: undefined;
|
|
58
57
|
spans?: undefined;
|
|
59
58
|
id?: undefined;
|
|
60
59
|
error: any;
|
|
60
|
+
ok?: undefined;
|
|
61
61
|
} | {
|
|
62
62
|
error?: undefined;
|
|
63
63
|
summary?: undefined;
|
package/dist/secrets/routes.d.ts
CHANGED
|
@@ -34,37 +34,37 @@ export declare function createListSecretsHandler(): import("h3").EventHandlerWit
|
|
|
34
34
|
/** POST /_agent-native/secrets/:key — write a secret. */
|
|
35
35
|
export declare function createWriteSecretHandler(): import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<{
|
|
36
36
|
error: string;
|
|
37
|
-
ok?: undefined;
|
|
38
37
|
status?: undefined;
|
|
38
|
+
ok?: undefined;
|
|
39
39
|
} | {
|
|
40
|
-
error?: undefined;
|
|
41
40
|
ok: boolean;
|
|
42
41
|
status: string;
|
|
42
|
+
error?: undefined;
|
|
43
43
|
} | {
|
|
44
|
-
ok?: undefined;
|
|
45
44
|
error: string;
|
|
46
45
|
removed?: undefined;
|
|
46
|
+
ok?: undefined;
|
|
47
47
|
} | {
|
|
48
|
-
error?: undefined;
|
|
49
48
|
ok: boolean;
|
|
50
49
|
removed: boolean;
|
|
50
|
+
error?: undefined;
|
|
51
51
|
}>>;
|
|
52
52
|
/**
|
|
53
53
|
* POST /_agent-native/secrets/:key/test — validate an optional candidate value
|
|
54
54
|
* or the current stored value without changing anything.
|
|
55
55
|
*/
|
|
56
56
|
export declare function createTestSecretHandler(): import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<{
|
|
57
|
-
ok?: undefined;
|
|
58
57
|
error: string;
|
|
59
58
|
note?: undefined;
|
|
59
|
+
ok?: undefined;
|
|
60
60
|
} | {
|
|
61
|
-
error?: undefined;
|
|
62
61
|
ok: boolean;
|
|
63
62
|
note?: undefined;
|
|
64
|
-
} | {
|
|
65
63
|
error?: undefined;
|
|
64
|
+
} | {
|
|
66
65
|
ok: boolean;
|
|
67
66
|
note: string;
|
|
67
|
+
error?: undefined;
|
|
68
68
|
} | {
|
|
69
69
|
note?: undefined;
|
|
70
70
|
ok: boolean;
|
|
@@ -95,11 +95,11 @@ export interface AdHocSecretPayload {
|
|
|
95
95
|
export declare function createAdHocSecretHandler(): import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<AdHocSecretPayload[] | {
|
|
96
96
|
error: string;
|
|
97
97
|
} | {
|
|
98
|
-
error?: undefined;
|
|
99
98
|
ok: boolean;
|
|
100
99
|
key: string;
|
|
101
|
-
} | {
|
|
102
100
|
error?: undefined;
|
|
101
|
+
} | {
|
|
103
102
|
ok: boolean;
|
|
104
103
|
removed: boolean;
|
|
104
|
+
error?: undefined;
|
|
105
105
|
}>>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-native/core",
|
|
3
|
-
"version": "0.175.
|
|
3
|
+
"version": "0.175.3",
|
|
4
4
|
"description": "Framework for agent-native application development — where AI agents and UI share SQL state, actions, and context",
|
|
5
5
|
"homepage": "https://github.com/BuilderIO/agent-native#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -432,8 +432,8 @@
|
|
|
432
432
|
"y-protocols": "^1.0.7",
|
|
433
433
|
"yjs": "^13.6.32",
|
|
434
434
|
"zod": "^4.3.6",
|
|
435
|
-
"@agent-native/recap-cli": "0.5.
|
|
436
|
-
"@agent-native/toolkit": "^0.17.2
|
|
435
|
+
"@agent-native/recap-cli": "0.5.16",
|
|
436
|
+
"@agent-native/toolkit": "^0.17.2"
|
|
437
437
|
},
|
|
438
438
|
"devDependencies": {
|
|
439
439
|
"@ai-sdk/anthropic": "^3.0.71",
|