@my-life-buddies/cli 0.16.0 → 0.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/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);
@@ -794,7 +794,7 @@
794
794
  class: "pairing-qr", src: pairing.qrCodeDataUrl, width: "256", height: "256", alt: "打开当前开发版搭子的二维码",
795
795
  }));
796
796
  copy.append(node("p", { class: "pairing-status" }, "真机入口已准备好"));
797
- copy.append(node("p", { class: "pairing-hint" }, "使用支持 App 链接的扫码工具打开。手机需安装支持预览入口的搭搭 App,并登录同一开发者账号。"));
797
+ copy.append(node("p", { class: "pairing-hint" }, "使用支持 App 链接的扫码工具打开。手机需安装支持预览入口的搭搭 App,并登录同一创造者账号。"));
798
798
  if (pairing.code) copy.append(node("p", { class: "pairing-code" }, pairing.code));
799
799
  const link = node("a", { class: "pairing-link", href: pairing.url }, pairing.url);
800
800
  copy.append(link);
@@ -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 reopenId, conversationScope;
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)) reopenId = undefined;
247
- else if (selected && (key !== scope || reloading)) reopenId = selected.id;
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 || !reopenId) return;
257
- const item = items.find(value => value.id === reopenId);
258
- reopenId = undefined;
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() { reopenId = undefined; generation++; ready = false; items = []; loading = false; failed = false; busy = false; clearTimeout(collapseTimer); close(true); render(); },
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.16.0",
3
+ "version": "0.17.1",
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.16.0",
43
- "@buddy/preview": "0.16.0"
42
+ "@buddy/cli-core": "0.17.1",
43
+ "@buddy/preview": "0.17.1"
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.17.0",
9
+ "@my-life-buddies/buddy-runtime": "0.19.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.17.0",
983
- "resolved": "https://registry.npmjs.org/@my-life-buddies/buddy-runtime/-/buddy-runtime-0.17.0.tgz",
984
- "integrity": "sha512-mhA8iNvdDcxOrhcZ1TjyZBrGkyosxbPzT2+GJKQMJD/PMGXmxGolsdRTpGQA75DOlHsZJf3/dG+OfP18H6VEZg==",
982
+ "version": "0.19.0",
983
+ "resolved": "https://registry.npmjs.org/@my-life-buddies/buddy-runtime/-/buddy-runtime-0.19.0.tgz",
984
+ "integrity": "sha512-0vQCaesl5kNHneK/FKUbIgTNKLslZo6uqqKPSsTG3pArtRvlfmcQgNf+oweSMsz0H5MoNhjxqvWeDUA741dDTg==",
985
985
  "dependencies": {
986
986
  "@earendil-works/pi-agent-core": "0.85.1",
987
987
  "@earendil-works/pi-ai": "0.85.1",
@@ -9,7 +9,7 @@
9
9
  "node": ">=24"
10
10
  },
11
11
  "dependencies": {
12
- "@my-life-buddies/buddy-runtime": "0.17.0",
12
+ "@my-life-buddies/buddy-runtime": "0.19.0",
13
13
  "typebox": "1.3.7"
14
14
  }
15
15
  }