@molecule/app-ide-react 1.5.0 → 1.7.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 (44) hide show
  1. package/README.md +127 -4
  2. package/dist/command-metadata.d.ts +39 -0
  3. package/dist/command-metadata.d.ts.map +1 -1
  4. package/dist/command-metadata.js +46 -3
  5. package/dist/command-metadata.js.map +1 -1
  6. package/dist/components/ChatPanel.d.ts +20 -2
  7. package/dist/components/ChatPanel.d.ts.map +1 -1
  8. package/dist/components/ChatPanel.js +485 -122
  9. package/dist/components/ChatPanel.js.map +1 -1
  10. package/dist/components/EditorPanel.d.ts +1 -1
  11. package/dist/components/EditorPanel.d.ts.map +1 -1
  12. package/dist/components/EditorPanel.js +6 -1
  13. package/dist/components/EditorPanel.js.map +1 -1
  14. package/dist/components/FileExplorer.d.ts +1 -1
  15. package/dist/components/FileExplorer.d.ts.map +1 -1
  16. package/dist/components/FileExplorer.js +2 -2
  17. package/dist/components/FileExplorer.js.map +1 -1
  18. package/dist/components/FileExplorerContextMenu.d.ts +6 -1
  19. package/dist/components/FileExplorerContextMenu.d.ts.map +1 -1
  20. package/dist/components/FileExplorerContextMenu.js +19 -7
  21. package/dist/components/FileExplorerContextMenu.js.map +1 -1
  22. package/dist/components/SearchPanel.d.ts +1 -1
  23. package/dist/components/SearchPanel.d.ts.map +1 -1
  24. package/dist/components/SearchPanel.js +9 -6
  25. package/dist/components/SearchPanel.js.map +1 -1
  26. package/dist/components/ShareModal.d.ts +13 -1
  27. package/dist/components/ShareModal.d.ts.map +1 -1
  28. package/dist/components/ShareModal.js +2 -2
  29. package/dist/components/ShareModal.js.map +1 -1
  30. package/dist/components/TipCard.d.ts +7 -2
  31. package/dist/components/TipCard.d.ts.map +1 -1
  32. package/dist/components/TipCard.js +8 -6
  33. package/dist/components/TipCard.js.map +1 -1
  34. package/dist/components/ToolCallCard.d.ts.map +1 -1
  35. package/dist/components/ToolCallCard.js +6 -3
  36. package/dist/components/ToolCallCard.js.map +1 -1
  37. package/dist/components/UserAvatar.d.ts +10 -1
  38. package/dist/components/UserAvatar.d.ts.map +1 -1
  39. package/dist/components/UserAvatar.js +9 -6
  40. package/dist/components/UserAvatar.js.map +1 -1
  41. package/dist/types.d.ts +60 -2
  42. package/dist/types.d.ts.map +1 -1
  43. package/dist/types.js.map +1 -1
  44. package/package.json +3 -3
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-08-20T20:11:12.690Z
6
+ Generated: 2026-08-28T09:55:58.055Z
7
7
  -->
8
8
 
9
9
  # @molecule/app-ide-react
@@ -270,9 +270,20 @@ interface ChatPanelProps {
270
270
  * that user's profile (e.g. molecule.dev's profile modal). Receives the clicked
271
271
  * user's {@link ChatUserIdentity}. Omit it (the default) to render the avatars
272
272
  * non-interactive (static image/icon, exactly as before). Only real user
273
- * avatars are clickable — the molecule glyph on auto-sent messages is not.
273
+ * avatars are clickable — the molecule glyph on auto-sent messages is not, and
274
+ * in a multi-user conversation only the SIGNED-IN user's own avatars are
275
+ * (hosts open the *own*-profile editor from this, so a teammate's avatar must
276
+ * not fire it — see {@link currentUserId}).
274
277
  */
275
278
  onProfileClick?: (user: ChatUserIdentity) => void
279
+ /**
280
+ * The signed-in user's id, used to tell their OWN messages from a teammate's
281
+ * (a message's persisted `author.id`). Gates avatar clickability: an authored
282
+ * message fires {@link onProfileClick} only when its author IS the signed-in
283
+ * user. Omit in a solo host — author-less messages (the local echo, legacy
284
+ * rows) are always treated as the signed-in user's own.
285
+ */
286
+ currentUserId?: string
276
287
  /** Called when the server signals (via the `ready_to_build` stream event) that discovery is complete and the sandbox should boot. */
277
288
  onReadyToBuild?: () => void
278
289
  /**
@@ -357,13 +368,42 @@ interface ChatPanelProps {
357
368
  * invokes this callback (the host opens its own custom-provider management
358
369
  * surface). Omit to hide the row — the shared package stays host-agnostic.
359
370
  */
360
- onManageCustomModels?: () => void
371
+ onManageCustomModels?: (context?: {
372
+ /**
373
+ * The mode a "Use this model" action should target — the `/model` picker's
374
+ * scoped mode when it has one, else the LIVE conversation mode (discovery
375
+ * runs in plan mode, so it maps to `'plan'`).
376
+ */
377
+ mode?: 'plan' | 'execute'
378
+ }) => void
361
379
  /**
362
380
  * Bump to make the panel re-read its persisted model/settings state — e.g.
363
381
  * after the host's custom-provider surface sets the chat model via "Use".
364
382
  * The panel loads that state once on mount otherwise.
365
383
  */
366
384
  modelSelectionSignal?: number
385
+ /**
386
+ * Whether the current user may write SHARED project state from the chat
387
+ * surface — send/run Synthase, change the model, toggle autofix/mode, run a
388
+ * write-command, etc. A read-only project VIEWER passes `false`: the server
389
+ * 403s every such write, so the UI disables the composer + those controls and
390
+ * default-denies non-`viewerSafe` slash commands, showing a read-only note
391
+ * instead of a dead control. Defaults to `true` (a single-user/owner IDE and
392
+ * every non-collaborator host is unaffected). Read-only reads, view-only
393
+ * surfaces (`/settings`, `/help`, `/cost`) and per-user preferences stay
394
+ * available.
395
+ */
396
+ canEdit?: boolean
397
+ /**
398
+ * Whether the current user may MANAGE public share links — the `/share`
399
+ * command, the header share button, and the ShareModal's create/revoke
400
+ * controls. Distinct from {@link canEdit} because hosts commonly gate share
401
+ * minting ABOVE editor (molecule.dev mints/lists/revokes at admin+): an
402
+ * editor with `canEdit` true but `canShare` false gets no `/share` surface
403
+ * instead of a modal whose every request 403s. Defaults to `canEdit !==
404
+ * false` (back-compat: hosts that gate the modal themselves see no change).
405
+ */
406
+ canShare?: boolean
367
407
  /** Spinner/busy indicator node to show for in-chat loading states (e.g. the "designing" indicator). Falls back to a built-in dots animation. */
368
408
  spinner?: ReactNode
369
409
  /** Path of the currently focused file in the editor (shown first in @ picker). */
@@ -593,6 +633,32 @@ interface CommandDef {
593
633
  * Omit for commands that take no arguments.
594
634
  */
595
635
  usage?: string
636
+ /**
637
+ * Alternate short forms (WITHOUT the slash) that also invoke this command —
638
+ * e.g. `['t']` lets `/t <message>` invoke `/teamsay`. Matched by the chat
639
+ * input's command dispatch alongside {@link id}.
640
+ */
641
+ aliases?: string[]
642
+ /**
643
+ * True for a human-only side-channel command handled by the HOST's server
644
+ * (e.g. a team-chat note the agent never sees): the raw `/command` text is
645
+ * sent to the backend, but NO optimistic user bubble is rendered — the server
646
+ * emits the canonical `message` stream event (see the `ChatStreamEvent`
647
+ * union), which IS the visible message, persisted and fanned out live to
648
+ * every project member.
649
+ */
650
+ sideChannel?: boolean
651
+ /**
652
+ * True for commands a read-only project VIEWER may run — the ones that only
653
+ * read, open a view-only surface, or set a per-user/per-device preference
654
+ * (`/cost`, `/settings`, `/help`, `/mic`, …). Everything else writes shared
655
+ * project state or triggers a Synthase turn (which the server 403s for a
656
+ * viewer), so it is **default-denied** for viewers: omitting this flag means a
657
+ * viewer cannot run the command, which is the safe default for any command
658
+ * added later. Host side-channel commands (`sideChannel`, e.g. `/teamsay`) are
659
+ * team communication, not project mutation — they set this so viewers can talk.
660
+ */
661
+ viewerSafe?: boolean
596
662
  }
597
663
  ```
598
664
 
@@ -659,6 +725,12 @@ Properties for the editor panel component.
659
725
  ```typescript
660
726
  interface EditorPanelProps {
661
727
  className?: string
728
+ /**
729
+ * Render the editor read-only (Monaco `readOnly`) — for read-only project
730
+ * VIEWERS, whose file writes the server rejects anyway. Typing is blocked at
731
+ * the editor, so a viewer never composes an edit that cannot be saved.
732
+ */
733
+ readOnly?: boolean
662
734
  /** Called whenever the active file changes (tab switch, file open, file close). */
663
735
  onActiveFileChange?: (path: string | null) => void
664
736
  /** Called once after the editor is fully mounted and ready to accept files. */
@@ -688,6 +760,12 @@ Properties for file explorer.
688
760
 
689
761
  ```typescript
690
762
  interface FileExplorerProps {
763
+ /**
764
+ * Read-only mode (a project viewer): the context menu omits every mutating
765
+ * entry. Pair with omitting the mutation handlers (onRename/onDelete/…) so
766
+ * keyboard shortcuts and drag-moves no-op too.
767
+ */
768
+ readOnly?: boolean
691
769
  files: FileNode[]
692
770
  onFileSelect: (path: string) => void
693
771
  onFileDoubleClick?: (path: string) => void
@@ -1093,6 +1171,12 @@ interface SearchPanelProps {
1093
1171
  excludedDirs?: string[]
1094
1172
  /** Persist an edited excluded-dir set (the host owns storage). */
1095
1173
  onExcludedDirsChange?: (dirs: string[]) => void
1174
+ /**
1175
+ * Read-only mode (a project viewer): search stays fully usable, but the
1176
+ * Replace toggle/inputs/buttons are hidden (bulk writes are editor work).
1177
+ * Pair with omitting onExcludedDirsChange so exclude edits never persist.
1178
+ */
1179
+ readOnly?: boolean
1096
1180
  }
1097
1181
  ```
1098
1182
 
@@ -1291,6 +1375,15 @@ interface UserAvatarProps {
1291
1375
  * ignored (see {@link resolveUserAvatar}) and the generic icon is shown.
1292
1376
  */
1293
1377
  userAvatar?: string | null
1378
+ /**
1379
+ * The message author's display name, for a TEAMMATE's message. When set and
1380
+ * there is no renderable avatar, the fallback tile shows the name's initial
1381
+ * (e.g. "T" for Test) instead of the generic `user` glyph — so a teammate
1382
+ * without a profile picture is still identifiable at a glance and is NEVER
1383
+ * shown with the viewer's own avatar. Also used as the accessible label /
1384
+ * image alt in place of the solo "You".
1385
+ */
1386
+ name?: string
1294
1387
  /** Diameter of the avatar in pixels. Defaults to 24. */
1295
1388
  size?: number
1296
1389
  /**
@@ -1669,6 +1762,7 @@ function ChatPanel({
1669
1762
  onActivityClick,
1670
1763
  onRenderError,
1671
1764
  onProfileClick,
1765
+ currentUserId,
1672
1766
  onReadyToBuild,
1673
1767
  awaitingSandboxBoot,
1674
1768
  onClientAction,
@@ -1696,6 +1790,8 @@ function ChatPanel({
1696
1790
  userEditedFileKey,
1697
1791
  isPro,
1698
1792
  isAnonymous,
1793
+ canEdit = true,
1794
+ canShare,
1699
1795
  buildUpgradeCta,
1700
1796
  buildHelpUpgradeSection,
1701
1797
  userAvatar,
@@ -1806,6 +1902,7 @@ Code editor panel with tab bar and Monaco integration.
1806
1902
  ```typescript
1807
1903
  function EditorPanel({
1808
1904
  className,
1905
+ readOnly,
1809
1906
  onActiveFileChange,
1810
1907
  onEditorReady,
1811
1908
  onTabsChange,
@@ -1833,6 +1930,7 @@ function FileExplorer({
1833
1930
  onFileSelect,
1834
1931
  onFileDoubleClick,
1835
1932
  onDirExpand,
1933
+ readOnly,
1836
1934
  onRename,
1837
1935
  onDelete,
1838
1936
  onDeleteMultiple,
@@ -2095,6 +2193,24 @@ function livePanelSize(layout: WorkspaceLayout, panelConfigs: PanelConfig[], ind
2095
2193
 
2096
2194
  **Returns:** The panel size as a percentage.
2097
2195
 
2196
+ #### `matchesSideChannelCommand(defs, text)`
2197
+
2198
+ True when `text` invokes a side-channel command ({@link CommandDef.sideChannel})
2199
+ from `defs`, matched against the leading `/token` by command id or alias
2200
+ (case-insensitive). Used by the chat input's dispatch AND the auto-send
2201
+ (initialMessage) path so a side-channel send never renders an optimistic
2202
+ "/command …" echo — the server's emitted `message` stream event is the one
2203
+ visible message.
2204
+
2205
+ ```typescript
2206
+ function matchesSideChannelCommand(defs: readonly CommandDef[] | undefined, text: string): boolean
2207
+ ```
2208
+
2209
+ - `defs` — The command registry to consult (e.g. shared ∪ host commands).
2210
+ - `text` — The raw outgoing message text.
2211
+
2212
+ **Returns:** Whether the text invokes a side-channel command.
2213
+
2098
2214
  #### `normalizeKeys(keys)`
2099
2215
 
2100
2216
  Normalize a shortcut definition string into the same format produced by
@@ -2333,6 +2449,7 @@ function SearchPanel({
2333
2449
  className,
2334
2450
  excludedDirs,
2335
2451
  onExcludedDirsChange,
2452
+ readOnly,
2336
2453
  }: SearchPanelProps): JSX.Element
2337
2454
  ```
2338
2455
 
@@ -2395,12 +2512,18 @@ function ShareModal({
2395
2512
  projectId,
2396
2513
  initialRole = DEFAULT_SHARE_ROLE,
2397
2514
  roles = [DEFAULT_SHARE_ROLE],
2515
+ canManage = true,
2516
+ canCreate = canManage,
2517
+ canRevoke = canManage,
2398
2518
  onClose,
2399
2519
  onCreated,
2400
2520
  }: {
2401
2521
  projectId: string
2402
2522
  initialRole?: ShareRole
2403
2523
  roles?: readonly ShareRole[]
2524
+ canManage?: boolean
2525
+ canCreate?: boolean
2526
+ canRevoke?: boolean
2404
2527
  onClose: () => void
2405
2528
  onCreated?: (result: ShareLinkResult) => void
2406
2529
  }): JSX.Element
@@ -2496,7 +2619,7 @@ visual is wrapped in an accessible button so the avatar can open the user's
2496
2619
  profile.
2497
2620
 
2498
2621
  ```typescript
2499
- function UserAvatar({ userAvatar, size = 24, onClick }: UserAvatarProps): JSX.Element
2622
+ function UserAvatar({ userAvatar, name, size = 24, onClick }: UserAvatarProps): JSX.Element
2500
2623
  ```
2501
2624
 
2502
2625
  - `props` — {@link UserAvatarProps}.
@@ -48,6 +48,32 @@ export interface CommandDef {
48
48
  * Omit for commands that take no arguments.
49
49
  */
50
50
  usage?: string;
51
+ /**
52
+ * Alternate short forms (WITHOUT the slash) that also invoke this command —
53
+ * e.g. `['t']` lets `/t <message>` invoke `/teamsay`. Matched by the chat
54
+ * input's command dispatch alongside {@link id}.
55
+ */
56
+ aliases?: string[];
57
+ /**
58
+ * True for a human-only side-channel command handled by the HOST's server
59
+ * (e.g. a team-chat note the agent never sees): the raw `/command` text is
60
+ * sent to the backend, but NO optimistic user bubble is rendered — the server
61
+ * emits the canonical `message` stream event (see the `ChatStreamEvent`
62
+ * union), which IS the visible message, persisted and fanned out live to
63
+ * every project member.
64
+ */
65
+ sideChannel?: boolean;
66
+ /**
67
+ * True for commands a read-only project VIEWER may run — the ones that only
68
+ * read, open a view-only surface, or set a per-user/per-device preference
69
+ * (`/cost`, `/settings`, `/help`, `/mic`, …). Everything else writes shared
70
+ * project state or triggers a Synthase turn (which the server 403s for a
71
+ * viewer), so it is **default-denied** for viewers: omitting this flag means a
72
+ * viewer cannot run the command, which is the safe default for any command
73
+ * added later. Host side-channel commands (`sideChannel`, e.g. `/teamsay`) are
74
+ * team communication, not project mutation — they set this so viewers can talk.
75
+ */
76
+ viewerSafe?: boolean;
51
77
  }
52
78
  /**
53
79
  * Every available slash command, grouped by category order. This is the
@@ -75,4 +101,17 @@ export interface CommandGroup {
75
101
  * @returns One {@link CommandGroup} per non-empty category, in category order.
76
102
  */
77
103
  export declare function groupCommandsByCategory(commands?: readonly CommandDef[], categories?: readonly CommandCategory[]): CommandGroup[];
104
+ /**
105
+ * True when `text` invokes a side-channel command ({@link CommandDef.sideChannel})
106
+ * from `defs`, matched against the leading `/token` by command id or alias
107
+ * (case-insensitive). Used by the chat input's dispatch AND the auto-send
108
+ * (initialMessage) path so a side-channel send never renders an optimistic
109
+ * "/command …" echo — the server's emitted `message` stream event is the one
110
+ * visible message.
111
+ *
112
+ * @param defs - The command registry to consult (e.g. shared ∪ host commands).
113
+ * @param text - The raw outgoing message text.
114
+ * @returns Whether the text invokes a side-channel command.
115
+ */
116
+ export declare function matchesSideChannelCommand(defs: readonly CommandDef[] | undefined, text: string): boolean;
78
117
  //# sourceMappingURL=command-metadata.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"command-metadata.d.ts","sourceRoot":"","sources":["../src/command-metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,uEAAuE;AACvE,MAAM,MAAM,kBAAkB,GAC5B,SAAS,GAAG,MAAM,GAAG,aAAa,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,CAAA;AAEvE,iDAAiD;AACjD,MAAM,WAAW,eAAe;IAC9B,qEAAqE;IACrE,GAAG,EAAE,kBAAkB,CAAA;IACvB,qFAAqF;IACrF,KAAK,EAAE,MAAM,CAAA;CACd;AAED,mEAAmE;AACnE,eAAO,MAAM,kBAAkB,EAAE,SAAS,eAAe,EAO/C,CAAA;AAEV,kDAAkD;AAClD,MAAM,WAAW,UAAU;IACzB,4DAA4D;IAC5D,EAAE,EAAE,MAAM,CAAA;IACV,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAA;IACb;;;;;OAKG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB,8CAA8C;IAC9C,QAAQ,EAAE,kBAAkB,CAAA;IAC5B;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;;GAIG;AACH,eAAO,MAAM,QAAQ,EAAE,SAAS,UAAU,EAsKhC,CAAA;AAEV,4FAA4F;AAC5F,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;AAExC,6DAA6D;AAC7D,MAAM,WAAW,YAAY;IAC3B,2CAA2C;IAC3C,QAAQ,EAAE,eAAe,CAAA;IACzB,oDAAoD;IACpD,QAAQ,EAAE,UAAU,EAAE,CAAA;CACvB;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,GAAE,SAAS,UAAU,EAAa,EAC1C,UAAU,GAAE,SAAS,eAAe,EAAuB,GAC1D,YAAY,EAAE,CAOhB"}
1
+ {"version":3,"file":"command-metadata.d.ts","sourceRoot":"","sources":["../src/command-metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,uEAAuE;AACvE,MAAM,MAAM,kBAAkB,GAC5B,SAAS,GAAG,MAAM,GAAG,aAAa,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,CAAA;AAEvE,iDAAiD;AACjD,MAAM,WAAW,eAAe;IAC9B,qEAAqE;IACrE,GAAG,EAAE,kBAAkB,CAAA;IACvB,qFAAqF;IACrF,KAAK,EAAE,MAAM,CAAA;CACd;AAED,mEAAmE;AACnE,eAAO,MAAM,kBAAkB,EAAE,SAAS,eAAe,EAO/C,CAAA;AAEV,kDAAkD;AAClD,MAAM,WAAW,UAAU;IACzB,4DAA4D;IAC5D,EAAE,EAAE,MAAM,CAAA;IACV,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAA;IACb;;;;;OAKG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB,8CAA8C;IAC9C,QAAQ,EAAE,kBAAkB,CAAA;IAC5B;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED;;;;GAIG;AACH,eAAO,MAAM,QAAQ,EAAE,SAAS,UAAU,EA4LhC,CAAA;AAEV,4FAA4F;AAC5F,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;AAExC,6DAA6D;AAC7D,MAAM,WAAW,YAAY;IAC3B,2CAA2C;IAC3C,QAAQ,EAAE,eAAe,CAAA;IACzB,oDAAoD;IACpD,QAAQ,EAAE,UAAU,EAAE,CAAA;CACvB;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,GAAE,SAAS,UAAU,EAAa,EAC1C,UAAU,GAAE,SAAS,eAAe,EAAuB,GAC1D,YAAY,EAAE,CAOhB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,SAAS,UAAU,EAAE,GAAG,SAAS,EACvC,IAAI,EAAE,MAAM,GACX,OAAO,CAST"}
@@ -42,8 +42,9 @@ export const COMMANDS = [
42
42
  {
43
43
  id: 'cost',
44
44
  label: '/cost',
45
- description: 'Show token usage & share of your AI allowance',
45
+ description: "Show token usage & share of the project's AI allowance",
46
46
  category: 'context',
47
+ viewerSafe: true,
47
48
  },
48
49
  {
49
50
  id: 'skills',
@@ -151,28 +152,47 @@ export const COMMANDS = [
151
152
  label: '/settings',
152
153
  description: "View & change {{agentName}}'s settings",
153
154
  category: 'settings',
155
+ // The settings modal renders read-only for a viewer (every write control is
156
+ // disabled), so opening it to look is fine.
157
+ viewerSafe: true,
158
+ },
159
+ {
160
+ id: 'sounds',
161
+ label: '/sounds',
162
+ description: 'Notification sounds',
163
+ category: 'settings',
164
+ // Per-user, per-device preference (localStorage) — nothing project-shared.
165
+ viewerSafe: true,
154
166
  },
155
- { id: 'sounds', label: '/sounds', description: 'Notification sounds', category: 'settings' },
156
167
  {
157
168
  id: 'mic',
158
169
  label: '/mic',
159
170
  description: 'Choose the dictation engine (on-device / browser native)',
160
171
  category: 'settings',
172
+ viewerSafe: true,
161
173
  },
162
174
  {
163
175
  id: 'dictate',
164
176
  label: '/dictate',
165
177
  description: 'Choose the dictation engine (alias for /mic)',
166
178
  category: 'settings',
179
+ viewerSafe: true,
167
180
  },
168
181
  // Support
169
- { id: 'help', label: '/help', description: 'Workflow guide & tips', category: 'support' },
182
+ {
183
+ id: 'help',
184
+ label: '/help',
185
+ description: 'Workflow guide & tips',
186
+ category: 'support',
187
+ viewerSafe: true,
188
+ },
170
189
  {
171
190
  id: 'report',
172
191
  label: '/report',
173
192
  description: 'Report a bug or send feedback',
174
193
  category: 'support',
175
194
  usage: '/report [title]',
195
+ viewerSafe: true,
176
196
  },
177
197
  {
178
198
  id: 'bug',
@@ -180,6 +200,7 @@ export const COMMANDS = [
180
200
  description: 'Report a bug (alias for /report)',
181
201
  category: 'support',
182
202
  usage: '/bug [title]',
203
+ viewerSafe: true,
183
204
  },
184
205
  {
185
206
  id: 'version',
@@ -190,6 +211,7 @@ export const COMMANDS = [
190
211
  // same mechanism as /model's `(Claude)` / /maxloops's `(50)`. See ChatPanel.
191
212
  description: 'Show the app version',
192
213
  category: 'support',
214
+ viewerSafe: true,
193
215
  },
194
216
  ];
195
217
  /**
@@ -211,4 +233,25 @@ export function groupCommandsByCategory(commands = COMMANDS, categories = COMMAN
211
233
  }
212
234
  return groups;
213
235
  }
236
+ /**
237
+ * True when `text` invokes a side-channel command ({@link CommandDef.sideChannel})
238
+ * from `defs`, matched against the leading `/token` by command id or alias
239
+ * (case-insensitive). Used by the chat input's dispatch AND the auto-send
240
+ * (initialMessage) path so a side-channel send never renders an optimistic
241
+ * "/command …" echo — the server's emitted `message` stream event is the one
242
+ * visible message.
243
+ *
244
+ * @param defs - The command registry to consult (e.g. shared ∪ host commands).
245
+ * @param text - The raw outgoing message text.
246
+ * @returns Whether the text invokes a side-channel command.
247
+ */
248
+ export function matchesSideChannelCommand(defs, text) {
249
+ const token = text
250
+ .trim()
251
+ .match(/^\/(\S+)(?:\s|$)/)?.[1]
252
+ ?.toLowerCase();
253
+ if (!token)
254
+ return false;
255
+ return !!defs?.some((c) => c.sideChannel && (c.id.toLowerCase() === token || c.aliases?.includes(token)));
256
+ }
214
257
  //# sourceMappingURL=command-metadata.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"command-metadata.js","sourceRoot":"","sources":["../src/command-metadata.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command-metadata.js","sourceRoot":"","sources":["../src/command-metadata.ts"],"names":[],"mappings":"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"}
@@ -74,6 +74,12 @@ export interface MessageItemProps {
74
74
  handleFileRevert: (path: string, content: string) => Promise<void>;
75
75
  setInputAndCursorEnd: (val: string) => void;
76
76
  setModelPicker: React.Dispatch<React.SetStateAction<ModelPicker | null>>;
77
+ /**
78
+ * The live conversation mode (discovery maps to 'plan') — scopes the
79
+ * loop-limit banner's "Change model" picker so the pick lands on the mode the
80
+ * user is actually in.
81
+ */
82
+ chatMode: 'plan' | 'execute';
77
83
  /** Signed-in user's avatar shown beside their own messages (SOC1); icon fallback when absent/unsafe. */
78
84
  userAvatar?: string | null;
79
85
  /** When set, the user avatar becomes clickable and fires this to open the user's profile (C5). */
@@ -86,6 +92,10 @@ export interface MessageItemProps {
86
92
  * {@link ChatPanelProps.buildUpgradeCta}.
87
93
  */
88
94
  buildUpgradeCta?: ChatPanelProps['buildUpgradeCta'];
95
+ /** Agent display name — used in the team-only badge tooltip ("{{agentName}} ignores it"). */
96
+ agentName?: string;
97
+ /** Whether the user may write shared project state — false hides/inertizes write affordances in the message (revert, ask_user answers). */
98
+ canEdit?: boolean;
89
99
  }
90
100
  /** Props for the inner chat surface (timeline + composer), remounted per conversation. */
91
101
  export interface ChatInnerProps {
@@ -96,6 +106,10 @@ export interface ChatInnerProps {
96
106
  isPro?: boolean;
97
107
  /** Whether the viewer is anonymous — see {@link ChatPanelProps.isAnonymous}. */
98
108
  isAnonymous?: boolean;
109
+ /** Whether the user may write shared project state — see {@link ChatPanelProps.canEdit}. */
110
+ canEdit?: boolean;
111
+ /** Whether the user may manage public share links — see {@link ChatPanelProps.canShare}. */
112
+ canShare?: boolean;
99
113
  /** Host-supplied upgrade/sign-in CTA builder — see {@link ChatPanelProps.buildUpgradeCta}. */
100
114
  buildUpgradeCta?: ChatPanelProps['buildUpgradeCta'];
101
115
  /** Host-supplied `/help` upgrade section builder — see {@link ChatPanelProps.buildHelpUpgradeSection}. */
@@ -121,6 +135,8 @@ export interface ChatInnerProps {
121
135
  onRenderError?: ChatPanelProps['onRenderError'];
122
136
  /** Called when a user avatar in the chat timeline is clicked — see {@link ChatPanelProps.onProfileClick}. */
123
137
  onProfileClick?: ChatPanelProps['onProfileClick'];
138
+ /** The signed-in user's id — gates avatar clicks to their OWN messages. See {@link ChatPanelProps.currentUserId}. */
139
+ currentUserId?: string;
124
140
  /** Called on the `ready_to_build` stream event — discovery is done; boot the sandbox. */
125
141
  onReadyToBuild?: () => void;
126
142
  /** True after the plan streams but while the sandbox is still booting (pre-kickoff) — drives the chat "waiting for environment" indicator. */
@@ -140,7 +156,9 @@ export interface ChatInnerProps {
140
156
  /** Changing this value opens the `/settings` view (used by the header gear button). */
141
157
  openSettingsSignal?: number;
142
158
  /** Shows a "manage your own models" row in the `/model` picker — see {@link ChatPanelProps.onManageCustomModels}. */
143
- onManageCustomModels?: () => void;
159
+ onManageCustomModels?: (context?: {
160
+ mode?: 'plan' | 'execute';
161
+ }) => void;
144
162
  /** Bump to re-read persisted model/settings — see {@link ChatPanelProps.modelSelectionSignal}. */
145
163
  modelSelectionSignal?: number;
146
164
  /** Changing this value opens the `/report` bug-report modal (used by the header bug button). */
@@ -179,7 +197,7 @@ export interface ChatInnerProps {
179
197
  * @param props - Component props (see {@link MessageItemProps}).
180
198
  * @returns The rendered chat panel element.
181
199
  */
182
- export declare function ChatPanel({ projectId, endpoint, initialMessage, onInitialMessageSent, activeFile, openTabs, onFileOpen, onFileDoubleClick, onFileDiff, onFileRevert, onFileChange, onFileDeleted, onCommit, onActivityClick, onRenderError, onProfileClick, onReadyToBuild, awaitingSandboxBoot, onClientAction, onTurnComplete, onLoadingChange, onNavigatePreview, onRegisterPushHandler, autoSubmitSignal, initialInputValue, hideConversationMenu, renderConversationHeader, conversationId: controlledConversationId, chatKey: controlledChatKey, onConversationId: controlledOnConversationId, openShareSignal: controlledShareSignal, openReportSignal: controlledReportSignal, openSettingsSignal: controlledSettingsSignal, onManageCustomModels, gitStatusTick, pendingMessage, pendingMessageKey, pendingMessageSuppressUser, pendingMessageUserInitiated, userEditedFile, userEditedFileKey, isPro, isAnonymous, buildUpgradeCta, buildHelpUpgradeSection, userAvatar, agentName, productName, version, extraCommands, feedbackUrl, className, }: ChatPanelProps): JSX.Element;
200
+ export declare function ChatPanel({ projectId, endpoint, initialMessage, onInitialMessageSent, activeFile, openTabs, onFileOpen, onFileDoubleClick, onFileDiff, onFileRevert, onFileChange, onFileDeleted, onCommit, onActivityClick, onRenderError, onProfileClick, currentUserId, onReadyToBuild, awaitingSandboxBoot, onClientAction, onTurnComplete, onLoadingChange, onNavigatePreview, onRegisterPushHandler, autoSubmitSignal, initialInputValue, hideConversationMenu, renderConversationHeader, conversationId: controlledConversationId, chatKey: controlledChatKey, onConversationId: controlledOnConversationId, openShareSignal: controlledShareSignal, openReportSignal: controlledReportSignal, openSettingsSignal: controlledSettingsSignal, onManageCustomModels, gitStatusTick, pendingMessage, pendingMessageKey, pendingMessageSuppressUser, pendingMessageUserInitiated, userEditedFile, userEditedFileKey, isPro, isAnonymous, canEdit, canShare, buildUpgradeCta, buildHelpUpgradeSection, userAvatar, agentName, productName, version, extraCommands, feedbackUrl, className, }: ChatPanelProps): JSX.Element;
183
201
  export declare namespace ChatPanel {
184
202
  var displayName: string;
185
203
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ChatPanel.d.ts","sourceRoot":"","sources":["../../src/components/ChatPanel.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChatPanel.d.ts","sourceRoot":"","sources":["../../src/components/ChatPanel.tsx"],"names":[],"mappings":"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"}