@agent-native/toolkit 0.21.3 → 0.22.0-nightly-20260926111339

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 (166) hide show
  1. package/agent-native.eject.json +11 -20
  2. package/dist/agentkit.d.ts +5 -1
  3. package/dist/agentkit.d.ts.map +1 -1
  4. package/dist/agentkit.js +2 -0
  5. package/dist/agentkit.js.map +1 -1
  6. package/dist/app-shell/PromptHome.d.ts +26 -0
  7. package/dist/app-shell/PromptHome.d.ts.map +1 -0
  8. package/dist/app-shell/PromptHome.js +19 -0
  9. package/dist/app-shell/PromptHome.js.map +1 -0
  10. package/dist/app-shell/PromptHome.spec.d.ts +2 -0
  11. package/dist/app-shell/PromptHome.spec.d.ts.map +1 -0
  12. package/dist/app-shell/PromptHome.spec.js +206 -0
  13. package/dist/app-shell/PromptHome.spec.js.map +1 -0
  14. package/dist/app-shell/TemplateLibraryGrid.d.ts +48 -0
  15. package/dist/app-shell/TemplateLibraryGrid.d.ts.map +1 -0
  16. package/dist/app-shell/TemplateLibraryGrid.js +20 -0
  17. package/dist/app-shell/TemplateLibraryGrid.js.map +1 -0
  18. package/dist/app-shell/TemplatePreviewDialog.d.ts +41 -0
  19. package/dist/app-shell/TemplatePreviewDialog.d.ts.map +1 -0
  20. package/dist/app-shell/TemplatePreviewDialog.js +50 -0
  21. package/dist/app-shell/TemplatePreviewDialog.js.map +1 -0
  22. package/dist/app-shell/TemplatePreviewDialog.spec.d.ts +2 -0
  23. package/dist/app-shell/TemplatePreviewDialog.spec.d.ts.map +1 -0
  24. package/dist/app-shell/TemplatePreviewDialog.spec.js +258 -0
  25. package/dist/app-shell/TemplatePreviewDialog.spec.js.map +1 -0
  26. package/dist/app-shell/index.d.ts +3 -0
  27. package/dist/app-shell/index.d.ts.map +1 -1
  28. package/dist/app-shell/index.js +3 -0
  29. package/dist/app-shell/index.js.map +1 -1
  30. package/dist/app-shell/prompt-home.css +159 -0
  31. package/dist/composer/ComposerContextMenu.d.ts +48 -0
  32. package/dist/composer/ComposerContextMenu.d.ts.map +1 -0
  33. package/dist/composer/ComposerContextMenu.js +295 -0
  34. package/dist/composer/ComposerContextMenu.js.map +1 -0
  35. package/dist/composer/ComposerContextMenu.spec.d.ts +2 -0
  36. package/dist/composer/ComposerContextMenu.spec.d.ts.map +1 -0
  37. package/dist/composer/ComposerContextMenu.spec.js +270 -0
  38. package/dist/composer/ComposerContextMenu.spec.js.map +1 -0
  39. package/dist/composer/ComposerContextMenuSearch.d.ts +11 -0
  40. package/dist/composer/ComposerContextMenuSearch.d.ts.map +1 -0
  41. package/dist/composer/ComposerContextMenuSearch.js +42 -0
  42. package/dist/composer/ComposerContextMenuSearch.js.map +1 -0
  43. package/dist/composer/ComposerContextPicker.d.ts +7 -0
  44. package/dist/composer/ComposerContextPicker.d.ts.map +1 -0
  45. package/dist/composer/ComposerContextPicker.js +71 -0
  46. package/dist/composer/ComposerContextPicker.js.map +1 -0
  47. package/dist/composer/ComposerContextPicker.spec.d.ts +2 -0
  48. package/dist/composer/ComposerContextPicker.spec.d.ts.map +1 -0
  49. package/dist/composer/ComposerContextPicker.spec.js +454 -0
  50. package/dist/composer/ComposerContextPicker.spec.js.map +1 -0
  51. package/dist/composer/ComposerContextPickerDialog.d.ts +8 -0
  52. package/dist/composer/ComposerContextPickerDialog.d.ts.map +1 -0
  53. package/dist/composer/ComposerContextPickerDialog.js +101 -0
  54. package/dist/composer/ComposerContextPickerDialog.js.map +1 -0
  55. package/dist/composer/ComposerContextPickerDialog.spec.d.ts +2 -0
  56. package/dist/composer/ComposerContextPickerDialog.spec.d.ts.map +1 -0
  57. package/dist/composer/ComposerContextPickerDialog.spec.js +329 -0
  58. package/dist/composer/ComposerContextPickerDialog.spec.js.map +1 -0
  59. package/dist/composer/ComposerContextSearchInput.d.ts +7 -0
  60. package/dist/composer/ComposerContextSearchInput.d.ts.map +1 -0
  61. package/dist/composer/ComposerContextSearchInput.js +18 -0
  62. package/dist/composer/ComposerContextSearchInput.js.map +1 -0
  63. package/dist/composer/PromptComposer.context.spec.d.ts +2 -0
  64. package/dist/composer/PromptComposer.context.spec.d.ts.map +1 -0
  65. package/dist/composer/PromptComposer.context.spec.js +383 -0
  66. package/dist/composer/PromptComposer.context.spec.js.map +1 -0
  67. package/dist/composer/PromptComposer.d.ts +19 -5
  68. package/dist/composer/PromptComposer.d.ts.map +1 -1
  69. package/dist/composer/PromptComposer.js +30 -25
  70. package/dist/composer/PromptComposer.js.map +1 -1
  71. package/dist/composer/PromptComposer.spec.js +24 -1
  72. package/dist/composer/PromptComposer.spec.js.map +1 -1
  73. package/dist/composer/TiptapComposer.d.ts +13 -2
  74. package/dist/composer/TiptapComposer.d.ts.map +1 -1
  75. package/dist/composer/TiptapComposer.js +89 -32
  76. package/dist/composer/TiptapComposer.js.map +1 -1
  77. package/dist/composer/context-items.d.ts +12 -0
  78. package/dist/composer/context-items.d.ts.map +1 -0
  79. package/dist/composer/context-items.js +46 -0
  80. package/dist/composer/context-items.js.map +1 -0
  81. package/dist/composer/context-items.spec.d.ts +2 -0
  82. package/dist/composer/context-items.spec.d.ts.map +1 -0
  83. package/dist/composer/context-items.spec.js +43 -0
  84. package/dist/composer/context-items.spec.js.map +1 -0
  85. package/dist/composer/index.d.ts +4 -1
  86. package/dist/composer/index.d.ts.map +1 -1
  87. package/dist/composer/index.js +3 -1
  88. package/dist/composer/index.js.map +1 -1
  89. package/dist/composer/runtime-adapters.d.ts +6 -1
  90. package/dist/composer/runtime-adapters.d.ts.map +1 -1
  91. package/dist/composer/runtime-adapters.js.map +1 -1
  92. package/dist/composer/useComposerContextPicker.d.ts +111 -0
  93. package/dist/composer/useComposerContextPicker.d.ts.map +1 -0
  94. package/dist/composer/useComposerContextPicker.js +299 -0
  95. package/dist/composer/useComposerContextPicker.js.map +1 -0
  96. package/dist/design-system/default-adapter.d.ts.map +1 -1
  97. package/dist/design-system/default-adapter.js +13 -7
  98. package/dist/design-system/default-adapter.js.map +1 -1
  99. package/dist/design-system/default-adapter.spec.js +13 -0
  100. package/dist/design-system/default-adapter.spec.js.map +1 -1
  101. package/dist/design-system/types.d.ts +4 -1
  102. package/dist/design-system/types.d.ts.map +1 -1
  103. package/dist/index.d.ts +0 -1
  104. package/dist/index.d.ts.map +1 -1
  105. package/dist/index.js +0 -1
  106. package/dist/index.js.map +1 -1
  107. package/dist/styles.css +1 -0
  108. package/dist/ui/command.d.ts +8 -2
  109. package/dist/ui/command.d.ts.map +1 -1
  110. package/dist/ui/command.js +9 -2
  111. package/dist/ui/command.js.map +1 -1
  112. package/dist/ui/command.spec.js +20 -1
  113. package/dist/ui/command.spec.js.map +1 -1
  114. package/package.json +2 -15
  115. package/src/agentkit.ts +26 -0
  116. package/src/app-shell/PromptHome.spec.tsx +404 -0
  117. package/src/app-shell/PromptHome.tsx +111 -0
  118. package/src/app-shell/TemplateLibraryGrid.tsx +212 -0
  119. package/src/app-shell/TemplatePreviewDialog.spec.tsx +473 -0
  120. package/src/app-shell/TemplatePreviewDialog.tsx +224 -0
  121. package/src/app-shell/index.ts +3 -0
  122. package/src/app-shell/prompt-home.css +159 -0
  123. package/src/composer/ComposerContextMenu.spec.tsx +343 -0
  124. package/src/composer/ComposerContextMenu.tsx +610 -0
  125. package/src/composer/ComposerContextMenuSearch.tsx +69 -0
  126. package/src/composer/ComposerContextPicker.spec.tsx +520 -0
  127. package/src/composer/ComposerContextPicker.tsx +280 -0
  128. package/src/composer/ComposerContextPickerDialog.spec.tsx +405 -0
  129. package/src/composer/ComposerContextPickerDialog.tsx +274 -0
  130. package/src/composer/ComposerContextSearchInput.tsx +48 -0
  131. package/src/composer/PromptComposer.context.spec.tsx +577 -0
  132. package/src/composer/PromptComposer.spec.ts +24 -1
  133. package/src/composer/PromptComposer.tsx +60 -26
  134. package/src/composer/TiptapComposer.tsx +198 -48
  135. package/src/composer/context-items.spec.ts +68 -0
  136. package/src/composer/context-items.ts +72 -0
  137. package/src/composer/index.ts +27 -0
  138. package/src/composer/runtime-adapters.tsx +6 -1
  139. package/src/composer/useComposerContextPicker.ts +441 -0
  140. package/src/design-system/default-adapter.spec.tsx +23 -0
  141. package/src/design-system/default-adapter.tsx +52 -23
  142. package/src/design-system/types.ts +4 -1
  143. package/src/index.ts +0 -1
  144. package/src/styles.css +1 -0
  145. package/src/ui/command.spec.tsx +33 -1
  146. package/src/ui/command.tsx +52 -9
  147. package/dist/marketing/MarketingHome.d.ts +0 -36
  148. package/dist/marketing/MarketingHome.d.ts.map +0 -1
  149. package/dist/marketing/MarketingHome.js +0 -28
  150. package/dist/marketing/MarketingHome.js.map +0 -1
  151. package/dist/marketing/MarketingHome.spec.d.ts +0 -2
  152. package/dist/marketing/MarketingHome.spec.d.ts.map +0 -1
  153. package/dist/marketing/MarketingHome.spec.js +0 -44
  154. package/dist/marketing/MarketingHome.spec.js.map +0 -1
  155. package/dist/marketing/Starfield.d.ts +0 -8
  156. package/dist/marketing/Starfield.d.ts.map +0 -1
  157. package/dist/marketing/Starfield.js +0 -349
  158. package/dist/marketing/Starfield.js.map +0 -1
  159. package/dist/marketing/index.d.ts +0 -3
  160. package/dist/marketing/index.d.ts.map +0 -1
  161. package/dist/marketing/index.js +0 -3
  162. package/dist/marketing/index.js.map +0 -1
  163. package/src/marketing/MarketingHome.spec.tsx +0 -75
  164. package/src/marketing/MarketingHome.tsx +0 -183
  165. package/src/marketing/Starfield.tsx +0 -403
  166. package/src/marketing/index.ts +0 -6
@@ -36,12 +36,15 @@ import {
36
36
  PROMPT_DOCUMENT_ATTACHMENT_ACCEPT,
37
37
  TextAttachmentAdapter,
38
38
  } from "./attachment-accept.js";
39
+ import type { ComposerContextMenuItem } from "./ComposerContextMenu.js";
39
40
  import type { ComposerTerminalModeControl } from "./ComposerPlusMenu.js";
41
+ import type { ComposerContextSnapshot } from "./context-items.js";
40
42
  import { isPastedTextAttachmentName } from "./pasted-text.js";
41
43
  import { PastedTextChip } from "./PastedTextChip.js";
42
44
  import { escapePromptAttachmentAttribute } from "./prompt-attachments.js";
43
45
  import {
44
46
  type EngineModelGroup,
47
+ type AgentChatContextItem,
45
48
  type ReasoningEffort,
46
49
  useComposerRuntimeAdapters,
47
50
  } from "./runtime-adapters.js";
@@ -75,9 +78,15 @@ export interface PromptComposerSubmitOptions {
75
78
  engine?: string;
76
79
  effort?: ReasoningEffort;
77
80
  attachments?: ReadonlyArray<unknown>;
81
+ contextItems?: ComposerContextSnapshot;
78
82
  }
79
83
 
80
84
  export interface PromptComposerProps {
85
+ contextItems?: readonly AgentChatContextItem[];
86
+ onRemoveContextItem?: (key: string) => void;
87
+ onInspectContextItem?: (key: string) => void;
88
+ onRetryContextItem?: (key: string) => void;
89
+ contextMenuItems?: readonly ComposerContextMenuItem[];
81
90
  /** Called when the user submits the composer. */
82
91
  onSubmit: (
83
92
  text: string,
@@ -89,6 +98,8 @@ export interface PromptComposerProps {
89
98
  /** Accessible name forwarded to the rich text editor. */
90
99
  ariaLabel?: string;
91
100
  disabled?: boolean;
101
+ /** Block all submission paths while allowing draft, file, and context staging. */
102
+ submissionDisabled?: boolean;
92
103
  /** Prevent submission while preserving editor focus and draft entry. */
93
104
  submitting?: boolean;
94
105
  /** Present the primary action as queueing instead of immediate send. */
@@ -118,6 +129,10 @@ export interface PromptComposerProps {
118
129
  voiceEnabled?: boolean;
119
130
  /** Show file upload controls and pass submitted files to onSubmit (default: true). */
120
131
  attachmentsEnabled?: boolean;
132
+ /** Host-owned file acceptance and staging; the shared composer still owns picker and chips. */
133
+ attachmentAdapter?: AttachmentAdapter;
134
+ /** Let hosts extract ordinary uploaded text without also inlining it. */
135
+ inlineTextAttachments?: boolean;
121
136
  /**
122
137
  * Controls the shared "+" affordance. Defaults to upload-only for standalone
123
138
  * prompt forms; chat surfaces can opt into the full sidebar menu.
@@ -280,10 +295,8 @@ function formatInlineTextFile(name: string, text: string): string {
280
295
  }
281
296
 
282
297
  /**
283
- * Only a confirmed-missing engine that also has a setup component to render
284
- * may block typing: a disabled composer with no way out is never an acceptable
285
- * terminal state, and `unknown`/`unavailable` mean the status check has not
286
- * answered — not that no provider is configured.
298
+ * Show the attached setup treatment only for a confirmed-missing engine with
299
+ * a setup component. Unresolved status does not mean a provider is missing.
287
300
  */
288
301
  export function shouldGateComposerForMissingEngine(input: {
289
302
  state: string;
@@ -295,6 +308,7 @@ export function shouldGateComposerForMissingEngine(input: {
295
308
  export async function buildPromptComposerSubmission(options: {
296
309
  text: string;
297
310
  attachments?: ReadonlyArray<unknown>;
311
+ inlineTextAttachments?: boolean;
298
312
  }): Promise<{ text: string; files: File[] }> {
299
313
  const files: File[] = [];
300
314
  const pastedTextBlocks: string[] = [];
@@ -311,7 +325,10 @@ export async function buildPromptComposerSubmission(options: {
311
325
  files.push(file);
312
326
  }
313
327
  } else {
314
- if (isInlineableTextFile(file)) {
328
+ if (
329
+ options.inlineTextAttachments !== false &&
330
+ isInlineableTextFile(file)
331
+ ) {
315
332
  try {
316
333
  pastedTextBlocks.push(
317
334
  formatInlineTextFile(file.name, await file.text()),
@@ -519,9 +536,15 @@ function PromptAttachmentStrip() {
519
536
 
520
537
  function PromptComposerInner({
521
538
  onSubmit,
539
+ contextItems,
540
+ onRemoveContextItem,
541
+ onInspectContextItem,
542
+ onRetryContextItem,
543
+ contextMenuItems,
522
544
  placeholder,
523
545
  ariaLabel,
524
546
  disabled,
547
+ submissionDisabled,
525
548
  submitting,
526
549
  willQueue = false,
527
550
  onDisabledClick,
@@ -539,6 +562,7 @@ function PromptComposerInner({
539
562
  showAutoModelOption = true,
540
563
  voiceEnabled = DEFAULT_VOICE_DICTATION_ENABLED,
541
564
  attachmentsEnabled = true,
565
+ inlineTextAttachments = true,
542
566
  plusMenuMode,
543
567
  terminalModeControl,
544
568
  extensionTools = false,
@@ -578,7 +602,6 @@ function PromptComposerInner({
578
602
  composerRef,
579
603
  }: PromptComposerProps) {
580
604
  const adapters = useComposerRuntimeAdapters();
581
- const t = adapters.translate!;
582
605
  const modelsAdapter = adapters.models!;
583
606
  const BuilderSetupCard = modelsAdapter.BuilderSetupCard;
584
607
  const BuilderSetupContent = modelsAdapter.BuilderSetupContent;
@@ -666,6 +689,10 @@ function PromptComposerInner({
666
689
  ),
667
690
  });
668
691
  const ensureEngineReadyBeforeSubmit = useCallback(async () => {
692
+ if (agentEngineConfigured.state === "missing") {
693
+ bounceMissingKeySetup();
694
+ return false;
695
+ }
669
696
  if (agentEngineConfigured.state !== "unknown") return true;
670
697
  const state = await modelsAdapter.fetchAgentEngineConfiguredState?.(true, {
671
698
  timeoutMs: 5_000,
@@ -678,7 +705,7 @@ function PromptComposerInner({
678
705
  }, [agentEngineConfigured.state, bounceMissingKeySetup, modelsAdapter]);
679
706
 
680
707
  useEffect(() => {
681
- if (!autoFocus || gateComposer) return;
708
+ if (!autoFocus || disabled) return;
682
709
  const id = window.setTimeout(() => {
683
710
  const target =
684
711
  typeof handleRef === "object" && handleRef && "current" in handleRef
@@ -687,7 +714,7 @@ function PromptComposerInner({
687
714
  target?.focus();
688
715
  }, 50);
689
716
  return () => window.clearTimeout(id);
690
- }, [autoFocus, gateComposer, handleRef]);
717
+ }, [autoFocus, disabled, handleRef]);
691
718
 
692
719
  const handleSubmit = useCallback(
693
720
  async (
@@ -705,6 +732,7 @@ function PromptComposerInner({
705
732
  const { text: finalText, files } = await buildPromptComposerSubmission({
706
733
  text,
707
734
  attachments,
735
+ inlineTextAttachments,
708
736
  });
709
737
  await onSubmit(finalText, files, references, {
710
738
  intent: submitOptions?.intent ?? "immediate",
@@ -712,9 +740,18 @@ function PromptComposerInner({
712
740
  engine: composerEngine,
713
741
  effort: composerEffort,
714
742
  attachments,
743
+ ...(submitOptions?.contextItems === undefined
744
+ ? {}
745
+ : { contextItems: submitOptions.contextItems }),
715
746
  });
716
747
  },
717
- [composerEffort, composerEngine, composerModel, onSubmit],
748
+ [
749
+ composerEffort,
750
+ composerEngine,
751
+ composerModel,
752
+ onSubmit,
753
+ inlineTextAttachments,
754
+ ],
718
755
  );
719
756
  return (
720
757
  <>
@@ -738,7 +775,6 @@ function PromptComposerInner({
738
775
  <AgentComposerFrame
739
776
  className={cn(
740
777
  "text-start",
741
- gateComposer && "cursor-pointer",
742
778
  (gateComposer || onDisabledClick) &&
743
779
  "agent-composer-area--attached-above",
744
780
  className,
@@ -747,30 +783,27 @@ function PromptComposerInner({
747
783
  style={style}
748
784
  rootStyle={rootStyle}
749
785
  layoutVariant={layoutVariant}
750
- onClick={
751
- gateComposer
752
- ? bounceMissingKeySetup
753
- : onDisabledClick
754
- ? () => onDisabledClick()
755
- : undefined
756
- }
786
+ onClick={disabled ? onDisabledClick : undefined}
757
787
  >
758
788
  <PromptAttachmentStrip />
759
789
  <TiptapComposer
790
+ contextItems={contextItems}
791
+ contextMenuItems={contextMenuItems}
792
+ onRemoveContextItem={onRemoveContextItem}
793
+ onInspectContextItem={onInspectContextItem}
794
+ onRetryContextItem={onRetryContextItem}
795
+ attachmentsEnabled={attachmentsEnabled}
760
796
  ariaLabel={ariaLabel}
761
797
  focusRef={handleRef}
762
- disabled={disabled || gateComposer}
798
+ disabled={disabled}
799
+ submissionDisabled={
800
+ submissionDisabled || agentEngineConfigured.state === "missing"
801
+ }
763
802
  submitting={submitting}
764
803
  willQueue={willQueue}
765
804
  maxDocumentAttachmentBytes={maxDocumentAttachmentBytes}
766
805
  documentAttachmentLimitLabel={documentAttachmentLimitLabel}
767
- placeholder={
768
- gateComposer
769
- ? t("agentChat.composer.connectAbove", {
770
- defaultValue: "Connect AI above to continue...",
771
- })
772
- : placeholder
773
- }
806
+ placeholder={placeholder}
774
807
  initialText={initialText}
775
808
  initialTextKey={initialTextKey}
776
809
  onSubmit={handleSubmit}
@@ -836,12 +869,13 @@ function PromptComposerRuntime(props: PromptComposerProps) {
836
869
  useComposerRuntimeAdapters().agentChat!.StaleIndexBoundary!;
837
870
  const attachmentAdapter = useMemo(
838
871
  () =>
872
+ props.attachmentAdapter ??
839
873
  new CompositeAttachmentAdapter([
840
874
  new RasterImageAttachmentAdapter(),
841
875
  new BinaryDocumentAttachmentAdapter(),
842
876
  new TextAttachmentAdapter(),
843
877
  ]),
844
- [],
878
+ [props.attachmentAdapter],
845
879
  );
846
880
  const runtime = useLocalRuntime(NOOP_ADAPTER, {
847
881
  adapters: { attachments: attachmentAdapter },