@ai-matrx/desktop-protocol 0.21.67 → 0.21.68
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.md +24 -0
- package/dist/client.cjs +18 -4
- package/dist/client.cjs.map +1 -1
- package/dist/client.js +18 -4
- package/dist/client.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,7 +1,21 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.21.68
|
|
4
|
+
|
|
5
|
+
UNVERIFIED: this release has no Unreleased entry and the source comparison could not be made (the caller supplied no source comparison). Whether source changed is unknown; consumer action is unknown.
|
|
6
|
+
Check the package's gitHead on npm against this version's gitHead: `git diff <previous gitHead> <this gitHead> -- apps/shared/desktop-protocol/src`.
|
|
7
|
+
|
|
3
8
|
## 0.21.67
|
|
4
9
|
|
|
10
|
+
SOURCE CHANGED WITH NO RELEASE NOTE. This release shipped source changes that nobody described in an Unreleased entry,
|
|
11
|
+
so they may include breaking API changes. Consumer action is UNKNOWN: read the diff before upgrading.
|
|
12
|
+
Diff: `git diff c483bfa702 8cbdd93fc9 -- apps/shared/desktop-protocol/src`
|
|
13
|
+
|
|
14
|
+
Changed shipped source files (1):
|
|
15
|
+
- `apps/shared/desktop-protocol/src/schema/audio.ts`
|
|
16
|
+
|
|
17
|
+
## 0.21.66
|
|
18
|
+
|
|
5
19
|
- **Protocol 1.67 — Matrx Local's local_mac_apps and local_windows_ps contracts, carried whole (2026-10-21).** Every parameter and result field those two dispatchers had now has a home: `mail.send` `bcc`; `mail.accounts` `mailboxes`; `messages.list` `contact` / `unread_only` (+ `read`, `service`, `chat_name`); `messages.chats` `last_message`; `contacts.search` without a `query` (the first `limit`); `calendar.list` `calendars` (+ `url`); `reminders.list` `lists` (+ `priority`, `completed_at_ms`); `photos.search` `media_type` (+ `media_type`, `duration_s`); `photos.get` `thumbnail_size` (+ `thumbnail_png_base64`); `location.get` `altitude_m`, `vertical_accuracy_m`, `speed_mps`, `course_deg`; `windows.services` `status`; `windows.service_control` `pause` / `resume`; `windows.event_log` `source`; `windows.features` `installed_only`. Optional; result fields stripped for a 1.66 peer by `forPeer`. Consumer action: Matrx 2's core serves them (matrx-desktop test/unit/legacy-contract-parity.test.ts).
|
|
6
20
|
- **Protocol 1.66 — matrx-local's window and audio contracts on Matrx 2 (2026-10-21).** `window.list` takes `app` (owning app name substring, local_window's app_filter); `window.minimize` takes `mode` minimize / maximize / restore (local_window's window_action) and echoes it; `audio.record` takes `channels` and `sample_rate` and reports both; `audio.play` takes `device_id` (an output from audio.devices). Optional fields only, in FIELDS_SINCE; an older core refuses the new params as INVALID_PARAMS. Consumer action: none.
|
|
7
21
|
- **Protocol 1.65 — "Continued from <account>" is a transcript item (2026-10-21).** `CodingTranscriptItem` gains `continued` (`id`, `from`, `text`, `at`): the line across a coding chat where it moved from another account (@ai-matrx/coding-sessions emits it where it used to emit an info `notice`). `forPeer` sends a 1.64 peer's `coding.history` / `coding.transcript.read` each as that `notice`, so its strict union never refuses the whole transcript. Consumer action: draw it as a divider at its place (the coding-sessions screen does).
|
|
@@ -11,6 +25,16 @@
|
|
|
11
25
|
- **Protocol 1.61 — where a chat's title shows (2026-10-20).** `ChatRow.title_sync` (`ChatTitleSync`: `state` synced / not_synced / unsupported, and a `note`): the title facet's sync state for the chat's app, so a screen can say honestly whether the app shows the person's name. Optional; stripped for a 1.60 peer by `forPeer`. Consumer action: none.
|
|
12
26
|
- **Shared code ships once per side (2026-10-18).** Built `splitting: false`, the root, `/frame` and `/client` each carried their own copy of 44 shared modules. ESM now builds them in one split pass (`chunk-server-*.js`, no banner); `/react` builds alone, stamped. CJS unsplit; declarations per group. ESM JS 610,843 -> 398,722 bytes; root + `/client` together 597 KB -> 390 KB; `/frame` stays zod-free (6 KB); every entry's export names identical (ESM and CJS). Guard: `../scripts/check-ships-once.mjs`, run in `build`. Consumer action: none.
|
|
13
27
|
|
|
28
|
+
## 0.21.65
|
|
29
|
+
|
|
30
|
+
- **Protocol 1.66 — matrx-local's window and audio contracts on Matrx 2 (2026-10-21).** `window.list` takes `app` (owning app name substring, local_window's app_filter); `window.minimize` takes `mode` minimize / maximize / restore (local_window's window_action) and echoes it; `audio.record` takes `channels` and `sample_rate` and reports both; `audio.play` takes `device_id` (an output from audio.devices). Optional fields only, in FIELDS_SINCE; an older core refuses the new params as INVALID_PARAMS. Consumer action: none.
|
|
31
|
+
- **Protocol 1.65 — "Continued from <account>" is a transcript item (2026-10-21).** `CodingTranscriptItem` gains `continued` (`id`, `from`, `text`, `at`): the line across a coding chat where it moved from another account (@ai-matrx/coding-sessions emits it where it used to emit an info `notice`). `forPeer` sends a 1.64 peer's `coding.history` / `coding.transcript.read` each as that `notice`, so its strict union never refuses the whole transcript. Consumer action: draw it as a divider at its place (the coding-sessions screen does).
|
|
32
|
+
- **Protocol 1.64 — agent versions in Matrx 2 (2026-10-21).** New ops `account.agents.versions` (an agent's saved versions: number, age, note; the current version), `account.agents.version_diff` (one version and the current one as agent-definition records for `@ai-matrx/agents/versions/react` AgentDiffViewer) and `account.agents.restore_version` (`agx_promote_version`). New ops only; an older peer never sees them. Consumer action: none.
|
|
33
|
+
- **Protocol 1.63 — a chat's instance, and what an instance record lacks (2026-10-21).** `ChatRow.home` (`ChatPlace`): the instance whose folder holds the chat, read only (Claude: the side window holding its newest record copy, else main; Codex: the home whose database holds it). `AppInstance.missing` (`InstanceGap[]`: account / email / version): what the record still lacks after Matrx filled what it remembered (Matrx 2 ledger D10). Optional; stripped for a 1.62 peer by `forPeer`. Consumer action: none.
|
|
34
|
+
- **Protocol 1.62 — moves as records (2026-10-20).** `ChatRow.moved` (`ChatMove[]`, newest first: `kind` move / copy, `from`, `to`, `at_ms`, `back_at_ms`): every Move and Copy of a chat between instances as Matrx recorded it, so a screen reads where a chat went and whether it came back from the record, never from a project named "From X". Optional; stripped for a 1.61 peer by `forPeer`. Consumer action: none.
|
|
35
|
+
- **Protocol 1.61 — where a chat's title shows (2026-10-20).** `ChatRow.title_sync` (`ChatTitleSync`: `state` synced / not_synced / unsupported, and a `note`): the title facet's sync state for the chat's app, so a screen can say honestly whether the app shows the person's name. Optional; stripped for a 1.60 peer by `forPeer`. Consumer action: none.
|
|
36
|
+
- **Shared code ships once per side (2026-10-18).** Built `splitting: false`, the root, `/frame` and `/client` each carried their own copy of 44 shared modules. ESM now builds them in one split pass (`chunk-server-*.js`, no banner); `/react` builds alone, stamped. CJS unsplit; declarations per group. ESM JS 610,843 -> 398,722 bytes; root + `/client` together 597 KB -> 390 KB; `/frame` stays zod-free (6 KB); every entry's export names identical (ESM and CJS). Guard: `../scripts/check-ships-once.mjs`, run in `build`. Consumer action: none.
|
|
37
|
+
|
|
14
38
|
## 0.21.64
|
|
15
39
|
|
|
16
40
|
SOURCE CHANGED WITH NO RELEASE NOTE. This release shipped source changes that nobody described in an Unreleased entry,
|
package/dist/client.cjs
CHANGED
|
@@ -5013,6 +5013,13 @@ function createDesktopClient(options) {
|
|
|
5013
5013
|
const listeners = /* @__PURE__ */ new Set();
|
|
5014
5014
|
const readyWaiters = /* @__PURE__ */ new Set();
|
|
5015
5015
|
const pending = /* @__PURE__ */ new Map();
|
|
5016
|
+
const abandoned = /* @__PURE__ */ new Set();
|
|
5017
|
+
const ABANDONED_MAX = 1024;
|
|
5018
|
+
function abandon(id) {
|
|
5019
|
+
if (!sendJson({ id, type: "cancel" })) return;
|
|
5020
|
+
abandoned.add(id);
|
|
5021
|
+
if (abandoned.size > ABANDONED_MAX) abandoned.delete(abandoned.values().next().value);
|
|
5022
|
+
}
|
|
5016
5023
|
const streams = /* @__PURE__ */ new Map();
|
|
5017
5024
|
const bySid = /* @__PURE__ */ new Map();
|
|
5018
5025
|
const eventHandlers = /* @__PURE__ */ new Map();
|
|
@@ -5131,6 +5138,7 @@ function createDesktopClient(options) {
|
|
|
5131
5138
|
const stopped = rule !== null && (rule.action === "stop" || rule.action === "reauth" && authRefusals >= 2);
|
|
5132
5139
|
const terminal = stopped && rule ? rule : void 0;
|
|
5133
5140
|
const lost = error ?? (terminal ? new DesktopProtocolError(terminal.error[0], terminal.error[1]) : rule && rule.action === "reauth" ? new DesktopProtocolError(rule.error[0], rule.error[1], { retryable: true }) : new DesktopProtocolError("DEVICE_OFFLINE", "Connection lost", { retryable: true }));
|
|
5141
|
+
abandoned.clear();
|
|
5134
5142
|
for (const [id, p] of pending) {
|
|
5135
5143
|
pending.delete(id);
|
|
5136
5144
|
p.cleanup();
|
|
@@ -5234,7 +5242,10 @@ function createDesktopClient(options) {
|
|
|
5234
5242
|
const s = streams.get(msg.id);
|
|
5235
5243
|
if (s) return onStreamResult(s, msg.result);
|
|
5236
5244
|
const p = pending.get(msg.id);
|
|
5237
|
-
if (!p)
|
|
5245
|
+
if (!p) {
|
|
5246
|
+
if (abandoned.delete(msg.id)) return;
|
|
5247
|
+
return diagnose({ kind: "unknown_request", id: msg.id, type: msg.type });
|
|
5248
|
+
}
|
|
5238
5249
|
pending.delete(msg.id);
|
|
5239
5250
|
p.cleanup();
|
|
5240
5251
|
p.resolve(msg.result);
|
|
@@ -5251,7 +5262,10 @@ function createDesktopClient(options) {
|
|
|
5251
5262
|
return endStream(s, null, error);
|
|
5252
5263
|
}
|
|
5253
5264
|
const p = pending.get(msg.id);
|
|
5254
|
-
if (!p)
|
|
5265
|
+
if (!p) {
|
|
5266
|
+
if (abandoned.delete(msg.id)) return;
|
|
5267
|
+
return diagnose({ kind: "unknown_request", id: msg.id, type: msg.type });
|
|
5268
|
+
}
|
|
5255
5269
|
pending.delete(msg.id);
|
|
5256
5270
|
p.cleanup();
|
|
5257
5271
|
p.reject(error);
|
|
@@ -5482,13 +5496,13 @@ function createDesktopClient(options) {
|
|
|
5482
5496
|
const timer = timers.setTimeout(() => {
|
|
5483
5497
|
pending.delete(id);
|
|
5484
5498
|
cleanup();
|
|
5485
|
-
|
|
5499
|
+
abandon(id);
|
|
5486
5500
|
reject(new DesktopProtocolError("TIMEOUT", `${op} timed out`, { retryable: true }));
|
|
5487
5501
|
}, timeoutMs);
|
|
5488
5502
|
const onAbort = () => {
|
|
5489
5503
|
pending.delete(id);
|
|
5490
5504
|
cleanup();
|
|
5491
|
-
|
|
5505
|
+
abandon(id);
|
|
5492
5506
|
reject(new DesktopProtocolError("CANCELLED", "Aborted"));
|
|
5493
5507
|
};
|
|
5494
5508
|
function cleanup() {
|