@molecule/app-ide-react 3.2.0 → 4.0.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.
Files changed (2) hide show
  1. package/README.md +55 -103
  2. package/package.json +9 -9
package/README.md CHANGED
@@ -3,7 +3,7 @@ AUTO-GENERATED — DO NOT EDIT THIS FILE.
3
3
  Generated by `mlcl sync-docs` from the package's src/index.ts JSDoc + mlcl/registry.json.
4
4
  Edits here are overwritten on the next commit (molecule's pre-commit hook regenerates).
5
5
  To change this document, edit the module-level JSDoc in src/index.ts.
6
- Generated: 2026-11-01T15:38:20.051Z
6
+ Generated: 2026-11-12T04:40:46.343Z
7
7
  -->
8
8
 
9
9
  # @molecule/app-ide-react
@@ -884,139 +884,91 @@ actions, etc.).
884
884
  interface ChatPanelProps {
885
885
  projectId: string
886
886
  endpoint?: string
887
- /** If provided, auto-send this message once on mount (e.g., prompt from landing page). */
888
887
  initialMessage?: string
889
- /** Called after the initial message has been sent — used to clear router state. */
890
888
  onInitialMessageSent?: () => void
891
- /** Called to open a file as a preview tab. `opts.focus === false` opens it quietly (no pane switch) — e.g. a saved plan or a system-initiated open while the user is busy. */
892
889
  onFileOpen?: (path: string, opts?: { focus?: boolean }) => void
893
- /** Called when a filename in a tool call is double-clicked — should pin the tab. */
894
890
  onFileDoubleClick?: (path: string) => void
895
- /** Called when a file in the uncommitted list is clicked for diff view. */
896
891
  onFileDiff?: (path: string, diff?: { original: string; modified: string }) => void
897
- /** Called to undo/redo a file change — writes the given content to the file path. */
898
892
  onFileRevert?: (path: string, content: string) => Promise<void>
899
- /** Called when the AI creates or modifies a file — should refresh the editor if the file is open. */
900
893
  onFileChange?: (path: string, content: string) => void
901
- /** Called when a file is removed from disk (e.g. reverting an untracked file). */
902
894
  onFileDeleted?: (path: string) => void
903
- /** Called after a commit or no-op — should refresh file explorer git status. */
904
895
  onCommit?: () => void
905
- /** Called when an inline activity card is clicked — should open the Activity panel filtered to this activity. */
906
896
  onActivityClick?: (activity: ActivityFromCard) => void
907
- /**
908
- * Reports a chat timeline item that threw during render, caught by that item's
909
- * error boundary. The item degrades to an inline notice either way; this is how the
910
- * host gets the crash into its telemetry instead of it being visible only to the
911
- * one user who hit it.
912
- */
913
897
  onRenderError?: (error: Error, info: ErrorInfo) => void
914
- /**
915
- * Called when a user avatar or author name in the chat timeline is clicked —
916
- * the host opens THAT user's profile (e.g. molecule.dev's profile modal).
917
- * Receives the clicked author's {@link ChatUserIdentity}: a teammate's click
918
- * carries their persisted author fields, the signed-in user's own click
919
- * carries their own — the host compares `id` against the signed-in user to
920
- * decide editable-own vs view-only-teammate. Omit it (the default) to render
921
- * the avatars/names non-interactive (static, exactly as before). Only human
922
- * authors are clickable — the molecule glyph on auto-sent messages is not.
923
- */
924
898
  onProfileClick?: (user: ChatUserIdentity) => void
925
- /**
926
- * The signed-in user's id (a message's persisted `author.id`). Used to stamp
927
- * the identity handed to {@link onProfileClick} for AUTHOR-LESS messages (the
928
- * local optimistic echo, legacy solo rows), which are always the signed-in
929
- * user's own. Omit in a solo host — those clicks then carry no `id`, which
930
- * hosts treat as "the signed-in user".
931
- */
932
899
  currentUserId?: string
933
- /** Called when the server signals (via the `ready_to_build` stream event) that discovery is complete and the sandbox should boot. */
934
900
  onReadyToBuild?: () => void
935
- /**
936
- * True while the plan has finished streaming but the sandbox is still booting
937
- * (after `ready_to_build`, before the post-boot build kickoff). When set and no
938
- * message is actively streaming, the chat shows a "waiting for the development
939
- * environment" indicator so the conversation doesn't appear to silently stall.
940
- */
941
901
  awaitingSandboxBoot?: boolean
942
- /** Called when the agent requests a UI action via the `client_action` stream event (reload/navigate the preview, open a file). */
943
902
  onClientAction?: (action: IdeClientAction) => void
944
- /** Called on each stream `done` — host uses it to keep the boot view up until the parallel during-boot plan stream finishes. */
945
903
  onTurnComplete?: () => void
946
- /**
947
- * Called whenever the chat's loading state changes — true when a turn (plan or build) is in
948
- * progress, false when idle. The host uses this as the authoritative "the agent is actively
949
- * building" signal to drive the preview's "Building your app…" overlay, so a half-built /
950
- * blank preview during a long build always shows progress instead of a bare white screen.
951
- */
952
904
  onLoadingChange?: (loading: boolean) => void
953
- /**
954
- * Navigates the live preview to a route path. Wired so a `[label](/route)` markdown link in
955
- * an assistant message (e.g. the agent's "your app is ready" handoff) jumps the preview to
956
- * that page on click. User-initiated, so the host should navigate unconditionally (it is not
957
- * the rate-limited agent `navigate_preview` action).
958
- */
959
905
  onNavigatePreview?: (path: string) => void
960
- /**
961
- * Called on mount with a handler the parent invokes to deliver a broadcast chat event
962
- * from another project member (the push channel); called with null on unmount.
963
- */
964
906
  onRegisterPushHandler?: (
965
907
  handler: ((conversationId: string, event: ChatStreamEvent) => void) | null,
966
908
  ) => void
967
- /**
968
- * Called on mount with a function that reloads chat history and converges the
969
- * panel on the persisted transcript; called with null on unmount. The host
970
- * should invoke it whenever its chat push channel (re)connects: a broadcast
971
- * sent while that socket was down (a teammate's team note against a
972
- * backgrounded tab or a slept laptop) is otherwise lost until a page
973
- * lifecycle event happens to fire. Cheap when nothing changed — an identical
974
- * transcript is never re-applied.
975
- */
976
909
  onRegisterHistoryReconcile?: (reconcile: (() => Promise<void>) | null) => void
977
- /** Changing this value submits the current input draft — used to send a prefilled prompt after the prompt→chat morph docks. */
978
910
  autoSubmitSignal?: number
979
- /** Seeds the input with this text on mount (prompt→chat morph), so the chat input shows the prompt before it is sent. */
980
911
  initialInputValue?: string
981
- /** Hide the conversation-selector header (e.g. during discovery, before any history is worth showing). */
982
912
  hideConversationMenu?: boolean
983
- /**
984
- * Whether to render the built-in conversation header (the picker + searchable
985
- * history dropdown, the share / bug-report / settings buttons, and the
986
- * new-chat "+"). Defaults to `true` (the package owns that chrome). Pass
987
- * `false` to operate **headless** — the host renders those controls itself
988
- * (e.g. molecule.dev's Workspace top bar) and drives the chat through the
989
- * controlled props below: {@link ChatPanelProps.conversationId} /
990
- * {@link ChatPanelProps.chatKey} / {@link ChatPanelProps.onConversationId} for
991
- * the conversation, and {@link ChatPanelProps.openShareSignal} /
992
- * {@link ChatPanelProps.openReportSignal} to open the in-chat modals.
993
- */
994
913
  renderConversationHeader?: boolean
995
- /**
996
- * Host-controlled active conversation id (headless mode). Drives the chat
997
- * endpoint's `?conversationId=`. When `undefined` (the default) the panel owns
998
- * the active conversation internally (localStorage-backed). `null` is a valid
999
- * controlled value meaning "no conversation yet".
1000
- */
1001
914
  conversationId?: string | null
1002
- /**
1003
- * Host-controlled remount key for the inner chat (headless mode). Changing it
1004
- * remounts the conversation timeline (a new chat or a switch); the backend
1005
- * assigning an id mid-stream must NOT change it (that would drop in-flight
1006
- * messages). Falls back to the internal key when omitted.
1007
- */
1008
915
  chatKey?: string
1009
- /**
1010
- * Called whenever the active conversation id changes — the backend assigns one
1011
- * mid-stream and the host needs it to keep its own picker in sync WITHOUT
1012
- * remounting (do not change {@link ChatPanelProps.chatKey} in response).
1013
- */
1014
916
  onConversationId?: (id: string | null) => void
1015
- /** Changing this opens the in-chat `/share` modal (host-driven, e.g. a top-bar share button). Overrides the built-in header's share button signal. */
1016
917
  openShareSignal?: number
1017
- // … truncated — the full declaration is in node_modules/@molecule/app-ide-react/dist/types.d.ts
918
+ openReportSignal?: number
919
+ openSettingsSignal?: number
920
+ onManageCustomModels?: (context?: { mode?: 'plan' | 'execute' }) => void
921
+ modelSelectionSignal?: number
922
+ canEdit?: boolean
923
+ canSendTeamMessages?: boolean
924
+ canShare?: boolean
925
+ shareLinksAllowed?: boolean
926
+ shareLinksRefreshSignal?: number
927
+ shareModalContent?: ReactNode
928
+ spinner?: ReactNode
929
+ activeFile?: string | null
930
+ openTabs?: string[]
931
+ gitStatusTick?: number
932
+ pendingMessage?: string
933
+ pendingMessageKey?: number
934
+ pendingMessageSuppressUser?: boolean
935
+ pendingMessageUserInitiated?: boolean
936
+ userEditedFile?: string
937
+ userEditedFileKey?: number
938
+ isAnonymous?: boolean
939
+ isPro?: boolean
940
+ suppressGuestReminder?: boolean
941
+ buildUpgradeCta?: (context: {
942
+ requiresSignup?: boolean
943
+ limitType?: string
944
+ billingAction?: string
945
+ upgradeTier?: string | null
946
+ }) => ChatEventCardAction | ChatEventCardAction[] | null | undefined
947
+ buildHelpUpgradeSection?: () =>
948
+ { lines: string[]; action?: ChatEventCardAction | ChatEventCardAction[] } | null | undefined
949
+ userAvatar?: string | null
950
+ agentName?: string
951
+ productName?: string
952
+ version?: string
953
+ extraCommands?: readonly CommandDef[]
954
+ feedbackUrl?: string
955
+ listTests?: () => Promise<TestList>
956
+ runTests?: (selection: TestSelection, onEvent: (event: TestRunEvent) => void) => TestRunHandle
957
+ watchTestRuns?: (onEvent: (event: TestRunFeedEvent) => void) => () => void
958
+ nativeTests?: {
959
+ visible: boolean
960
+ history: ReactNode
961
+ renderStatus: (openTests: () => void) => ReactNode
962
+ }
963
+ canRunTests?: boolean
964
+ testsAvailable?: boolean
965
+ skipToolCall?: (toolCallId: string) => void | Promise<boolean | void>
966
+ className?: string
967
+ }
1018
968
  ```
1019
969
 
970
+ _(Member comments are left out to fit; the full declaration is in `node_modules/@molecule/app-ide-react/dist/types.d.ts`.)_
971
+
1020
972
  #### `EditorPanelProps`
1021
973
 
1022
974
  Properties for the editor panel component.
@@ -3870,10 +3822,10 @@ Peer dependencies:
3870
3822
  - `@molecule/app-ide` ^1.0.1
3871
3823
  - `@molecule/app-live-preview` ^1.0.1
3872
3824
  - `@molecule/app-logger` ^1.0.1
3873
- - `@molecule/app-react` ^3.0.0
3825
+ - `@molecule/app-react` ^4.0.0
3874
3826
  - `@molecule/app-storage` ^1.0.1
3875
3827
  - `@molecule/app-ui` ^1.0.1
3876
- - `@molecule/app-ui-react` ^3.0.0
3828
+ - `@molecule/app-ui-react` ^4.0.0
3877
3829
  - `react` ^18.0.0 || ^19.0.0
3878
3830
  - `react-dom` ^18.0.0 || ^19.0.0
3879
3831
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@molecule/app-ide-react",
3
- "version": "3.2.0",
3
+ "version": "4.0.0",
4
4
  "description": "React IDE components for molecule.dev workspace",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -45,10 +45,10 @@
45
45
  "@molecule/app-ide": "^1.0.1",
46
46
  "@molecule/app-live-preview": "^1.0.1",
47
47
  "@molecule/app-logger": "^1.0.1",
48
- "@molecule/app-react": "^3.0.0",
48
+ "@molecule/app-react": "^4.0.0",
49
49
  "@molecule/app-storage": "^1.0.1",
50
50
  "@molecule/app-ui": "^1.0.1",
51
- "@molecule/app-ui-react": "^3.0.0",
51
+ "@molecule/app-ui-react": "^4.0.0",
52
52
  "react": "^18.0.0 || ^19.0.0",
53
53
  "react-dom": "^18.0.0 || ^19.0.0"
54
54
  },
@@ -56,19 +56,19 @@
56
56
  "material-file-icons": "2.4.0"
57
57
  },
58
58
  "devDependencies": {
59
- "@molecule/app-ai-models": "1.4.3",
59
+ "@molecule/app-ai-models": "1.4.4",
60
60
  "@molecule/app-ai-voice": "1.0.3",
61
61
  "@molecule/app-country-flags": "1.0.3",
62
62
  "@molecule/app-i18n": "1.1.2",
63
63
  "@molecule/app-icons": "1.0.3",
64
64
  "@molecule/app-live-preview": "1.0.3",
65
65
  "@molecule/app-locales-ide": "1.10.14",
66
- "@molecule/app-logger": "1.0.5",
67
- "@molecule/app-react": "3.1.0",
66
+ "@molecule/app-logger": "1.0.6",
67
+ "@molecule/app-react": "4.0.0",
68
68
  "@molecule/app-storage": "1.1.0",
69
- "@molecule/app-ui": "1.3.8",
70
- "@molecule/app-ui-react": "3.0.4",
71
- "@molecule/app-ui-tailwind": "1.2.8",
69
+ "@molecule/app-ui": "1.3.9",
70
+ "@molecule/app-ui-react": "4.0.0",
71
+ "@molecule/app-ui-tailwind": "1.2.9",
72
72
  "@testing-library/react": "16.3.3",
73
73
  "@types/node": "26.6.5",
74
74
  "@types/react": "19.3.0",