@molecule/app-ide-react 1.16.0 → 1.17.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.
- package/README.md +7 -1
- package/dist/components/ChatPanel.d.ts.map +1 -1
- package/dist/components/ChatPanel.js +57 -1
- package/dist/components/ChatPanel.js.map +1 -1
- package/dist/components/MarkdownContent.d.ts.map +1 -1
- package/dist/components/MarkdownContent.js +27 -7
- package/dist/components/MarkdownContent.js.map +1 -1
- package/dist/components/TestStatusBar.d.ts +56 -0
- package/dist/components/TestStatusBar.d.ts.map +1 -0
- package/dist/components/TestStatusBar.js +105 -0
- package/dist/components/TestStatusBar.js.map +1 -0
- package/dist/components/ToolCallCard.d.ts.map +1 -1
- package/dist/components/ToolCallCard.js +384 -68
- package/dist/components/ToolCallCard.js.map +1 -1
- package/dist/components/tests-bar-utilities.d.ts +78 -103
- package/dist/components/tests-bar-utilities.d.ts.map +1 -1
- package/dist/components/tests-bar-utilities.js +130 -201
- package/dist/components/tests-bar-utilities.js.map +1 -1
- package/dist/components/tool-call-utilities.d.ts +68 -7
- package/dist/components/tool-call-utilities.d.ts.map +1 -1
- package/dist/components/tool-call-utilities.js +124 -6
- package/dist/components/tool-call-utilities.js.map +1 -1
- package/dist/hooks/useTestsBarVisible.d.ts +16 -0
- package/dist/hooks/useTestsBarVisible.d.ts.map +1 -0
- package/dist/hooks/useTestsBarVisible.js +39 -0
- package/dist/hooks/useTestsBarVisible.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
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-09-
|
|
6
|
+
Generated: 2026-09-18T05:52:28.111Z
|
|
7
7
|
-->
|
|
8
8
|
|
|
9
9
|
# @molecule/app-ide-react
|
|
@@ -3989,6 +3989,12 @@ Peer dependencies:
|
|
|
3989
3989
|
in a sandbox there is none. That bond drives the page the person is
|
|
3990
3990
|
actually looking at, so **a preview must be open** somewhere or the driver
|
|
3991
3991
|
waits and fails; the card says so next to the end-to-end group.
|
|
3992
|
+
- **Chat markdown links are scheme-allowlisted.** `MarkdownContent` renders
|
|
3993
|
+
`[label](href)` with a leading-slash or bare path as a preview-route
|
|
3994
|
+
button and only `http(s):`/`mailto:` (plus `//host`) as real anchors;
|
|
3995
|
+
every other scheme (`javascript:`, `data:`, …) renders as inert text.
|
|
3996
|
+
Model output is prompt-injectable, so never loosen this to render raw
|
|
3997
|
+
schemes — the markdown bonds' `isSafeUrl` keeps the same policy.
|
|
3992
3998
|
- Text routes through `t('ide.*')` — `@molecule/app-locales-ide` supplies
|
|
3993
3999
|
translations.
|
|
3994
4000
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatPanel.d.ts","sourceRoot":"","sources":["../../src/components/ChatPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAa,MAAM,OAAO,CAAA;AAY3C,OAAO,KAAK,EAAa,WAAW,EAAmB,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"ChatPanel.d.ts","sourceRoot":"","sources":["../../src/components/ChatPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,7 @@ import { Tooltip } from '@molecule/app-ui-react/components/Tooltip.js';
|
|
|
11
11
|
import { timelineSortKey } from '../chatTimelineOrdering.js';
|
|
12
12
|
import { getCustomEventCardFactory } from '../customEventCards.js';
|
|
13
13
|
import { useChatTimestampsVisible, useMinuteNow } from '../hooks/useChatTimestampsVisible.js';
|
|
14
|
+
import { useTestsBarVisible } from '../hooks/useTestsBarVisible.js';
|
|
14
15
|
import { useCoarsePointer, useNarrowViewport } from '../hooks/useViewport.js';
|
|
15
16
|
import { activityFromEvent } from './activity-utilities.js';
|
|
16
17
|
import { ActivityCard } from './ActivityCard.js';
|
|
@@ -44,8 +45,10 @@ import { SettingsCard } from './SettingsCard.js';
|
|
|
44
45
|
import { ShareModal } from './ShareModal.js';
|
|
45
46
|
import { SkillsCard } from './SkillsCard.js';
|
|
46
47
|
import { StreamingIndicator } from './StreamingIndicator.js';
|
|
48
|
+
import { getTestsBarVisible, parseTestsBarArg, setTestsBarVisible, shouldShowTestsBar, } from './tests-bar-utilities.js';
|
|
47
49
|
import { applyTestRunEvent, buildTestFixMessage, EMPTY_RUN_STATE, failRun, markSkipUnavailable, parseTestCommand, requestSkip, } from './tests-card-utilities.js';
|
|
48
50
|
import { TestsCard } from './TestsCard.js';
|
|
51
|
+
import { TestStatusBar } from './TestStatusBar.js';
|
|
49
52
|
import { TipCard } from './TipCard.js';
|
|
50
53
|
import { ToolCallCard } from './ToolCallCard.js';
|
|
51
54
|
import { UserAvatar } from './UserAvatar.js';
|
|
@@ -1656,6 +1659,8 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
|
|
|
1656
1659
|
const [commitState, setCommitState] = useState(null);
|
|
1657
1660
|
const [pendingFiles, setPendingFiles] = useState(null);
|
|
1658
1661
|
const [commitBarExpanded, setCommitBarExpanded] = useState(false);
|
|
1662
|
+
// The tests strip sits above the commit bar and starts collapsed, like it.
|
|
1663
|
+
const [testsBarExpanded, setTestsBarExpanded] = useState(false);
|
|
1659
1664
|
const [commitCards, setCommitCards] = useState([]);
|
|
1660
1665
|
/** Number of timeline items rendered in the DOM. Increases when user clicks "Show earlier". */
|
|
1661
1666
|
const [maxVisibleItems, setMaxVisibleItems] = useState(60);
|
|
@@ -2600,6 +2605,7 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
|
|
|
2600
2605
|
// The minute clock re-plans which items show a time (see planChatTimestamps),
|
|
2601
2606
|
// so labels advance and runs of identical labels regroup as time passes.
|
|
2602
2607
|
const timestampsVisible = useChatTimestampsVisible();
|
|
2608
|
+
const testsBarVisible = useTestsBarVisible();
|
|
2603
2609
|
const minuteNow = useMinuteNow();
|
|
2604
2610
|
const applyTimestampsVisible = useCallback((visible) => {
|
|
2605
2611
|
setChatTimestampsVisible(visible);
|
|
@@ -3231,6 +3237,35 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
|
|
|
3231
3237
|
const id = setInterval(() => dispatchAutoCommit({ type: 'tick' }), 1000);
|
|
3232
3238
|
return () => clearInterval(id);
|
|
3233
3239
|
}, [autoCommitArmed, autoCommitHeld]);
|
|
3240
|
+
// The tests bar hides itself on a project with no tests, so it has to LEARN
|
|
3241
|
+
// whether any exist without the person opening the browser first — otherwise
|
|
3242
|
+
// "shown by default" would mean "shown after you ask for it once", which is
|
|
3243
|
+
// not a default at all.
|
|
3244
|
+
//
|
|
3245
|
+
// Discovery runs when the environment comes up, and again when a turn ends
|
|
3246
|
+
// while we still know of none: that is the turn that wrote the project's
|
|
3247
|
+
// first spec. A project that already has tests never pays for the second
|
|
3248
|
+
// probe, because the effect returns the moment the list is non-empty.
|
|
3249
|
+
const turnInFlight = isLoading || isRemoteStreaming;
|
|
3250
|
+
useEffect(() => {
|
|
3251
|
+
if (!testsBarVisible || !listTests)
|
|
3252
|
+
return;
|
|
3253
|
+
if (testsAvailable !== true)
|
|
3254
|
+
return;
|
|
3255
|
+
if (turnInFlight || testsRun.running)
|
|
3256
|
+
return;
|
|
3257
|
+
if (testsList.length > 0)
|
|
3258
|
+
return;
|
|
3259
|
+
void refreshTests();
|
|
3260
|
+
}, [
|
|
3261
|
+
testsBarVisible,
|
|
3262
|
+
listTests,
|
|
3263
|
+
testsAvailable,
|
|
3264
|
+
turnInFlight,
|
|
3265
|
+
testsRun.running,
|
|
3266
|
+
testsList.length,
|
|
3267
|
+
refreshTests,
|
|
3268
|
+
]);
|
|
3234
3269
|
// Wrap onFileRevert so undo/redo also refreshes git status
|
|
3235
3270
|
const handleFileRevert = useCallback(async (path, content) => {
|
|
3236
3271
|
await onFileRevert?.(path, content);
|
|
@@ -4536,6 +4571,22 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
|
|
|
4536
4571
|
setSoundsPicker({ selectedIdx: -1 });
|
|
4537
4572
|
return;
|
|
4538
4573
|
}
|
|
4574
|
+
// `/test on | off | toggle` sets whether the TESTS STRIP is shown — a
|
|
4575
|
+
// per-device display preference, the same shape as /timestamps. Bare
|
|
4576
|
+
// `/test` is left alone: it opens the tests browser, which is a different
|
|
4577
|
+
// thing and is what the command menu offers.
|
|
4578
|
+
const testsBarMatch = /^\/test(?:s)?\s+(.+)$/i.exec(trimmed);
|
|
4579
|
+
if (testsBarMatch) {
|
|
4580
|
+
const next = parseTestsBarArg(testsBarMatch[1] ?? '', getTestsBarVisible());
|
|
4581
|
+
if (next !== null) {
|
|
4582
|
+
setInputValue('');
|
|
4583
|
+
setTestsBarVisible(next);
|
|
4584
|
+
addSystemCard(next
|
|
4585
|
+
? t('ide.chat.testsBarShown', undefined, { defaultValue: 'Tests bar shown.' })
|
|
4586
|
+
: t('ide.chat.testsBarHidden', undefined, { defaultValue: 'Tests bar hidden.' }), { clientOnly: true });
|
|
4587
|
+
return;
|
|
4588
|
+
}
|
|
4589
|
+
}
|
|
4539
4590
|
// Handle /timestamps [on | off] locally — a per-device display preference.
|
|
4540
4591
|
const timestampsCommand = parseTimestampsCommand(trimmed);
|
|
4541
4592
|
if (timestampsCommand) {
|
|
@@ -7355,7 +7406,12 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
|
|
|
7355
7406
|
}, onMouseLeave: (e) => {
|
|
7356
7407
|
e.currentTarget.style.opacity = '0.7';
|
|
7357
7408
|
e.currentTarget.style.background = 'none';
|
|
7358
|
-
}, children: _jsx("svg", { width: "13", height: "13", viewBox: "0 0 12 12", style: { display: 'block' }, children: _jsx("path", { d: "M 2.5,6.5 L 6,3 L 9.5,6.5 M 6,3.5 L 6,10", fill: "none", stroke: "currentColor", strokeWidth: "1.75", strokeLinecap: "round", strokeLinejoin: "round" }) }) }))] }, qm.id))) })] })),
|
|
7409
|
+
}, children: _jsx("svg", { width: "13", height: "13", viewBox: "0 0 12 12", style: { display: 'block' }, children: _jsx("path", { d: "M 2.5,6.5 L 6,3 L 9.5,6.5 M 6,3.5 L 6,10", fill: "none", stroke: "currentColor", strokeWidth: "1.75", strokeLinecap: "round", strokeLinejoin: "round" }) }) }))] }, qm.id))) })] })), testsBarVisible &&
|
|
7410
|
+
shouldShowTestsBar(testsRun, testsList) &&
|
|
7411
|
+
!commandMenu &&
|
|
7412
|
+
!modelPicker &&
|
|
7413
|
+
!effortPicker &&
|
|
7414
|
+
!panelOverlay && (_jsx(TestStatusBar, { run: testsRun, tests: testsList, expanded: testsBarExpanded, onToggle: () => setTestsBarExpanded((v) => !v), onOpen: () => openTestsBrowser(''), onStop: testsRun.running ? cancelTestsRun : undefined })), canEdit !== false &&
|
|
7359
7415
|
pendingFiles != null &&
|
|
7360
7416
|
pendingFiles.length > 0 &&
|
|
7361
7417
|
!commandMenu &&
|