@lumifai/harness-react-mantine 0.0.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 ADDED
@@ -0,0 +1,38 @@
1
+ # @lumifai/harness-react-mantine
2
+
3
+ Mantine components for the Lumif harness studio UI. Headless React bindings live in
4
+ [`@lumifai/harness-react`](../README.md).
5
+
6
+ ```tsx
7
+ import {
8
+ HarnessProvider,
9
+ createLocalStorageHarnessSessionStore,
10
+ useHarnessSessionStore,
11
+ } from '@lumifai/harness-react';
12
+ import { HarnessStudio } from '@lumifai/harness-react-mantine';
13
+
14
+ export function App() {
15
+ const { bindings, resetSession } = useHarnessSessionStore({
16
+ store: createLocalStorageHarnessSessionStore({
17
+ storageKey: 'my-harness.session',
18
+ }),
19
+ });
20
+
21
+ return (
22
+ <>
23
+ <button onClick={resetSession}>New conversation</button>
24
+ <HarnessProvider
25
+ baseUrl=""
26
+ prefix="/harness"
27
+ autoConnect
28
+ clientOptions={{ credentials: 'include' }}
29
+ {...bindings}
30
+ >
31
+ <HarnessStudio />
32
+ </HarnessProvider>
33
+ </>
34
+ );
35
+ }
36
+ ```
37
+
38
+ `HarnessStudio` renders built-in panels for tool approvals, suspended questions, plan approval, and sandbox access requests. It renders every entry in the multiple-entry `displayState.pendingSuspensions` projection and sends each entry's `toolCallId` when resuming. Questions support free-text, single-select, and multi-select responses.
@@ -0,0 +1,9 @@
1
+ import { type AnySuspensionRenderer, type SuspensionDecisionContext, type SuspensionDecisionFormat, type SuspendedQuestion } from '@lumifai/harness-react';
2
+ export declare function buildQuestionResumeData(question: SuspendedQuestion, answer: string, selectedOptions: string[]): {
3
+ answer: string | string[];
4
+ };
5
+ export declare function formatAskUserDecision({ toolCall, toolResult, }: SuspensionDecisionContext): SuspensionDecisionFormat;
6
+ export declare function formatSubmitPlanDecision({ toolCall, toolResult, }: SuspensionDecisionContext): SuspensionDecisionFormat;
7
+ export declare function formatRequestAccessDecision({ toolCall, toolResult, }: SuspensionDecisionContext): SuspensionDecisionFormat;
8
+ /** Default Studio HITL cards for ask_user, submit_plan, and request_access. */
9
+ export declare function createBuiltinSuspensionRenderers(): AnySuspensionRenderer[];
@@ -0,0 +1,197 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildQuestionResumeData = buildQuestionResumeData;
4
+ exports.formatAskUserDecision = formatAskUserDecision;
5
+ exports.formatSubmitPlanDecision = formatSubmitPlanDecision;
6
+ exports.formatRequestAccessDecision = formatRequestAccessDecision;
7
+ exports.createBuiltinSuspensionRenderers = createBuiltinSuspensionRenderers;
8
+ const jsx_runtime_1 = require("react/jsx-runtime");
9
+ const react_1 = require("react");
10
+ const core_1 = require("@mantine/core");
11
+ const harness_react_1 = require("@lumifai/harness-react");
12
+ function buildQuestionResumeData(question, answer, selectedOptions) {
13
+ if (question.selectionMode === 'multi_select') {
14
+ return { answer: selectedOptions };
15
+ }
16
+ return { answer: selectedOptions[0] ?? answer };
17
+ }
18
+ function unwrapToolContent(result) {
19
+ if (!result || typeof result !== 'object' || Array.isArray(result))
20
+ return result;
21
+ if (!('content' in result))
22
+ return result;
23
+ const content = result.content;
24
+ if (typeof content !== 'string')
25
+ return result;
26
+ try {
27
+ return JSON.parse(content);
28
+ }
29
+ catch {
30
+ return content;
31
+ }
32
+ }
33
+ function formatAnswer(value) {
34
+ if (typeof value === 'string')
35
+ return value;
36
+ if (Array.isArray(value) && value.every((item) => typeof item === 'string')) {
37
+ return value.join(', ');
38
+ }
39
+ if (value && typeof value === 'object' && 'answer' in value) {
40
+ return formatAnswer(value.answer);
41
+ }
42
+ return (0, harness_react_1.compactDecisionValue)(value);
43
+ }
44
+ function formatAskUserDecision({ toolCall, toolResult, }) {
45
+ const args = toolCall.args && typeof toolCall.args === 'object' ? toolCall.args : {};
46
+ const question = 'question' in args && typeof args.question === 'string'
47
+ ? args.question
48
+ : 'Question';
49
+ const unwrapped = unwrapToolContent(toolResult.result);
50
+ const answer = formatAnswer(unwrapped);
51
+ const summary = `${(0, harness_react_1.compactDecisionValue)(question, 60)} → ${(0, harness_react_1.compactDecisionValue)(answer, 60)}`;
52
+ return {
53
+ label: 'Ask user',
54
+ summary,
55
+ detail: ((0, jsx_runtime_1.jsxs)(core_1.Stack, { gap: 4, children: [(0, jsx_runtime_1.jsx)(core_1.Text, { size: "sm", fw: 600, children: question }), (0, jsx_runtime_1.jsxs)(core_1.Text, { size: "sm", children: ["\u2192 ", answer] })] })),
56
+ };
57
+ }
58
+ function formatSubmitPlanDecision({ toolCall, toolResult, }) {
59
+ const args = toolCall.args && typeof toolCall.args === 'object' ? toolCall.args : {};
60
+ const title = 'title' in args && typeof args.title === 'string'
61
+ ? args.title
62
+ : undefined;
63
+ const plan = 'plan' in args && typeof args.plan === 'string'
64
+ ? args.plan
65
+ : '';
66
+ const unwrapped = unwrapToolContent(toolResult.result);
67
+ let action = 'answered';
68
+ let feedback;
69
+ if (unwrapped && typeof unwrapped === 'object' && !Array.isArray(unwrapped)) {
70
+ const data = unwrapped;
71
+ if (data.action === 'approved' || data.action === 'rejected') {
72
+ action = data.action;
73
+ }
74
+ if (typeof data.feedback === 'string' && data.feedback.trim()) {
75
+ feedback = data.feedback.trim();
76
+ }
77
+ }
78
+ const labelTitle = title?.trim() || 'Plan';
79
+ return {
80
+ label: 'Plan',
81
+ summary: `${(0, harness_react_1.compactDecisionValue)(labelTitle, 40)} → ${action}`,
82
+ detail: ((0, jsx_runtime_1.jsxs)(core_1.Stack, { gap: 4, children: [(0, jsx_runtime_1.jsxs)(core_1.Text, { size: "sm", fw: 600, children: [labelTitle, " \u00B7 ", action] }), plan ? ((0, jsx_runtime_1.jsx)(core_1.Text, { size: "sm", style: { whiteSpace: 'pre-wrap' }, children: plan })) : null, feedback ? (0, jsx_runtime_1.jsxs)(core_1.Text, { size: "sm", children: ["Feedback: ", feedback] }) : null] })),
83
+ };
84
+ }
85
+ function formatRequestAccessDecision({ toolCall, toolResult, }) {
86
+ const args = toolCall.args && typeof toolCall.args === 'object' ? toolCall.args : {};
87
+ const path = 'path' in args && typeof args.path === 'string'
88
+ ? args.path
89
+ : 'path';
90
+ const reason = 'reason' in args && typeof args.reason === 'string'
91
+ ? args.reason
92
+ : undefined;
93
+ const unwrapped = unwrapToolContent(toolResult.result);
94
+ let approved = null;
95
+ if (typeof unwrapped === 'boolean') {
96
+ approved = unwrapped;
97
+ }
98
+ else if (unwrapped && typeof unwrapped === 'object' && 'approved' in unwrapped) {
99
+ approved = Boolean(unwrapped.approved);
100
+ }
101
+ const decision = approved === true ? 'approved' : approved === false ? 'denied' : formatAnswer(unwrapped);
102
+ return {
103
+ label: 'Access',
104
+ summary: `${(0, harness_react_1.compactDecisionValue)(path, 40)} → ${decision}`,
105
+ detail: ((0, jsx_runtime_1.jsxs)(core_1.Stack, { gap: 4, children: [(0, jsx_runtime_1.jsxs)(core_1.Text, { size: "sm", children: [(0, jsx_runtime_1.jsx)(core_1.Text, { span: true, fw: 600, children: "Path:" }), ' ', path] }), reason ? (0, jsx_runtime_1.jsx)(core_1.Text, { size: "sm", children: reason }) : null, (0, jsx_runtime_1.jsxs)(core_1.Text, { size: "sm", children: ["\u2192 ", decision] })] })),
106
+ };
107
+ }
108
+ function AskUserSuspensionCard({ payload: question, busy, error, resume, suspension, }) {
109
+ const [answer, setAnswer] = (0, react_1.useState)('');
110
+ const [selectedOptions, setSelectedOptions] = (0, react_1.useState)([]);
111
+ const [action, setAction] = (0, react_1.useState)(null);
112
+ (0, react_1.useEffect)(() => {
113
+ setAnswer('');
114
+ setSelectedOptions([]);
115
+ setAction(null);
116
+ }, [suspension.toolCallId]);
117
+ const disabled = busy || action !== null;
118
+ const run = async (actionKey, resumeData) => {
119
+ if (disabled)
120
+ return;
121
+ setAction(actionKey);
122
+ try {
123
+ await resume(resumeData);
124
+ }
125
+ catch {
126
+ setAction(null);
127
+ }
128
+ };
129
+ const options = question.options ?? [];
130
+ let body;
131
+ if ((0, harness_react_1.isFreeTextQuestion)(question)) {
132
+ body = ((0, jsx_runtime_1.jsxs)(core_1.Stack, { gap: "xs", children: [(0, jsx_runtime_1.jsx)(core_1.Textarea, { value: answer, onChange: (event) => setAnswer(event.currentTarget.value), placeholder: "Type your answer...", disabled: disabled, minRows: 3, autosize: true }), (0, jsx_runtime_1.jsx)(core_1.Button, { size: "xs", loading: action === 'question:submit', disabled: disabled || !answer.trim(), onClick: () => void run('question:submit', buildQuestionResumeData({ question: question.question }, answer.trim(), [])), children: "Submit answer" })] }));
133
+ }
134
+ else if (question.selectionMode === 'multi_select' && options.length > 0) {
135
+ body = ((0, jsx_runtime_1.jsxs)(core_1.Stack, { gap: "xs", children: [(0, jsx_runtime_1.jsx)(core_1.Checkbox.Group, { value: selectedOptions, onChange: setSelectedOptions, children: (0, jsx_runtime_1.jsx)(core_1.Stack, { gap: "xs", children: options.map((option) => ((0, jsx_runtime_1.jsx)(core_1.Checkbox, { value: option.label, label: option.label, description: option.description, disabled: disabled }, option.label))) }) }), (0, jsx_runtime_1.jsx)(core_1.Button, { size: "xs", loading: action === 'question:submit', disabled: disabled || selectedOptions.length === 0, onClick: () => void run('question:submit', buildQuestionResumeData(question, '', selectedOptions)), children: "Submit answer" })] }));
136
+ }
137
+ else {
138
+ body = ((0, jsx_runtime_1.jsx)(core_1.Group, { children: options.map((option) => ((0, jsx_runtime_1.jsx)(core_1.Button, { size: "xs", variant: "light", loading: action === `question:${option.label}`, disabled: disabled, onClick: () => void run(`question:${option.label}`, buildQuestionResumeData(question, '', [option.label])), children: (0, jsx_runtime_1.jsxs)(core_1.Stack, { gap: 0, align: "flex-start", children: [(0, jsx_runtime_1.jsx)(core_1.Text, { size: "xs", children: option.label }), option.description ? (0, jsx_runtime_1.jsx)(core_1.Text, { size: "xs", children: option.description }) : null] }) }, option.label))) }));
139
+ }
140
+ return ((0, jsx_runtime_1.jsxs)(core_1.Alert, { title: "Question", color: "blue", children: [error ? ((0, jsx_runtime_1.jsx)(core_1.Text, { c: "red", size: "sm", mb: "sm", children: error })) : null, (0, jsx_runtime_1.jsx)(core_1.Text, { size: "sm", mb: "sm", children: question.question }), body] }));
141
+ }
142
+ function PlanSuspensionCard({ payload: plan, busy, error, resume, }) {
143
+ const [action, setAction] = (0, react_1.useState)(null);
144
+ const disabled = busy || action !== null;
145
+ const run = async (actionKey, resumeData) => {
146
+ if (disabled)
147
+ return;
148
+ setAction(actionKey);
149
+ try {
150
+ await resume(resumeData);
151
+ }
152
+ catch {
153
+ setAction(null);
154
+ }
155
+ };
156
+ return ((0, jsx_runtime_1.jsxs)(core_1.Alert, { title: plan.title ?? 'Plan approval', color: "grape", children: [error ? ((0, jsx_runtime_1.jsx)(core_1.Text, { c: "red", size: "sm", mb: "sm", children: error })) : null, (0, jsx_runtime_1.jsx)(core_1.Text, { size: "sm", mb: "sm", style: { whiteSpace: 'pre-wrap' }, children: plan.plan }), (0, jsx_runtime_1.jsxs)(core_1.Group, { children: [(0, jsx_runtime_1.jsx)(core_1.Button, { size: "xs", loading: action === 'plan:approve', disabled: disabled, onClick: () => void run('plan:approve', { action: 'approved' }), children: "Approve plan" }), (0, jsx_runtime_1.jsx)(core_1.Button, { size: "xs", variant: "light", loading: action === 'plan:reject', disabled: disabled, onClick: () => void run('plan:reject', { action: 'rejected' }), children: "Reject plan" })] })] }));
157
+ }
158
+ function AccessSuspensionCard({ payload: access, busy, error, resume, }) {
159
+ const [action, setAction] = (0, react_1.useState)(null);
160
+ const disabled = busy || action !== null;
161
+ const run = async (actionKey, resumeData) => {
162
+ if (disabled)
163
+ return;
164
+ setAction(actionKey);
165
+ try {
166
+ await resume(resumeData);
167
+ }
168
+ catch {
169
+ setAction(null);
170
+ }
171
+ };
172
+ return ((0, jsx_runtime_1.jsxs)(core_1.Alert, { title: "Sandbox access request", color: "orange", children: [error ? ((0, jsx_runtime_1.jsx)(core_1.Text, { c: "red", size: "sm", mb: "sm", children: error })) : null, (0, jsx_runtime_1.jsxs)(core_1.Text, { size: "sm", mb: "xs", children: [(0, jsx_runtime_1.jsx)(core_1.Text, { span: true, fw: 600, children: "Path:" }), ' ', access.path] }), (0, jsx_runtime_1.jsx)(core_1.Text, { size: "sm", mb: "sm", children: access.reason }), (0, jsx_runtime_1.jsxs)(core_1.Group, { children: [(0, jsx_runtime_1.jsx)(core_1.Button, { size: "xs", loading: action === 'access:allow', disabled: disabled, onClick: () => void run('access:allow', { approved: true }), children: "Allow" }), (0, jsx_runtime_1.jsx)(core_1.Button, { size: "xs", variant: "light", loading: action === 'access:deny', disabled: disabled, onClick: () => void run('access:deny', { approved: false }), children: "Deny" })] })] }));
173
+ }
174
+ /** Default Studio HITL cards for ask_user, submit_plan, and request_access. */
175
+ function createBuiltinSuspensionRenderers() {
176
+ return [
177
+ (0, harness_react_1.defineSuspensionRenderer)({
178
+ toolName: 'ask_user',
179
+ parse: harness_react_1.getSuspendedQuestion,
180
+ formatDecision: formatAskUserDecision,
181
+ render: (ctx) => (0, jsx_runtime_1.jsx)(AskUserSuspensionCard, { ...ctx }),
182
+ }),
183
+ (0, harness_react_1.defineSuspensionRenderer)({
184
+ toolName: 'submit_plan',
185
+ parse: harness_react_1.getSuspendedPlan,
186
+ formatDecision: formatSubmitPlanDecision,
187
+ render: (ctx) => (0, jsx_runtime_1.jsx)(PlanSuspensionCard, { ...ctx }),
188
+ }),
189
+ (0, harness_react_1.defineSuspensionRenderer)({
190
+ toolName: 'request_access',
191
+ parse: harness_react_1.getSandboxAccessSuspension,
192
+ formatDecision: formatRequestAccessDecision,
193
+ render: (ctx) => (0, jsx_runtime_1.jsx)(AccessSuspensionCard, { ...ctx }),
194
+ }),
195
+ ];
196
+ }
197
+ //# sourceMappingURL=builtin-suspension-renderers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtin-suspension-renderers.js","sourceRoot":"","sources":["../src/builtin-suspension-renderers.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { ActiveToolState } from '@lumifai/harness-protocol';
2
+ export type DefaultToolProgressCardProps = {
3
+ toolCallId: string;
4
+ tool: ActiveToolState;
5
+ statusLabel: string;
6
+ statusColor?: string;
7
+ };
8
+ /** Default progress card used when no custom tool progress renderer matches. */
9
+ export declare function DefaultToolProgressCard({ toolCallId, tool, statusLabel, statusColor, }: DefaultToolProgressCardProps): import("react").JSX.Element;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DefaultToolProgressCard = DefaultToolProgressCard;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const core_1 = require("@mantine/core");
6
+ function formatArgsSummary(args) {
7
+ if (args == null)
8
+ return null;
9
+ if (typeof args === 'string')
10
+ return args.length > 120 ? `${args.slice(0, 117)}…` : args;
11
+ try {
12
+ const text = JSON.stringify(args);
13
+ if (!text || text === '{}' || text === 'null')
14
+ return null;
15
+ return text.length > 120 ? `${text.slice(0, 117)}…` : text;
16
+ }
17
+ catch {
18
+ return null;
19
+ }
20
+ }
21
+ /** Default progress card used when no custom tool progress renderer matches. */
22
+ function DefaultToolProgressCard({ toolCallId, tool, statusLabel, statusColor, }) {
23
+ const argsSummary = formatArgsSummary(tool.args);
24
+ return ((0, jsx_runtime_1.jsx)(core_1.Paper, { p: "xs", withBorder: true, children: (0, jsx_runtime_1.jsxs)(core_1.Stack, { gap: 4, children: [(0, jsx_runtime_1.jsx)(core_1.Text, { size: "sm", fw: 500, children: tool.name }), (0, jsx_runtime_1.jsx)(core_1.Text, { size: "xs", c: "dimmed", style: { fontFamily: 'var(--mantine-font-family-monospace)' }, children: toolCallId }), argsSummary ? ((0, jsx_runtime_1.jsx)(core_1.Text, { size: "xs", c: "dimmed", lineClamp: 2, style: { whiteSpace: 'pre-wrap' }, children: argsSummary })) : null, (0, jsx_runtime_1.jsx)(core_1.Badge, { size: "xs", color: statusColor, w: "fit-content", children: statusLabel }), tool.partialResult ? ((0, jsx_runtime_1.jsx)(core_1.Text, { size: "sm", style: { whiteSpace: 'pre-wrap' }, children: tool.partialResult })) : null, tool.shellOutput ? ((0, jsx_runtime_1.jsx)(core_1.Code, { block: true, style: { whiteSpace: 'pre-wrap', maxHeight: 160, overflow: 'auto' }, children: tool.shellOutput })) : null] }) }));
25
+ }
26
+ //# sourceMappingURL=default-tool-progress-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-tool-progress-card.js","sourceRoot":"","sources":["../src/default-tool-progress-card.tsx"],"names":[],"mappings":";;AAuBA,0DAsCC;;AA7DD,wCAAgE;AAUhE,SAAS,iBAAiB,CAAC,IAAa;IACtC,IAAI,IAAI,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAC9B,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IACzF,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;QAC3D,OAAO,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,SAAgB,uBAAuB,CAAC,EACtC,UAAU,EACV,IAAI,EACJ,WAAW,EACX,WAAW,GACkB;IAC7B,MAAM,WAAW,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEjD,OAAO,CACL,uBAAC,YAAK,IAAC,CAAC,EAAC,IAAI,EAAC,UAAU,kBACtB,wBAAC,YAAK,IAAC,GAAG,EAAE,CAAC,aACX,uBAAC,WAAI,IAAC,IAAI,EAAC,IAAI,EAAC,EAAE,EAAE,GAAG,YACpB,IAAI,CAAC,IAAI,GACL,EACP,uBAAC,WAAI,IAAC,IAAI,EAAC,IAAI,EAAC,CAAC,EAAC,QAAQ,EAAC,KAAK,EAAE,EAAE,UAAU,EAAE,sCAAsC,EAAE,YACrF,UAAU,GACN,EACN,WAAW,CAAC,CAAC,CAAC,CACb,uBAAC,WAAI,IAAC,IAAI,EAAC,IAAI,EAAC,CAAC,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,YACvE,WAAW,GACP,CACR,CAAC,CAAC,CAAC,IAAI,EACR,uBAAC,YAAK,IAAC,IAAI,EAAC,IAAI,EAAC,KAAK,EAAE,WAAW,EAAE,CAAC,EAAC,aAAa,YACjD,WAAW,GACN,EACP,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CACpB,uBAAC,WAAI,IAAC,IAAI,EAAC,IAAI,EAAC,KAAK,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,YAC9C,IAAI,CAAC,aAAa,GACd,CACR,CAAC,CAAC,CAAC,IAAI,EACP,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAClB,uBAAC,WAAI,IAAC,KAAK,QAAC,KAAK,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,YAC5E,IAAI,CAAC,WAAW,GACZ,CACR,CAAC,CAAC,CAAC,IAAI,IACF,GACF,CACT,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { HarnessStudio, getActivityStatus, getMessageDisplayText, getRunErrorMessage, } from './studio';
2
+ export type { HarnessStudioProps } from './studio';
3
+ export { buildQuestionResumeData, createBuiltinSuspensionRenderers, formatAskUserDecision, formatRequestAccessDecision, formatSubmitPlanDecision, } from './builtin-suspension-renderers';
4
+ export { DefaultToolProgressCard } from './default-tool-progress-card';
5
+ export type { DefaultToolProgressCardProps } from './default-tool-progress-card';
6
+ export { lumifHarnessTheme } from './theme';
package/dist/index.js ADDED
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.lumifHarnessTheme = exports.DefaultToolProgressCard = exports.formatSubmitPlanDecision = exports.formatRequestAccessDecision = exports.formatAskUserDecision = exports.createBuiltinSuspensionRenderers = exports.buildQuestionResumeData = exports.getRunErrorMessage = exports.getMessageDisplayText = exports.getActivityStatus = exports.HarnessStudio = void 0;
4
+ var studio_1 = require("./studio");
5
+ Object.defineProperty(exports, "HarnessStudio", { enumerable: true, get: function () { return studio_1.HarnessStudio; } });
6
+ Object.defineProperty(exports, "getActivityStatus", { enumerable: true, get: function () { return studio_1.getActivityStatus; } });
7
+ Object.defineProperty(exports, "getMessageDisplayText", { enumerable: true, get: function () { return studio_1.getMessageDisplayText; } });
8
+ Object.defineProperty(exports, "getRunErrorMessage", { enumerable: true, get: function () { return studio_1.getRunErrorMessage; } });
9
+ var builtin_suspension_renderers_1 = require("./builtin-suspension-renderers");
10
+ Object.defineProperty(exports, "buildQuestionResumeData", { enumerable: true, get: function () { return builtin_suspension_renderers_1.buildQuestionResumeData; } });
11
+ Object.defineProperty(exports, "createBuiltinSuspensionRenderers", { enumerable: true, get: function () { return builtin_suspension_renderers_1.createBuiltinSuspensionRenderers; } });
12
+ Object.defineProperty(exports, "formatAskUserDecision", { enumerable: true, get: function () { return builtin_suspension_renderers_1.formatAskUserDecision; } });
13
+ Object.defineProperty(exports, "formatRequestAccessDecision", { enumerable: true, get: function () { return builtin_suspension_renderers_1.formatRequestAccessDecision; } });
14
+ Object.defineProperty(exports, "formatSubmitPlanDecision", { enumerable: true, get: function () { return builtin_suspension_renderers_1.formatSubmitPlanDecision; } });
15
+ var default_tool_progress_card_1 = require("./default-tool-progress-card");
16
+ Object.defineProperty(exports, "DefaultToolProgressCard", { enumerable: true, get: function () { return default_tool_progress_card_1.DefaultToolProgressCard; } });
17
+ var theme_1 = require("./theme");
18
+ Object.defineProperty(exports, "lumifHarnessTheme", { enumerable: true, get: function () { return theme_1.lumifHarnessTheme; } });
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mCAKkB;AAJhB,uGAAA,aAAa,OAAA;AACb,2GAAA,iBAAiB,OAAA;AACjB,+GAAA,qBAAqB,OAAA;AACrB,4GAAA,kBAAkB,OAAA;AAGpB,+EAMwC;AALtC,uIAAA,uBAAuB,OAAA;AACvB,gJAAA,gCAAgC,OAAA;AAChC,qIAAA,qBAAqB,OAAA;AACrB,2IAAA,2BAA2B,OAAA;AAC3B,wIAAA,wBAAwB,OAAA;AAE1B,2EAAuE;AAA9D,qIAAA,uBAAuB,OAAA;AAGhC,iCAA4C;AAAnC,0GAAA,iBAAiB,OAAA"}
@@ -0,0 +1,20 @@
1
+ import type { HarnessMessage, SerializableDisplayState } from '@lumifai/harness-protocol';
2
+ import { type AnySuspensionRenderer, type AnyToolProgressRenderer } from '@lumifai/harness-react';
3
+ export declare function getMessageDisplayText(message: HarnessMessage): string;
4
+ export declare function getActivityStatus(toolCallId: string, status: string, pendingSuspensionToolCallIds?: ReadonlySet<string> | readonly string[] | string | null, toolName?: string,
5
+ /** True when any HITL tool is still present in activeTools (pending or resolved this turn). */
6
+ hasInteractiveSibling?: boolean, interactiveToolNames?: ReadonlySet<string>): {
7
+ label: string;
8
+ color?: string;
9
+ };
10
+ export declare function getRunErrorMessage(error: SerializableDisplayState['lastError']): string | null;
11
+ export type HarnessStudioProps = {
12
+ title?: string;
13
+ /** Appended after builtins and provider renderers; later entries win by toolName. */
14
+ suspensionRenderers?: AnySuspensionRenderer[];
15
+ /** OR'd with provider flag; either true enables progress cards in Activity. */
16
+ enableToolProgressCards?: boolean;
17
+ /** Appended after provider progress renderers; later entries win by toolName. */
18
+ toolProgressRenderers?: AnyToolProgressRenderer[];
19
+ };
20
+ export declare function HarnessStudio({ title, suspensionRenderers: suspensionRenderersProp, enableToolProgressCards: enableToolProgressCardsProp, toolProgressRenderers: toolProgressRenderersProp, }: HarnessStudioProps): import("react").JSX.Element;
package/dist/studio.js ADDED
@@ -0,0 +1,255 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getMessageDisplayText = getMessageDisplayText;
4
+ exports.getActivityStatus = getActivityStatus;
5
+ exports.getRunErrorMessage = getRunErrorMessage;
6
+ exports.HarnessStudio = HarnessStudio;
7
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
+ const react_1 = require("react");
9
+ const core_1 = require("@mantine/core");
10
+ const harness_react_1 = require("@lumifai/harness-react");
11
+ const builtin_suspension_renderers_1 = require("./builtin-suspension-renderers");
12
+ const default_tool_progress_card_1 = require("./default-tool-progress-card");
13
+ function getSubmittedPlan(args) {
14
+ if (!args || typeof args !== 'object')
15
+ return null;
16
+ const value = args;
17
+ if (typeof value.plan !== 'string' || !value.plan.trim())
18
+ return null;
19
+ return {
20
+ title: typeof value.title === 'string' && value.title.trim() ? value.title.trim() : undefined,
21
+ plan: value.plan.trim(),
22
+ };
23
+ }
24
+ function getMessageDisplayText(message) {
25
+ const text = message.content
26
+ .filter((part) => part.type === 'text')
27
+ .map((part) => (part.type === 'text' ? part.text : ''))
28
+ .join('\n');
29
+ const trimmedText = text.trim();
30
+ if (trimmedText)
31
+ return trimmedText;
32
+ const toolCalls = message.content.filter((part) => part.type === 'tool_call');
33
+ const submittedPlans = toolCalls
34
+ .filter((part) => part.type === 'tool_call' && part.name === 'submit_plan')
35
+ .map((part) => (part.type === 'tool_call' ? getSubmittedPlan(part.args) : null))
36
+ .filter((plan) => plan !== null);
37
+ if (submittedPlans.length > 0) {
38
+ return submittedPlans
39
+ .map(({ title, plan }) => `${title ? `Plan: ${title}` : 'Plan submitted'}\n\n${plan}`)
40
+ .join('\n\n');
41
+ }
42
+ const toolNames = toolCalls
43
+ .map((part) => (part.type === 'tool_call' ? part.name : ''))
44
+ .filter(Boolean);
45
+ return toolNames.length > 0 ? toolNames.map((name) => `Calling ${name}…`).join('\n') : '';
46
+ }
47
+ /** HITL tools that park the run. Mastra mirrors them as `error` in activeTools. */
48
+ const DEFAULT_INTERACTIVE_TOOL_NAMES = new Set(['ask_user', 'submit_plan', 'request_access']);
49
+ function normalizePendingSuspensionIds(pendingSuspensionToolCallIds) {
50
+ if (pendingSuspensionToolCallIds == null) {
51
+ return new Set();
52
+ }
53
+ if (typeof pendingSuspensionToolCallIds === 'string') {
54
+ return new Set([pendingSuspensionToolCallIds]);
55
+ }
56
+ if (pendingSuspensionToolCallIds instanceof Set) {
57
+ return pendingSuspensionToolCallIds;
58
+ }
59
+ return new Set(pendingSuspensionToolCallIds);
60
+ }
61
+ function getActivityStatus(toolCallId, status, pendingSuspensionToolCallIds, toolName,
62
+ /** True when any HITL tool is still present in activeTools (pending or resolved this turn). */
63
+ hasInteractiveSibling = false, interactiveToolNames = DEFAULT_INTERACTIVE_TOOL_NAMES) {
64
+ const pendingIds = normalizePendingSuspensionIds(pendingSuspensionToolCallIds);
65
+ const isInteractive = (name) => name != null && interactiveToolNames.has(name);
66
+ // Mastra marks a parked/suspended tool as `error` in activeTools while the
67
+ // resumable suspension is exposed separately. It is waiting for user input,
68
+ // not a failed tool invocation.
69
+ if (status === 'error' && pendingIds.has(toolCallId)) {
70
+ return { label: 'waiting', color: 'grape' };
71
+ }
72
+ // Mastra reports resolved interactive suspensions as `error` in the tool
73
+ // activity mirror. Once they are no longer pending, they completed normally.
74
+ if (status === 'error' && isInteractive(toolName)) {
75
+ return { label: 'completed', color: 'teal' };
76
+ }
77
+ // Sibling work tools aborted around HITL are mirrored as `error`. Only remap
78
+ // when a suspension is pending or an interactive tool is still in the mirror —
79
+ // not every concurrent failure.
80
+ if (status === 'error' &&
81
+ !isInteractive(toolName) &&
82
+ (pendingIds.size > 0 || hasInteractiveSibling)) {
83
+ return { label: 'interrupted', color: 'gray' };
84
+ }
85
+ return { label: status, color: status === 'error' ? 'red' : undefined };
86
+ }
87
+ function DecisionChip({ format, defaultOpen = false, }) {
88
+ const [opened, setOpened] = (0, react_1.useState)(defaultOpen);
89
+ return ((0, jsx_runtime_1.jsxs)(core_1.Paper, { p: "xs", withBorder: true, bg: "var(--mantine-color-gray-0)", children: [(0, jsx_runtime_1.jsx)(core_1.UnstyledButton, { onClick: () => setOpened((value) => !value), w: "100%", children: (0, jsx_runtime_1.jsxs)(core_1.Group, { justify: "space-between", wrap: "nowrap", gap: "xs", children: [(0, jsx_runtime_1.jsxs)(core_1.Group, { gap: "xs", wrap: "nowrap", style: { minWidth: 0 }, children: [(0, jsx_runtime_1.jsx)(core_1.Badge, { size: "sm", variant: "light", color: "teal", children: format.label }), (0, jsx_runtime_1.jsx)(core_1.Text, { size: "sm", lineClamp: 1, style: { minWidth: 0 }, children: format.summary })] }), (0, jsx_runtime_1.jsx)(core_1.Text, { size: "xs", c: "dimmed", children: opened ? '▾' : '▸' })] }) }), (0, jsx_runtime_1.jsx)(core_1.Collapse, { in: opened, children: (0, jsx_runtime_1.jsx)(core_1.Stack, { gap: 4, mt: "xs", pt: "xs", style: { borderTop: '1px solid var(--mantine-color-gray-3)' }, children: typeof format.detail === 'string' || format.detail == null ? ((0, jsx_runtime_1.jsx)(core_1.Text, { size: "sm", style: { whiteSpace: 'pre-wrap' }, children: format.detail ?? format.summary })) : (format.detail) }) })] }));
90
+ }
91
+ function TranscriptMessage({ message, interactiveToolNames, pendingToolCallIds, renderers, }) {
92
+ const decisions = (0, harness_react_1.extractInteractiveDecisions)(message, interactiveToolNames, pendingToolCallIds);
93
+ const decisionIds = new Set(decisions.map((decision) => decision.toolCallId));
94
+ const text = (0, harness_react_1.getMessageTextParts)(message);
95
+ const fallback = text || decisions.length > 0
96
+ ? ''
97
+ : (0, harness_react_1.getNonDecisionToolFallback)(message, decisionIds) || getMessageDisplayText(message);
98
+ const body = text || fallback;
99
+ return ((0, jsx_runtime_1.jsxs)(core_1.Paper, { p: "md", withBorder: true, className: "bubble", children: [(0, jsx_runtime_1.jsxs)(core_1.Group, { justify: "space-between", align: "flex-start", mb: "xs", children: [(0, jsx_runtime_1.jsx)(core_1.Badge, { size: "sm", variant: "light", children: message.role }), (0, jsx_runtime_1.jsx)(core_1.Text, { size: "xs", c: "dimmed", children: new Date(message.createdAt).toLocaleTimeString() })] }), body ? ((0, jsx_runtime_1.jsx)(core_1.Text, { style: { whiteSpace: 'pre-wrap' }, mb: decisions.length > 0 ? 'sm' : undefined, children: body })) : null, decisions.length > 0 ? ((0, jsx_runtime_1.jsx)(core_1.Stack, { gap: "xs", children: decisions.map((decision) => ((0, jsx_runtime_1.jsx)(DecisionChip, { format: (0, harness_react_1.formatInteractiveDecision)(decision, renderers) }, decision.toolCallId))) })) : null, !body && decisions.length === 0 ? ((0, jsx_runtime_1.jsx)(core_1.Text, { style: { whiteSpace: 'pre-wrap' }, children: "(empty)" })) : null] }));
100
+ }
101
+ function TranscriptPanel({ interactiveToolNames, renderers, }) {
102
+ const { messages, displayState } = (0, harness_react_1.useHarnessState)();
103
+ const pendingToolCallIds = displayState?.pendingSuspensions?.map((suspension) => suspension.toolCallId) ?? [];
104
+ if (messages.length === 0) {
105
+ return ((0, jsx_runtime_1.jsx)(core_1.Paper, { p: "md", withBorder: true, h: "100%", children: (0, jsx_runtime_1.jsx)(core_1.Text, { c: "dimmed", children: "No messages yet. Send a prompt to begin." }) }));
106
+ }
107
+ return ((0, jsx_runtime_1.jsxs)(core_1.Paper, { p: "md", withBorder: true, h: "100%", children: [(0, jsx_runtime_1.jsxs)(core_1.Group, { mb: "sm", justify: "space-between", children: [(0, jsx_runtime_1.jsx)(core_1.Text, { fw: 600, children: "Conversation" }), displayState?.isRunning ? (0, jsx_runtime_1.jsx)(core_1.Loader, { size: "xs" }) : (0, jsx_runtime_1.jsx)(core_1.Badge, { variant: "light", children: "Idle" })] }), (0, jsx_runtime_1.jsx)(core_1.ScrollArea, { h: 360, offsetScrollbars: true, children: (0, jsx_runtime_1.jsx)(core_1.Stack, { gap: "sm", pr: "sm", children: messages.map((message) => ((0, jsx_runtime_1.jsx)(TranscriptMessage, { message: message, interactiveToolNames: interactiveToolNames, pendingToolCallIds: pendingToolCallIds, renderers: renderers }, message.id))) }) })] }));
108
+ }
109
+ function ComposerPanel() {
110
+ const { displayState } = (0, harness_react_1.useHarnessState)();
111
+ const actions = (0, harness_react_1.useHarnessActions)();
112
+ const [input, setInput] = (0, react_1.useState)('');
113
+ const [sending, setSending] = (0, react_1.useState)(false);
114
+ const submit = async () => {
115
+ if (!input.trim())
116
+ return;
117
+ setSending(true);
118
+ try {
119
+ await actions.sendMessage(input.trim());
120
+ setInput('');
121
+ }
122
+ finally {
123
+ setSending(false);
124
+ }
125
+ };
126
+ return ((0, jsx_runtime_1.jsxs)(core_1.Stack, { gap: "sm", children: [(0, jsx_runtime_1.jsx)(core_1.Textarea, { minRows: 3, placeholder: "Message the harness...", value: input, onChange: (event) => setInput(event.currentTarget.value), disabled: sending }), (0, jsx_runtime_1.jsxs)(core_1.Group, { children: [(0, jsx_runtime_1.jsx)(core_1.Button, { onClick: () => void submit(), loading: sending, disabled: !input.trim(), children: "Send" }), displayState?.isRunning ? ((0, jsx_runtime_1.jsx)(core_1.Button, { variant: "light", color: "red", onClick: () => void actions.abort(), children: "Abort" })) : null] })] }));
127
+ }
128
+ function ModeModelPanel() {
129
+ const { session } = (0, harness_react_1.useHarnessState)();
130
+ const actions = (0, harness_react_1.useHarnessActions)();
131
+ const [modelId, setModelId] = (0, react_1.useState)('');
132
+ const currentMode = session?.currentModeId ?? 'plan';
133
+ return ((0, jsx_runtime_1.jsxs)(core_1.Stack, { gap: "sm", children: [(0, jsx_runtime_1.jsx)(core_1.Text, { fw: 600, children: "Mode" }), (0, jsx_runtime_1.jsx)(core_1.SegmentedControl, { value: currentMode, onChange: (value) => void actions.switchMode(value), data: [
134
+ { label: 'Plan', value: 'plan' },
135
+ { label: 'Build', value: 'build' },
136
+ ] }), (0, jsx_runtime_1.jsx)(core_1.TextInput, { label: "Model ID", placeholder: "openai/gpt-5.4-mini", value: modelId, onChange: (event) => setModelId(event.currentTarget.value) }), (0, jsx_runtime_1.jsx)(core_1.Button, { variant: "light", onClick: () => modelId && void actions.switchModel(modelId), disabled: !modelId, children: "Switch model" })] }));
137
+ }
138
+ function getRunErrorMessage(error) {
139
+ return error?.message ?? null;
140
+ }
141
+ function ApprovalCard() {
142
+ const { displayState } = (0, harness_react_1.useHarnessState)();
143
+ const actions = (0, harness_react_1.useHarnessActions)();
144
+ const pendingTool = displayState?.pendingApproval;
145
+ const [action, setAction] = (0, react_1.useState)(null);
146
+ const [error, setError] = (0, react_1.useState)(null);
147
+ if (!pendingTool)
148
+ return null;
149
+ const run = async (nextAction) => {
150
+ if (action)
151
+ return;
152
+ setAction(nextAction);
153
+ setError(null);
154
+ try {
155
+ if (nextAction === 'approve')
156
+ await actions.approveTool();
157
+ else
158
+ await actions.declineTool();
159
+ }
160
+ catch (actionError) {
161
+ setError(actionError instanceof Error ? actionError.message : String(actionError));
162
+ setAction(null);
163
+ }
164
+ };
165
+ return ((0, jsx_runtime_1.jsxs)(core_1.Alert, { title: `Tool approval: ${pendingTool.toolName}`, color: "yellow", children: [error ? (0, jsx_runtime_1.jsx)(core_1.Text, { c: "red", children: error }) : null, (0, jsx_runtime_1.jsxs)(core_1.Group, { mt: "sm", children: [(0, jsx_runtime_1.jsx)(core_1.Button, { size: "xs", loading: action === 'approve', disabled: action !== null, onClick: () => void run('approve'), children: "Approve tool" }), (0, jsx_runtime_1.jsx)(core_1.Button, { size: "xs", variant: "light", loading: action === 'decline', disabled: action !== null, onClick: () => void run('decline'), children: "Decline tool" })] })] }));
166
+ }
167
+ function SuspensionCard({ suspension, renderers, }) {
168
+ const actions = (0, harness_react_1.useHarnessActions)();
169
+ const [busy, setBusy] = (0, react_1.useState)(false);
170
+ const [error, setError] = (0, react_1.useState)(null);
171
+ (0, react_1.useEffect)(() => {
172
+ setBusy(false);
173
+ setError(null);
174
+ }, [suspension.toolCallId]);
175
+ const renderer = (0, harness_react_1.resolveSuspensionRenderer)(suspension, renderers);
176
+ const payload = renderer?.parse(suspension) ?? null;
177
+ const resume = async (resumeData) => {
178
+ if (busy)
179
+ return;
180
+ setBusy(true);
181
+ setError(null);
182
+ try {
183
+ await actions.resumeToolSuspension(resumeData, suspension.toolCallId);
184
+ }
185
+ catch (actionError) {
186
+ setError(actionError instanceof Error ? actionError.message : String(actionError));
187
+ setBusy(false);
188
+ throw actionError;
189
+ }
190
+ };
191
+ if (!renderer || payload === null) {
192
+ return ((0, jsx_runtime_1.jsxs)(core_1.Alert, { title: suspension.toolName, color: "blue", children: [error ? ((0, jsx_runtime_1.jsx)(core_1.Text, { c: "red", size: "sm", mb: "sm", children: error })) : null, (0, jsx_runtime_1.jsx)(core_1.Text, { size: "sm", children: "This suspended tool requires a custom control." })] }));
193
+ }
194
+ return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: renderer.render({ suspension, payload, busy, error, resume }) });
195
+ }
196
+ function ApprovalPanels({ renderers }) {
197
+ const { displayState } = (0, harness_react_1.useHarnessState)();
198
+ return ((0, jsx_runtime_1.jsxs)(core_1.Stack, { gap: "sm", children: [displayState?.pendingApproval ? (0, jsx_runtime_1.jsx)(ApprovalCard, {}) : null, displayState?.pendingSuspensions.map((suspension) => ((0, jsx_runtime_1.jsx)(SuspensionCard, { suspension: suspension, renderers: renderers }, suspension.toolCallId)))] }));
199
+ }
200
+ function ActivityPanel({ interactiveToolNames, enableToolProgressCards, toolProgressRenderers, }) {
201
+ const { displayState } = (0, harness_react_1.useHarnessState)();
202
+ const activeTools = Object.entries(displayState?.activeTools ?? {});
203
+ const activeSubagents = Object.entries(displayState?.activeSubagents ?? {});
204
+ const pendingSuspensionToolCallIds = displayState?.pendingSuspensions?.map((suspension) => suspension.toolCallId) ?? [];
205
+ const hasInteractiveSibling = activeTools.some(([, tool]) => tool.name != null && interactiveToolNames.has(tool.name));
206
+ return ((0, jsx_runtime_1.jsxs)(core_1.Stack, { gap: "sm", children: [(0, jsx_runtime_1.jsx)(core_1.Text, { fw: 600, children: "Activity" }), activeTools.length === 0 && activeSubagents.length === 0 ? ((0, jsx_runtime_1.jsx)(core_1.Text, { size: "sm", c: "dimmed", children: "No active tools or subagents." })) : null, activeTools.map(([id, tool]) => {
207
+ const activityStatus = getActivityStatus(id, tool.status, pendingSuspensionToolCallIds, tool.name, hasInteractiveSibling, interactiveToolNames);
208
+ if (enableToolProgressCards && (0, harness_react_1.hasEmittedToolProgress)(tool)) {
209
+ const renderer = (0, harness_react_1.resolveToolProgressRenderer)(id, tool, toolProgressRenderers);
210
+ if (renderer) {
211
+ return (0, jsx_runtime_1.jsx)("div", { children: renderer.render({ toolCallId: id, tool }) }, id);
212
+ }
213
+ return ((0, jsx_runtime_1.jsx)(default_tool_progress_card_1.DefaultToolProgressCard, { toolCallId: id, tool: tool, statusLabel: activityStatus.label, statusColor: activityStatus.color }, id));
214
+ }
215
+ return ((0, jsx_runtime_1.jsxs)(core_1.Paper, { p: "xs", withBorder: true, children: [(0, jsx_runtime_1.jsx)(core_1.Text, { size: "sm", fw: 500, children: tool.name }), (0, jsx_runtime_1.jsx)(core_1.Badge, { size: "xs", color: activityStatus.color, children: activityStatus.label })] }, id));
216
+ }), activeSubagents.map(([id, subagent]) => ((0, jsx_runtime_1.jsxs)(core_1.Paper, { p: "xs", withBorder: true, children: [(0, jsx_runtime_1.jsx)(core_1.Text, { size: "sm", fw: 500, children: subagent.displayName ?? subagent.agentType }), (0, jsx_runtime_1.jsx)(core_1.Badge, { size: "xs", children: subagent.status })] }, id)))] }));
217
+ }
218
+ function ConfigPanel() {
219
+ const { config, updateConfig } = (0, harness_react_1.useHarnessConfig)();
220
+ const [planInstructions, setPlanInstructions] = (0, react_1.useState)(config?.planInstructions ?? '');
221
+ const [buildInstructions, setBuildInstructions] = (0, react_1.useState)(config?.buildInstructions ?? '');
222
+ const [systemContext, setSystemContext] = (0, react_1.useState)(config?.systemContext ?? '');
223
+ const [saving, setSaving] = (0, react_1.useState)(false);
224
+ const save = async () => {
225
+ setSaving(true);
226
+ try {
227
+ await updateConfig({
228
+ planInstructions: planInstructions || undefined,
229
+ buildInstructions: buildInstructions || undefined,
230
+ systemContext: systemContext || undefined,
231
+ });
232
+ }
233
+ finally {
234
+ setSaving(false);
235
+ }
236
+ };
237
+ return ((0, jsx_runtime_1.jsxs)(core_1.Stack, { gap: "sm", children: [(0, jsx_runtime_1.jsx)(core_1.Text, { fw: 600, children: "Configuration" }), (0, jsx_runtime_1.jsx)(core_1.Textarea, { label: "Plan instructions", minRows: 2, value: planInstructions, onChange: (event) => setPlanInstructions(event.currentTarget.value) }), (0, jsx_runtime_1.jsx)(core_1.Textarea, { label: "Build instructions", minRows: 2, value: buildInstructions, onChange: (event) => setBuildInstructions(event.currentTarget.value) }), (0, jsx_runtime_1.jsx)(core_1.Textarea, { label: "System context", minRows: 2, value: systemContext, onChange: (event) => setSystemContext(event.currentTarget.value) }), (0, jsx_runtime_1.jsx)(core_1.Button, { onClick: () => void save(), loading: saving, children: "Save config" })] }));
238
+ }
239
+ function HarnessStudio({ title = 'Lumif Harness Studio', suspensionRenderers: suspensionRenderersProp, enableToolProgressCards: enableToolProgressCardsProp, toolProgressRenderers: toolProgressRenderersProp, }) {
240
+ const { loading, error, connected, displayState } = (0, harness_react_1.useHarnessState)();
241
+ const providerRenderers = (0, harness_react_1.useSuspensionRenderers)();
242
+ const providerProgressEnabled = (0, harness_react_1.useToolProgressCardsEnabled)();
243
+ const providerProgressRenderers = (0, harness_react_1.useToolProgressRenderers)();
244
+ const runError = getRunErrorMessage(displayState?.lastError);
245
+ const builtins = (0, react_1.useMemo)(() => (0, builtin_suspension_renderers_1.createBuiltinSuspensionRenderers)(), []);
246
+ const renderers = (0, react_1.useMemo)(() => (0, harness_react_1.mergeSuspensionRenderers)(builtins, providerRenderers, suspensionRenderersProp), [builtins, providerRenderers, suspensionRenderersProp]);
247
+ const interactiveToolNames = (0, react_1.useMemo)(() => (0, harness_react_1.getInteractiveToolNames)(renderers), [renderers]);
248
+ const enableToolProgressCards = Boolean(enableToolProgressCardsProp || providerProgressEnabled);
249
+ const toolProgressRenderers = (0, react_1.useMemo)(() => (0, harness_react_1.mergeToolProgressRenderers)(providerProgressRenderers, toolProgressRenderersProp), [providerProgressRenderers, toolProgressRenderersProp]);
250
+ if (loading) {
251
+ return ((0, jsx_runtime_1.jsxs)(core_1.Group, { justify: "center", p: "xl", children: [(0, jsx_runtime_1.jsx)(core_1.Loader, {}), (0, jsx_runtime_1.jsx)(core_1.Text, { children: "Connecting to harness..." })] }));
252
+ }
253
+ return ((0, jsx_runtime_1.jsxs)(core_1.Stack, { gap: "md", p: "md", children: [(0, jsx_runtime_1.jsxs)(core_1.Group, { justify: "space-between", children: [(0, jsx_runtime_1.jsx)(core_1.Title, { order: 3, children: title }), (0, jsx_runtime_1.jsx)(core_1.Badge, { color: connected ? 'green' : 'gray', children: connected ? 'Connected' : 'Disconnected' })] }), error ? ((0, jsx_runtime_1.jsx)(core_1.Alert, { color: "red", title: "Connection error", children: error })) : null, runError ? ((0, jsx_runtime_1.jsx)(core_1.Alert, { color: "red", title: "Run error", children: runError })) : null, (0, jsx_runtime_1.jsxs)(core_1.Group, { align: "flex-start", grow: true, preventGrowOverflow: false, children: [(0, jsx_runtime_1.jsxs)(core_1.Stack, { flex: 2, gap: "md", children: [(0, jsx_runtime_1.jsx)(TranscriptPanel, { interactiveToolNames: interactiveToolNames, renderers: renderers }), (0, jsx_runtime_1.jsx)(ComposerPanel, {}), (0, jsx_runtime_1.jsx)(ApprovalPanels, { renderers: renderers })] }), (0, jsx_runtime_1.jsxs)(core_1.Stack, { flex: 1, gap: "md", miw: 280, children: [(0, jsx_runtime_1.jsx)(core_1.Paper, { p: "md", withBorder: true, children: (0, jsx_runtime_1.jsx)(ModeModelPanel, {}) }), (0, jsx_runtime_1.jsx)(core_1.Paper, { p: "md", withBorder: true, children: (0, jsx_runtime_1.jsx)(ActivityPanel, { interactiveToolNames: interactiveToolNames, enableToolProgressCards: enableToolProgressCards, toolProgressRenderers: toolProgressRenderers }) }), (0, jsx_runtime_1.jsx)(core_1.Paper, { p: "md", withBorder: true, children: (0, jsx_runtime_1.jsx)(ConfigPanel, {}) })] })] })] }));
254
+ }
255
+ //# sourceMappingURL=studio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"studio.js","sourceRoot":"","sources":["../src/studio.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { MantineThemeOverride } from '@mantine/core';
2
+ export declare const lumifHarnessTheme: MantineThemeOverride;
package/dist/theme.js ADDED
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.lumifHarnessTheme = void 0;
4
+ exports.lumifHarnessTheme = {
5
+ primaryColor: 'violet',
6
+ defaultRadius: 'md',
7
+ fontFamily: 'Inter, system-ui, sans-serif',
8
+ headings: {
9
+ fontFamily: 'Inter, system-ui, sans-serif',
10
+ fontWeight: '600',
11
+ },
12
+ colors: {
13
+ dark: [
14
+ '#C1C2C5',
15
+ '#A6A7AB',
16
+ '#909296',
17
+ '#5C5F66',
18
+ '#373A40',
19
+ '#2C2E33',
20
+ '#25262B',
21
+ '#1A1B1E',
22
+ '#141517',
23
+ '#101113',
24
+ ],
25
+ },
26
+ };
27
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":";;;AAEa,QAAA,iBAAiB,GAAyB;IACrD,YAAY,EAAE,QAAQ;IACtB,aAAa,EAAE,IAAI;IACnB,UAAU,EAAE,8BAA8B;IAC1C,QAAQ,EAAE;QACR,UAAU,EAAE,8BAA8B;QAC1C,UAAU,EAAE,KAAK;KAClB;IACD,MAAM,EAAE;QACN,IAAI,EAAE;YACJ,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;SACV;KACF;CACF,CAAC"}
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@lumifai/harness-react-mantine",
3
+ "version": "0.0.1",
4
+ "license": "UNLICENSED",
5
+ "engines": {
6
+ "node": ">=22.13.0"
7
+ },
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js",
12
+ "require": "./dist/index.js",
13
+ "default": "./dist/index.js"
14
+ },
15
+ "./package.json": "./package.json"
16
+ },
17
+ "main": "dist/index.js",
18
+ "types": "dist/index.d.ts",
19
+ "files": [
20
+ "dist",
21
+ "!dist/**/*.test.*"
22
+ ],
23
+ "dependencies": {
24
+ "@lumifai/harness-protocol": "0.0.1",
25
+ "@lumifai/harness-react": "0.0.1"
26
+ },
27
+ "peerDependencies": {
28
+ "@mantine/core": "^8.0.0",
29
+ "@mantine/hooks": "^8.0.0",
30
+ "react": "^18.0.0 || ^19.0.0",
31
+ "react-dom": "^18.0.0 || ^19.0.0"
32
+ },
33
+ "devDependencies": {
34
+ "@mantine/core": "^8.1.2",
35
+ "@mantine/hooks": "^8.1.2",
36
+ "@types/react": "^19.1.8",
37
+ "@types/react-dom": "^19.1.6",
38
+ "react": "^19.1.0",
39
+ "react-dom": "^19.1.0"
40
+ },
41
+ "publishConfig": {
42
+ "access": "public",
43
+ "registry": "https://registry.npmjs.org/"
44
+ },
45
+ "scripts": {
46
+ "build": "tsc -p tsconfig.json"
47
+ }
48
+ }