@molecule/app-ide-react 3.2.0 → 3.2.1
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/README.md +53 -101
- package/package.json +4 -4
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-
|
|
6
|
+
Generated: 2026-11-04T14:09:07.558Z
|
|
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
|
-
|
|
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.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@molecule/app-ide-react",
|
|
3
|
-
"version": "3.2.
|
|
3
|
+
"version": "3.2.1",
|
|
4
4
|
"description": "React IDE components for molecule.dev workspace",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"material-file-icons": "2.4.0"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
|
-
"@molecule/app-ai-models": "1.4.
|
|
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",
|
|
@@ -64,9 +64,9 @@
|
|
|
64
64
|
"@molecule/app-live-preview": "1.0.3",
|
|
65
65
|
"@molecule/app-locales-ide": "1.10.14",
|
|
66
66
|
"@molecule/app-logger": "1.0.5",
|
|
67
|
-
"@molecule/app-react": "3.1
|
|
67
|
+
"@molecule/app-react": "3.3.1",
|
|
68
68
|
"@molecule/app-storage": "1.1.0",
|
|
69
|
-
"@molecule/app-ui": "1.3.
|
|
69
|
+
"@molecule/app-ui": "1.3.9",
|
|
70
70
|
"@molecule/app-ui-react": "3.0.4",
|
|
71
71
|
"@molecule/app-ui-tailwind": "1.2.8",
|
|
72
72
|
"@testing-library/react": "16.3.3",
|