@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.
Files changed (31) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/templates/clips/app/components/player/comments-panel.tsx +1 -1
  3. package/corpus/templates/clips/desktop/src/app.tsx +171 -51
  4. package/corpus/templates/clips/desktop/src/lib/pill-completion.ts +111 -0
  5. package/corpus/templates/clips/desktop/src/lib/pill-session.ts +34 -0
  6. package/corpus/templates/clips/desktop/src/lib/recorder.ts +181 -79
  7. package/corpus/templates/clips/desktop/src/lib/rewind-recording-start.ts +28 -4
  8. package/corpus/templates/clips/desktop/src/main.tsx +4 -4
  9. package/corpus/templates/clips/desktop/src/overlays/record-pill.tsx +1320 -0
  10. package/corpus/templates/clips/desktop/src/overlays/recording-pill.tsx +1 -1
  11. package/corpus/templates/clips/desktop/src/styles.css +20 -308
  12. package/corpus/templates/clips/desktop/src/tailwind.css +85 -0
  13. package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +153 -70
  14. package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +15 -0
  15. package/corpus/templates/clips/desktop/src-tauri/src/native_screen/custom_capture.rs +25 -7
  16. package/corpus/templates/clips/desktop/src-tauri/src/native_screen/live_upload.rs +3 -3
  17. package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +375 -24
  18. package/corpus/templates/clips/desktop/src-tauri/src/recording_indicator.rs +22 -30
  19. package/corpus/templates/clips/desktop/src-tauri/src/rewind_clip.rs +5 -0
  20. package/corpus/templates/clips/desktop/src-tauri/src/screen_memory.rs +134 -14
  21. package/corpus/templates/clips/desktop/src-tauri/src/tray.rs +233 -4
  22. package/corpus/templates/clips/desktop/src-tauri/src/util.rs +8 -5
  23. package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +50 -28
  24. package/corpus/templates/slides/app/context/DeckContext.tsx +78 -23
  25. package/corpus/templates/slides/app/pages/DeckEditor.tsx +5 -5
  26. package/dist/mcp/screen-memory-stdio.d.ts +7 -7
  27. package/dist/notifications/routes.d.ts +3 -3
  28. package/dist/observability/routes.d.ts +3 -3
  29. package/dist/secrets/routes.d.ts +9 -9
  30. package/package.json +3 -3
  31. 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 call `markDeckDirty(deckId)` here so the SSE/poll
666
- * reconcile path knows not to replace the deck under an active in-progress
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
- const draft = inlineEditDraftRef.current;
1562
- if (!draft) return;
1563
- onUpdateSlideRef.current({ content: draft.content }, draft.slideId, {
1564
- persistence: "debounced",
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
- !inlineEditInitialContentRef.current ||
1653
- inlineEditInitialContentRef.current.slideId !== slideId
1655
+ previous?.slideId === slideId &&
1656
+ previous.content !== next.content
1654
1657
  ) {
1655
- inlineEditInitialContentRef.current = { slideId, content: html };
1658
+ onUpdateSlideRef.current({ content: html }, slideId, {
1659
+ preserveLocalState: true,
1660
+ });
1656
1661
  }
1657
- inlineEditDraftRef.current = { slideId, content: html };
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
- html !== null &&
1925
- shouldPersistInlineEditContent(initial, {
1926
- slideId: slide.id,
1927
- content: html,
1928
- })
1929
- ) {
1930
- onUpdateSlideRef.current({ content: html });
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 deck dirty immediately so SSE/poll refreshes do not replace
1970
- // the deck under an active contentEditable edit, even before the user
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
- inlineEditDraftRef.current = null;
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
- if (editingElRef.current || inlineEditDraftRef.current) {
2027
- onInlineEditEndRef.current?.(previousSlideIdRef.current);
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, keystrokes not yet
404
- // committed to a "patch-slide" op). `onInlineEditStart`/`onInlineEditEnd`
405
- // keep this current; a slide only reaches `pendingOpsQueue` when editing
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?: { persistence?: "debounced" | "immediate" },
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.push(op);
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 (before && !deriveInverseOp(before, op)) return;
2451
- markDeckDirty(deckId);
2452
- setDecksLocal((prev: Deck[]) =>
2453
- prev.map((d) => {
2454
- if (d.id !== deckId) return d;
2455
- return {
2456
- ...d,
2457
- slides: d.slides.map((s) =>
2458
- s.id === slideId ? { ...s, ...updates } : s,
2459
- ),
2460
- updatedAt: new Date().toISOString(),
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, options);
2466
- if (before) {
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
- const hasPendingDeckEdits =
184
- inlineEditActive || (id ? hasUnsavedDeckChanges(id) : hasUnsavedSave);
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(id ? hasUnsavedDeckChanges(id) : hasUnsavedSave);
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;
@@ -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.2-nightly-20260826165737",
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.15",
436
- "@agent-native/toolkit": "^0.17.2-nightly-20260826165737"
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",