@xemahq/ui-kernel 0.15.0 → 0.16.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.
Files changed (29) hide show
  1. package/dist/session-kit/decisions/DecisionCard.d.ts +21 -0
  2. package/dist/session-kit/decisions/DecisionCard.d.ts.map +1 -0
  3. package/dist/session-kit/decisions/DecisionCard.js +242 -0
  4. package/dist/session-kit/decisions/DecisionCard.js.map +1 -0
  5. package/dist/session-kit/decisions/DecisionReplyForm.d.ts +13 -0
  6. package/dist/session-kit/decisions/DecisionReplyForm.d.ts.map +1 -0
  7. package/dist/session-kit/decisions/DecisionReplyForm.js +53 -0
  8. package/dist/session-kit/decisions/DecisionReplyForm.js.map +1 -0
  9. package/dist/session-kit/decisions/DecisionsQueue.d.ts +20 -0
  10. package/dist/session-kit/decisions/DecisionsQueue.d.ts.map +1 -0
  11. package/dist/session-kit/decisions/DecisionsQueue.js +42 -0
  12. package/dist/session-kit/decisions/DecisionsQueue.js.map +1 -0
  13. package/dist/session-kit/decisions/decision-model.d.ts +87 -0
  14. package/dist/session-kit/decisions/decision-model.d.ts.map +1 -0
  15. package/dist/session-kit/decisions/decision-model.js +75 -0
  16. package/dist/session-kit/decisions/decision-model.js.map +1 -0
  17. package/dist/session-kit/decisions/index.d.ts +6 -0
  18. package/dist/session-kit/decisions/index.d.ts.map +1 -0
  19. package/dist/session-kit/decisions/index.js +6 -0
  20. package/dist/session-kit/decisions/index.js.map +1 -0
  21. package/dist/session-kit/decisions/reply-schema.d.ts +28 -0
  22. package/dist/session-kit/decisions/reply-schema.d.ts.map +1 -0
  23. package/dist/session-kit/decisions/reply-schema.js +127 -0
  24. package/dist/session-kit/decisions/reply-schema.js.map +1 -0
  25. package/dist/session-kit/index.d.ts +1 -0
  26. package/dist/session-kit/index.d.ts.map +1 -1
  27. package/dist/session-kit/index.js +1 -0
  28. package/dist/session-kit/index.js.map +1 -1
  29. package/package.json +1 -1
@@ -0,0 +1,21 @@
1
+ import { type ReactElement, type ReactNode } from 'react';
2
+ import { type DecisionView } from './decision-model';
3
+ export interface DecisionCommitIntent {
4
+ readonly decisionId: string;
5
+ readonly optionKey: string;
6
+ readonly note?: string;
7
+ readonly reply?: Record<string, unknown>;
8
+ }
9
+ export interface DecisionCardProps {
10
+ readonly decision: DecisionView;
11
+ readonly onCommit: (intent: DecisionCommitIntent) => void;
12
+ readonly onRetract?: (decisionId: string, commitId: string) => void;
13
+ readonly onDefer?: (decisionId: string) => void;
14
+ readonly onOpenLink?: (href: string) => void;
15
+ readonly isBusy?: boolean;
16
+ readonly error?: string | null;
17
+ readonly slot?: ReactNode;
18
+ readonly compact?: boolean;
19
+ }
20
+ export declare function DecisionCard({ decision, onCommit, onRetract, onDefer, onOpenLink, isBusy, error, slot, compact, }: DecisionCardProps): ReactElement;
21
+ //# sourceMappingURL=DecisionCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DecisionCard.d.ts","sourceRoot":"","sources":["../../../src/session-kit/decisions/DecisionCard.tsx"],"names":[],"mappings":"AA+BA,OAAO,EAAqB,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE7E,OAAO,EAUL,KAAK,YAAY,EAClB,MAAM,kBAAkB,CAAC;AAM1B,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAEhC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAE1D,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAEpE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAEhD,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAE7C,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAE1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE/B,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAE1B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAaD,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,OAAO,EACP,UAAU,EACV,MAAc,EACd,KAAY,EACZ,IAAI,EACJ,OAAe,GAChB,EAAE,iBAAiB,GAAG,YAAY,CAoVlC"}
@@ -0,0 +1,242 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useMemo, useState } from 'react';
3
+ import { buildDecisionTrail, decisionToneColor, describeDecisionOptionEffect, describeDecisionOutcome, describeDecisionStatus, formatDecisionTime, hasQuorum, isOptionCommittable, } from './decision-model';
4
+ import { DecisionReplyForm } from './DecisionReplyForm';
5
+ import { missingRequiredFields, parseReplySchema } from './reply-schema';
6
+ import { isSafeDecisionDeepLink } from '@xemahq/kernel-contracts/decision';
7
+ function safeHref(value) {
8
+ if (typeof value !== 'string')
9
+ return null;
10
+ return isSafeDecisionDeepLink(value) ? value : null;
11
+ }
12
+ export function DecisionCard({ decision, onCommit, onRetract, onDefer, onOpenLink, isBusy = false, error = null, slot, compact = false, }) {
13
+ const presentation = describeDecisionStatus(decision.status);
14
+ const accent = decisionToneColor(presentation.tone);
15
+ const trail = useMemo(() => buildDecisionTrail(decision), [decision]);
16
+ const deepLink = safeHref(decision.deepLink);
17
+ const [openOptionKey, setOpenOptionKey] = useState(null);
18
+ const [replyDrafts, setReplyDrafts] = useState({});
19
+ const [rawDrafts, setRawDrafts] = useState({});
20
+ const [notes, setNotes] = useState({});
21
+ const [localError, setLocalError] = useState(null);
22
+ function commit(option) {
23
+ const parsed = parseReplySchema(option.replySchema);
24
+ const note = notes[option.key]?.trim() ?? '';
25
+ let reply;
26
+ if (parsed !== null) {
27
+ if (parsed.kind === 'raw') {
28
+ const text = rawDrafts[option.key]?.trim() ?? '';
29
+ if (text.length === 0) {
30
+ setLocalError('This option needs a reply.');
31
+ return;
32
+ }
33
+ try {
34
+ const value = JSON.parse(text);
35
+ if (typeof value !== 'object' ||
36
+ value === null ||
37
+ Array.isArray(value)) {
38
+ setLocalError('The reply must be a JSON object.');
39
+ return;
40
+ }
41
+ reply = value;
42
+ }
43
+ catch {
44
+ setLocalError('That is not valid JSON.');
45
+ return;
46
+ }
47
+ }
48
+ else {
49
+ const draft = replyDrafts[option.key] ?? {};
50
+ const missing = missingRequiredFields(parsed.fields, draft);
51
+ if (missing.length > 0) {
52
+ setLocalError(`Still needed: ${missing.join(', ')}.`);
53
+ return;
54
+ }
55
+ reply = Object.fromEntries(Object.entries(draft).filter(([, v]) => v !== undefined && v !== ''));
56
+ }
57
+ }
58
+ setLocalError(null);
59
+ onCommit({
60
+ decisionId: decision.id,
61
+ optionKey: option.key,
62
+ ...(note.length > 0 ? { note } : {}),
63
+ ...(reply !== undefined ? { reply } : {}),
64
+ });
65
+ }
66
+ return (_jsx("section", { role: "status", "aria-label": `Decision: ${decision.title}`, style: {
67
+ borderRadius: 12,
68
+ overflow: 'hidden',
69
+ border: '1px solid hsl(var(--rule-2))',
70
+ background: 'hsl(var(--paper-elev))',
71
+ boxShadow: 'var(--shadow-2)',
72
+ }, children: _jsxs("div", { style: { display: 'flex' }, children: [_jsx("div", { style: { width: 3, flexShrink: 0, background: accent } }), _jsxs("div", { style: { flex: 1, minWidth: 0 }, children: [_jsxs("header", { style: {
73
+ padding: '11px 14px 9px',
74
+ borderBottom: '1px solid hsl(var(--rule))',
75
+ }, children: [_jsxs("div", { style: {
76
+ display: 'flex',
77
+ alignItems: 'center',
78
+ gap: 8,
79
+ marginBottom: 6,
80
+ flexWrap: 'wrap',
81
+ }, children: [_jsx("span", { className: "cap", style: { color: accent, letterSpacing: '0.1em', fontSize: 10 }, children: presentation.label }), _jsx("span", { className: "mono", style: { fontSize: 10.5, color: 'hsl(var(--ink-4))' }, children: decision.producerService }), _jsx("span", { style: { flex: 1 } }), decision.deadlineAt ? (_jsxs("span", { style: { fontSize: 11, color: 'hsl(var(--ink-3))' }, children: ["by ", formatDecisionTime(decision.deadlineAt)] })) : null] }), _jsx("h3", { className: "serif", style: {
82
+ margin: 0,
83
+ fontSize: 15,
84
+ fontWeight: 600,
85
+ color: 'hsl(var(--ink))',
86
+ lineHeight: 1.3,
87
+ }, children: decision.title }), decision.summary ? (_jsx("p", { style: {
88
+ margin: '2px 0 0',
89
+ fontSize: 12.5,
90
+ color: 'hsl(var(--ink-3))',
91
+ }, children: decision.summary })) : null, slot] }), !compact && decision.facts.length > 0 ? (_jsx("dl", { style: {
92
+ margin: 0,
93
+ padding: '10px 14px',
94
+ display: 'grid',
95
+ gridTemplateColumns: 'auto 1fr',
96
+ columnGap: 12,
97
+ rowGap: 4,
98
+ background: 'hsl(var(--paper) / 0.5)',
99
+ borderBottom: '1px solid hsl(var(--rule))',
100
+ }, children: decision.facts.map((fact, i) => {
101
+ const href = safeHref(fact.href);
102
+ return (_jsx(FactRow, { label: fact.label, value: fact.value, href: href, onOpenLink: onOpenLink }, `${fact.label}:${i}`));
103
+ }) })) : null, deepLink ? (_jsx("div", { style: { padding: '8px 14px 0' }, children: _jsx(LinkAffordance, { href: deepLink, label: "Open where this came from", onOpenLink: onOpenLink }) })) : null, _jsx("div", { style: {
104
+ padding: '10px 14px',
105
+ display: 'flex',
106
+ flexDirection: 'column',
107
+ gap: 10,
108
+ }, children: decision.options.map((option) => (_jsx(OptionRow, { decision: decision, option: option, isBusy: isBusy, expanded: openOptionKey === option.key, onToggle: () => setOpenOptionKey((k) => (k === option.key ? null : option.key)), note: notes[option.key] ?? '', onNoteChange: (v) => setNotes((n) => ({ ...n, [option.key]: v })), replyDraft: replyDrafts[option.key] ?? {}, onReplyDraftChange: (v) => setReplyDrafts((d) => ({ ...d, [option.key]: v })), rawDraft: rawDrafts[option.key] ?? '', onRawDraftChange: (v) => setRawDrafts((d) => ({ ...d, [option.key]: v })), onCommit: () => commit(option) }, option.key))) }), presentation.terminal && decision.outcome ? (_jsx("p", { style: {
109
+ margin: 0,
110
+ padding: '8px 14px',
111
+ borderTop: '1px solid hsl(var(--rule))',
112
+ fontSize: 12,
113
+ color: 'hsl(var(--ink-2))',
114
+ }, children: describeDecisionOutcome(decision.outcome) })) : null, trail.length > 0 ? (_jsxs("div", { style: {
115
+ padding: '8px 14px',
116
+ borderTop: '1px solid hsl(var(--rule))',
117
+ }, children: [_jsx("span", { className: "cap", style: { fontSize: 9.5, color: 'hsl(var(--ink-4))' }, children: "Answers" }), _jsx("ul", { style: {
118
+ listStyle: 'none',
119
+ margin: '4px 0 0',
120
+ padding: 0,
121
+ display: 'flex',
122
+ flexDirection: 'column',
123
+ gap: 3,
124
+ }, children: trail.map((entry) => (_jsxs("li", { style: { fontSize: 12, color: 'hsl(var(--ink-2))' }, children: [_jsx("strong", { style: { fontWeight: 600 }, children: entry.actor }), ' ', entry.optionLabel, " ", entry.at, entry.note ? (_jsxs("span", { style: { color: 'hsl(var(--ink-3))' }, children: [' ', "\u2014 ", entry.note] })) : null, onRetract && decision.answerable ? (_jsx("button", { type: "button", onClick: () => onRetract(decision.id, entry.id), disabled: isBusy, style: {
125
+ marginLeft: 6,
126
+ background: 'transparent',
127
+ border: 'none',
128
+ padding: 0,
129
+ fontSize: 11.5,
130
+ color: 'hsl(var(--ink-3))',
131
+ textDecoration: 'underline',
132
+ cursor: isBusy ? 'not-allowed' : 'pointer',
133
+ }, children: "take back" })) : null] }, entry.id))) })] })) : null, onDefer && decision.answerable ? (_jsx("div", { style: {
134
+ padding: '8px 14px',
135
+ borderTop: '1px solid hsl(var(--rule))',
136
+ }, children: _jsx("button", { type: "button", onClick: () => onDefer(decision.id), disabled: isBusy, style: {
137
+ background: 'transparent',
138
+ border: 'none',
139
+ padding: 0,
140
+ fontSize: 12,
141
+ color: 'hsl(var(--ink-3))',
142
+ textDecoration: 'underline',
143
+ cursor: isBusy ? 'not-allowed' : 'pointer',
144
+ }, children: "Snooze this" }) })) : null, localError ?? error ? (_jsx("p", { role: "alert", style: {
145
+ margin: 0,
146
+ padding: '8px 14px',
147
+ borderTop: '1px solid hsl(var(--rule))',
148
+ fontSize: 12,
149
+ color: 'hsl(var(--destructive))',
150
+ }, children: localError ?? error })) : null] })] }) }));
151
+ }
152
+ function FactRow({ label, value, href, onOpenLink, }) {
153
+ return (_jsxs(_Fragment, { children: [_jsx("dt", { className: "cap", style: { fontSize: 10, color: 'hsl(var(--ink-4))', paddingTop: 1 }, children: label }), _jsx("dd", { style: {
154
+ margin: 0,
155
+ fontSize: 12.5,
156
+ color: 'hsl(var(--ink-2))',
157
+ minWidth: 0,
158
+ overflowWrap: 'anywhere',
159
+ }, children: href ? (_jsx(LinkAffordance, { href: href, label: value, onOpenLink: onOpenLink })) : (value) })] }));
160
+ }
161
+ function LinkAffordance({ href, label, onOpenLink, }) {
162
+ return (_jsx("a", { href: href, onClick: (e) => {
163
+ if (!onOpenLink)
164
+ return;
165
+ if (e.metaKey || e.ctrlKey || e.shiftKey || e.altKey || e.button !== 0) {
166
+ return;
167
+ }
168
+ e.preventDefault();
169
+ onOpenLink(href);
170
+ }, style: { color: 'hsl(var(--primary))', textDecoration: 'underline' }, children: label }));
171
+ }
172
+ function OptionRow({ decision, option, isBusy, expanded, onToggle, note, onNoteChange, replyDraft, onReplyDraftChange, rawDraft, onRawDraftChange, onCommit, }) {
173
+ const parsed = useMemo(() => parseReplySchema(option.replySchema), [option.replySchema]);
174
+ const committable = isOptionCommittable(decision, option);
175
+ const settled = decision.settledOptionKey === option.key;
176
+ return (_jsxs("div", { style: {
177
+ border: `1px solid ${settled ? 'hsl(var(--success) / 0.35)' : 'hsl(var(--rule))'}`,
178
+ borderRadius: 9,
179
+ padding: '9px 11px',
180
+ background: settled ? 'hsl(var(--success) / 0.06)' : 'transparent',
181
+ }, children: [_jsxs("div", { style: {
182
+ display: 'flex',
183
+ alignItems: 'flex-start',
184
+ gap: 10,
185
+ flexWrap: 'wrap',
186
+ }, children: [_jsxs("div", { style: { flex: 1, minWidth: 160 }, children: [_jsx("div", { style: { fontSize: 13, fontWeight: 600, color: 'hsl(var(--ink))' }, children: option.label }), _jsxs("div", { style: { fontSize: 11.5, color: 'hsl(var(--ink-3))' }, children: [describeDecisionOptionEffect(option.effect), hasQuorum(option) ? (_jsxs(_Fragment, { children: [' · ', _jsxs("span", { className: "mono", children: [option.commitCount, "/", option.commitThreshold] }), ' ', "committed"] })) : null] }), option.description ? (_jsx("p", { style: {
187
+ margin: '3px 0 0',
188
+ fontSize: 12,
189
+ color: 'hsl(var(--ink-3))',
190
+ }, children: option.description })) : null] }), parsed !== null ? (_jsx("button", { type: "button", onClick: onToggle, "aria-expanded": expanded, style: {
191
+ background: 'transparent',
192
+ border: '1px solid hsl(var(--rule))',
193
+ borderRadius: 7,
194
+ padding: '4px 9px',
195
+ fontSize: 12,
196
+ color: 'hsl(var(--ink-2))',
197
+ cursor: 'pointer',
198
+ }, children: expanded ? 'Hide reply' : 'Reply…' })) : null, _jsx("button", { type: "button", onClick: onCommit, disabled: !committable || isBusy, title: option.committedByYou
199
+ ? 'You already committed this option.'
200
+ : undefined, style: {
201
+ background: committable
202
+ ? 'hsl(var(--primary))'
203
+ : 'hsl(var(--muted))',
204
+ color: committable
205
+ ? 'hsl(var(--primary-foreground))'
206
+ : 'hsl(var(--ink-3))',
207
+ border: '1px solid transparent',
208
+ borderRadius: 7,
209
+ padding: '5px 11px',
210
+ fontSize: 12.5,
211
+ fontWeight: 550,
212
+ cursor: committable && !isBusy ? 'pointer' : 'not-allowed',
213
+ opacity: committable && !isBusy ? 1 : 0.6,
214
+ }, children: option.committedByYou ? 'Your answer' : option.label })] }), option.executable ? (_jsx(ExecutablePreview, { capabilityRef: option.capabilityRef ?? null, capabilityArguments: option.capabilityArguments ?? null })) : null, parsed !== null && expanded ? (_jsx("div", { style: { marginTop: 9 }, children: _jsx(DecisionReplyForm, { parsed: parsed, value: replyDraft, onChange: onReplyDraftChange, rawText: rawDraft, onRawTextChange: onRawDraftChange, disabled: !committable || isBusy }) })) : null, expanded ? (_jsx("input", { type: "text", value: note, disabled: !committable || isBusy, placeholder: "Add a note (optional)", onChange: (e) => onNoteChange(e.target.value), style: {
215
+ marginTop: 8,
216
+ width: '100%',
217
+ boxSizing: 'border-box',
218
+ padding: '6px 8px',
219
+ fontSize: 12.5,
220
+ borderRadius: 7,
221
+ border: '1px solid hsl(var(--rule))',
222
+ background: 'hsl(var(--paper))',
223
+ color: 'hsl(var(--ink))',
224
+ } })) : null] }));
225
+ }
226
+ function ExecutablePreview({ capabilityRef, capabilityArguments, }) {
227
+ return (_jsxs("div", { style: {
228
+ marginTop: 8,
229
+ padding: '7px 9px',
230
+ borderRadius: 7,
231
+ border: '1px dashed hsl(var(--rule))',
232
+ background: 'hsl(var(--muted) / 0.5)',
233
+ }, children: [_jsx("span", { className: "cap", style: { fontSize: 9.5, color: 'hsl(var(--ink-4))' }, children: "Committing this runs" }), _jsx("div", { className: "mono", style: { fontSize: 11.5, color: 'hsl(var(--ink-2))', marginTop: 2 }, children: capabilityRef ??
234
+ 'a capability this record does not name — ask the producer before answering' }), capabilityArguments ? (_jsx("pre", { className: "mono", style: {
235
+ margin: '5px 0 0',
236
+ fontSize: 11,
237
+ color: 'hsl(var(--ink-3))',
238
+ whiteSpace: 'pre-wrap',
239
+ overflowWrap: 'anywhere',
240
+ }, children: JSON.stringify(capabilityArguments, null, 2) })) : null] }));
241
+ }
242
+ //# sourceMappingURL=DecisionCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DecisionCard.js","sourceRoot":"","sources":["../../../src/session-kit/decisions/DecisionCard.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { type ReactElement } from 'react';
2
+ import { type ParsedReplySchema } from './reply-schema';
3
+ export interface DecisionReplyFormProps {
4
+ readonly parsed: ParsedReplySchema;
5
+ readonly value: Readonly<Record<string, unknown>>;
6
+ readonly onChange: (next: Record<string, unknown>) => void;
7
+ readonly rawText: string;
8
+ readonly onRawTextChange: (next: string) => void;
9
+ readonly rawError?: string | null;
10
+ readonly disabled?: boolean;
11
+ }
12
+ export declare function DecisionReplyForm({ parsed, value, onChange, rawText, onRawTextChange, rawError, disabled, }: DecisionReplyFormProps): ReactElement;
13
+ //# sourceMappingURL=DecisionReplyForm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DecisionReplyForm.d.ts","sourceRoot":"","sources":["../../../src/session-kit/decisions/DecisionReplyForm.tsx"],"names":[],"mappings":"AAYA,OAAO,EAA2B,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAEnE,OAAO,EAEL,KAAK,iBAAiB,EAEvB,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAEnC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAClD,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAE3D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAEjD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAqBD,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,KAAK,EACL,QAAQ,EACR,OAAO,EACP,eAAe,EACf,QAAQ,EACR,QAAgB,GACjB,EAAE,sBAAsB,GAAG,YAAY,CAuCvC"}
@@ -0,0 +1,53 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useId } from 'react';
3
+ import { ReplyFieldKind, } from './reply-schema';
4
+ const LABEL_STYLE = {
5
+ display: 'block',
6
+ fontSize: 11.5,
7
+ fontWeight: 600,
8
+ color: 'hsl(var(--ink-2))',
9
+ marginBottom: 3,
10
+ };
11
+ const CONTROL_STYLE = {
12
+ width: '100%',
13
+ boxSizing: 'border-box',
14
+ padding: '6px 8px',
15
+ fontSize: 12.5,
16
+ borderRadius: 7,
17
+ border: '1px solid hsl(var(--rule))',
18
+ background: 'hsl(var(--paper))',
19
+ color: 'hsl(var(--ink))',
20
+ };
21
+ export function DecisionReplyForm({ parsed, value, onChange, rawText, onRawTextChange, rawError, disabled = false, }) {
22
+ if (parsed.kind === 'raw') {
23
+ return (_jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 4 }, children: [_jsx("span", { style: { fontSize: 11.5, color: 'hsl(var(--ink-3))' }, children: parsed.reason }), _jsx("textarea", { value: rawText, disabled: disabled, rows: 4, spellCheck: false, onChange: (e) => onRawTextChange(e.target.value), style: { ...CONTROL_STYLE, fontFamily: 'var(--font-mono, monospace)' } }), rawError ? (_jsx("span", { style: { fontSize: 11.5, color: 'hsl(var(--destructive))' }, children: rawError })) : null] }));
24
+ }
25
+ return (_jsx("div", { style: { display: 'flex', flexDirection: 'column', gap: 9 }, children: parsed.fields.map((field) => (_jsx(ReplyFieldControl, { field: field, value: value[field.name], disabled: disabled, onChange: (next) => onChange({ ...value, [field.name]: next }) }, field.name))) }));
26
+ }
27
+ function ReplyFieldControl({ field, value, disabled, onChange, }) {
28
+ const id = useId();
29
+ return (_jsxs("div", { children: [_jsxs("label", { htmlFor: id, style: LABEL_STYLE, children: [field.label, field.required ? (_jsxs("span", { style: { color: 'hsl(var(--destructive))' }, "aria-hidden": true, children: [' ', "*"] })) : null] }), field.description ? (_jsx("p", { style: {
30
+ fontSize: 11,
31
+ color: 'hsl(var(--ink-3))',
32
+ margin: '0 0 4px',
33
+ }, children: field.description })) : null, _jsx(FieldControl, { id: id, field: field, value: value, disabled: disabled, onChange: onChange })] }));
34
+ }
35
+ function FieldControl({ id, field, value, disabled, onChange, }) {
36
+ const required = field.required;
37
+ switch (field.kind) {
38
+ case ReplyFieldKind.Boolean:
39
+ return (_jsx("input", { id: id, type: "checkbox", disabled: disabled, checked: value === true, onChange: (e) => onChange(e.target.checked) }));
40
+ case ReplyFieldKind.Number:
41
+ return (_jsx("input", { id: id, type: "number", required: required, disabled: disabled, value: typeof value === 'number' ? String(value) : '', onChange: (e) => {
42
+ const raw = e.target.value;
43
+ onChange(raw === '' ? undefined : Number(raw));
44
+ }, style: CONTROL_STYLE }));
45
+ case ReplyFieldKind.Enum:
46
+ return (_jsxs("select", { id: id, required: required, disabled: disabled, value: typeof value === 'string' ? value : '', onChange: (e) => onChange(e.target.value === '' ? undefined : e.target.value), style: CONTROL_STYLE, children: [_jsx("option", { value: "", children: "Choose\u2026" }), (field.options ?? []).map((o) => (_jsx("option", { value: o, children: o }, o)))] }));
47
+ case ReplyFieldKind.Text:
48
+ return (_jsx("textarea", { id: id, required: required, disabled: disabled, rows: 3, value: typeof value === 'string' ? value : '', onChange: (e) => onChange(e.target.value), style: CONTROL_STYLE }));
49
+ case ReplyFieldKind.String:
50
+ return (_jsx("input", { id: id, type: "text", required: required, disabled: disabled, value: typeof value === 'string' ? value : '', onChange: (e) => onChange(e.target.value), style: CONTROL_STYLE }));
51
+ }
52
+ }
53
+ //# sourceMappingURL=DecisionReplyForm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DecisionReplyForm.js","sourceRoot":"","sources":["../../../src/session-kit/decisions/DecisionReplyForm.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { type ReactElement, type ReactNode } from 'react';
2
+ import { type DecisionCommitIntent } from './DecisionCard';
3
+ import type { DecisionView } from './decision-model';
4
+ export interface DecisionsQueueProps {
5
+ readonly decisions: readonly DecisionView[];
6
+ readonly onCommit: (intent: DecisionCommitIntent) => void;
7
+ readonly onRetract?: (decisionId: string, commitId: string) => void;
8
+ readonly onDefer?: (decisionId: string) => void;
9
+ readonly onOpenLink?: (href: string) => void;
10
+ readonly busyIds?: readonly string[];
11
+ readonly errors?: Readonly<Record<string, string>>;
12
+ readonly isLoading?: boolean;
13
+ readonly emptyState?: ReactNode;
14
+ readonly hasMore?: boolean;
15
+ readonly onLoadMore?: () => void;
16
+ readonly grouped?: boolean;
17
+ readonly compact?: boolean;
18
+ }
19
+ export declare function DecisionsQueue({ decisions, onCommit, onRetract, onDefer, onOpenLink, busyIds, errors, isLoading, emptyState, hasMore, onLoadMore, grouped, compact, }: DecisionsQueueProps): ReactElement;
20
+ //# sourceMappingURL=DecisionsQueue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DecisionsQueue.d.ts","sourceRoot":"","sources":["../../../src/session-kit/decisions/DecisionsQueue.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAW,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEnE,OAAO,EAAgB,KAAK,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,SAAS,EAAE,SAAS,YAAY,EAAE,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAC1D,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACpE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAE7C,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAErC,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAE7B,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC;IAEhC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IAEjC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,QAAQ,EACR,SAAS,EACT,OAAO,EACP,UAAU,EACV,OAAO,EACP,MAAM,EACN,SAAiB,EACjB,UAAU,EACV,OAAe,EACf,UAAU,EACV,OAAe,EACf,OAAe,GAChB,EAAE,mBAAmB,GAAG,YAAY,CAuFpC"}
@@ -0,0 +1,42 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useMemo } from 'react';
3
+ import { DecisionCard } from './DecisionCard';
4
+ export function DecisionsQueue({ decisions, onCommit, onRetract, onDefer, onOpenLink, busyIds, errors, isLoading = false, emptyState, hasMore = false, onLoadMore, grouped = false, compact = false, }) {
5
+ const busy = useMemo(() => new Set(busyIds ?? []), [busyIds]);
6
+ const groups = useMemo(() => (grouped ? groupByProducer(decisions) : null), [grouped, decisions]);
7
+ if (decisions.length === 0) {
8
+ return (_jsx("div", { style: { padding: '18px 0' }, children: isLoading ? (_jsx("p", { style: { fontSize: 12.5, color: 'hsl(var(--ink-3))', margin: 0 }, children: "Loading decisions\u2026" })) : ((emptyState ?? (_jsx("p", { style: { fontSize: 12.5, color: 'hsl(var(--ink-3))', margin: 0 }, children: "Nothing is waiting on you." })))) }));
9
+ }
10
+ function renderCard(decision) {
11
+ return (_jsx(DecisionCard, { decision: decision, onCommit: onCommit, ...(onRetract ? { onRetract } : {}), ...(onDefer ? { onDefer } : {}), ...(onOpenLink ? { onOpenLink } : {}), isBusy: busy.has(decision.id), error: errors?.[decision.id] ?? null, compact: compact }, decision.id));
12
+ }
13
+ return (_jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 12 }, children: [groups
14
+ ? groups.map(([producer, items]) => (_jsxs("section", { children: [_jsx("h4", { className: "cap", style: {
15
+ margin: '0 0 6px',
16
+ fontSize: 10,
17
+ letterSpacing: '0.1em',
18
+ color: 'hsl(var(--ink-4))',
19
+ }, children: producer }), _jsx("div", { style: { display: 'flex', flexDirection: 'column', gap: 10 }, children: items.map(renderCard) })] }, producer)))
20
+ : decisions.map(renderCard), hasMore && onLoadMore ? (_jsx("button", { type: "button", onClick: onLoadMore, disabled: isLoading, style: {
21
+ alignSelf: 'flex-start',
22
+ background: 'transparent',
23
+ border: '1px solid hsl(var(--rule))',
24
+ borderRadius: 7,
25
+ padding: '5px 11px',
26
+ fontSize: 12.5,
27
+ color: 'hsl(var(--ink-2))',
28
+ cursor: isLoading ? 'not-allowed' : 'pointer',
29
+ }, children: isLoading ? 'Loading…' : 'Load more' })) : null] }));
30
+ }
31
+ function groupByProducer(decisions) {
32
+ const groups = new Map();
33
+ for (const d of decisions) {
34
+ const existing = groups.get(d.producerService);
35
+ if (existing)
36
+ existing.push(d);
37
+ else
38
+ groups.set(d.producerService, [d]);
39
+ }
40
+ return [...groups.entries()];
41
+ }
42
+ //# sourceMappingURL=DecisionsQueue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DecisionsQueue.js","sourceRoot":"","sources":["../../../src/session-kit/decisions/DecisionsQueue.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ import type { DecisionDeadlineEffect, DecisionKind, DecisionOptionEffect, DecisionOutcome, DecisionSettlement, DecisionStatus } from '@xemahq/kernel-contracts/decision';
2
+ export type WireValueOf<E extends string> = `${E}`;
3
+ export type DecisionStatusValue = WireValueOf<DecisionStatus>;
4
+ export type DecisionOutcomeValue = WireValueOf<DecisionOutcome>;
5
+ export type DecisionKindValue = WireValueOf<DecisionKind>;
6
+ export type DecisionOptionEffectValue = WireValueOf<DecisionOptionEffect>;
7
+ export type DecisionSettlementValue = WireValueOf<DecisionSettlement>;
8
+ export type DecisionDeadlineEffectValue = WireValueOf<DecisionDeadlineEffect>;
9
+ export interface DecisionFactView {
10
+ readonly label: string;
11
+ readonly value: string;
12
+ readonly href?: string | null;
13
+ }
14
+ export interface DecisionOptionView {
15
+ readonly key: string;
16
+ readonly label: string;
17
+ readonly description?: string | null;
18
+ readonly effect: DecisionOptionEffectValue;
19
+ readonly executable: boolean;
20
+ readonly capabilityRef?: string | null;
21
+ readonly capabilityArguments?: Record<string, unknown> | null;
22
+ readonly replySchema?: Record<string, unknown> | null;
23
+ readonly commitCount: number;
24
+ readonly commitThreshold: number;
25
+ readonly committedByYou: boolean;
26
+ }
27
+ export interface DecisionCommitView {
28
+ readonly id: string;
29
+ readonly optionKey: string;
30
+ readonly optionEffect: DecisionOptionEffectValue;
31
+ readonly committedBy: string;
32
+ readonly committedAt: string;
33
+ readonly note?: string | null;
34
+ readonly reply?: Record<string, unknown> | null;
35
+ }
36
+ export interface DecisionView {
37
+ readonly id: string;
38
+ readonly kind: DecisionKindValue;
39
+ readonly settlement: DecisionSettlementValue;
40
+ readonly title: string;
41
+ readonly summary?: string | null;
42
+ readonly facts: readonly DecisionFactView[];
43
+ readonly deepLink?: string | null;
44
+ readonly producerService: string;
45
+ readonly producerRef?: string | null;
46
+ readonly status: DecisionStatusValue;
47
+ readonly answerable: boolean;
48
+ readonly outcome?: DecisionOutcomeValue | null;
49
+ readonly settledOptionKey?: string | null;
50
+ readonly deadlineAt?: string | null;
51
+ readonly deadlineEffect: DecisionDeadlineEffectValue;
52
+ readonly deferredUntil?: string | null;
53
+ readonly options: readonly DecisionOptionView[];
54
+ readonly commits: readonly DecisionCommitView[];
55
+ readonly createdAt: string;
56
+ readonly updatedAt: string;
57
+ readonly revision: number;
58
+ }
59
+ export declare enum DecisionTone {
60
+ Waiting = "waiting",
61
+ Muted = "muted",
62
+ Settled = "settled",
63
+ Lapsed = "lapsed"
64
+ }
65
+ interface DecisionStatusPresentation {
66
+ readonly label: string;
67
+ readonly tone: DecisionTone;
68
+ readonly terminal: boolean;
69
+ }
70
+ export declare function describeDecisionStatus(status: DecisionStatusValue): DecisionStatusPresentation;
71
+ export declare function decisionToneColor(tone: DecisionTone): string;
72
+ export declare function describeDecisionOutcome(outcome: DecisionOutcomeValue): string;
73
+ export declare function describeDecisionOptionEffect(effect: DecisionOptionEffectValue): string;
74
+ export declare function hasQuorum(option: DecisionOptionView): boolean;
75
+ export declare function isOptionCommittable(decision: DecisionView, option: DecisionOptionView): boolean;
76
+ export declare function formatDecisionTime(iso: string): string;
77
+ export interface DecisionTrailEntry {
78
+ readonly id: string;
79
+ readonly actor: string;
80
+ readonly optionLabel: string;
81
+ readonly at: string;
82
+ readonly note?: string | null;
83
+ readonly reply?: Record<string, unknown> | null;
84
+ }
85
+ export declare function buildDecisionTrail(decision: DecisionView): readonly DecisionTrailEntry[];
86
+ export {};
87
+ //# sourceMappingURL=decision-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decision-model.d.ts","sourceRoot":"","sources":["../../../src/session-kit/decisions/decision-model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ export var DecisionTone;
2
+ (function (DecisionTone) {
3
+ DecisionTone["Waiting"] = "waiting";
4
+ DecisionTone["Muted"] = "muted";
5
+ DecisionTone["Settled"] = "settled";
6
+ DecisionTone["Lapsed"] = "lapsed";
7
+ })(DecisionTone || (DecisionTone = {}));
8
+ const STATUS_PRESENTATION = {
9
+ OPEN: { label: 'Waiting on an answer', tone: DecisionTone.Waiting, terminal: false },
10
+ DEFERRED: { label: 'Snoozed', tone: DecisionTone.Muted, terminal: false },
11
+ LAPSED: { label: 'Past its window — still answerable', tone: DecisionTone.Lapsed, terminal: false },
12
+ COMMITTED: { label: 'Answered', tone: DecisionTone.Settled, terminal: true },
13
+ EXPIRED: { label: 'Expired unanswered', tone: DecisionTone.Muted, terminal: true },
14
+ CLOSED: { label: 'Closed by the producer', tone: DecisionTone.Muted, terminal: true },
15
+ };
16
+ export function describeDecisionStatus(status) {
17
+ return (STATUS_PRESENTATION[status] ?? {
18
+ label: status,
19
+ tone: DecisionTone.Muted,
20
+ terminal: false,
21
+ });
22
+ }
23
+ const TONE_COLOR = {
24
+ [DecisionTone.Waiting]: 'hsl(var(--primary))',
25
+ [DecisionTone.Muted]: 'hsl(var(--ink-3))',
26
+ [DecisionTone.Settled]: 'hsl(var(--success))',
27
+ [DecisionTone.Lapsed]: 'hsl(var(--warning))',
28
+ };
29
+ export function decisionToneColor(tone) {
30
+ return TONE_COLOR[tone];
31
+ }
32
+ const OUTCOME_LABEL = {
33
+ COMMITTED_ACTION: 'An option was committed and the producer will act',
34
+ COMMITTED_NO_ACTION: 'Decided to do nothing — permanent',
35
+ WITHDRAWN: 'The answer is no longer needed',
36
+ NO_JUDGEMENT: 'Nobody answered — the producer may re-ask',
37
+ };
38
+ export function describeDecisionOutcome(outcome) {
39
+ return OUTCOME_LABEL[outcome] ?? outcome;
40
+ }
41
+ const EFFECT_LABEL = {
42
+ SETTLING_ACT: 'settles this and acts',
43
+ SETTLING_NO_ACT: 'settles this as a deliberate no-op',
44
+ ADDITIVE: 'records your answer, leaves this open',
45
+ };
46
+ export function describeDecisionOptionEffect(effect) {
47
+ return EFFECT_LABEL[effect] ?? effect;
48
+ }
49
+ export function hasQuorum(option) {
50
+ return option.commitThreshold > 1;
51
+ }
52
+ export function isOptionCommittable(decision, option) {
53
+ return decision.answerable && !option.committedByYou;
54
+ }
55
+ export function formatDecisionTime(iso) {
56
+ const at = new Date(iso);
57
+ if (Number.isNaN(at.getTime()))
58
+ return iso;
59
+ return at.toLocaleTimeString(undefined, {
60
+ hour: '2-digit',
61
+ minute: '2-digit',
62
+ });
63
+ }
64
+ export function buildDecisionTrail(decision) {
65
+ const labels = new Map(decision.options.map((o) => [o.key, o.label]));
66
+ return [...decision.commits].reverse().map((c) => ({
67
+ id: c.id,
68
+ actor: c.committedBy,
69
+ optionLabel: labels.get(c.optionKey) ?? c.optionKey,
70
+ at: formatDecisionTime(c.committedAt),
71
+ note: c.note ?? null,
72
+ reply: c.reply ?? null,
73
+ }));
74
+ }
75
+ //# sourceMappingURL=decision-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decision-model.js","sourceRoot":"","sources":["../../../src/session-kit/decisions/decision-model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export * from './decision-model';
2
+ export * from './reply-schema';
3
+ export * from './DecisionReplyForm';
4
+ export * from './DecisionCard';
5
+ export * from './DecisionsQueue';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/session-kit/decisions/index.ts"],"names":[],"mappings":"AAeA,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from './decision-model';
2
+ export * from './reply-schema';
3
+ export * from './DecisionReplyForm';
4
+ export * from './DecisionCard';
5
+ export * from './DecisionsQueue';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/session-kit/decisions/index.ts"],"names":[],"mappings":"AAeA,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,28 @@
1
+ export declare enum ReplyFieldKind {
2
+ String = "string",
3
+ Text = "text",
4
+ Number = "number",
5
+ Boolean = "boolean",
6
+ Enum = "enum"
7
+ }
8
+ export interface ReplyField {
9
+ readonly name: string;
10
+ readonly kind: ReplyFieldKind;
11
+ readonly label: string;
12
+ readonly description?: string;
13
+ readonly required: boolean;
14
+ readonly options?: readonly string[];
15
+ readonly placeholder?: string;
16
+ }
17
+ export interface ParsedReplyFields {
18
+ readonly kind: 'fields';
19
+ readonly fields: readonly ReplyField[];
20
+ }
21
+ export interface ParsedReplyRaw {
22
+ readonly kind: 'raw';
23
+ readonly reason: string;
24
+ }
25
+ export type ParsedReplySchema = ParsedReplyFields | ParsedReplyRaw;
26
+ export declare function parseReplySchema(schema: Record<string, unknown> | null | undefined): ParsedReplySchema | null;
27
+ export declare function missingRequiredFields(fields: readonly ReplyField[], value: Readonly<Record<string, unknown>>): readonly string[];
28
+ //# sourceMappingURL=reply-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reply-schema.d.ts","sourceRoot":"","sources":["../../../src/session-kit/decisions/reply-schema.ts"],"names":[],"mappings":"AA+BA,oBAAY,cAAc;IACxB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,IAAI,SAAS;CACd;AAED,MAAM,WAAW,UAAU;IAEzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAE9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAE3B,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAErC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;CACxC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAErB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,iBAAiB,GAAG,iBAAiB,GAAG,cAAc,CAAC;AAsFnE,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,GACjD,iBAAiB,GAAG,IAAI,CAkD1B;AAUD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,UAAU,EAAE,EAC7B,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,SAAS,MAAM,EAAE,CAUnB"}
@@ -0,0 +1,127 @@
1
+ export var ReplyFieldKind;
2
+ (function (ReplyFieldKind) {
3
+ ReplyFieldKind["String"] = "string";
4
+ ReplyFieldKind["Text"] = "text";
5
+ ReplyFieldKind["Number"] = "number";
6
+ ReplyFieldKind["Boolean"] = "boolean";
7
+ ReplyFieldKind["Enum"] = "enum";
8
+ })(ReplyFieldKind || (ReplyFieldKind = {}));
9
+ const MULTILINE_MIN_LENGTH = 120;
10
+ function isRecord(value) {
11
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
12
+ }
13
+ function stringOrUndefined(value) {
14
+ return typeof value === 'string' && value.length > 0 ? value : undefined;
15
+ }
16
+ const UNSUPPORTED_KEYWORDS = [
17
+ '$ref',
18
+ 'oneOf',
19
+ 'anyOf',
20
+ 'allOf',
21
+ 'not',
22
+ 'patternProperties',
23
+ 'dependentSchemas',
24
+ ];
25
+ function unsupportedKeyword(schema) {
26
+ return UNSUPPORTED_KEYWORDS.find((k) => schema[k] !== undefined);
27
+ }
28
+ function parseField(name, raw, required) {
29
+ if (!isRecord(raw))
30
+ return undefined;
31
+ if (unsupportedKeyword(raw) !== undefined)
32
+ return undefined;
33
+ const label = stringOrUndefined(raw['title']) ?? name;
34
+ const description = stringOrUndefined(raw['description']);
35
+ const base = {
36
+ name,
37
+ label,
38
+ required,
39
+ ...(description !== undefined ? { description } : {}),
40
+ };
41
+ const enumValues = raw['enum'];
42
+ if (Array.isArray(enumValues)) {
43
+ if (enumValues.length === 0)
44
+ return undefined;
45
+ if (!enumValues.every((v) => typeof v === 'string')) {
46
+ return undefined;
47
+ }
48
+ return { ...base, kind: ReplyFieldKind.Enum, options: enumValues };
49
+ }
50
+ const type = raw['type'];
51
+ if (type === 'string') {
52
+ const maxLength = raw['maxLength'];
53
+ const multiline = typeof maxLength === 'number' && maxLength >= MULTILINE_MIN_LENGTH;
54
+ return {
55
+ ...base,
56
+ kind: multiline ? ReplyFieldKind.Text : ReplyFieldKind.String,
57
+ };
58
+ }
59
+ if (type === 'number' || type === 'integer') {
60
+ return { ...base, kind: ReplyFieldKind.Number };
61
+ }
62
+ if (type === 'boolean') {
63
+ return { ...base, kind: ReplyFieldKind.Boolean };
64
+ }
65
+ return undefined;
66
+ }
67
+ export function parseReplySchema(schema) {
68
+ if (schema === null || schema === undefined)
69
+ return null;
70
+ const unsupported = unsupportedKeyword(schema);
71
+ if (unsupported !== undefined) {
72
+ return {
73
+ kind: 'raw',
74
+ reason: `This reply uses \`${unsupported}\`, which this form cannot draw. Enter the reply as JSON.`,
75
+ };
76
+ }
77
+ if (schema['type'] !== undefined && schema['type'] !== 'object') {
78
+ return {
79
+ kind: 'raw',
80
+ reason: 'This reply is not a JSON object. Enter it as JSON.',
81
+ };
82
+ }
83
+ const properties = schema['properties'];
84
+ if (!isRecord(properties)) {
85
+ return {
86
+ kind: 'raw',
87
+ reason: 'This reply declares no named fields. Enter it as JSON.',
88
+ };
89
+ }
90
+ const requiredRaw = schema['required'];
91
+ const required = new Set(Array.isArray(requiredRaw)
92
+ ? requiredRaw.filter((v) => typeof v === 'string')
93
+ : []);
94
+ const fields = [];
95
+ for (const [name, raw] of Object.entries(properties)) {
96
+ const field = parseField(name, raw, required.has(name));
97
+ if (field === undefined) {
98
+ return {
99
+ kind: 'raw',
100
+ reason: `The field \`${name}\` has a shape this form cannot draw. Enter the whole reply as JSON so nothing is dropped.`,
101
+ };
102
+ }
103
+ fields.push(field);
104
+ }
105
+ if (fields.length === 0) {
106
+ return {
107
+ kind: 'raw',
108
+ reason: 'This reply declares no named fields. Enter it as JSON.',
109
+ };
110
+ }
111
+ return { kind: 'fields', fields };
112
+ }
113
+ export function missingRequiredFields(fields, value) {
114
+ return fields
115
+ .filter((f) => {
116
+ if (!f.required)
117
+ return false;
118
+ const v = value[f.name];
119
+ if (v === undefined || v === null)
120
+ return true;
121
+ if (typeof v === 'string')
122
+ return v.trim().length === 0;
123
+ return false;
124
+ })
125
+ .map((f) => f.label);
126
+ }
127
+ //# sourceMappingURL=reply-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reply-schema.js","sourceRoot":"","sources":["../../../src/session-kit/decisions/reply-schema.ts"],"names":[],"mappings":"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"}
@@ -18,4 +18,5 @@ export * from './display/TodoChecklist';
18
18
  export * from './combobox/Combobox';
19
19
  export * from './combobox/use-click-outside';
20
20
  export * from './approvals';
21
+ export * from './decisions';
21
22
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session-kit/index.ts"],"names":[],"mappings":"AAeA,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAI7C,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session-kit/index.ts"],"names":[],"mappings":"AAeA,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAI7C,cAAc,aAAa,CAAC;AAQ5B,cAAc,aAAa,CAAC"}
@@ -18,4 +18,5 @@ export * from './display/TodoChecklist';
18
18
  export * from './combobox/Combobox';
19
19
  export * from './combobox/use-click-outside';
20
20
  export * from './approvals';
21
+ export * from './decisions';
21
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/session-kit/index.ts"],"names":[],"mappings":"AAeA,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAI7C,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/session-kit/index.ts"],"names":[],"mappings":"AAeA,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAI7C,cAAc,aAAa,CAAC;AAQ5B,cAAc,aAAa,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xemahq/ui-kernel",
3
- "version": "0.15.0",
3
+ "version": "0.16.0",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "description": "Host-framework-agnostic UI kernel for the Xema OS. Defines the SystemBus orchestration contract (capability.invoke, cross-biome intents, command palette, xema:// deeplinks, window manager) AND the biome-host contract surface (FrontendBiome/FrontendBiomeFactory, HostBridge, the singleton biomeRegistry, session contributions) that every frontend biome composes against. No Vite, Next.js, or React-Router — React itself IS allowed as the shared component model (the contracts traffic in ReactNode/ComponentType and a React context). Concrete host adapters (router/auth/toast wiring) live in separate packages that consume this kernel. The SystemBus is pure orchestration: it never authorizes, the backend capability-router enforces all policy.",