@femtomc/mu-core 26.2.108 → 26.2.110
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/ui.d.ts.map +1 -1
- package/dist/ui.js +74 -0
- package/package.json +1 -1
package/dist/ui.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,YAAY;;;;;;;;EAA4E,CAAC;AACtG,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD,eAAO,MAAM,mBAAmB,EAAG,CAAU,CAAC;AAsB9C,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;kBAOnB,CAAC;AACX,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;kBAMtB,CAAC;AACX,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;kBAQxB,CAAC;AACX,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;kBAQxB,CAAC;AAEX,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;kBAQ5B,CAAC;AAEX,eAAO,MAAM,wBAAwB;;;;kBAM3B,CAAC;AAEX,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAK5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,kBAAkB;;;;;EAAqD,CAAC;AACrF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,cAAc;;;;;;;;;;;;;;kBAWjB,CAAC;AACX,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,eAAO,MAAM,gBAAgB;;;kBAKnB,CAAC;AACX,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAYd,CAAC;AACX,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEhD,eAAO,MAAM,uBAAuB,qEAAsE,CAAC;AAC3G,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3E,eAAO,MAAM,aAAa;;;;;;;;;;;;kBAWhB,CAAC;AACX,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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"}
|
package/dist/ui.js
CHANGED
|
@@ -142,6 +142,14 @@ const UI_STATUS_PROFILE_COMPONENT_RECOMMENDATIONS = {
|
|
|
142
142
|
"control-flow": ["key_value"],
|
|
143
143
|
"model-routing": ["key_value", "list"],
|
|
144
144
|
};
|
|
145
|
+
const UI_PLANNING_STATUS_ROW_KEY_ALIASES = {
|
|
146
|
+
phase: ["phase"],
|
|
147
|
+
waiting: ["waiting", "waiting_on_user"],
|
|
148
|
+
confidence: ["confidence", "conf"],
|
|
149
|
+
next: ["next", "next_action"],
|
|
150
|
+
blocker: ["blocker"],
|
|
151
|
+
};
|
|
152
|
+
const UI_PLANNING_CHECKLIST_MIN_ITEMS = 3;
|
|
145
153
|
function isUiStatusProfileName(value) {
|
|
146
154
|
return UI_STATUS_PROFILE_NAMES.includes(value);
|
|
147
155
|
}
|
|
@@ -181,6 +189,69 @@ function hasProfileSnapshotCompact(profile) {
|
|
|
181
189
|
const compact = snapshot.compact;
|
|
182
190
|
return typeof compact === "string" && compact.trim().length > 0;
|
|
183
191
|
}
|
|
192
|
+
function normalizeStatusRowKey(key) {
|
|
193
|
+
return key
|
|
194
|
+
.trim()
|
|
195
|
+
.toLowerCase()
|
|
196
|
+
.replace(/[^a-z0-9]+/g, "_");
|
|
197
|
+
}
|
|
198
|
+
function keyValueStatusRows(doc) {
|
|
199
|
+
const rows = new Set();
|
|
200
|
+
for (const component of doc.components) {
|
|
201
|
+
if (component.kind !== "key_value") {
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
204
|
+
for (const row of component.rows) {
|
|
205
|
+
rows.add(normalizeStatusRowKey(row.key));
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
return rows;
|
|
209
|
+
}
|
|
210
|
+
function firstChecklistComponent(doc) {
|
|
211
|
+
for (const component of doc.components) {
|
|
212
|
+
if (component.kind === "list") {
|
|
213
|
+
return component;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return null;
|
|
217
|
+
}
|
|
218
|
+
function hasPlanningMetadataField(doc, key) {
|
|
219
|
+
const value = doc.metadata[key];
|
|
220
|
+
if (key === "waiting_on_user") {
|
|
221
|
+
return typeof value === "boolean";
|
|
222
|
+
}
|
|
223
|
+
return typeof value === "string" && value.trim().length > 0;
|
|
224
|
+
}
|
|
225
|
+
function planningStatusProfileWarnings(doc) {
|
|
226
|
+
const warnings = [];
|
|
227
|
+
const statusRows = keyValueStatusRows(doc);
|
|
228
|
+
for (const [field, aliases] of Object.entries(UI_PLANNING_STATUS_ROW_KEY_ALIASES)) {
|
|
229
|
+
const hasField = aliases.some((alias) => statusRows.has(alias));
|
|
230
|
+
if (!hasField) {
|
|
231
|
+
warnings.push(`profile.id=planning recommends key_value row key=${field}`);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
const checklist = firstChecklistComponent(doc);
|
|
235
|
+
if (checklist) {
|
|
236
|
+
if (checklist.items.length < UI_PLANNING_CHECKLIST_MIN_ITEMS) {
|
|
237
|
+
warnings.push(`profile.id=planning recommends checklist lists with at least ${UI_PLANNING_CHECKLIST_MIN_ITEMS} items`);
|
|
238
|
+
}
|
|
239
|
+
const detailedItems = checklist.items.filter((item) => typeof item.detail === "string" && item.detail.trim().length > 0).length;
|
|
240
|
+
if (detailedItems === 0) {
|
|
241
|
+
warnings.push("profile.id=planning recommends checklist item detail values (for example done/pending)");
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
if (!hasPlanningMetadataField(doc, "phase")) {
|
|
245
|
+
warnings.push("profile.id=planning recommends metadata.phase");
|
|
246
|
+
}
|
|
247
|
+
if (!hasPlanningMetadataField(doc, "waiting_on_user")) {
|
|
248
|
+
warnings.push("profile.id=planning recommends metadata.waiting_on_user");
|
|
249
|
+
}
|
|
250
|
+
if (!hasPlanningMetadataField(doc, "confidence")) {
|
|
251
|
+
warnings.push("profile.id=planning recommends metadata.confidence");
|
|
252
|
+
}
|
|
253
|
+
return warnings;
|
|
254
|
+
}
|
|
184
255
|
function uiDocCandidates(input) {
|
|
185
256
|
if (Array.isArray(input)) {
|
|
186
257
|
return input;
|
|
@@ -291,6 +362,9 @@ export function uiStatusProfileWarnings(input) {
|
|
|
291
362
|
warnings.push(`profile.id=${profileName} recommends a ${kind} component`);
|
|
292
363
|
}
|
|
293
364
|
}
|
|
365
|
+
if (profileName === "planning") {
|
|
366
|
+
warnings.push(...planningStatusProfileWarnings(doc));
|
|
367
|
+
}
|
|
294
368
|
return warnings;
|
|
295
369
|
}
|
|
296
370
|
export function normalizeUiDocs(input, opts = {}) {
|