@my-life-buddies/cli 0.17.0 → 0.17.3
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 +31 -11
- package/dist/bin/buddy.js +4 -1
- package/dist/bin/buddy.js.map +2 -2
- package/dist/bin/core.js +414 -313
- package/dist/bin/core.js.map +4 -4
- package/dist/bin/preview.js +41 -9
- package/dist/bin/preview.js.map +2 -2
- package/dist/web/app.js +1 -1
- package/dist/web/widgets.js +14 -13
- package/package.json +3 -3
- package/resources/agent-template/package-lock.json +4 -4
- package/resources/agent-template/package.json +1 -1
package/dist/web/app.js
CHANGED
|
@@ -614,7 +614,7 @@
|
|
|
614
614
|
}
|
|
615
615
|
const row = node("div", { class: "message-row", "data-role": message.role });
|
|
616
616
|
const wrap = node("div", { class: "message-content" });
|
|
617
|
-
wrap.append(message.widget && widgets ? widgets.card(message.widget) : node("div", { class: "message-bubble" }, message.text));
|
|
617
|
+
wrap.append(message.widget && widgets ? widgets.card(message.widget, message.messageId) : node("div", { class: "message-bubble" }, message.text));
|
|
618
618
|
if (message.role === "user") row.append(wrap);
|
|
619
619
|
else row.append(messageAvatar("assistant"), wrap);
|
|
620
620
|
elements.chatMessages.append(row);
|
package/dist/web/widgets.js
CHANGED
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
const overlay = document.querySelector('#widget-overlay');
|
|
27
27
|
const phone = document.querySelector('.phone-screen');
|
|
28
28
|
const device = document.querySelector('.phone');
|
|
29
|
-
let
|
|
29
|
+
let reopen, conversationScope;
|
|
30
30
|
let items = [], scope = '', generation = 0, ready = false, loading = false, lastRefresh = 0;
|
|
31
31
|
let failed = false, signature = '', selected, focusBefore, openRevision = 0, frameObserver;
|
|
32
32
|
let collapseTimer, closeTimer, loadTimer, documentFrame, documentToken, documentReady;
|
|
@@ -163,12 +163,12 @@
|
|
|
163
163
|
for (const row of [share, pin, ...(canDelete ? [remove] : [])]) { row.setAttribute('role', 'menuitem'); menu.append(row); }
|
|
164
164
|
card.append(menu); share.focus();
|
|
165
165
|
}
|
|
166
|
-
async function open(item) {
|
|
166
|
+
async function open(item, messageId) {
|
|
167
167
|
if (!item.type || !ready) return;
|
|
168
168
|
const mine = ++openRevision, current = generation;
|
|
169
169
|
if (overlay.hidden) focusBefore = document.activeElement;
|
|
170
170
|
clearTimeout(collapseTimer); clearTimeout(closeTimer); closeChoices(false); timers(); busy = false;
|
|
171
|
-
selected = item; document.querySelector('#message-input').blur();
|
|
171
|
+
selected = { ...item, messageId }; document.querySelector('#message-input').blur();
|
|
172
172
|
overlay.replaceChildren(); overlay.hidden = false; overlay.dataset.state = 'opening';
|
|
173
173
|
const card = el('section', 'widget-modal'); card.setAttribute('role', 'dialog'); card.setAttribute('aria-modal', 'true'); card.setAttribute('aria-label', item.title);
|
|
174
174
|
const header = el('header', 'widget-modal-header');
|
|
@@ -186,12 +186,13 @@
|
|
|
186
186
|
if (mine !== openRevision || current !== generation) return;
|
|
187
187
|
timers(); body.setAttribute('aria-busy', 'false');
|
|
188
188
|
const failure = el('div', 'widget-failure'); failure.setAttribute('role', 'status');
|
|
189
|
-
failure.append(el('span', 'widget-failure-mark', '!'), el('h4', '', '小挂件暂时无法打开'), el('p', '', '加载失败,请稍后重试'), button('重新加载', () => open(item)));
|
|
189
|
+
failure.append(el('span', 'widget-failure-mark', '!'), el('h4', '', '小挂件暂时无法打开'), el('p', '', '加载失败,请稍后重试'), button('重新加载', () => open(item, messageId)));
|
|
190
190
|
body.replaceChildren(failure);
|
|
191
191
|
};
|
|
192
192
|
const frame = el('iframe', 'widget-document'); frame.title = item.title; frame.setAttribute('sandbox', 'allow-scripts'); frame.referrerPolicy = 'no-referrer'; frame.style.visibility = 'hidden';
|
|
193
193
|
documentFrame = frame; documentToken = crypto.randomUUID();
|
|
194
194
|
const url = new URL(window.previewApiUrl?.(`/api/simulator/widgets/${encodeURIComponent(item.id)}`) ?? `/api/simulator/widgets/${encodeURIComponent(item.id)}`, location.href);
|
|
195
|
+
if (messageId !== undefined) url.searchParams.set('messageId', messageId);
|
|
195
196
|
url.searchParams.set('render', documentToken); frame.src = url.href;
|
|
196
197
|
documentReady = state => {
|
|
197
198
|
if (mine !== openRevision || current !== generation) return;
|
|
@@ -243,8 +244,8 @@
|
|
|
243
244
|
return {
|
|
244
245
|
update({active, conversationRevision, devRevision, reloading = false}) {
|
|
245
246
|
const key = `${conversationRevision || 0}:${devRevision || 0}`;
|
|
246
|
-
if (conversationScope !== conversationRevision || (!active && !reloading))
|
|
247
|
-
else if (selected && (key !== scope || reloading))
|
|
247
|
+
if (conversationScope !== conversationRevision || (!active && !reloading)) reopen = undefined;
|
|
248
|
+
else if (selected && (key !== scope || reloading)) reopen = { id: selected.id, messageId: selected.messageId };
|
|
248
249
|
conversationScope = conversationRevision;
|
|
249
250
|
if (key !== scope || !active) {
|
|
250
251
|
scope = key; generation++; ready = false; items = []; failed = false; loading = false; lastRefresh = 0; busy = false; documentLifecycle = false; canDelete = false;
|
|
@@ -253,14 +254,14 @@
|
|
|
253
254
|
ready = active; render();
|
|
254
255
|
const mine = generation;
|
|
255
256
|
void refresh().then(() => {
|
|
256
|
-
if (!ready || mine !== generation || !
|
|
257
|
-
const item = items.find(value => value.id ===
|
|
258
|
-
|
|
259
|
-
if (item) void open(item);
|
|
257
|
+
if (!ready || mine !== generation || !reopen) return;
|
|
258
|
+
const item = items.find(value => value.id === reopen.id), messageId = reopen.messageId;
|
|
259
|
+
reopen = undefined;
|
|
260
|
+
if (item) void open(item, messageId);
|
|
260
261
|
});
|
|
261
262
|
},
|
|
262
|
-
reset() {
|
|
263
|
-
card(item) {
|
|
263
|
+
reset() { reopen = undefined; generation++; ready = false; items = []; loading = false; failed = false; busy = false; clearTimeout(collapseTimer); close(true); render(); },
|
|
264
|
+
card(item, messageId) {
|
|
264
265
|
const card = el('div', 'widget-entry'); card.append(el('h4', '', item.title));
|
|
265
266
|
const details = el('div', 'widget-entry-details');
|
|
266
267
|
if (item.type && item.imageMediaId) {
|
|
@@ -269,7 +270,7 @@
|
|
|
269
270
|
image.addEventListener('error', () => { image.hidden = true; }); details.append(image);
|
|
270
271
|
}
|
|
271
272
|
details.append(el('p', item.type && item.summary?.trim() ? '' : 'widget-secondary', item.type ? item.summary?.trim() || '打开查看最新内容' : '此小挂件已删除或不可用')); card.append(details);
|
|
272
|
-
if (item.type) card.append(button('去查看', () => open(item), 'widget-entry-open'));
|
|
273
|
+
if (item.type) card.append(button('去查看', () => open(item, messageId), 'widget-entry-open'));
|
|
273
274
|
const permission = {owner:'可管理、分享',editor:'可编辑',viewer:'仅支持查看'}[item.role];
|
|
274
275
|
const metadata = el('div', 'widget-entry-metadata');
|
|
275
276
|
if (item.creatorName?.trim()) metadata.append(el('span', 'widget-creator', `${item.creatorName.trim()}创建`));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@my-life-buddies/cli",
|
|
3
|
-
"version": "0.17.
|
|
3
|
+
"version": "0.17.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "搭搭 Developer Platform 命令行工具",
|
|
6
6
|
"publishConfig": {
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"ws": "8.21.3"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
|
-
"@buddy/cli-core": "0.17.
|
|
43
|
-
"@buddy/preview": "0.17.
|
|
42
|
+
"@buddy/cli-core": "0.17.3",
|
|
43
|
+
"@buddy/preview": "0.17.3"
|
|
44
44
|
}
|
|
45
45
|
}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"": {
|
|
7
7
|
"version": "0.0.0",
|
|
8
8
|
"dependencies": {
|
|
9
|
-
"@my-life-buddies/buddy-runtime": "0.
|
|
9
|
+
"@my-life-buddies/buddy-runtime": "0.20.0",
|
|
10
10
|
"typebox": "1.3.7"
|
|
11
11
|
},
|
|
12
12
|
"engines": {
|
|
@@ -979,9 +979,9 @@
|
|
|
979
979
|
}
|
|
980
980
|
},
|
|
981
981
|
"node_modules/@my-life-buddies/buddy-runtime": {
|
|
982
|
-
"version": "0.
|
|
983
|
-
"resolved": "https://registry.npmjs.org/@my-life-buddies/buddy-runtime/-/buddy-runtime-0.
|
|
984
|
-
"integrity": "sha512-
|
|
982
|
+
"version": "0.20.0",
|
|
983
|
+
"resolved": "https://registry.npmjs.org/@my-life-buddies/buddy-runtime/-/buddy-runtime-0.20.0.tgz",
|
|
984
|
+
"integrity": "sha512-jsAdsc7U83hxPOwjyeI06TzeGZ0Mb2Rpu4y8553yYCsRNp4G4/zX3Cm8bJOJQvGhmhTEIEa518jVrrmDWJnmrQ==",
|
|
985
985
|
"dependencies": {
|
|
986
986
|
"@earendil-works/pi-agent-core": "0.85.1",
|
|
987
987
|
"@earendil-works/pi-ai": "0.85.1",
|