@molecule/app-ide-react 1.20.0 → 1.20.2
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/dist/components/BackgroundTasksStrip.d.ts +6 -3
- package/dist/components/BackgroundTasksStrip.d.ts.map +1 -1
- package/dist/components/BackgroundTasksStrip.js +18 -10
- package/dist/components/BackgroundTasksStrip.js.map +1 -1
- package/dist/components/ChatPanel.d.ts.map +1 -1
- package/dist/components/ChatPanel.js +111 -131
- package/dist/components/ChatPanel.js.map +1 -1
- package/dist/components/DockStrip.d.ts +55 -0
- package/dist/components/DockStrip.d.ts.map +1 -0
- package/dist/components/DockStrip.js +90 -0
- package/dist/components/DockStrip.js.map +1 -0
- package/dist/components/PlanCard.d.ts +26 -0
- package/dist/components/PlanCard.d.ts.map +1 -0
- package/dist/components/PlanCard.js +58 -0
- package/dist/components/PlanCard.js.map +1 -0
- package/dist/components/PlanStatusIcon.d.ts +15 -0
- package/dist/components/PlanStatusIcon.d.ts.map +1 -0
- package/dist/components/PlanStatusIcon.js +32 -0
- package/dist/components/PlanStatusIcon.js.map +1 -0
- package/dist/components/TestStatusBar.d.ts.map +1 -1
- package/dist/components/TestStatusBar.js +13 -42
- package/dist/components/TestStatusBar.js.map +1 -1
- package/dist/components/ToolCallCard.d.ts.map +1 -1
- package/dist/components/ToolCallCard.js +22 -61
- package/dist/components/ToolCallCard.js.map +1 -1
- package/dist/components/tool-call-utilities.d.ts.map +1 -1
- package/dist/components/tool-call-utilities.js +7 -0
- package/dist/components/tool-call-utilities.js.map +1 -1
- package/package.json +2 -2
|
@@ -7,11 +7,14 @@ import type { BackgroundTaskState } from '@molecule/app-ai-chat';
|
|
|
7
7
|
* `exec_command` with `run_in_background` returns a handle immediately, so the
|
|
8
8
|
* tool call's own card goes green while the command is still running — a test
|
|
9
9
|
* suite can be four minutes from its verdict with nothing on screen saying so.
|
|
10
|
-
* This strip is the one place that state is visible: what is
|
|
11
|
-
* it has been running, and how
|
|
10
|
+
* This strip is the one place that state is visible: what each one is for, how
|
|
11
|
+
* long it has been running, and how it ended.
|
|
12
|
+
*
|
|
13
|
+
* @param props - Component props.
|
|
14
|
+
* @param props.tasks - Every background command of the current turn, newest last.
|
|
15
|
+
* @returns The strip, or nothing when no task was started.
|
|
12
16
|
*/
|
|
13
17
|
export declare function BackgroundTasksStrip({ tasks, }: {
|
|
14
|
-
/** Every background command of the current turn, newest last. */
|
|
15
18
|
tasks: BackgroundTaskState[];
|
|
16
19
|
}): JSX.Element | null;
|
|
17
20
|
//# sourceMappingURL=BackgroundTasksStrip.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BackgroundTasksStrip.d.ts","sourceRoot":"","sources":["../../src/components/BackgroundTasksStrip.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAuB,MAAM,OAAO,CAAA;AAErD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"BackgroundTasksStrip.d.ts","sourceRoot":"","sources":["../../src/components/BackgroundTasksStrip.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAuB,MAAM,OAAO,CAAA;AAErD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAMhE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,KAAK,GACN,EAAE;IACD,KAAK,EAAE,mBAAmB,EAAE,CAAA;CAC7B,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CA2FrB"}
|
|
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { useEffect, useState } from 'react';
|
|
3
3
|
import { t } from '@molecule/app-i18n';
|
|
4
4
|
import { getClassMap } from '@molecule/app-ui';
|
|
5
|
-
import {
|
|
5
|
+
import { DockStrip, StatusMark } from './DockStrip.js';
|
|
6
6
|
/**
|
|
7
7
|
* The commands running in the sandbox that outlived the tool call that started
|
|
8
8
|
* them.
|
|
@@ -10,8 +10,12 @@ import { Icon } from '@molecule/app-ui-react';
|
|
|
10
10
|
* `exec_command` with `run_in_background` returns a handle immediately, so the
|
|
11
11
|
* tool call's own card goes green while the command is still running — a test
|
|
12
12
|
* suite can be four minutes from its verdict with nothing on screen saying so.
|
|
13
|
-
* This strip is the one place that state is visible: what is
|
|
14
|
-
* it has been running, and how
|
|
13
|
+
* This strip is the one place that state is visible: what each one is for, how
|
|
14
|
+
* long it has been running, and how it ended.
|
|
15
|
+
*
|
|
16
|
+
* @param props - Component props.
|
|
17
|
+
* @param props.tasks - Every background command of the current turn, newest last.
|
|
18
|
+
* @returns The strip, or nothing when no task was started.
|
|
15
19
|
*/
|
|
16
20
|
export function BackgroundTasksStrip({ tasks, }) {
|
|
17
21
|
const cm = getClassMap();
|
|
@@ -33,13 +37,17 @@ export function BackgroundTasksStrip({ tasks, }) {
|
|
|
33
37
|
: failed.length > 0
|
|
34
38
|
? t('ide.chat.backgroundFailed', { count: failed.length }, { defaultValue: '{{count}} background task failed' })
|
|
35
39
|
: t('ide.chat.backgroundDone', { count: tasks.length }, { defaultValue: '{{count}} background task finished' });
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
// Collapsed, name what the strip is about: the purpose of the task in flight.
|
|
41
|
+
const lead = running[0] ?? failed[0];
|
|
42
|
+
return (_jsx(DockStrip, { molId: "chat-background-tasks", toggleMolId: "chat-background-tasks-toggle", expanded: expanded, onToggle: () => setExpanded((open) => !open), icon: _jsx(StatusMark, { state: running.length > 0 ? 'active' : failed.length > 0 ? 'failed' : 'done', size: 14 }), label: summary, hint: !expanded && lead ? `· ${purpose(lead)}` : undefined, children: _jsx("ul", { style: { listStyle: 'none', margin: 0, padding: 0 }, children: tasks.map((task) => (_jsxs("li", { "data-mol-id": "chat-background-task", className: cm.textSize('xs'), style: { display: 'flex', alignItems: 'flex-start', gap: 8, padding: '3px 0' }, children: [_jsx("span", { style: { flexShrink: 0, display: 'inline-flex', paddingTop: 1 }, children: _jsx(StatusMark, { state: task.status === 'running'
|
|
43
|
+
? 'active'
|
|
44
|
+
: task.status === 'failed'
|
|
45
|
+
? 'failed'
|
|
46
|
+
: 'done', size: 14 }) }), _jsxs("div", { style: { flex: 1, minWidth: 0 }, children: [_jsx("div", { children: purpose(task) }), task.description ? (_jsx("code", { className: cm.textMuted, style: { display: 'block', whiteSpace: 'pre-wrap', overflowWrap: 'anywhere' }, children: task.command })) : null] }), _jsx("span", { className: cm.textMuted, style: { flexShrink: 0, whiteSpace: 'nowrap' }, children: describe(task) })] }, task.id))) }) }));
|
|
47
|
+
}
|
|
48
|
+
/** What a task is for: the executor's own reason, else the command itself. */
|
|
49
|
+
function purpose(task) {
|
|
50
|
+
return task.description ?? task.command;
|
|
43
51
|
}
|
|
44
52
|
/** The right-hand status for one command: how long it ran, and how it ended. */
|
|
45
53
|
function describe(task) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BackgroundTasksStrip.js","sourceRoot":"","sources":["../../src/components/BackgroundTasksStrip.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAY,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAGrD,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAA;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"BackgroundTasksStrip.js","sourceRoot":"","sources":["../../src/components/BackgroundTasksStrip.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAY,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAGrD,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAA;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAEtD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,oBAAoB,CAAC,EACnC,KAAK,GAGN;IACC,MAAM,EAAE,GAAG,WAAW,EAAE,CAAA;IACxB,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC/C,8EAA8E;IAC9E,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC5B,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAA;IACjE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAM;QAChC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;QACzD,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;IACnC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;IAEpB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAEnC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAA;IAC/D,MAAM,OAAO,GACX,OAAO,CAAC,MAAM,GAAG,CAAC;QAChB,CAAC,CAAC,CAAC,CACC,4BAA4B,EAC5B,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,EACzB,EAAE,YAAY,EAAE,0CAA0C,EAAE,CAC7D;QACH,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;YACjB,CAAC,CAAC,CAAC,CACC,2BAA2B,EAC3B,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,EACxB,EAAE,YAAY,EAAE,kCAAkC,EAAE,CACrD;YACH,CAAC,CAAC,CAAC,CACC,yBAAyB,EACzB,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,EACvB,EAAE,YAAY,EAAE,oCAAoC,EAAE,CACvD,CAAA;IAET,8EAA8E;IAC9E,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAA;IAEpC,OAAO,CACL,KAAC,SAAS,IACR,KAAK,EAAC,uBAAuB,EAC7B,WAAW,EAAC,8BAA8B,EAC1C,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAC5C,IAAI,EACF,KAAC,UAAU,IACT,KAAK,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAC5E,IAAI,EAAE,EAAE,GACR,EAEJ,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,YAE1D,aAAI,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,YACpD,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACnB,6BAEc,sBAAsB,EAClC,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAC5B,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,aAE9E,eAAM,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC,EAAE,YACnE,KAAC,UAAU,IACT,KAAK,EACH,IAAI,CAAC,MAAM,KAAK,SAAS;gCACvB,CAAC,CAAC,QAAQ;gCACV,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ;oCACxB,CAAC,CAAC,QAAQ;oCACV,CAAC,CAAC,MAAM,EAEd,IAAI,EAAE,EAAE,GACR,GACG,EACP,eAAK,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,aAClC,wBAAM,OAAO,CAAC,IAAI,CAAC,GAAO,EACzB,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAClB,eACE,SAAS,EAAE,EAAE,CAAC,SAAS,EACvB,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,YAE5E,IAAI,CAAC,OAAO,GACR,CACR,CAAC,CAAC,CAAC,IAAI,IACJ,EACN,eAAM,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,YAC1E,QAAQ,CAAC,IAAI,CAAC,GACV,KA9BF,IAAI,CAAC,EAAE,CA+BT,CACN,CAAC,GACC,GACK,CACb,CAAA;AACH,CAAC;AAED,8EAA8E;AAC9E,SAAS,OAAO,CAAC,IAAyB;IACxC,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAA;AACzC,CAAC;AAED,gFAAgF;AAChF,SAAS,QAAQ,CAAC,IAAyB;IACzC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;IAClG,MAAM,OAAO,GAAG,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,KAAK,OAAO,GAAG,EAAE,GAAG,CAAA;IAC9F,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,CAAC,CAAC,4BAA4B,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,uBAAuB,EAAE,CAAC,CAAA;IAChG,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,CAAC,CACN,yBAAyB,EACzB,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE,OAAO,EAAE,EACrC,EAAE,YAAY,EAAE,6BAA6B,EAAE,CAChD,CAAA;IACH,CAAC;IACD,OAAO,CAAC,CAAC,uBAAuB,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,oBAAoB,EAAE,CAAC,CAAA;AACxF,CAAC"}
|
|
@@ -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;AAa3C,OAAO,KAAK,EAAa,WAAW,EAAmB,MAAM,uBAAuB,CAAA;AAyCpF,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAChB,eAAe,EAIhB,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAiBvD,OAAO,EAEL,KAAK,UAAU,EAGhB,MAAM,oBAAoB,CAAA;AAY3B,OAAO,KAAK,EAAsB,SAAS,EAAE,MAAM,gCAAgC,CAAA;
|
|
1
|
+
{"version":3,"file":"ChatPanel.d.ts","sourceRoot":"","sources":["../../src/components/ChatPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -37,9 +37,11 @@ import { getChatTimestampsVisible, parseTimestampsCommand, planChatTimestamps, r
|
|
|
37
37
|
import { ENTRY_TIP, pickIdleTip, shouldShowIdleTip, TIP_IDLE_MS, TIP_MIN_MESSAGES, } from './chat-tips-utilities.js';
|
|
38
38
|
import { ChatItemBoundary } from './ChatItemBoundary.js';
|
|
39
39
|
import { ChatTimestamp } from './ChatTimestamp.js';
|
|
40
|
+
import { DockStrip } from './DockStrip.js';
|
|
40
41
|
import { HelpCard } from './HelpCard.js';
|
|
41
42
|
import { Icon } from './Icon.js';
|
|
42
43
|
import { isAllowedLinkHref, MarkdownContent } from './MarkdownContent.js';
|
|
44
|
+
import { latestPlan, PlanCard } from './PlanCard.js';
|
|
43
45
|
import { RelevantSkillSuggestion } from './RelevantSkillSuggestion.js';
|
|
44
46
|
import { ReportModal } from './ReportModal.js';
|
|
45
47
|
import { ScriptsCard } from './ScriptsCard.js';
|
|
@@ -5992,6 +5994,7 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
|
|
|
5992
5994
|
return (_jsxs(_Fragment, { children: [_jsx(ChatTimestamp, { timestamp: slot.timestamp, variant: "line", align: slot.align }), node] }));
|
|
5993
5995
|
};
|
|
5994
5996
|
const bgCommands = useMemo(() => backgroundTaskCommands(messages), [messages]);
|
|
5997
|
+
const plan = useMemo(() => latestPlan(messages), [messages]);
|
|
5995
5998
|
// ── Render ─────────────────────────────────────────────────────────────────
|
|
5996
5999
|
const root = (_jsxs("div", { style: {
|
|
5997
6000
|
display: 'flex',
|
|
@@ -6244,7 +6247,7 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
|
|
|
6244
6247
|
pointerEvents: showActivity ? 'auto' : 'none',
|
|
6245
6248
|
transition: 'opacity 0.18s ease-out',
|
|
6246
6249
|
}, children: showActivity && (_jsx(StreamingIndicator, { label: label, tokens: streamingLike ? turnTokens : undefined, startedAt: streamingLike ? turnStartedAt : undefined })) }));
|
|
6247
|
-
})(), _jsx("div", { ref: messagesEndRef })] }), _jsx(BackgroundTasksStrip, { tasks: backgroundTasks }), autoFixCountdown && (_jsxs("div", { className: cm.cn(cm.shrink0, cm.borderT), style: {
|
|
6250
|
+
})(), _jsx("div", { ref: messagesEndRef })] }), _jsx(PlanCard, { todos: plan }), _jsx(BackgroundTasksStrip, { tasks: backgroundTasks }), autoFixCountdown && (_jsxs("div", { className: cm.cn(cm.shrink0, cm.borderT), style: {
|
|
6248
6251
|
display: 'flex',
|
|
6249
6252
|
alignItems: 'center',
|
|
6250
6253
|
gap: 8,
|
|
@@ -7539,139 +7542,116 @@ function ChatInner({ projectId, endpoint, initialMessage, onInitialMessageSent,
|
|
|
7539
7542
|
!commandMenu &&
|
|
7540
7543
|
!modelPicker &&
|
|
7541
7544
|
!effortPicker &&
|
|
7542
|
-
!panelOverlay && (
|
|
7543
|
-
|
|
7544
|
-
|
|
7545
|
-
|
|
7546
|
-
|
|
7547
|
-
|
|
7548
|
-
|
|
7549
|
-
|
|
7550
|
-
|
|
7551
|
-
|
|
7552
|
-
|
|
7553
|
-
|
|
7554
|
-
|
|
7555
|
-
|
|
7545
|
+
!panelOverlay && (_jsx(DockStrip, { molId: "chat-commit-bar", toggleMolId: "chat-commit-toggle", expanded: commitBarExpanded, onToggle: () => setCommitBarExpanded((v) => !v), label: commitState?.status === 'committed'
|
|
7546
|
+
? stripCommitCoauthorTrailer(commitState.message ?? '')
|
|
7547
|
+
: commitState?.status === 'error'
|
|
7548
|
+
? t('ide.chat.commitFailed')
|
|
7549
|
+
: t('ide.chat.uncommittedFileCount', { count: pendingFiles.length }, { defaultValue: '{{count}} uncommitted files' }), actions: _jsx(_Fragment, { children: isAutoCommitEnabled(autoCommit) &&
|
|
7550
|
+
commitState?.status !== 'committing' &&
|
|
7551
|
+
commitState?.status !== 'committed' ? (_jsx(AutoCommitBadge, { state: autoCommit, disabled: autoCommitHeld, onCommitNow: () => {
|
|
7552
|
+
// Pause the countdown before committing so a due auto-fire
|
|
7553
|
+
// doesn't race the manual commit onto a freshly clean tree
|
|
7554
|
+
// (which would drop a noisy "No changes to commit" card).
|
|
7555
|
+
dispatchAutoCommit({ type: 'fired' });
|
|
7556
|
+
void handleCommit();
|
|
7557
|
+
}, inline: true })) : ((() => {
|
|
7558
|
+
const commitBusy = commitState?.status === 'committing' ||
|
|
7559
|
+
commitState?.status === 'committed' ||
|
|
7560
|
+
autoCommitHeld;
|
|
7561
|
+
return (_jsx("button", { type: "button", "data-mol-id": "chat-commit-button", onClick: (e) => {
|
|
7562
|
+
e.stopPropagation();
|
|
7563
|
+
if (commitBusy)
|
|
7564
|
+
return;
|
|
7565
|
+
handleCommit();
|
|
7566
|
+
}, disabled: commitBusy,
|
|
7567
|
+
// The SAME design-system button as the tests bar's action
|
|
7568
|
+
// one strip above (and as the green AutoCommitBadge that
|
|
7569
|
+
// replaces this one when auto-commit is on) — only the
|
|
7570
|
+
// semantic colour differs. The CVA owns hover/active/focus
|
|
7571
|
+
// and the disabled look, so there is nothing to hand-roll:
|
|
7572
|
+
// this used to be an inline 12px/6px-radius button with
|
|
7573
|
+
// hardcoded rgba(64,112,224,*) and hand-written hover, and
|
|
7574
|
+
// it visibly mismatched the 13px/3px tests-bar button.
|
|
7575
|
+
className: cm.cn(cm.button({ variant: 'solid', color: 'primary', size: 'xs' }), cm.touchTargetCompact), children: commitState?.status === 'committing'
|
|
7576
|
+
? t('ide.chat.committing')
|
|
7577
|
+
: t('ide.chat.commit') }));
|
|
7578
|
+
})()) }), children: _jsx("div", { style: { maxHeight: 200, overflowY: 'auto' }, children: pendingFiles.map((f) => (_jsxs("button", { type: "button", onClick: () => onFileDiff?.(f.path), onMouseEnter: (e) => {
|
|
7579
|
+
// Theme PRIMARY token, not a literal blue — the row sits in
|
|
7580
|
+
// the same bar as the commit button, which is now primary.
|
|
7581
|
+
e.currentTarget.style.color = 'var(--mol-color-primary, #4070e0)';
|
|
7582
|
+
}, onMouseLeave: (e) => {
|
|
7583
|
+
e.currentTarget.style.color = '';
|
|
7556
7584
|
}, style: {
|
|
7557
7585
|
display: 'flex',
|
|
7558
7586
|
alignItems: 'center',
|
|
7559
|
-
|
|
7560
|
-
|
|
7561
|
-
|
|
7562
|
-
|
|
7563
|
-
|
|
7564
|
-
|
|
7565
|
-
|
|
7566
|
-
|
|
7567
|
-
|
|
7568
|
-
|
|
7569
|
-
|
|
7570
|
-
|
|
7571
|
-
|
|
7572
|
-
|
|
7573
|
-
|
|
7574
|
-
|
|
7575
|
-
|
|
7576
|
-
|
|
7577
|
-
|
|
7578
|
-
|
|
7579
|
-
|
|
7580
|
-
|
|
7581
|
-
|
|
7582
|
-
|
|
7583
|
-
|
|
7584
|
-
|
|
7585
|
-
|
|
7586
|
-
|
|
7587
|
-
|
|
7588
|
-
|
|
7589
|
-
|
|
7590
|
-
|
|
7591
|
-
|
|
7592
|
-
|
|
7593
|
-
|
|
7594
|
-
|
|
7595
|
-
|
|
7596
|
-
|
|
7597
|
-
|
|
7598
|
-
|
|
7599
|
-
|
|
7600
|
-
|
|
7601
|
-
|
|
7602
|
-
|
|
7603
|
-
|
|
7604
|
-
|
|
7605
|
-
|
|
7606
|
-
|
|
7607
|
-
|
|
7608
|
-
|
|
7609
|
-
|
|
7610
|
-
|
|
7611
|
-
|
|
7612
|
-
|
|
7613
|
-
|
|
7614
|
-
|
|
7615
|
-
|
|
7616
|
-
|
|
7617
|
-
|
|
7618
|
-
|
|
7619
|
-
|
|
7620
|
-
|
|
7621
|
-
|
|
7622
|
-
|
|
7623
|
-
|
|
7624
|
-
|
|
7625
|
-
|
|
7626
|
-
|
|
7627
|
-
}), onClick: (e) => {
|
|
7628
|
-
e.stopPropagation();
|
|
7629
|
-
// Revert file to last committed state (handles modified, new, and deleted files)
|
|
7630
|
-
http
|
|
7631
|
-
.post(`/projects/${projectId}/git-revert`, { path: f.path })
|
|
7632
|
-
.then(() => {
|
|
7633
|
-
refreshGitStatus();
|
|
7634
|
-
// Refresh editor if the file is open — fetch fresh content for modified/restored,
|
|
7635
|
-
// or close if it was a new file that got deleted
|
|
7636
|
-
if (f.status === 'untracked' || f.status === 'added') {
|
|
7637
|
-
onFileDeleted?.(f.path);
|
|
7638
|
-
}
|
|
7639
|
-
else {
|
|
7640
|
-
// Re-fetch file content from sandbox to update editor
|
|
7641
|
-
http
|
|
7642
|
-
.get(`/projects/${projectId}/files/${f.path}`)
|
|
7643
|
-
.then((res) => onFileChange?.(f.path, res.data.content))
|
|
7644
|
-
.catch(() => {
|
|
7645
|
-
/* ignore */
|
|
7646
|
-
});
|
|
7647
|
-
}
|
|
7648
|
-
})
|
|
7649
|
-
.catch(() => {
|
|
7650
|
-
/* ignore */
|
|
7651
|
-
});
|
|
7652
|
-
}, onKeyDown: (e) => {
|
|
7653
|
-
if (e.key === 'Enter' || e.key === ' ')
|
|
7654
|
-
e.currentTarget.click();
|
|
7655
|
-
}, onMouseEnter: (e) => {
|
|
7656
|
-
e.currentTarget.style.background = 'rgba(128,128,128,0.2)';
|
|
7657
|
-
e.currentTarget.style.opacity = '1';
|
|
7658
|
-
}, onMouseLeave: (e) => {
|
|
7659
|
-
e.currentTarget.style.background = 'transparent';
|
|
7660
|
-
e.currentTarget.style.opacity = '0.5';
|
|
7661
|
-
}, style: {
|
|
7662
|
-
display: 'inline-flex',
|
|
7663
|
-
alignItems: 'center',
|
|
7664
|
-
justifyContent: 'center',
|
|
7665
|
-
// Touch: 32px hit box (dense-row floor); glyph unchanged.
|
|
7666
|
-
width: isCoarse ? 32 : 18,
|
|
7667
|
-
height: isCoarse ? 32 : 18,
|
|
7668
|
-
borderRadius: 3,
|
|
7669
|
-
flexShrink: 0,
|
|
7670
|
-
cursor: 'pointer',
|
|
7671
|
-
opacity: 0.5,
|
|
7672
|
-
transition: 'opacity 100ms, background 100ms',
|
|
7673
|
-
...(!(f.additions || f.deletions) ? { marginLeft: 'auto' } : {}),
|
|
7674
|
-
}, children: _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 16 16", width: "12", height: "12", fill: "currentColor", children: _jsx("path", { d: "M1.22 6.28a.749.749 0 0 1 0-1.06l3.5-3.5a.749.749 0 1 1 1.06 1.06L3.561 5h7.188l.001.007L10.749 5c.058 0 .116.007.171.019A4.501 4.501 0 0 1 10.5 14H8.796a.75.75 0 0 1 0-1.5H10.5a3 3 0 1 0 0-6H3.561L5.78 8.72a.749.749 0 1 1-1.06 1.06l-3.5-3.5Z" }) }) }))] }, f.path))) }))] })), _jsxs("div", { className: cm.surfaceSecondary, ...(canEdit === false ? { 'data-mol-viewer': '' } : {}), style: {
|
|
7587
|
+
gap: 6,
|
|
7588
|
+
background: 'none',
|
|
7589
|
+
border: 'none',
|
|
7590
|
+
padding: '1px 0',
|
|
7591
|
+
// Touch: ~15px rows are untappable — 32px is the floor for
|
|
7592
|
+
// these dense file rows.
|
|
7593
|
+
...(isCoarse ? { minHeight: 32 } : {}),
|
|
7594
|
+
cursor: onFileDiff ? 'pointer' : 'default',
|
|
7595
|
+
fontFamily: "'SF Mono', 'Fira Code', monospace",
|
|
7596
|
+
fontSize: 11,
|
|
7597
|
+
color: 'inherit',
|
|
7598
|
+
opacity: 0.7,
|
|
7599
|
+
textAlign: 'left',
|
|
7600
|
+
width: '100%',
|
|
7601
|
+
overflow: 'hidden',
|
|
7602
|
+
whiteSpace: 'nowrap',
|
|
7603
|
+
}, className: cm.textMuted, children: [_jsx("span", { style: { overflow: 'hidden', textOverflow: 'ellipsis' }, children: f.path }), (!!f.additions || !!f.deletions) && (_jsxs("span", { style: { marginLeft: 'auto', flexShrink: 0, fontSize: 10, opacity: 0.8 }, children: [!!f.additions && _jsxs("span", { style: { color: '#3fb950' }, children: ["+", f.additions] }), !!f.additions && !!f.deletions && ' ', !!f.deletions && _jsxs("span", { style: { color: '#f85149' }, children: ["-", f.deletions] })] })), onFileRevert && (_jsx("span", {
|
|
7604
|
+
/* mol-bespoke-button: icon-only per-file revert affordance — 18px (32px coarse) hit box on a dense file row */
|
|
7605
|
+
role: "button", tabIndex: 0, title: t('ide.chat.revertFile', undefined, {
|
|
7606
|
+
defaultValue: 'Revert to last commit',
|
|
7607
|
+
}), onClick: (e) => {
|
|
7608
|
+
e.stopPropagation();
|
|
7609
|
+
// Revert file to last committed state (handles modified, new, and deleted files)
|
|
7610
|
+
http
|
|
7611
|
+
.post(`/projects/${projectId}/git-revert`, { path: f.path })
|
|
7612
|
+
.then(() => {
|
|
7613
|
+
refreshGitStatus();
|
|
7614
|
+
// Refresh editor if the file is open — fetch fresh content for modified/restored,
|
|
7615
|
+
// or close if it was a new file that got deleted
|
|
7616
|
+
if (f.status === 'untracked' || f.status === 'added') {
|
|
7617
|
+
onFileDeleted?.(f.path);
|
|
7618
|
+
}
|
|
7619
|
+
else {
|
|
7620
|
+
// Re-fetch file content from sandbox to update editor
|
|
7621
|
+
http
|
|
7622
|
+
.get(`/projects/${projectId}/files/${f.path}`)
|
|
7623
|
+
.then((res) => onFileChange?.(f.path, res.data.content))
|
|
7624
|
+
.catch(() => {
|
|
7625
|
+
/* ignore */
|
|
7626
|
+
});
|
|
7627
|
+
}
|
|
7628
|
+
})
|
|
7629
|
+
.catch(() => {
|
|
7630
|
+
/* ignore */
|
|
7631
|
+
});
|
|
7632
|
+
}, onKeyDown: (e) => {
|
|
7633
|
+
if (e.key === 'Enter' || e.key === ' ')
|
|
7634
|
+
e.currentTarget.click();
|
|
7635
|
+
}, onMouseEnter: (e) => {
|
|
7636
|
+
e.currentTarget.style.background = 'rgba(128,128,128,0.2)';
|
|
7637
|
+
e.currentTarget.style.opacity = '1';
|
|
7638
|
+
}, onMouseLeave: (e) => {
|
|
7639
|
+
e.currentTarget.style.background = 'transparent';
|
|
7640
|
+
e.currentTarget.style.opacity = '0.5';
|
|
7641
|
+
}, style: {
|
|
7642
|
+
display: 'inline-flex',
|
|
7643
|
+
alignItems: 'center',
|
|
7644
|
+
justifyContent: 'center',
|
|
7645
|
+
// Touch: 32px hit box (dense-row floor); glyph unchanged.
|
|
7646
|
+
width: isCoarse ? 32 : 18,
|
|
7647
|
+
height: isCoarse ? 32 : 18,
|
|
7648
|
+
borderRadius: 3,
|
|
7649
|
+
flexShrink: 0,
|
|
7650
|
+
cursor: 'pointer',
|
|
7651
|
+
opacity: 0.5,
|
|
7652
|
+
transition: 'opacity 100ms, background 100ms',
|
|
7653
|
+
...(!(f.additions || f.deletions) ? { marginLeft: 'auto' } : {}),
|
|
7654
|
+
}, children: _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 16 16", width: "12", height: "12", fill: "currentColor", children: _jsx("path", { d: "M1.22 6.28a.749.749 0 0 1 0-1.06l3.5-3.5a.749.749 0 1 1 1.06 1.06L3.561 5h7.188l.001.007L10.749 5c.058 0 .116.007.171.019A4.501 4.501 0 0 1 10.5 14H8.796a.75.75 0 0 1 0-1.5H10.5a3 3 0 1 0 0-6H3.561L5.78 8.72a.749.749 0 1 1-1.06 1.06l-3.5-3.5Z" }) }) }))] }, f.path))) }) })), _jsxs("div", { className: cm.surfaceSecondary, ...(canEdit === false ? { 'data-mol-viewer': '' } : {}), style: {
|
|
7675
7655
|
// Round the TOP corners only (8px) so the composer reads as a self-contained
|
|
7676
7656
|
// input with its own border on all sides, flush at the bottom-left/right with
|
|
7677
7657
|
// the panel's bottom edge. Discovery rounds ALL FOUR corners (the centered
|