@corenel/editor 0.1.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/dist/diagnostics.d.ts +9 -0
- package/dist/diagnostics.d.ts.map +1 -0
- package/dist/diagnostics.js +2 -0
- package/dist/diagnostics.js.map +1 -0
- package/dist/dock/PanelChooser.d.ts +13 -0
- package/dist/dock/PanelChooser.d.ts.map +1 -0
- package/dist/dock/PanelChooser.js +72 -0
- package/dist/dock/PanelChooser.js.map +1 -0
- package/dist/dock/PanelFrame.d.ts +37 -0
- package/dist/dock/PanelFrame.d.ts.map +1 -0
- package/dist/dock/PanelFrame.js +102 -0
- package/dist/dock/PanelFrame.js.map +1 -0
- package/dist/dock/PanelHost.d.ts +12 -0
- package/dist/dock/PanelHost.d.ts.map +1 -0
- package/dist/dock/PanelHost.js +331 -0
- package/dist/dock/PanelHost.js.map +1 -0
- package/dist/dock/config.d.ts +35 -0
- package/dist/dock/config.d.ts.map +1 -0
- package/dist/dock/config.js +2 -0
- package/dist/dock/config.js.map +1 -0
- package/dist/dock/index.d.ts +9 -0
- package/dist/dock/index.d.ts.map +1 -0
- package/dist/dock/index.js +13 -0
- package/dist/dock/index.js.map +1 -0
- package/dist/dock/layouts.d.ts +12 -0
- package/dist/dock/layouts.d.ts.map +1 -0
- package/dist/dock/layouts.js +50 -0
- package/dist/dock/layouts.js.map +1 -0
- package/dist/dock/tree.d.ts +73 -0
- package/dist/dock/tree.d.ts.map +1 -0
- package/dist/dock/tree.js +276 -0
- package/dist/dock/tree.js.map +1 -0
- package/dist/dock/types.d.ts +51 -0
- package/dist/dock/types.d.ts.map +1 -0
- package/dist/dock/types.js +42 -0
- package/dist/dock/types.js.map +1 -0
- package/dist/dock/use-layout.d.ts +41 -0
- package/dist/dock/use-layout.d.ts.map +1 -0
- package/dist/dock/use-layout.js +114 -0
- package/dist/dock/use-layout.js.map +1 -0
- package/dist/engine/index.d.ts +6 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/index.js +8 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/engine/runModel.d.ts +16 -0
- package/dist/engine/runModel.d.ts.map +1 -0
- package/dist/engine/runModel.js +7 -0
- package/dist/engine/runModel.js.map +1 -0
- package/dist/engine/useDocResults.d.ts +38 -0
- package/dist/engine/useDocResults.d.ts.map +1 -0
- package/dist/engine/useDocResults.js +51 -0
- package/dist/engine/useDocResults.js.map +1 -0
- package/dist/engine/useRunController.d.ts +18 -0
- package/dist/engine/useRunController.d.ts.map +1 -0
- package/dist/engine/useRunController.js +28 -0
- package/dist/engine/useRunController.js.map +1 -0
- package/dist/engine/useRunHistory.d.ts +22 -0
- package/dist/engine/useRunHistory.d.ts.map +1 -0
- package/dist/engine/useRunHistory.js +20 -0
- package/dist/engine/useRunHistory.js.map +1 -0
- package/dist/engine/useRunOutput.d.ts +32 -0
- package/dist/engine/useRunOutput.d.ts.map +1 -0
- package/dist/engine/useRunOutput.js +51 -0
- package/dist/engine/useRunOutput.js.map +1 -0
- package/dist/errorLog.d.ts +17 -0
- package/dist/errorLog.d.ts.map +1 -0
- package/dist/errorLog.js +44 -0
- package/dist/errorLog.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/inlineAssist.d.ts +109 -0
- package/dist/inlineAssist.d.ts.map +1 -0
- package/dist/inlineAssist.js +272 -0
- package/dist/inlineAssist.js.map +1 -0
- package/dist/panels/DesignView.d.ts +9 -0
- package/dist/panels/DesignView.d.ts.map +1 -0
- package/dist/panels/DesignView.js +36 -0
- package/dist/panels/DesignView.js.map +1 -0
- package/dist/panels/ParamCard.d.ts +14 -0
- package/dist/panels/ParamCard.d.ts.map +1 -0
- package/dist/panels/ParamCard.js +138 -0
- package/dist/panels/ParamCard.js.map +1 -0
- package/dist/panels/ProblemsPanel.d.ts +9 -0
- package/dist/panels/ProblemsPanel.d.ts.map +1 -0
- package/dist/panels/ProblemsPanel.js +46 -0
- package/dist/panels/ProblemsPanel.js.map +1 -0
- package/dist/panels/UsageButton.d.ts +9 -0
- package/dist/panels/UsageButton.d.ts.map +1 -0
- package/dist/panels/UsageButton.js +40 -0
- package/dist/panels/UsageButton.js.map +1 -0
- package/dist/panels/index.d.ts +5 -0
- package/dist/panels/index.d.ts.map +1 -0
- package/dist/panels/index.js +8 -0
- package/dist/panels/index.js.map +1 -0
- package/dist/params.d.ts +27 -0
- package/dist/params.d.ts.map +1 -0
- package/dist/params.js +142 -0
- package/dist/params.js.map +1 -0
- package/dist/useWorkbench.d.ts +9 -0
- package/dist/useWorkbench.d.ts.map +1 -0
- package/dist/useWorkbench.js +21 -0
- package/dist/useWorkbench.js.map +1 -0
- package/dist/workflowModel.d.ts +128 -0
- package/dist/workflowModel.d.ts.map +1 -0
- package/dist/workflowModel.js +135 -0
- package/dist/workflowModel.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/* Problems dock panel — one place for things that went wrong:
|
|
3
|
+
* • Diagnostics: the active document's compile/validation issues (e.g. a missing
|
|
4
|
+
* `id`, an unknown {{ ref }}), with severity + line.
|
|
5
|
+
* • Errors: the run/app error log (errorLog.ts) — failed runs, save/compile
|
|
6
|
+
* failures, guard denials — timestamped so they don't vanish.
|
|
7
|
+
* Diagnostics are passed in by the host (EditorApp owns the live compile); the
|
|
8
|
+
* error log is read directly. Jump-to-line isn't wired yet — rows show line:col. */
|
|
9
|
+
import { useState } from 'react';
|
|
10
|
+
import { useErrorLog, clearErrors } from '../errorLog';
|
|
11
|
+
import { IcAlert, IcTrash } from '@corenel/ui-kit/icons';
|
|
12
|
+
const sevRank = { error: 0, warning: 1, info: 2 };
|
|
13
|
+
const sevIcon = { error: '⛔', warning: '⚠', info: 'ℹ' };
|
|
14
|
+
function fmtTime(ms) {
|
|
15
|
+
const d = new Date(ms);
|
|
16
|
+
const p = (n) => String(n).padStart(2, '0');
|
|
17
|
+
return `${p(d.getHours())}:${p(d.getMinutes())}:${p(d.getSeconds())}`;
|
|
18
|
+
}
|
|
19
|
+
export function ProblemsPanel({ diagnostics = [], fileName, onJump }) {
|
|
20
|
+
const jump = (d) => { if (d.line != null)
|
|
21
|
+
onJump?.(d.line, d.column); };
|
|
22
|
+
const errors = useErrorLog();
|
|
23
|
+
const [tab, setTab] = useState('diagnostics');
|
|
24
|
+
const diags = [...diagnostics].sort((a, b) => sevRank[a.severity] - sevRank[b.severity] || (a.line ?? 0) - (b.line ?? 0));
|
|
25
|
+
return (_jsxs("div", { style: S.panel, children: [_jsxs("div", { style: S.head, children: [_jsxs("div", { style: S.segs, children: [_jsxs("button", { style: segStyle(tab === 'diagnostics'), onClick: () => setTab('diagnostics'), children: ["Diagnostics", diags.length ? _jsx("span", { style: S.count, children: diags.length }) : null] }), _jsxs("button", { style: segStyle(tab === 'errors'), onClick: () => setTab('errors'), children: ["Errors", errors.length ? _jsx("span", { style: S.count, children: errors.length }) : null] })] }), _jsx("div", { style: { flex: 1 } }), tab === 'errors' && errors.length > 0 && (_jsxs("button", { style: S.clearBtn, onClick: clearErrors, title: "Clear the error log", children: [_jsx(IcTrash, { size: 12 }), " Clear"] }))] }), _jsx("div", { style: S.body, children: tab === 'diagnostics' ? (diags.length === 0 ? (_jsxs("div", { style: S.empty, children: [_jsx(IcAlert, { size: 18 }), _jsxs("span", { children: ["No problems in ", fileName || 'the active document', "."] })] })) : (_jsx("div", { style: S.list, children: diags.map((d, i) => (_jsxs("button", { type: "button", "data-testid": "problem-row", "data-line": d.line ?? '', style: { ...S.row, ...S.rowBtn, ...(d.line == null ? S.rowStatic : null) }, title: d.line != null ? `${d.message}\n(click to jump to line ${d.line})` : d.message, onClick: () => jump(d), disabled: d.line == null, children: [_jsx("span", { style: S.sev, children: sevIcon[d.severity] }), _jsx("span", { style: S.msg, children: d.message }), d.line != null && _jsxs("span", { style: S.loc, children: [":", d.line, d.column != null ? `:${d.column}` : ''] })] }, i))) }))) : (errors.length === 0 ? (_jsxs("div", { style: S.empty, children: [_jsx(IcAlert, { size: 18 }), _jsx("span", { children: "No errors yet." })] })) : (_jsx("div", { style: S.list, children: errors.map((e) => (_jsxs("div", { style: S.row, title: e.message, children: [_jsx("span", { style: S.time, children: fmtTime(e.at) }), e.source && _jsx("span", { style: S.tag, children: e.source }), _jsx("span", { style: S.msg, children: e.message })] }, e.id))) }))) })] }));
|
|
26
|
+
}
|
|
27
|
+
const segStyle = (on) => ({ display: 'inline-flex', alignItems: 'center', gap: 6, height: 26, padding: '0 10px', border: 0, borderRadius: 'var(--radius-sm)', background: on ? 'var(--accent-soft)' : 'transparent', color: on ? 'var(--accent)' : 'var(--text-secondary)', fontSize: 12.5, fontWeight: 600, fontFamily: 'inherit', cursor: 'pointer' });
|
|
28
|
+
const S = {
|
|
29
|
+
panel: { flex: 1, minHeight: 0, minWidth: 0, display: 'flex', flexDirection: 'column', background: 'var(--surface-1)' },
|
|
30
|
+
head: { display: 'flex', alignItems: 'center', gap: 8, padding: '6px 9px', borderBottom: '1px solid var(--border-subtle)', flexShrink: 0 },
|
|
31
|
+
segs: { display: 'flex', gap: 4 },
|
|
32
|
+
count: { fontSize: 10.5, fontFamily: 'var(--font-mono)', fontVariantNumeric: 'tabular-nums', padding: '1px 5px', borderRadius: 'var(--radius-pill, 999px)', background: 'var(--surface-3, var(--surface-2))', color: 'currentColor' },
|
|
33
|
+
clearBtn: { display: 'inline-flex', alignItems: 'center', gap: 5, height: 24, padding: '0 8px', border: '1px solid var(--border-subtle)', borderRadius: 'var(--radius-sm)', background: 'var(--surface-2)', color: 'var(--text-secondary)', fontSize: 11.5, fontWeight: 600, cursor: 'pointer' },
|
|
34
|
+
body: { flex: 1, minHeight: 0, overflowY: 'auto' },
|
|
35
|
+
list: { display: 'flex', flexDirection: 'column' },
|
|
36
|
+
row: { display: 'flex', alignItems: 'baseline', gap: 8, padding: '6px 11px', borderBottom: '1px solid var(--border-subtle)', fontSize: 12.5, lineHeight: 1.4 },
|
|
37
|
+
rowBtn: { width: '100%', textAlign: 'left', border: 0, borderBottom: '1px solid var(--border-subtle)', background: 'transparent', color: 'inherit', fontFamily: 'inherit', cursor: 'pointer' },
|
|
38
|
+
rowStatic: { cursor: 'default' },
|
|
39
|
+
sev: { flexShrink: 0, fontSize: 12 },
|
|
40
|
+
time: { flexShrink: 0, fontFamily: 'var(--font-mono)', fontVariantNumeric: 'tabular-nums', fontSize: 11, color: 'var(--text-tertiary)' },
|
|
41
|
+
tag: { flexShrink: 0, fontSize: 10, fontWeight: 700, textTransform: 'uppercase', letterSpacing: 0.4, color: 'var(--text-tertiary)', background: 'var(--surface-3, var(--surface-2))', borderRadius: 'var(--radius-xs, 3px)', padding: '1px 5px' },
|
|
42
|
+
msg: { flex: 1, color: 'var(--text-primary)', wordBreak: 'break-word' },
|
|
43
|
+
loc: { flexShrink: 0, fontFamily: 'var(--font-mono)', fontVariantNumeric: 'tabular-nums', fontSize: 11, color: 'var(--text-tertiary)' },
|
|
44
|
+
empty: { display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', gap: 8, height: '100%', minHeight: 80, color: 'var(--text-tertiary)', fontSize: 12.5, textAlign: 'center', padding: 16 },
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=ProblemsPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProblemsPanel.js","sourceRoot":"","sources":["../../panels/ProblemsPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
/** The prompt-token estimate, doubling as the entry point to usage history.
|
|
3
|
+
* The label shows the live estimate for the current prompt plus the running
|
|
4
|
+
* session cost; clicking it opens a popover with session/lifetime totals and
|
|
5
|
+
* recent runs (formerly the model picker's "Usage" tab). */
|
|
6
|
+
export declare function UsageButton({ promptTokens }: {
|
|
7
|
+
promptTokens: number;
|
|
8
|
+
}): React.JSX.Element;
|
|
9
|
+
//# sourceMappingURL=UsageButton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UsageButton.d.ts","sourceRoot":"","sources":["../../panels/UsageButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAI3D;;;4DAG4D;AAC5D,wBAAgB,WAAW,CAAC,EAAE,YAAY,EAAE,EAAE;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,qBAyCrE"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useRef, useEffect } from 'react';
|
|
3
|
+
import { useUsage, fmtCost, fmtTok, clearUsage } from '@corenel/ui-kit/usage';
|
|
4
|
+
import { IcTrash } from '@corenel/ui-kit/icons';
|
|
5
|
+
/** The prompt-token estimate, doubling as the entry point to usage history.
|
|
6
|
+
* The label shows the live estimate for the current prompt plus the running
|
|
7
|
+
* session cost; clicking it opens a popover with session/lifetime totals and
|
|
8
|
+
* recent runs (formerly the model picker's "Usage" tab). */
|
|
9
|
+
export function UsageButton({ promptTokens }) {
|
|
10
|
+
const [open, setOpen] = useState(false);
|
|
11
|
+
const { records, session, lifetime } = useUsage();
|
|
12
|
+
const ref = useRef(null);
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
if (!open)
|
|
15
|
+
return;
|
|
16
|
+
const onDoc = (e) => { if (ref.current && !ref.current.contains(e.target))
|
|
17
|
+
setOpen(false); };
|
|
18
|
+
const onEsc = (e) => { if (e.key === 'Escape')
|
|
19
|
+
setOpen(false); };
|
|
20
|
+
document.addEventListener('mousedown', onDoc);
|
|
21
|
+
document.addEventListener('keydown', onEsc);
|
|
22
|
+
return () => { document.removeEventListener('mousedown', onDoc); document.removeEventListener('keydown', onEsc); };
|
|
23
|
+
}, [open]);
|
|
24
|
+
return (_jsxs("div", { ref: ref, style: { position: 'relative' }, children: [_jsxs("button", { style: us.btn(open), onClick: () => setOpen((o) => !o), title: "Prompt token estimate \u00B7 click for usage", "aria-haspopup": "dialog", "aria-expanded": open, children: [_jsxs("span", { style: us.est, children: ["~", promptTokens.toLocaleString(), " tok"] }), _jsx("span", { style: us.cost, children: fmtCost(session.cost) })] }), open && (_jsxs("div", { style: us.menu, role: "dialog", "aria-label": "Usage", children: [_jsxs("div", { style: us.totals, children: [_jsxs("span", { children: ["session ", fmtTok(session.inTok), " in \u00B7 ", fmtTok(session.outTok), " out \u00B7 ", session.runs, " run", session.runs === 1 ? '' : 's'] }), _jsxs("span", { children: ["lifetime ", fmtCost(lifetime.cost), " \u00B7 ", lifetime.runs] })] }), _jsxs("div", { style: us.list, children: [records.length === 0 && _jsx("div", { style: us.empty, children: "No runs yet." }), records.slice(0, 50).map((r) => (_jsxs("div", { style: us.row, children: [_jsx("span", { style: us.model, children: r.modelLabel }), _jsxs("span", { style: us.tok, children: ["in ", r.inEst != null ? `${fmtTok(r.inEst)}→` : '', fmtTok(r.inTok), " \u00B7 out ", fmtTok(r.outTok)] }), _jsx("span", { style: us.rowCost, children: fmtCost(r.cost) })] }, r.id)))] }), records.length > 0 && _jsxs("button", { style: us.clear, onClick: () => clearUsage(), children: [_jsx(IcTrash, { size: 11 }), " Clear history"] })] }))] }));
|
|
25
|
+
}
|
|
26
|
+
const us = {
|
|
27
|
+
btn: (open) => ({ display: 'inline-flex', alignItems: 'center', gap: 7, height: 32, padding: '0 10px', border: `1px solid ${open ? 'var(--border-accent)' : 'var(--border-subtle)'}`, borderRadius: 'var(--radius-sm)', background: open ? 'var(--surface-2)' : 'transparent', color: 'var(--text-tertiary)', fontFamily: 'var(--font-mono)', fontSize: 12, fontVariantNumeric: 'tabular-nums', cursor: 'pointer', transition: 'border-color var(--motion-fast), background var(--motion-fast)' }),
|
|
28
|
+
est: { color: 'var(--text-tertiary)' },
|
|
29
|
+
cost: { color: 'var(--text-secondary)', fontWeight: 600 },
|
|
30
|
+
menu: { position: 'absolute', top: 'calc(100% + 6px)', right: 0, width: 360, maxWidth: 'calc(100vw - 20px)', display: 'flex', flexDirection: 'column', gap: 8, maxHeight: 'min(70vh, 520px)', padding: 12, background: 'var(--surface-1)', border: '1px solid var(--border-default)', borderRadius: 'var(--radius-lg)', boxShadow: 'var(--shadow-4)', zIndex: 200, overflow: 'hidden' },
|
|
31
|
+
totals: { display: 'flex', justifyContent: 'space-between', gap: 10, fontSize: 11, color: 'var(--text-tertiary)', fontFamily: 'var(--font-mono)', fontVariantNumeric: 'tabular-nums', flexWrap: 'wrap' },
|
|
32
|
+
list: { display: 'flex', flexDirection: 'column', gap: 4, minHeight: 0, overflowY: 'auto' },
|
|
33
|
+
empty: { padding: '16px 12px', fontSize: 12.5, lineHeight: 1.5, color: 'var(--text-tertiary)', textAlign: 'center' },
|
|
34
|
+
row: { display: 'flex', alignItems: 'baseline', gap: 8, fontSize: 12 },
|
|
35
|
+
model: { fontWeight: 600, color: 'var(--text-primary)', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', maxWidth: 160 },
|
|
36
|
+
tok: { color: 'var(--text-tertiary)', fontFamily: 'var(--font-mono)', fontVariantNumeric: 'tabular-nums' },
|
|
37
|
+
rowCost: { marginLeft: 'auto', color: 'var(--text-secondary)', fontFamily: 'var(--font-mono)', fontVariantNumeric: 'tabular-nums', flexShrink: 0 },
|
|
38
|
+
clear: { alignSelf: 'flex-start', display: 'inline-flex', alignItems: 'center', gap: 5, height: 28, padding: '0 10px', border: '1px solid var(--border-subtle)', borderRadius: 'var(--radius-sm)', background: 'var(--surface-2)', color: 'var(--text-tertiary)', fontSize: 12, fontWeight: 600, fontFamily: 'inherit', cursor: 'pointer' },
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=UsageButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UsageButton.js","sourceRoot":"","sources":["../../panels/UsageButton.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../panels/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/* Editor panels carved out of prompd-web's EditorApp. Only genuinely
|
|
2
|
+
* presentational, corenel-only leaves live here; panels still coupled to host
|
|
3
|
+
* param/run/model logic move with those layers (see docs/editor-decomposition.md). */
|
|
4
|
+
export { UsageButton } from './UsageButton';
|
|
5
|
+
export { ParamCard } from './ParamCard';
|
|
6
|
+
export { DesignView, PreviewView } from './DesignView';
|
|
7
|
+
export { ProblemsPanel } from './ProblemsPanel';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../panels/index.ts"],"names":[],"mappings":"AAAA;;sFAEsF;AACtF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/params.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { PrompdParameter } from '@prompd/core';
|
|
2
|
+
/**
|
|
3
|
+
* Editor parameter — the core parameter type widened so the UI can also offer
|
|
4
|
+
* legacy/editor-only kinds ('enum', 'list', 'bool', …).
|
|
5
|
+
*/
|
|
6
|
+
export interface EditorParameter extends Omit<PrompdParameter, 'type'> {
|
|
7
|
+
type: string;
|
|
8
|
+
}
|
|
9
|
+
export type ParamKind = 'string' | 'number' | 'boolean' | 'enum' | 'enum-array' | 'array' | 'object' | 'json' | 'base64' | 'file' | 'list' | 'date' | 'datetime';
|
|
10
|
+
/** Enum options from `enum` (scalar/typed-array) or a YAML `items.enum`. */
|
|
11
|
+
export declare function enumOptions(p: EditorParameter): string[] | null;
|
|
12
|
+
/** True for whole-number inputs (no decimals). */
|
|
13
|
+
export declare function isIntegerType(p: EditorParameter): boolean;
|
|
14
|
+
export declare function paramKind(p: EditorParameter): ParamKind;
|
|
15
|
+
/** The initial editable value for a parameter, from its `default`. */
|
|
16
|
+
export declare function initialEditValue(p: EditorParameter): any;
|
|
17
|
+
/** Convert an editable value to the value handed to @prompd/core at compile. */
|
|
18
|
+
export declare function toCompileValue(p: EditorParameter, raw: any): any;
|
|
19
|
+
/**
|
|
20
|
+
* Build the @prompd/core template context from a doc's parameters + their editable
|
|
21
|
+
* values. Params the user left empty are OMITTED so the engine applies the declared
|
|
22
|
+
* `default`: core only fills defaults for ABSENT keys — passing '' suppresses them.
|
|
23
|
+
*/
|
|
24
|
+
export declare function buildCompileContext(params: EditorParameter[], values: Record<string, any> | undefined): Record<string, any>;
|
|
25
|
+
/** Validate the editable value; returns an error string or null. UI-only. */
|
|
26
|
+
export declare function paramError(p: EditorParameter, raw: any): string | null;
|
|
27
|
+
//# sourceMappingURL=params.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../params.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD;;;GAGG;AACH,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC;IACpE,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,SAAS,GACjB,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,YAAY,GACvD,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GACxD,MAAM,GAAG,UAAU,CAAC;AAExB,4EAA4E;AAC5E,wBAAgB,WAAW,CAAC,CAAC,EAAE,eAAe,GAAG,MAAM,EAAE,GAAG,IAAI,CAG/D;AAED,kDAAkD;AAClD,wBAAgB,aAAa,CAAC,CAAC,EAAE,eAAe,GAAG,OAAO,CAEzD;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,eAAe,GAAG,SAAS,CAgBvD;AAED,sEAAsE;AACtE,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,eAAe,GAAG,GAAG,CAkBxD;AAED,gFAAgF;AAChF,wBAAgB,cAAc,CAAC,CAAC,EAAE,eAAe,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,CA2BhE;AASD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,eAAe,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAS3H;AAED,6EAA6E;AAC7E,wBAAgB,UAAU,CAAC,CAAC,EAAE,eAAe,EAAE,GAAG,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI,CActE"}
|
package/dist/params.js
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/** Enum options from `enum` (scalar/typed-array) or a YAML `items.enum`. */
|
|
2
|
+
export function enumOptions(p) {
|
|
3
|
+
const e = p.enum ?? p.items?.enum;
|
|
4
|
+
return Array.isArray(e) && e.length ? e.map(String) : null;
|
|
5
|
+
}
|
|
6
|
+
/** True for whole-number inputs (no decimals). */
|
|
7
|
+
export function isIntegerType(p) {
|
|
8
|
+
return (p.type || '').toLowerCase() === 'integer';
|
|
9
|
+
}
|
|
10
|
+
export function paramKind(p) {
|
|
11
|
+
const t = (p.type || 'string').toLowerCase();
|
|
12
|
+
const opts = enumOptions(p);
|
|
13
|
+
if (t === 'array' && opts)
|
|
14
|
+
return 'enum-array'; // typed array of enum values
|
|
15
|
+
if (opts && t !== 'array')
|
|
16
|
+
return 'enum'; // single-select (type 'enum' or scalar+enum)
|
|
17
|
+
if (t === 'boolean' || t === 'bool')
|
|
18
|
+
return 'boolean';
|
|
19
|
+
if (t === 'number' || t === 'integer' || t === 'float' || t === 'decimal')
|
|
20
|
+
return 'number';
|
|
21
|
+
if (t === 'array')
|
|
22
|
+
return 'array';
|
|
23
|
+
if (t === 'object')
|
|
24
|
+
return 'object';
|
|
25
|
+
if (t === 'json')
|
|
26
|
+
return 'json';
|
|
27
|
+
if (t === 'base64')
|
|
28
|
+
return 'base64';
|
|
29
|
+
if (t === 'date')
|
|
30
|
+
return 'date';
|
|
31
|
+
if (t === 'datetime')
|
|
32
|
+
return 'datetime';
|
|
33
|
+
if (t === 'file')
|
|
34
|
+
return 'file';
|
|
35
|
+
if (t === 'list')
|
|
36
|
+
return 'list'; // legacy newline list
|
|
37
|
+
return 'string';
|
|
38
|
+
}
|
|
39
|
+
/** The initial editable value for a parameter, from its `default`. */
|
|
40
|
+
export function initialEditValue(p) {
|
|
41
|
+
const k = paramKind(p);
|
|
42
|
+
const d = p.default;
|
|
43
|
+
switch (k) {
|
|
44
|
+
case 'boolean': return d === true || d === 'true';
|
|
45
|
+
case 'number': return d == null ? '' : String(d);
|
|
46
|
+
case 'enum-array': return Array.isArray(d) ? d.map(String) : [];
|
|
47
|
+
case 'array': return Array.isArray(d) ? d.map(String) : (typeof d === 'string' && d ? d.split('\n') : []);
|
|
48
|
+
case 'list': return Array.isArray(d) ? d.join('\n') : (d ?? '');
|
|
49
|
+
case 'object':
|
|
50
|
+
case 'json': return d == null ? '' : (typeof d === 'string' ? d : JSON.stringify(d, null, 2));
|
|
51
|
+
// A native date/datetime input only accepts a concrete value. Relative defaults
|
|
52
|
+
// (now, now-7d, ...) can't be shown there — leave the field empty so the compile
|
|
53
|
+
// context omits it and @prompd/core resolves the declared default at compile time.
|
|
54
|
+
case 'date': return typeof d === 'string' && /^\d{4}-\d{2}-\d{2}$/.test(d) ? d : '';
|
|
55
|
+
case 'datetime': return typeof d === 'string' && /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}/.test(d) ? d.slice(0, 16) : '';
|
|
56
|
+
default: return d == null ? '' : String(d);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/** Convert an editable value to the value handed to @prompd/core at compile. */
|
|
60
|
+
export function toCompileValue(p, raw) {
|
|
61
|
+
const k = paramKind(p);
|
|
62
|
+
switch (k) {
|
|
63
|
+
case 'boolean':
|
|
64
|
+
return raw === true || raw === 'true';
|
|
65
|
+
case 'number': {
|
|
66
|
+
if (raw === '' || raw == null)
|
|
67
|
+
return '';
|
|
68
|
+
const n = Number(raw);
|
|
69
|
+
return Number.isFinite(n) ? n : raw;
|
|
70
|
+
}
|
|
71
|
+
case 'enum-array':
|
|
72
|
+
return Array.isArray(raw) ? raw : [];
|
|
73
|
+
case 'array':
|
|
74
|
+
return Array.isArray(raw)
|
|
75
|
+
? raw
|
|
76
|
+
: String(raw ?? '').split('\n').map((s) => s.trim()).filter(Boolean);
|
|
77
|
+
case 'list':
|
|
78
|
+
return String(raw ?? '').split('\n').map((s) => s.trim()).filter(Boolean);
|
|
79
|
+
case 'object':
|
|
80
|
+
case 'json': {
|
|
81
|
+
const s = typeof raw === 'string' ? raw.trim() : '';
|
|
82
|
+
if (!s)
|
|
83
|
+
return '';
|
|
84
|
+
try {
|
|
85
|
+
return JSON.parse(s);
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return raw;
|
|
89
|
+
} // leave invalid JSON as-is; the panel flags it
|
|
90
|
+
}
|
|
91
|
+
default:
|
|
92
|
+
return raw ?? '';
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/** A compile value is "unset" when the user left the field empty — so the
|
|
96
|
+
* frontmatter `default` should win. (An empty array / blank string counts; a
|
|
97
|
+
* real `0` or `false` does not.) */
|
|
98
|
+
function isUnsetCompileValue(v) {
|
|
99
|
+
return v == null || v === '' || (Array.isArray(v) && v.length === 0);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Build the @prompd/core template context from a doc's parameters + their editable
|
|
103
|
+
* values. Params the user left empty are OMITTED so the engine applies the declared
|
|
104
|
+
* `default`: core only fills defaults for ABSENT keys — passing '' suppresses them.
|
|
105
|
+
*/
|
|
106
|
+
export function buildCompileContext(params, values) {
|
|
107
|
+
const ctx = {};
|
|
108
|
+
for (const p of params) {
|
|
109
|
+
const raw = values && p.name in values ? values[p.name] : initialEditValue(p);
|
|
110
|
+
const cv = toCompileValue(p, raw);
|
|
111
|
+
if (isUnsetCompileValue(cv))
|
|
112
|
+
continue; // leave it out -> core applies the default
|
|
113
|
+
ctx[p.name] = cv;
|
|
114
|
+
}
|
|
115
|
+
return ctx;
|
|
116
|
+
}
|
|
117
|
+
/** Validate the editable value; returns an error string or null. UI-only. */
|
|
118
|
+
export function paramError(p, raw) {
|
|
119
|
+
const k = paramKind(p);
|
|
120
|
+
if ((k === 'object' || k === 'json') && typeof raw === 'string' && raw.trim()) {
|
|
121
|
+
try {
|
|
122
|
+
JSON.parse(raw);
|
|
123
|
+
}
|
|
124
|
+
catch (e) {
|
|
125
|
+
return `Invalid JSON: ${String(e.message)}`;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
if (k === 'number' && raw !== '' && raw != null) {
|
|
129
|
+
const n = Number(raw);
|
|
130
|
+
if (!Number.isFinite(n))
|
|
131
|
+
return 'Not a number';
|
|
132
|
+
if (isIntegerType(p) && !Number.isInteger(n))
|
|
133
|
+
return 'Must be a whole number';
|
|
134
|
+
const min = p.minimum, max = p.maximum;
|
|
135
|
+
if (typeof min === 'number' && n < min)
|
|
136
|
+
return `Must be ≥ ${min}`;
|
|
137
|
+
if (typeof max === 'number' && n > max)
|
|
138
|
+
return `Must be ≤ ${max}`;
|
|
139
|
+
}
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=params.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"params.js","sourceRoot":"","sources":["../params.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type DockLayoutConfig, type PanelId } from './dock';
|
|
2
|
+
export declare function useWorkbench(config: DockLayoutConfig): {
|
|
3
|
+
dock: import("./dock").DockApi;
|
|
4
|
+
visible: (id: PanelId) => boolean;
|
|
5
|
+
has: (id: PanelId) => boolean;
|
|
6
|
+
editorPanelIds: string[];
|
|
7
|
+
};
|
|
8
|
+
export type Workbench = ReturnType<typeof useWorkbench>;
|
|
9
|
+
//# sourceMappingURL=useWorkbench.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useWorkbench.d.ts","sourceRoot":"","sources":["../useWorkbench.ts"],"names":[],"mappings":"AAQA,OAAO,EAA2D,KAAK,gBAAgB,EAAE,KAAK,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEtH,wBAAgB,YAAY,CAAC,MAAM,EAAE,gBAAgB;;kBAIlB,OAAO;cAEX,OAAO;;EAIrC;AAED,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/* useWorkbench — the editor's composition surface over the dock. A host builds
|
|
2
|
+
* its PanelDef set and hands them to <PanelHost>/<PanelChooser>; this hook owns
|
|
3
|
+
* the dock layout controller and the common panel-routing queries (is a panel
|
|
4
|
+
* visible? present? which are editor panels?) so a host doesn't reach into
|
|
5
|
+
* dock.tree with the raw helpers at every call site. The dock controller is
|
|
6
|
+
* returned for the imperative ops (addPanel/close/collapse/applyPreset/…) a host
|
|
7
|
+
* drives from keybinds / a command palette / mobile. */
|
|
8
|
+
import { useCallback, useMemo } from 'react';
|
|
9
|
+
import { useDockLayout, isPanelVisible, collectPanels, panelKind } from './dock';
|
|
10
|
+
export function useWorkbench(config) {
|
|
11
|
+
const dock = useDockLayout(config);
|
|
12
|
+
const tree = dock.tree;
|
|
13
|
+
/** Is this panel present and not collapsed? */
|
|
14
|
+
const visible = useCallback((id) => isPanelVisible(tree, id), [tree]);
|
|
15
|
+
/** Is this panel present (visible or collapsed)? */
|
|
16
|
+
const has = useCallback((id) => collectPanels(tree).includes(id), [tree]);
|
|
17
|
+
/** The currently-docked editor panels (e.g. for split/close decisions). */
|
|
18
|
+
const editorPanelIds = useMemo(() => collectPanels(tree).filter((id) => panelKind(id) === 'editor'), [tree]);
|
|
19
|
+
return { dock, visible, has, editorPanelIds };
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=useWorkbench.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useWorkbench.js","sourceRoot":"","sources":["../useWorkbench.ts"],"names":[],"mappings":"AAAA;;;;;;wDAMwD;AACxD,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,EAAuC,MAAM,QAAQ,CAAC;AAEtH,MAAM,UAAU,YAAY,CAAC,MAAwB;IACnD,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACvB,+CAA+C;IAC/C,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,EAAW,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/E,oDAAoD;IACpD,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,EAAW,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACnF,2EAA2E;IAC3E,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7G,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/** Outcome of a workflow-level guardrail phase — lets the timeline render a
|
|
2
|
+
* shield + action badge instead of a generic note step. */
|
|
3
|
+
export interface GuardrailStepInfo {
|
|
4
|
+
action: 'deny' | 'scrub' | 'reroute' | 'warn' | 'pass';
|
|
5
|
+
phase: 'input' | 'output';
|
|
6
|
+
/** The guardrail's label/preset that fired (absent for a clean pass). */
|
|
7
|
+
by?: string;
|
|
8
|
+
}
|
|
9
|
+
export type WfEvent = {
|
|
10
|
+
type: 'node-start';
|
|
11
|
+
id: string;
|
|
12
|
+
nodeType: string;
|
|
13
|
+
label: string;
|
|
14
|
+
}
|
|
15
|
+
/** A node's output. `note: true` marks diagnostic lines (provider set, tool
|
|
16
|
+
* calls, debug echoes) so the UI can fold them under the step instead of
|
|
17
|
+
* treating them as the node's real output. `sub` names a sub-component of a
|
|
18
|
+
* composite node (the agent's "input guardrail" / "output guardrail") — the
|
|
19
|
+
* UI renders these in arrival order, quieter than the main output. `guardrail`
|
|
20
|
+
* marks a workflow-level guardrail phase outcome. */
|
|
21
|
+
| {
|
|
22
|
+
type: 'node-output';
|
|
23
|
+
id: string;
|
|
24
|
+
output: string;
|
|
25
|
+
note?: boolean;
|
|
26
|
+
sub?: string;
|
|
27
|
+
guardrail?: GuardrailStepInfo;
|
|
28
|
+
}
|
|
29
|
+
/** Emitted once per node after it settles: wall-clock ms, plus token usage and
|
|
30
|
+
* estimated cost for model-backed nodes (cost only when the model's pricing is
|
|
31
|
+
* known in the catalog). */
|
|
32
|
+
| {
|
|
33
|
+
type: 'node-end';
|
|
34
|
+
id: string;
|
|
35
|
+
ms: number;
|
|
36
|
+
inTok?: number;
|
|
37
|
+
outTok?: number;
|
|
38
|
+
cost?: number;
|
|
39
|
+
} | {
|
|
40
|
+
type: 'node-skip';
|
|
41
|
+
id: string;
|
|
42
|
+
reason: string;
|
|
43
|
+
} | {
|
|
44
|
+
type: 'node-error';
|
|
45
|
+
id: string;
|
|
46
|
+
message: string;
|
|
47
|
+
guardrail?: GuardrailStepInfo;
|
|
48
|
+
} | {
|
|
49
|
+
type: 'done';
|
|
50
|
+
finalOutput: string;
|
|
51
|
+
} | {
|
|
52
|
+
type: 'error';
|
|
53
|
+
message: string;
|
|
54
|
+
};
|
|
55
|
+
/** Mid-run request for a `user-input` node — handed to opts.requestInput so the
|
|
56
|
+
* host can render a typed prompt (text/textarea/choice/confirm/number). */
|
|
57
|
+
export interface WfInputRequest {
|
|
58
|
+
nodeId: string;
|
|
59
|
+
/** The question, already template-substituted. */
|
|
60
|
+
prompt: string;
|
|
61
|
+
inputType: 'text' | 'textarea' | 'choice' | 'confirm' | 'number';
|
|
62
|
+
/** Allowed values when inputType is 'choice'. */
|
|
63
|
+
options?: string[];
|
|
64
|
+
placeholder?: string;
|
|
65
|
+
required: boolean;
|
|
66
|
+
defaultValue?: string;
|
|
67
|
+
/** Upstream output to show for context, when the node's showContext is set. */
|
|
68
|
+
context?: string;
|
|
69
|
+
}
|
|
70
|
+
export type StepStatus = 'running' | 'ok' | 'skip' | 'error';
|
|
71
|
+
/** One displayed piece of a step, in arrival order. `main` is the node's real
|
|
72
|
+
* output; `sub` is a composite sub-component's report (the agent's guardrails)
|
|
73
|
+
* rendered quieter; `note` is a diagnostic line (tool calls, debug echoes). */
|
|
74
|
+
export interface StepSegment {
|
|
75
|
+
kind: 'main' | 'sub' | 'note';
|
|
76
|
+
label?: string;
|
|
77
|
+
text: string;
|
|
78
|
+
}
|
|
79
|
+
export interface WorkflowStep {
|
|
80
|
+
id: string;
|
|
81
|
+
label: string;
|
|
82
|
+
nodeType: string;
|
|
83
|
+
status: StepStatus;
|
|
84
|
+
/** The node's real output (note/sub lines excluded), newline-joined. */
|
|
85
|
+
output: string;
|
|
86
|
+
/** Diagnostic lines (provider set, tool calls, debug echoes). */
|
|
87
|
+
notes: string[];
|
|
88
|
+
/** Everything the node reported, in order — what the step body renders.
|
|
89
|
+
* (Optional only because runs persisted before it existed lack it.) */
|
|
90
|
+
segments?: StepSegment[];
|
|
91
|
+
/** Skip/error explanation. */
|
|
92
|
+
reason?: string;
|
|
93
|
+
/** Workflow-level guardrail outcome (drives the shield + action badge). */
|
|
94
|
+
guardrail?: GuardrailStepInfo;
|
|
95
|
+
ms?: number;
|
|
96
|
+
inTok?: number;
|
|
97
|
+
outTok?: number;
|
|
98
|
+
cost?: number;
|
|
99
|
+
}
|
|
100
|
+
export interface WorkflowRun {
|
|
101
|
+
steps: WorkflowStep[];
|
|
102
|
+
status: 'running' | 'done' | 'error';
|
|
103
|
+
finalOutput: string;
|
|
104
|
+
totalMs: number | null;
|
|
105
|
+
error?: string;
|
|
106
|
+
/** Wall-clock start (ms epoch), used to compute totalMs on completion. */
|
|
107
|
+
startedAt: number;
|
|
108
|
+
}
|
|
109
|
+
export declare function emptyRun(startedAt: number): WorkflowRun;
|
|
110
|
+
/** Fold one event into the run, returning a new run (steps array + touched step
|
|
111
|
+
* are fresh so referential-equality checks re-render). */
|
|
112
|
+
export declare function applyWfEvent(run: WorkflowRun, e: WfEvent, now: number): WorkflowRun;
|
|
113
|
+
/** The whole run as plain text — every step's status, its segments (notes,
|
|
114
|
+
* sub-component reports, output) and reason, then the final output. This is what
|
|
115
|
+
* the Result panel's copy button yields, so a denied/empty-final-output run still
|
|
116
|
+
* copies the full log rather than nothing. */
|
|
117
|
+
export declare function runToText(run: WorkflowRun): string;
|
|
118
|
+
export interface RunTotals {
|
|
119
|
+
count: number;
|
|
120
|
+
ok: number;
|
|
121
|
+
skip: number;
|
|
122
|
+
error: number;
|
|
123
|
+
inTok: number;
|
|
124
|
+
outTok: number;
|
|
125
|
+
cost?: number;
|
|
126
|
+
}
|
|
127
|
+
export declare function runTotals(run: WorkflowRun): RunTotals;
|
|
128
|
+
//# sourceMappingURL=workflowModel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflowModel.d.ts","sourceRoot":"","sources":["../workflowModel.ts"],"names":[],"mappings":"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"}
|