@ouro.bot/cli 0.1.0-alpha.34 → 0.1.0-alpha.36

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/changelog.json CHANGED
@@ -1,6 +1,18 @@
1
1
  {
2
2
  "_note": "This changelog is maintained as part of the PR/version-bump workflow. Agent-curated, not auto-generated. Agents read this file directly via read_file to understand what changed between versions.",
3
3
  "versions": [
4
+ {
5
+ "version": "0.1.0-alpha.36",
6
+ "changes": [
7
+ "BlueBubbles now marks a chat read at the same moment it starts typing for a turn, so read receipts and typing begin together instead of the read state lagging until after the reply finishes."
8
+ ]
9
+ },
10
+ {
11
+ "version": "0.1.0-alpha.35",
12
+ "changes": [
13
+ "BlueBubbles no longer emits generic follow-up phrase bubbles like 'on it...' or 'followup...' into iMessage. The sense now uses typing plus concrete tool/error activity only, which keeps mobile turns quieter and less redundant."
14
+ ]
15
+ },
4
16
  {
5
17
  "version": "0.1.0-alpha.34",
6
18
  "changes": [
@@ -209,6 +209,18 @@ function createReplyTargetController(event) {
209
209
  },
210
210
  };
211
211
  }
212
+ function emitBlueBubblesMarkReadWarning(chat, error) {
213
+ (0, runtime_1.emitNervesEvent)({
214
+ level: "warn",
215
+ component: "senses",
216
+ event: "senses.bluebubbles_mark_read_error",
217
+ message: "failed to mark bluebubbles chat as read",
218
+ meta: {
219
+ chatGuid: chat.chatGuid ?? null,
220
+ reason: error instanceof Error ? error.message : String(error),
221
+ },
222
+ });
223
+ }
212
224
  function createBlueBubblesCallbacks(client, chat, replyTarget) {
213
225
  let textBuffer = "";
214
226
  const phrases = (0, phrases_1.getPhrases)();
@@ -217,6 +229,7 @@ function createBlueBubblesCallbacks(client, chat, replyTarget) {
217
229
  followupPhrases: phrases.followup,
218
230
  startTypingOnModelStart: true,
219
231
  suppressInitialModelStatus: true,
232
+ suppressFollowupPhraseStatus: true,
220
233
  transport: {
221
234
  sendStatus: async (text) => {
222
235
  const sent = await client.sendText({
@@ -234,7 +247,20 @@ function createBlueBubblesCallbacks(client, chat, replyTarget) {
234
247
  });
235
248
  },
236
249
  setTyping: async (active) => {
237
- await client.setTyping(chat, active);
250
+ if (!active) {
251
+ await client.setTyping(chat, false);
252
+ return;
253
+ }
254
+ const [markReadResult, typingResult] = await Promise.allSettled([
255
+ client.markChatRead(chat),
256
+ client.setTyping(chat, true),
257
+ ]);
258
+ if (markReadResult.status === "rejected") {
259
+ emitBlueBubblesMarkReadWarning(chat, markReadResult.reason);
260
+ }
261
+ if (typingResult.status === "rejected") {
262
+ throw typingResult.reason;
263
+ }
238
264
  },
239
265
  },
240
266
  onTransportError: (operation, error) => {
@@ -440,21 +466,6 @@ async function handleBlueBubblesEvent(payload, deps = {}) {
440
466
  await callbacks.flush();
441
467
  resolvedDeps.postTurn(messages, sessPath, result.usage);
442
468
  await resolvedDeps.accumulateFriendTokens(store, friendId, result.usage);
443
- try {
444
- await client.markChatRead(event.chat);
445
- }
446
- catch (error) {
447
- (0, runtime_1.emitNervesEvent)({
448
- level: "warn",
449
- component: "senses",
450
- event: "senses.bluebubbles_mark_read_error",
451
- message: "failed to mark bluebubbles chat as read",
452
- meta: {
453
- chatGuid: event.chat.chatGuid ?? null,
454
- reason: error instanceof Error ? error.message : String(error),
455
- },
456
- });
457
- }
458
469
  (0, runtime_1.emitNervesEvent)({
459
470
  component: "senses",
460
471
  event: "senses.bluebubbles_turn_end",
@@ -100,6 +100,9 @@ function createDebugActivityController(options) {
100
100
  return;
101
101
  }
102
102
  followupShown = true;
103
+ if (options.suppressFollowupPhraseStatus) {
104
+ return;
105
+ }
103
106
  setStatus(`${nextPhrase(options.followupPhrases)}...`);
104
107
  },
105
108
  onError(error) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ouro.bot/cli",
3
- "version": "0.1.0-alpha.34",
3
+ "version": "0.1.0-alpha.36",
4
4
  "main": "dist/heart/daemon/ouro-entry.js",
5
5
  "bin": {
6
6
  "cli": "dist/heart/daemon/ouro-bot-entry.js",