@molecule/app-ide-react 1.7.0 → 1.8.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.
@@ -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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"}
@@ -1301,16 +1301,11 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
1301
1301
  clearInterval(autoFixIntervalRef.current);
1302
1302
  }, []);
1303
1303
  // Ref so the stream-event callback can push activity cards without depending
1304
- // on the state setter (mirrors appendCardMessageRef).
1304
+ // on the state setter.
1305
1305
  const addActivityCardRef = useRef(() => { });
1306
- // Ref to useChat's appendCardMessage, so the broadcast path (a teammate's `card` event,
1307
- // applied through handleStreamEvent) can append a card-message to the ONE message store.
1308
- // This client's OWN `card` events are appended internally by useChat's stream handler.
1309
- const appendCardMessageRef = useRef(() => { });
1310
- // Ref to useChat's appendCompleteMessage — same contract as appendCardMessageRef, for a
1311
- // teammate's broadcast `message` event (a complete non-streaming message, e.g. a
1312
- // human-only team note). This client's OWN `message` events append internally in useChat.
1313
- const appendCompleteMessageRef = useRef(() => { });
1306
+ // (A teammate's broadcast `card` / `message` events are ingested by
1307
+ // useChat.applyRemoteEvent applyPushedStreamEvent routes every pushed frame
1308
+ // through it before this panel's handler runs, so no append refs live here.)
1314
1309
  // Kept current each render so handleStreamEvent (memoized) always calls the latest.
1315
1310
  const onReadyToBuildRef = useRef(onReadyToBuild);
1316
1311
  onReadyToBuildRef.current = onReadyToBuild;
@@ -1328,9 +1323,15 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
1328
1323
  contextWindow: event.usage.contextWindow,
1329
1324
  });
1330
1325
  }
1331
- // Capture verification errors to trigger countdown after stream ends.
1326
+ // Capture verification errors to trigger countdown after stream ends
1327
+ // SENDER-ONLY: a pushed frame from a teammate's turn must not arm this
1328
+ // client's auto-fix (the sender's client owns the follow-up; two clients
1329
+ // arming it would double-send the fix).
1332
1330
  // Also drop any deferred preview error — verification's countdown handles it.
1333
- if (event.type === 'verification_result' && event.status === 'error' && event.output) {
1331
+ if (!applyingPushedRef.current &&
1332
+ event.type === 'verification_result' &&
1333
+ event.status === 'error' &&
1334
+ event.output) {
1334
1335
  pendingVerificationRef.current = {
1335
1336
  output: event.output,
1336
1337
  categories: event.categories ?? [],
@@ -1348,22 +1349,9 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
1348
1349
  if (event.type === 'verification_result' && event.status === 'ok') {
1349
1350
  pendingVerificationRef.current = null;
1350
1351
  }
1351
- // Inline transcript CARD (model / mode / skills / custom notice). The server records it
1352
- // into the ONE message transcript and emits it here; this client's OWN stream appends
1353
- // the card-message via useChat (case 'card'). Here we ONLY handle a TEAMMATE's broadcast
1354
- // (applied through applyPushedStreamEvent → handleStreamEvent): append it to the local
1355
- // store so it shows live for the collaborator too (de-duped by id; never re-persisted —
1356
- // the originating server already persisted it, and on reload it loads with the messages).
1357
- if (event.type === 'card' && applyingPushedRef.current) {
1358
- appendCardMessageRef.current(event.id, event.timestamp, event.card);
1359
- }
1360
- // A teammate's broadcast complete message (e.g. a human-only team note) — append it
1361
- // to the local store so it shows live for the collaborator too (de-duped by id;
1362
- // never re-persisted — the originating server already persisted it). This client's
1363
- // OWN `message` stream events are appended internally by useChat.
1364
- if (event.type === 'message' && applyingPushedRef.current && event.message) {
1365
- appendCompleteMessageRef.current(event.message);
1366
- }
1352
+ // NOTE: pushed `card` / `message` events are ingested into the message store by
1353
+ // useChat.applyRemoteEvent (applyPushedStreamEvent calls it before this handler),
1354
+ // through the same append helpers as an own stream no panel-side append here.
1367
1355
  // Captured outbound side effect (email/sms/push/webhook/channel) — push an
1368
1356
  // inline activity card into the timeline. Non-text card, mirroring how
1369
1357
  // system cards are appended.
@@ -1371,9 +1359,11 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
1371
1359
  addActivityCardRef.current(activityFromEvent(event.activity));
1372
1360
  }
1373
1361
  // Discovery finished and the server selected a starting point — boot the
1374
- // sandbox. The template choice is internal; this event carries no
1375
- // user-facing payload and is never rendered in the transcript.
1376
- if (event.type === 'ready_to_build') {
1362
+ // sandbox. SENDER-ONLY: the sender's client drives the boot; a watching
1363
+ // client's host follows the project's sandbox status instead of racing a
1364
+ // second boot request. The template choice is internal; this event carries
1365
+ // no user-facing payload and is never rendered in the transcript.
1366
+ if (event.type === 'ready_to_build' && !applyingPushedRef.current) {
1377
1367
  onReadyToBuildRef.current?.();
1378
1368
  }
1379
1369
  // The agent asked the IDE to reload/navigate the preview, open a file, or drive the
@@ -1501,10 +1491,13 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
1501
1491
  }
1502
1492
  onFileChange?.(path, content);
1503
1493
  }, [onFileChange, onFileOpen, autoFixCountdown]);
1504
- const { messages, isLoading, isRemoteStreaming, noteRemoteStreamEvent, error, errorMeta, mode, fastMode, streamingStatus, setMode, setFastMode, sendMessage, abort, clearHistory, editQueuedMessage, deleteQueuedMessage, clearQueuedForFile, appendCardMessage, appendCompleteMessage, retryCountdown, cancelRetry, } = useChat({
1494
+ const { messages, isLoading, isRemoteStreaming, noteRemoteStreamEvent, error, errorMeta, mode, fastMode, streamingStatus, setMode, setFastMode, sendMessage, abort, clearHistory, editQueuedMessage, deleteQueuedMessage, clearQueuedForFile, applyRemoteEvent, retryCountdown, cancelRetry, } = useChat({
1505
1495
  endpoint,
1506
1496
  projectId,
1507
1497
  agentName,
1498
+ // A read-only viewer never issues chat POSTs (no resume/retry) — a live turn
1499
+ // is watched via pushed frames + the reconcile poll instead.
1500
+ readOnly: canEdit === false,
1508
1501
  // ALWAYS load history on mount. A persisted conversation MUST restore on refresh,
1509
1502
  // even when an initialMessage / initialInputValue is also present. The old condition
1510
1503
  // suppressed the load whenever a fresh message was about to be auto-sent — but on a
@@ -1530,13 +1523,15 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
1530
1523
  // model. This replaces the old default of writing the legacy `chatModel`
1531
1524
  // (which silently moved BOTH modes).
1532
1525
  const liveModelMode = mode === 'plan' ? 'plan' : 'execute';
1526
+ // Target for a settings PATCH that changes agent behavior (model / effort /
1527
+ // max loops / region / auto-fix / auto-approve): name the OPEN conversation so
1528
+ // the server's shared setting card lands in the transcript members are
1529
+ // actually watching (a project can hold several conversations).
1530
+ const settingsPatchUrl = useCallback(() => `/projects/${projectId}${conversationIdRef.current
1531
+ ? `?conversationId=${encodeURIComponent(conversationIdRef.current)}`
1532
+ : ''}`, [projectId]);
1533
1533
  // Keep sendMessageRef in sync so the countdown effect can call the latest sendMessage
1534
1534
  sendMessageRef.current = sendMessage;
1535
- // Keep the card-append ref current so handleStreamEvent (memoized) can append a teammate's
1536
- // broadcast `card` event to the message store.
1537
- appendCardMessageRef.current = appendCardMessage;
1538
- // Same for a teammate's broadcast complete `message` event (e.g. a team note).
1539
- appendCompleteMessageRef.current = appendCompleteMessage;
1540
1535
  // User Stop. A stop is a user decision the platform must not overrule — so
1541
1536
  // beyond killing the stream (useChat.abort also records the stop client-side
1542
1537
  // and, via chat-abort's userInitiated flag, server-side), drop every pending
@@ -2226,17 +2221,24 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
2226
2221
  }
2227
2222
  }, []);
2228
2223
  // Apply a chat event broadcast by another project member (the chat push channel). The
2229
- // originating member's SERVER already persisted everything (the transcript card-messages and
2230
- // the activity cards); this viewer only renders the broadcast live and gets the durable copy
2231
- // on reload. A pushed `card` event appends an ephemeral card-message (never persisted by this
2232
- // viewer); a pushed `activity` is flagged `received` so it renders but is not re-PUT.
2224
+ // originating member's SERVER already persisted everything; this client renders the
2225
+ // broadcast live and gets the durable copy on reload. EVERY frame of a remote turn
2226
+ // arrives here text/thinking deltas, tool events, verification, cards, the user
2227
+ // message, done and is ingested into the message store through useChat's
2228
+ // applyRemoteEvent (the same content applier as an own SSE stream), so watching a
2229
+ // teammate's turn looks exactly like running one. handleStreamEvent then handles the
2230
+ // panel-level concerns (context usage, sounds, activity cards) with the
2231
+ // applyingPushed flag gating the sender-only side effects (auto-fix, ready_to_build).
2233
2232
  const applyPushedStreamEvent = useCallback((frameConversationId, event) => {
2234
2233
  // Only apply broadcasts for the conversation this panel has open.
2235
2234
  if (frameConversationId !== conversationIdRef.current)
2236
2235
  return;
2237
- // Flag the window so a pushed activity card is marked `received` (rendered, not re-PUT);
2238
- // a pushed card-message is appended ephemerally. handleStreamEvent is synchronous, so the
2239
- // flag is set for exactly this event's handling.
2236
+ // Store ingestion first, so the transcript is current before any panel
2237
+ // side effect reads it.
2238
+ applyRemoteEvent(event);
2239
+ // Flag the window so a pushed activity card is marked `received` (rendered, not
2240
+ // re-PUT) and sender-only side effects are skipped. handleStreamEvent is
2241
+ // synchronous, so the flag is set for exactly this event's handling.
2240
2242
  applyingPushedRef.current = true;
2241
2243
  try {
2242
2244
  handleStreamEvent(event);
@@ -2249,7 +2251,7 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
2249
2251
  // continuation), tell useChat so it confirms against the server's streaming
2250
2252
  // flag and keeps the Stop button visible + functional for the remote turn.
2251
2253
  noteRemoteStreamEvent();
2252
- }, [handleStreamEvent, noteRemoteStreamEvent]);
2254
+ }, [applyRemoteEvent, handleStreamEvent, noteRemoteStreamEvent]);
2253
2255
  // Register the pushed-event handler with the parent (Workspace) so it can deliver
2254
2256
  // broadcast chat events from other project members; deregister on unmount.
2255
2257
  useEffect(() => {
@@ -2318,11 +2320,6 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
2318
2320
  activityCardsLoadedConvRef.current = null;
2319
2321
  if (!conversationId)
2320
2322
  return;
2321
- // Activity cards carry recipients/summaries and their routes are editor+ by
2322
- // design — a viewer's fetch/persist would just 403 on every panel open
2323
- // (observed live in prod logs). Skip both for read-only viewers.
2324
- if (canEdit === false)
2325
- return;
2326
2323
  if (prevConv && prevConv !== conversationId)
2327
2324
  setActivityCards([]);
2328
2325
  let cancelled = false;
@@ -2781,7 +2778,7 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
2781
2778
  // viewer's tab keeps the in-memory switch (all this session needs) and
2782
2779
  // skips a PATCH that could only 403.
2783
2780
  if (canEdit !== false) {
2784
- http.patch(`/projects/${projectId}`, { settings: { chatModel: fallback } }).catch(() => {
2781
+ http.patch(settingsPatchUrl(), { settings: { chatModel: fallback } }).catch(() => {
2785
2782
  /* persistence is best-effort; the in-memory switch is what matters */
2786
2783
  });
2787
2784
  }
@@ -3591,7 +3588,7 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
3591
3588
  const name = displayName ?? modelId;
3592
3589
  try {
3593
3590
  if (mode) {
3594
- await http.patch(`/projects/${projectId}`, {
3591
+ await http.patch(settingsPatchUrl(), {
3595
3592
  settings: { [modeSettingKey(mode)]: modelId },
3596
3593
  });
3597
3594
  if (mode === 'plan')
@@ -3611,7 +3608,7 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
3611
3608
  : t('ide.chat.compactModelSet', { name }, { defaultValue: 'Compaction model set to {{name}}' }));
3612
3609
  }
3613
3610
  else {
3614
- await http.patch(`/projects/${projectId}`, { settings: { chatModel: modelId } });
3611
+ await http.patch(settingsPatchUrl(), { settings: { chatModel: modelId } });
3615
3612
  setCurrentModel(modelId);
3616
3613
  setSavedChatModel(modelId);
3617
3614
  addSystemCard(t('ide.chat.modelSet', { name }, {
@@ -3635,7 +3632,7 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
3635
3632
  const nextRegions = { ...modelRegions, [modelId]: region };
3636
3633
  setModelRegions(nextRegions);
3637
3634
  try {
3638
- await http.patch(`/projects/${projectId}`, {
3635
+ await http.patch(settingsPatchUrl(), {
3639
3636
  settings: { modelRegions: nextRegions },
3640
3637
  });
3641
3638
  }
@@ -3927,7 +3924,7 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
3927
3924
  setInputValue('');
3928
3925
  const newValue = !autoFixEnabled;
3929
3926
  try {
3930
- await http.patch(`/projects/${projectId}`, { settings: { autoFix: newValue } });
3927
+ await http.patch(settingsPatchUrl(), { settings: { autoFix: newValue } });
3931
3928
  setAutoFixEnabled(newValue);
3932
3929
  addSystemCard(newValue
3933
3930
  ? t('ide.chat.autoFixEnabled', undefined, {
@@ -3948,7 +3945,7 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
3948
3945
  setInputValue('');
3949
3946
  const newValue = !autoApproveCommandsEnabled;
3950
3947
  try {
3951
- await http.patch(`/projects/${projectId}`, {
3948
+ await http.patch(settingsPatchUrl(), {
3952
3949
  settings: { autoApproveCommands: newValue },
3953
3950
  });
3954
3951
  setAutoApproveCommandsEnabled(newValue);
@@ -4320,7 +4317,7 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
4320
4317
  }
4321
4318
  try {
4322
4319
  const nextByMode = { ...effortByMode, [targetMode]: level };
4323
- await http.patch(`/projects/${projectId}`, { settings: { effortByMode: nextByMode } });
4320
+ await http.patch(settingsPatchUrl(), { settings: { effortByMode: nextByMode } });
4324
4321
  setEffortByMode(nextByMode);
4325
4322
  addSystemCard(t('ide.chat.effort.setMode', {
4326
4323
  mode: targetMode,
@@ -4342,7 +4339,7 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
4342
4339
  if (maxLoopsMatch) {
4343
4340
  const n = Math.max(1, Number(maxLoopsMatch[1]));
4344
4341
  try {
4345
- await http.patch(`/projects/${projectId}`, { settings: { maxToolLoops: n } });
4342
+ await http.patch(settingsPatchUrl(), { settings: { maxToolLoops: n } });
4346
4343
  setCurrentMaxLoops(n);
4347
4344
  addSystemCard(t('ide.chat.maxLoopsSet', { n }, {
4348
4345
  defaultValue: `Max tool iterations set to ${n}`,
@@ -4915,6 +4912,15 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
4915
4912
  // unrenderable card (a custom event with no registered factory, or a non-execute mode) so
4916
4913
  // the timeline simply omits it.
4917
4914
  const cardEventToSystemCard = useCallback((cardEvent, id, timestamp) => {
4915
+ // Suffix a card's copy with the member who made the change, when the
4916
+ // server attributed one — so a teammate watching knows WHO flipped the
4917
+ // model/effort/mode, live and on reload.
4918
+ const withBy = (text) => {
4919
+ const by = cardEvent.by;
4920
+ return by
4921
+ ? t('ide.chat.cardBy', { text, name: by }, { defaultValue: '{{text}} — {{name}}' })
4922
+ : text;
4923
+ };
4918
4924
  switch (cardEvent.kind) {
4919
4925
  case 'model': {
4920
4926
  const label = cardEvent.label || cardEvent.model;
@@ -4926,9 +4932,9 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
4926
4932
  const regionCode = def && def.provider !== 'custom' ? effectiveModelRegion(def).toUpperCase() : null;
4927
4933
  return {
4928
4934
  id,
4929
- text: regionCode
4935
+ text: withBy(regionCode
4930
4936
  ? t('ide.chat.modelInUseRegion', { model: label, region: regionCode }, { defaultValue: 'Now using {{model}} ({{region}})' })
4931
- : t('ide.chat.modelInUse', { model: label }, { defaultValue: 'Now using {{model}}' }),
4937
+ : t('ide.chat.modelInUse', { model: label }, { defaultValue: 'Now using {{model}}' })),
4932
4938
  timestamp,
4933
4939
  };
4934
4940
  }
@@ -4939,7 +4945,7 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
4939
4945
  if (cardEvent.mode === 'plan') {
4940
4946
  return {
4941
4947
  id,
4942
- text: t('ide.chat.phasePlanning', undefined, { defaultValue: '📝 Plan mode' }),
4948
+ text: withBy(t('ide.chat.phasePlanning', undefined, { defaultValue: '📝 Plan mode' })),
4943
4949
  timestamp,
4944
4950
  };
4945
4951
  }
@@ -4947,9 +4953,56 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
4947
4953
  return null;
4948
4954
  return {
4949
4955
  id,
4950
- text: t('ide.chat.phaseBuilding', undefined, { defaultValue: '🔨 Building your app' }),
4956
+ text: withBy(t('ide.chat.phaseBuilding', undefined, { defaultValue: '🔨 Building your app' })),
4951
4957
  timestamp,
4952
4958
  };
4959
+ case 'setting': {
4960
+ // A Synthase-altering setting changed (effort / fast mode / max loops /
4961
+ // region / auto-fix / auto-approve) — announced to every member, live
4962
+ // and on reload. Copy reuses the same localized strings as the local
4963
+ // confirmation cards, so the shared card reads identically.
4964
+ let text = null;
4965
+ if (cardEvent.setting === 'effort') {
4966
+ const level = String(cardEvent.value ?? 'default');
4967
+ const cardMode = cardEvent.mode ?? '';
4968
+ text = cardEvent.label
4969
+ ? t('ide.chat.effort.setMode', { mode: cardMode, level, model: cardEvent.label }, { defaultValue: 'Reasoning effort for {{mode}} set to {{level}} ({{model}}).' })
4970
+ : t('ide.chat.setting.effort', { mode: cardMode, level }, { defaultValue: 'Reasoning effort for {{mode}} set to {{level}}.' });
4971
+ }
4972
+ else if (cardEvent.setting === 'fastMode') {
4973
+ text = cardEvent.value
4974
+ ? t('ide.chat.fastModeOn', undefined, {
4975
+ defaultValue: 'Fast mode on — faster responses at a higher rate',
4976
+ })
4977
+ : t('ide.chat.fastModeOff', undefined, { defaultValue: 'Fast mode off' });
4978
+ }
4979
+ else if (cardEvent.setting === 'maxToolLoops') {
4980
+ text = t('ide.chat.maxLoopsSet', { n: Number(cardEvent.value ?? 0) }, { defaultValue: 'Max tool iterations set to {{n}}' });
4981
+ }
4982
+ else if (cardEvent.setting === 'region') {
4983
+ text = t('ide.chat.modelInUseRegion', {
4984
+ model: cardEvent.label ?? '',
4985
+ region: String(cardEvent.value ?? '').toUpperCase(),
4986
+ }, { defaultValue: 'Now using {{model}} ({{region}})' });
4987
+ }
4988
+ else if (cardEvent.setting === 'autoFix') {
4989
+ text = cardEvent.value
4990
+ ? t('ide.chat.autoFixEnabled', undefined, { defaultValue: 'Auto-fix enabled.' })
4991
+ : t('ide.chat.autoFixDisabled', undefined, { defaultValue: 'Auto-fix disabled.' });
4992
+ }
4993
+ else if (cardEvent.setting === 'autoApprove') {
4994
+ text = cardEvent.value
4995
+ ? t('ide.chat.autoApproveEnabled', undefined, {
4996
+ defaultValue: 'Auto-approve on — destructive commands run without asking. The exfiltration guard still asks. Turn off with /autoapprove.',
4997
+ })
4998
+ : t('ide.chat.autoApproveDisabled', undefined, {
4999
+ defaultValue: 'Auto-approve off — destructive commands ask before running.',
5000
+ });
5001
+ }
5002
+ if (!text)
5003
+ return null;
5004
+ return { id, text: withBy(text), timestamp };
5005
+ }
4953
5006
  case 'skills':
4954
5007
  return {
4955
5008
  id,
@@ -5317,7 +5370,10 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
5317
5370
  }, children: [_jsx(Icon, { name: "people", size: CHAT_CARD_ICON_SIZE, "aria-hidden": "true", style: { flexShrink: 0, marginTop: 1, color: NOTICE_TONE.gold.accent } }), _jsx("span", { style: { flex: 1 }, children: t('ide.chat.viewerReadOnly', undefined, {
5318
5371
  defaultValue: "You have view-only access, so you can't run the assistant here. You can still read along and use /teamsay to message the team.",
5319
5372
  }) })] })) : null) : (_jsx("div", { className: cm.cn(cm.textSize('sm'), cm.sp('p', 2), cm.sp('mb', 2), cm.bgErrorSubtle, cm.textError), style: { borderRadius: '6px' }, children: error }))), (() => {
5320
- const showActivity = isLoading || awaitingSandboxBoot;
5373
+ // A remote turn (a teammate's send, another tab, a server-side
5374
+ // continuation) shows the same live activity indicator as an own send —
5375
+ // watchers see Synthase working, not a frozen transcript.
5376
+ const showActivity = isLoading || awaitingSandboxBoot || isRemoteStreaming;
5321
5377
  const streamingMsg = isLoading
5322
5378
  ? [...visibleMessages].reverse().find((m) => m.isStreaming)
5323
5379
  : undefined;