@ai-matrx/desktop-protocol 0.16.1 → 0.17.0

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 CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.17.0 (protocol 1.6)
4
+
5
+ - The `audio` capability: `audio.devices` (microphones and speakers), `audio.record` (a clip to a
6
+ WAV file, with its loudest sample so silence is visible), `audio.play` (a file).
7
+ - TOOL_CATALOG: desktop_audio is built; group 2 is complete.
8
+
9
+ Consumer action: none (new ops only; an older app answers UNKNOWN_OPERATION).
10
+
3
11
  ## 0.16.1
4
12
 
5
13
  - `coding.plan_missing` / `coding.import_next`: `credentials` may be null (nobody signed in); the
package/dist/client.cjs CHANGED
@@ -126,7 +126,7 @@ var import_zod2 = require("zod");
126
126
  // src/schema/primitives.ts
127
127
  var import_zod = require("zod");
128
128
  var PROTOCOL_MAJOR = 1;
129
- var PROTOCOL_MINOR = 5;
129
+ var PROTOCOL_MINOR = 6;
130
130
  var PROTOCOL_VERSION = `${PROTOCOL_MAJOR}.${PROTOCOL_MINOR}`;
131
131
  var ProtocolVersion = import_zod.z.string().regex(/^[1-9][0-9]{0,2}\.[0-9]{1,3}$/);
132
132
  var RequestId = import_zod.z.string().min(1).max(64).regex(/^[A-Za-z0-9_-]+$/);
@@ -1109,117 +1109,147 @@ var PowerPreventSleepResult = import_zod17.z.strictObject({
1109
1109
  awake_until_ms: epochMs.nullable()
1110
1110
  });
1111
1111
 
1112
- // src/schema/resources.ts
1112
+ // src/schema/audio.ts
1113
1113
  var import_zod18 = require("zod");
1114
- var ResourcesDisk = import_zod18.z.strictObject({
1114
+ var AudioDevice = import_zod18.z.strictObject({
1115
+ /** The OS's name for it, as audio.record takes it. */
1116
+ id: import_zod18.z.string().min(1).max(256),
1117
+ name: import_zod18.z.string().max(256),
1118
+ default: import_zod18.z.boolean()
1119
+ });
1120
+ var AudioDevicesParams = import_zod18.z.strictObject({});
1121
+ var AudioDevicesResult = import_zod18.z.strictObject({
1122
+ inputs: import_zod18.z.array(AudioDevice).max(64),
1123
+ outputs: import_zod18.z.array(AudioDevice).max(64)
1124
+ });
1125
+ var AudioRecordParams = import_zod18.z.strictObject({
1126
+ seconds: import_zod18.z.number().min(0.5).max(600),
1127
+ /** The microphone (from audio.devices); the default input when absent. */
1128
+ device_id: import_zod18.z.string().min(1).max(256).optional(),
1129
+ /** Where the WAV file goes; a new file in the temp folder when absent. */
1130
+ path: AbsPath.optional()
1131
+ });
1132
+ var AudioRecordResult = import_zod18.z.strictObject({
1133
+ path: AbsPath,
1134
+ seconds: import_zod18.z.number().min(0),
1135
+ bytes: nonNegInt,
1136
+ /** Loudest sample, 0–1: 0 means the device gave silence. */
1137
+ peak: import_zod18.z.number().min(0).max(1)
1138
+ });
1139
+ var AudioPlayParams = import_zod18.z.strictObject({ path: AbsPath });
1140
+ var AudioPlayResult = import_zod18.z.strictObject({ path: AbsPath, seconds: import_zod18.z.number().min(0) });
1141
+
1142
+ // src/schema/resources.ts
1143
+ var import_zod19 = require("zod");
1144
+ var ResourcesDisk = import_zod19.z.strictObject({
1115
1145
  /** Where it is mounted ("/", "C:"). */
1116
- mount: import_zod18.z.string().max(512),
1146
+ mount: import_zod19.z.string().max(512),
1117
1147
  /** The file system ("apfs", "NTFS", "ext4"). */
1118
- fs: import_zod18.z.string().max(64),
1148
+ fs: import_zod19.z.string().max(64),
1119
1149
  size_bytes: nonNegInt,
1120
1150
  used_bytes: nonNegInt,
1121
1151
  available_bytes: nonNegInt
1122
1152
  });
1123
- var ResourcesSnapshotParams = import_zod18.z.strictObject({});
1124
- var ResourcesSnapshotResult = import_zod18.z.strictObject({
1125
- cpu: import_zod18.z.strictObject({
1153
+ var ResourcesSnapshotParams = import_zod19.z.strictObject({});
1154
+ var ResourcesSnapshotResult = import_zod19.z.strictObject({
1155
+ cpu: import_zod19.z.strictObject({
1126
1156
  /** Busy share of all cores, 0–100, measured now. */
1127
- percent: import_zod18.z.number().min(0).max(100),
1128
- cores: import_zod18.z.int().min(1),
1157
+ percent: import_zod19.z.number().min(0).max(100),
1158
+ cores: import_zod19.z.int().min(1),
1129
1159
  /** 1, 5 and 15 minute load averages; null on Windows. */
1130
- load: import_zod18.z.array(import_zod18.z.number().min(0)).length(3).nullable()
1160
+ load: import_zod19.z.array(import_zod19.z.number().min(0)).length(3).nullable()
1131
1161
  }),
1132
- memory: import_zod18.z.strictObject({ total_bytes: nonNegInt, used_bytes: nonNegInt, available_bytes: nonNegInt }),
1133
- swap: import_zod18.z.strictObject({ total_bytes: nonNegInt, used_bytes: nonNegInt }),
1134
- disks: import_zod18.z.array(ResourcesDisk).max(64),
1162
+ memory: import_zod19.z.strictObject({ total_bytes: nonNegInt, used_bytes: nonNegInt, available_bytes: nonNegInt }),
1163
+ swap: import_zod19.z.strictObject({ total_bytes: nonNegInt, used_bytes: nonNegInt }),
1164
+ disks: import_zod19.z.array(ResourcesDisk).max(64),
1135
1165
  uptime_seconds: nonNegInt
1136
1166
  });
1137
1167
 
1138
1168
  // src/schema/fs-watch.ts
1139
- var import_zod19 = require("zod");
1140
- var FsWatchId = import_zod19.z.string().regex(/^fw_[A-Za-z0-9]{12,40}$/);
1141
- var FsWatchStartParams = import_zod19.z.strictObject({
1169
+ var import_zod20 = require("zod");
1170
+ var FsWatchId = import_zod20.z.string().regex(/^fw_[A-Za-z0-9]{12,40}$/);
1171
+ var FsWatchStartParams = import_zod20.z.strictObject({
1142
1172
  path: AbsPath,
1143
- recursive: import_zod19.z.boolean().default(true),
1173
+ recursive: import_zod20.z.boolean().default(true),
1144
1174
  /** Globs relative to `path` whose changes are not reported (".git/**", "node_modules/**"). */
1145
- ignore: import_zod19.z.array(import_zod19.z.string().max(256)).max(64).default([])
1175
+ ignore: import_zod20.z.array(import_zod20.z.string().max(256)).max(64).default([])
1146
1176
  });
1147
- var FsWatchStartResult = import_zod19.z.strictObject({
1177
+ var FsWatchStartResult = import_zod20.z.strictObject({
1148
1178
  watch_id: FsWatchId,
1149
1179
  path: AbsPath,
1150
1180
  /** The watch ends by itself if nobody reads it for 30 minutes. */
1151
1181
  expires_at_ms: epochMs
1152
1182
  });
1153
- var FsWatchEventsParams = import_zod19.z.strictObject({
1183
+ var FsWatchEventsParams = import_zod20.z.strictObject({
1154
1184
  watch_id: FsWatchId,
1155
1185
  /** Wait up to this long for a first change when none is waiting (0 answers at once). */
1156
- wait_ms: import_zod19.z.int().min(0).max(25e3).default(0)
1186
+ wait_ms: import_zod20.z.int().min(0).max(25e3).default(0)
1157
1187
  });
1158
- var FsWatchEventsResult = import_zod19.z.strictObject({
1188
+ var FsWatchEventsResult = import_zod20.z.strictObject({
1159
1189
  /** What changed since the last read, oldest first; re-checked against the disk when read. */
1160
- changes: import_zod19.z.array(FsChange).max(1e3),
1190
+ changes: import_zod20.z.array(FsChange).max(1e3),
1161
1191
  /** Changes were dropped (more than 1000 waited): list the folder again. */
1162
- overflow: import_zod19.z.boolean(),
1192
+ overflow: import_zod20.z.boolean(),
1163
1193
  expires_at_ms: epochMs
1164
1194
  });
1165
- var FsWatchStopParams = import_zod19.z.strictObject({ watch_id: FsWatchId });
1166
- var FsWatchStopResult = import_zod19.z.strictObject({ watch_id: FsWatchId });
1195
+ var FsWatchStopParams = import_zod20.z.strictObject({ watch_id: FsWatchId });
1196
+ var FsWatchStopResult = import_zod20.z.strictObject({ watch_id: FsWatchId });
1167
1197
 
1168
1198
  // src/schema/exec-job.ts
1169
- var import_zod20 = require("zod");
1170
- var ExecJobId = import_zod20.z.string().regex(/^job_[A-Za-z0-9]{12,40}$/);
1171
- var ExecJobStartParams = import_zod20.z.strictObject({
1172
- command: import_zod20.z.string().min(1).max(131072),
1199
+ var import_zod21 = require("zod");
1200
+ var ExecJobId = import_zod21.z.string().regex(/^job_[A-Za-z0-9]{12,40}$/);
1201
+ var ExecJobStartParams = import_zod21.z.strictObject({
1202
+ command: import_zod21.z.string().min(1).max(131072),
1173
1203
  /** The folder it runs in; the home folder when absent. */
1174
1204
  cwd: AbsPath.optional(),
1175
- env: import_zod20.z.record(import_zod20.z.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(128), import_zod20.z.string().max(32768)).optional()
1205
+ env: import_zod21.z.record(import_zod21.z.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(128), import_zod21.z.string().max(32768)).optional()
1176
1206
  });
1177
- var ExecJobStartResult = import_zod20.z.strictObject({ job_id: ExecJobId, pid: import_zod20.z.int().min(1), cwd: AbsPath });
1178
- var ExecJobOutputParams = import_zod20.z.strictObject({
1207
+ var ExecJobStartResult = import_zod21.z.strictObject({ job_id: ExecJobId, pid: import_zod21.z.int().min(1), cwd: AbsPath });
1208
+ var ExecJobOutputParams = import_zod21.z.strictObject({
1179
1209
  job_id: ExecJobId,
1180
1210
  /** Byte offset into the job's output to read from (next_offset of the last read; 0 = the start). */
1181
1211
  offset: nonNegInt.default(0),
1182
1212
  /** Wait up to this long for new output or the exit when none is waiting (0 answers at once). */
1183
- wait_ms: import_zod20.z.int().min(0).max(25e3).default(0),
1184
- max_bytes: import_zod20.z.int().min(1024).max(1048576).default(65536)
1213
+ wait_ms: import_zod21.z.int().min(0).max(25e3).default(0),
1214
+ max_bytes: import_zod21.z.int().min(1024).max(1048576).default(65536)
1185
1215
  });
1186
- var ExecJobOutputResult = import_zod20.z.strictObject({
1216
+ var ExecJobOutputResult = import_zod21.z.strictObject({
1187
1217
  /** stdout and stderr interleaved as they arrived (UTF-8). */
1188
- output: import_zod20.z.string(),
1218
+ output: import_zod21.z.string(),
1189
1219
  next_offset: nonNegInt,
1190
1220
  /** Bytes before `offset` that are gone (the job keeps its last 4 MiB). */
1191
1221
  dropped_bytes: nonNegInt,
1192
- running: import_zod20.z.boolean(),
1193
- exit_code: import_zod20.z.int().nullable()
1222
+ running: import_zod21.z.boolean(),
1223
+ exit_code: import_zod21.z.int().nullable()
1194
1224
  });
1195
- var ExecJobStopParams = import_zod20.z.strictObject({
1225
+ var ExecJobStopParams = import_zod21.z.strictObject({
1196
1226
  job_id: ExecJobId,
1197
1227
  /** End it at once (SIGKILL; on Windows the whole tree with /F) instead of asking it to quit. */
1198
- force: import_zod20.z.boolean().default(false)
1228
+ force: import_zod21.z.boolean().default(false)
1199
1229
  });
1200
- var ExecJobStopResult = import_zod20.z.strictObject({ job_id: ExecJobId, exited: import_zod20.z.boolean(), exit_code: import_zod20.z.int().nullable() });
1201
- var ExecJobInfo = import_zod20.z.strictObject({
1230
+ var ExecJobStopResult = import_zod21.z.strictObject({ job_id: ExecJobId, exited: import_zod21.z.boolean(), exit_code: import_zod21.z.int().nullable() });
1231
+ var ExecJobInfo = import_zod21.z.strictObject({
1202
1232
  job_id: ExecJobId,
1203
- command: import_zod20.z.string().max(1024),
1204
- pid: import_zod20.z.int().min(1),
1233
+ command: import_zod21.z.string().max(1024),
1234
+ pid: import_zod21.z.int().min(1),
1205
1235
  cwd: AbsPath,
1206
- running: import_zod20.z.boolean(),
1207
- exit_code: import_zod20.z.int().nullable(),
1236
+ running: import_zod21.z.boolean(),
1237
+ exit_code: import_zod21.z.int().nullable(),
1208
1238
  started_at_ms: epochMs,
1209
1239
  output_bytes: nonNegInt
1210
1240
  });
1211
- var ExecJobListParams = import_zod20.z.strictObject({});
1212
- var ExecJobListResult = import_zod20.z.strictObject({ jobs: import_zod20.z.array(ExecJobInfo).max(64) });
1241
+ var ExecJobListParams = import_zod21.z.strictObject({});
1242
+ var ExecJobListResult = import_zod21.z.strictObject({ jobs: import_zod21.z.array(ExecJobInfo).max(64) });
1213
1243
 
1214
1244
  // src/schema/coding.ts
1215
- var import_zod21 = require("zod");
1216
- var CodingServiceCredentials = import_zod21.z.strictObject({
1217
- access_token: import_zod21.z.string().min(16).max(16384),
1218
- user_id: import_zod21.z.string().regex(/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/),
1245
+ var import_zod22 = require("zod");
1246
+ var CodingServiceCredentials = import_zod22.z.strictObject({
1247
+ access_token: import_zod22.z.string().min(16).max(16384),
1248
+ user_id: import_zod22.z.string().regex(/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/),
1219
1249
  /** The AI Matrx server this app talks to (production, or a local server on the nightly copy). */
1220
- server_url: import_zod21.z.string().min(1).max(2048).regex(/^https?:\/\/[^\s/?#]+(\/[^\s?#]*)?$/)
1250
+ server_url: import_zod22.z.string().min(1).max(2048).regex(/^https?:\/\/[^\s/?#]+(\/[^\s?#]*)?$/)
1221
1251
  });
1222
- var CodingHistoryBlocked = import_zod21.z.enum([
1252
+ var CodingHistoryBlocked = import_zod22.z.enum([
1223
1253
  "signed_out",
1224
1254
  "offline",
1225
1255
  "organization_required",
@@ -1227,11 +1257,11 @@ var CodingHistoryBlocked = import_zod21.z.enum([
1227
1257
  "cloud_list_unavailable",
1228
1258
  "history_too_large"
1229
1259
  ]);
1230
- var CodingHistoryFailure = import_zod21.z.strictObject({
1231
- session_id: import_zod21.z.string().max(64),
1232
- reason: import_zod21.z.string().max(300)
1260
+ var CodingHistoryFailure = import_zod22.z.strictObject({
1261
+ session_id: import_zod22.z.string().max(64),
1262
+ reason: import_zod22.z.string().max(300)
1233
1263
  });
1234
- var CodingHistoryRun = import_zod21.z.strictObject({
1264
+ var CodingHistoryRun = import_zod22.z.strictObject({
1235
1265
  /** Claude Code sessions found on this computer. */
1236
1266
  local_sessions: nonNegInt,
1237
1267
  /** Of those, already complete in AI Matrx. */
@@ -1246,39 +1276,39 @@ var CodingHistoryRun = import_zod21.z.strictObject({
1246
1276
  /** Changed while being read; a later run takes them. */
1247
1277
  changed: nonNegInt,
1248
1278
  failed: nonNegInt,
1249
- failures: import_zod21.z.array(CodingHistoryFailure).max(20),
1279
+ failures: import_zod22.z.array(CodingHistoryFailure).max(20),
1250
1280
  /** Candidates not reached yet. */
1251
1281
  remaining: nonNegInt,
1252
1282
  /** The one line a person reads, e.g. "Imported 12 of 14 sessions. 140 already in AI Matrx." */
1253
- summary: import_zod21.z.string().max(400)
1283
+ summary: import_zod22.z.string().max(400)
1254
1284
  });
1255
- var CodingHistoryStep = import_zod21.z.strictObject({
1285
+ var CodingHistoryStep = import_zod22.z.strictObject({
1256
1286
  /** Null when the run could not start (blocked before a plan existed). */
1257
- plan_id: import_zod21.z.string().regex(/^[0-9a-f]{32}$/).nullable(),
1258
- finished: import_zod21.z.boolean(),
1287
+ plan_id: import_zod22.z.string().regex(/^[0-9a-f]{32}$/).nullable(),
1288
+ finished: import_zod22.z.boolean(),
1259
1289
  blocked: CodingHistoryBlocked.nullable(),
1260
1290
  run: CodingHistoryRun
1261
1291
  });
1262
- var CodingPlanMissingParams = import_zod21.z.strictObject({ credentials: CodingServiceCredentials.nullable() });
1263
- var CodingImportNextParams = import_zod21.z.strictObject({
1264
- plan_id: import_zod21.z.string().regex(/^[0-9a-f]{32}$/),
1292
+ var CodingPlanMissingParams = import_zod22.z.strictObject({ credentials: CodingServiceCredentials.nullable() });
1293
+ var CodingImportNextParams = import_zod22.z.strictObject({
1294
+ plan_id: import_zod22.z.string().regex(/^[0-9a-f]{32}$/),
1265
1295
  credentials: CodingServiceCredentials.nullable()
1266
1296
  });
1267
- var CodingServiceProgress = import_zod21.z.strictObject({
1268
- phase: import_zod21.z.enum(["checking", "importing"]),
1297
+ var CodingServiceProgress = import_zod22.z.strictObject({
1298
+ phase: import_zod22.z.enum(["checking", "importing"]),
1269
1299
  done: nonNegInt,
1270
1300
  total: nonNegInt
1271
1301
  });
1272
- var CodingHistoryImportMissingParams = import_zod21.z.strictObject({});
1273
- var CodingHistoryImportMissingResult = import_zod21.z.strictObject({
1274
- state: import_zod21.z.enum(["done", "blocked", "cancelled"]),
1302
+ var CodingHistoryImportMissingParams = import_zod22.z.strictObject({});
1303
+ var CodingHistoryImportMissingResult = import_zod22.z.strictObject({
1304
+ state: import_zod22.z.enum(["done", "blocked", "cancelled"]),
1275
1305
  blocked: CodingHistoryBlocked.nullable(),
1276
1306
  run: CodingHistoryRun,
1277
1307
  elapsed_ms: nonNegInt
1278
1308
  });
1279
- var CodingHistoryProgressEvent = import_zod21.z.strictObject({
1309
+ var CodingHistoryProgressEvent = import_zod22.z.strictObject({
1280
1310
  request_id: RequestId,
1281
- phase: import_zod21.z.enum(["checking", "importing"]),
1311
+ phase: import_zod22.z.enum(["checking", "importing"]),
1282
1312
  /** Sessions settled so far, of `total` candidates (0 of 0 while checking). */
1283
1313
  done: nonNegInt,
1284
1314
  total: nonNegInt,
@@ -1287,22 +1317,22 @@ var CodingHistoryProgressEvent = import_zod21.z.strictObject({
1287
1317
  });
1288
1318
 
1289
1319
  // src/schema/apps.ts
1290
- var import_zod22 = require("zod");
1291
- var AppKey = import_zod22.z.string().regex(/^[a-z][a-z0-9_-]{0,39}$/);
1292
- var AppProfileId = import_zod22.z.string().regex(/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/);
1293
- var AppProfileLocator = import_zod22.z.string().min(1).max(512).regex(/^[A-Za-z0-9 _()+@,-][A-Za-z0-9 ._()+@,-]{0,127}(\/[A-Za-z0-9 _()+@,-][A-Za-z0-9 ._()+@,-]{0,127}){0,7}$/);
1294
- var AppSupport = import_zod22.z.enum(["supported", "partial", "unsupported"]);
1295
- var AppFeatureStatus = import_zod22.z.strictObject({
1320
+ var import_zod23 = require("zod");
1321
+ var AppKey = import_zod23.z.string().regex(/^[a-z][a-z0-9_-]{0,39}$/);
1322
+ var AppProfileId = import_zod23.z.string().regex(/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/);
1323
+ var AppProfileLocator = import_zod23.z.string().min(1).max(512).regex(/^[A-Za-z0-9 _()+@,-][A-Za-z0-9 ._()+@,-]{0,127}(\/[A-Za-z0-9 _()+@,-][A-Za-z0-9 ._()+@,-]{0,127}){0,7}$/);
1324
+ var AppSupport = import_zod23.z.enum(["supported", "partial", "unsupported"]);
1325
+ var AppFeatureStatus = import_zod23.z.strictObject({
1296
1326
  status: AppSupport,
1297
1327
  /** One line, set whenever status is not "supported". */
1298
- reason: import_zod22.z.string().max(140).nullable()
1328
+ reason: import_zod23.z.string().max(140).nullable()
1299
1329
  });
1300
- var AppInfo = import_zod22.z.strictObject({
1330
+ var AppInfo = import_zod23.z.strictObject({
1301
1331
  app_key: AppKey,
1302
- name: import_zod22.z.string().max(64),
1303
- installed: import_zod22.z.boolean(),
1332
+ name: import_zod23.z.string().max(64),
1333
+ installed: import_zod23.z.boolean(),
1304
1334
  /** The app's own version string, or null when it is not installed or does not say. */
1305
- version: import_zod22.z.string().max(64).nullable(),
1335
+ version: import_zod23.z.string().max(64).nullable(),
1306
1336
  /** The install found (an .app bundle, an .exe, a binary), or null. */
1307
1337
  location: AbsPath.nullable(),
1308
1338
  /** Open the app at all on this OS. */
@@ -1312,69 +1342,69 @@ var AppInfo = import_zod22.z.strictObject({
1312
1342
  /** Plan usage read from the app's own files on this OS. */
1313
1343
  usage: AppFeatureStatus
1314
1344
  });
1315
- var AppUsageReading = import_zod22.z.strictObject({
1316
- window: import_zod22.z.enum(["five_hour", "weekly", "extra"]),
1345
+ var AppUsageReading = import_zod23.z.strictObject({
1346
+ window: import_zod23.z.enum(["five_hour", "weekly", "extra"]),
1317
1347
  /** 0–100 for five_hour and weekly; extra-usage spend as a percent of its cap (may pass 100). */
1318
- percent: import_zod22.z.number().min(0).max(1e4),
1348
+ percent: import_zod23.z.number().min(0).max(1e4),
1319
1349
  /** When the app recorded it. */
1320
1350
  sampled_at_ms: epochMs,
1321
1351
  /** True when the window has rolled over since the sample, so the figure has reset. */
1322
- reset_since: import_zod22.z.boolean()
1352
+ reset_since: import_zod23.z.boolean()
1323
1353
  });
1324
- var AppProfile = import_zod22.z.strictObject({
1354
+ var AppProfile = import_zod23.z.strictObject({
1325
1355
  /** The row's id; null for a folder found on disk that no row names yet. */
1326
1356
  id: AppProfileId.nullable(),
1327
1357
  app_key: AppKey,
1328
- display_name: import_zod22.z.string().min(1).max(120),
1358
+ display_name: import_zod23.z.string().min(1).max(120),
1329
1359
  /** The account the person means to be signed in here; null when not stated (never guessed). */
1330
- account_identity: import_zod22.z.string().min(3).max(320).nullable(),
1360
+ account_identity: import_zod23.z.string().min(3).max(320).nullable(),
1331
1361
  profile_locator: AppProfileLocator.nullable(),
1332
1362
  /** The device the row is tied to; null when the row names none. */
1333
1363
  device_id: DeviceId.nullable(),
1334
1364
  /** The folder this profile resolves to on this device; null for a row tied to another device. */
1335
1365
  folder: AbsPath.nullable(),
1336
1366
  /** The folder exists on this device. */
1337
- on_disk: import_zod22.z.boolean(),
1367
+ on_disk: import_zod23.z.boolean(),
1338
1368
  /** An instance with this profile is running; null when it could not be determined. */
1339
- running: import_zod22.z.boolean().nullable(),
1369
+ running: import_zod23.z.boolean().nullable(),
1340
1370
  /** Usage the app recorded for this profile; null when the app exposes none here. */
1341
- usage: import_zod22.z.array(AppUsageReading).nullable(),
1371
+ usage: import_zod23.z.array(AppUsageReading).nullable(),
1342
1372
  last_opened_ms: epochMs.nullable()
1343
1373
  });
1344
- var AppsListParams = import_zod22.z.strictObject({});
1345
- var AppsListResult = import_zod22.z.strictObject({ apps: import_zod22.z.array(AppInfo) });
1346
- var AppsProfilesListParams = import_zod22.z.strictObject({
1374
+ var AppsListParams = import_zod23.z.strictObject({});
1375
+ var AppsListResult = import_zod23.z.strictObject({ apps: import_zod23.z.array(AppInfo) });
1376
+ var AppsProfilesListParams = import_zod23.z.strictObject({
1347
1377
  /** Only this app's profiles; every app's when absent. */
1348
1378
  app_key: AppKey.optional()
1349
1379
  });
1350
- var AppsProfilesListResult = import_zod22.z.strictObject({
1351
- profiles: import_zod22.z.array(AppProfile),
1380
+ var AppsProfilesListResult = import_zod23.z.strictObject({
1381
+ profiles: import_zod23.z.array(AppProfile),
1352
1382
  /**
1353
1383
  * Whether the saved rows could be read: false while signed out or offline, when only folders
1354
1384
  * found on disk are listed.
1355
1385
  */
1356
- registry: import_zod22.z.enum(["ok", "signed_out", "unavailable"])
1386
+ registry: import_zod23.z.enum(["ok", "signed_out", "unavailable"])
1357
1387
  });
1358
- var AppsProfilesSaveParams = import_zod22.z.strictObject({
1388
+ var AppsProfilesSaveParams = import_zod23.z.strictObject({
1359
1389
  id: AppProfileId.optional(),
1360
1390
  app_key: AppKey,
1361
- display_name: import_zod22.z.string().min(1).max(120),
1362
- account_identity: import_zod22.z.string().min(3).max(320).nullable(),
1391
+ display_name: import_zod23.z.string().min(1).max(120),
1392
+ account_identity: import_zod23.z.string().min(3).max(320).nullable(),
1363
1393
  /** On create: the folder to use (one found on disk), or null for the app's default profile. Ignored on update. */
1364
1394
  profile_locator: AppProfileLocator.nullable(),
1365
1395
  /** On create with profile_locator null: make a new folder named after display_name instead. */
1366
- new_folder: import_zod22.z.boolean().default(false)
1396
+ new_folder: import_zod23.z.boolean().default(false)
1367
1397
  });
1368
1398
  var AppsProfilesSaveResult = AppProfile;
1369
- var AppsProfilesRemoveParams = import_zod22.z.strictObject({ id: AppProfileId });
1370
- var AppsProfilesRemoveResult = import_zod22.z.strictObject({ removed: import_zod22.z.boolean() });
1371
- var AppsOpenParams = import_zod22.z.strictObject({
1399
+ var AppsProfilesRemoveParams = import_zod23.z.strictObject({ id: AppProfileId });
1400
+ var AppsProfilesRemoveResult = import_zod23.z.strictObject({ removed: import_zod23.z.boolean() });
1401
+ var AppsOpenParams = import_zod23.z.strictObject({
1372
1402
  app_key: AppKey,
1373
1403
  profile_id: AppProfileId.optional()
1374
1404
  });
1375
- var AppsOpenResult = import_zod22.z.strictObject({
1405
+ var AppsOpenResult = import_zod23.z.strictObject({
1376
1406
  /** True when an instance with this profile was already running; it is brought forward. */
1377
- already_running: import_zod22.z.boolean(),
1407
+ already_running: import_zod23.z.boolean(),
1378
1408
  folder: AbsPath.nullable()
1379
1409
  });
1380
1410
 
@@ -1443,6 +1473,9 @@ var OPS = {
1443
1473
  "power.status": { params: PowerStatusParams, result: PowerStatusResult, kind: "unary", since: "1.4", errors: ["INTERNAL"] },
1444
1474
  "power.prevent_sleep": { params: PowerPreventSleepParams, result: PowerPreventSleepResult, kind: "unary", since: "1.4", errors: ["PERMISSION_DENIED_OS", "PLATFORM_UNSUPPORTED", "INTERNAL"] },
1445
1475
  "resources.snapshot": { params: ResourcesSnapshotParams, result: ResourcesSnapshotResult, kind: "unary", since: "1.4", errors: ["INTERNAL"] },
1476
+ "audio.devices": { params: AudioDevicesParams, result: AudioDevicesResult, kind: "unary", since: "1.6", errors: ["PLATFORM_UNSUPPORTED", "INTERNAL"] },
1477
+ "audio.record": { params: AudioRecordParams, result: AudioRecordResult, kind: "unary", since: "1.6", errors: ["NOT_FOUND", "PERMISSION_DENIED_OS", "PLATFORM_UNSUPPORTED", "RESOURCE_BUSY", "INTERNAL"] },
1478
+ "audio.play": { params: AudioPlayParams, result: AudioPlayResult, kind: "unary", since: "1.6", errors: ["NOT_FOUND", "INVALID_PARAMS", "PLATFORM_UNSUPPORTED", "INTERNAL"] },
1446
1479
  // Claude Code history (SPEC §6 coding): served by the `coding` Python service through SERVICES below.
1447
1480
  "coding.history.import_missing": { params: CodingHistoryImportMissingParams, result: CodingHistoryImportMissingResult, kind: "unary", since: "1.5", errors: ["RESOURCE_BUSY", "RESOURCE_GONE", "CANCELLED", "INTERNAL"] }
1448
1481
  };