@ai-matrx/desktop-protocol 0.21.2 → 0.21.4

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/index.cjs CHANGED
@@ -237,6 +237,25 @@ __export(src_exports, {
237
237
  FsWatchStopResult: () => FsWatchStopResult,
238
238
  FsWriteParams: () => FsWriteParams,
239
239
  FsWriteResult: () => FsWriteResult,
240
+ GIT_MAX_OUTPUT_CHARS: () => GIT_MAX_OUTPUT_CHARS,
241
+ GitAddParams: () => GitAddParams,
242
+ GitBranchParams: () => GitBranchParams,
243
+ GitBranchResult: () => GitBranchResult,
244
+ GitCloneParams: () => GitCloneParams,
245
+ GitCommitParams: () => GitCommitParams,
246
+ GitCommitResult: () => GitCommitResult,
247
+ GitDiffParams: () => GitDiffParams,
248
+ GitDiffResult: () => GitDiffResult,
249
+ GitLogCommit: () => GitLogCommit,
250
+ GitLogParams: () => GitLogParams,
251
+ GitLogResult: () => GitLogResult,
252
+ GitOutputResult: () => GitOutputResult,
253
+ GitPullParams: () => GitPullParams,
254
+ GitPushParams: () => GitPushParams,
255
+ GitStashParams: () => GitStashParams,
256
+ GitStatusFile: () => GitStatusFile,
257
+ GitStatusParams: () => GitStatusParams,
258
+ GitStatusResult: () => GitStatusResult,
240
259
  HelloMsg: () => HelloMsg,
241
260
  InputHotkeyParams: () => InputHotkeyParams,
242
261
  InputHotkeyResult: () => InputHotkeyResult,
@@ -409,10 +428,25 @@ __export(src_exports, {
409
428
  ToolPlatform: () => ToolPlatform,
410
429
  ToolResultsFile: () => ToolResultsFile,
411
430
  ToolTransport: () => ToolTransport,
431
+ ToolsServiceProgress: () => ToolsServiceProgress,
432
+ ToolsWebSearchParams: () => ToolsWebSearchParams,
412
433
  TranscriptSegment: () => TranscriptSegment,
413
434
  TranscriptionModelId: () => TranscriptionModelId,
414
435
  TranscriptionModelInfo: () => TranscriptionModelInfo,
415
436
  VERSIONED_RESULT_OPS: () => VERSIONED_RESULT_OPS,
437
+ WEB_MAX_TEXT_CHARS: () => WEB_MAX_TEXT_CHARS,
438
+ WebBrowserFetchParams: () => WebBrowserFetchParams,
439
+ WebBrowserFetchResult: () => WebBrowserFetchResult,
440
+ WebFetchParams: () => WebFetchParams,
441
+ WebFetchResult: () => WebFetchResult,
442
+ WebHeader: () => WebHeader,
443
+ WebScrapePage: () => WebScrapePage,
444
+ WebScrapeParams: () => WebScrapeParams,
445
+ WebScrapeResult: () => WebScrapeResult,
446
+ WebSearchHit: () => WebSearchHit,
447
+ WebSearchParams: () => WebSearchParams,
448
+ WebSearchQueryResult: () => WebSearchQueryResult,
449
+ WebSearchResult: () => WebSearchResult,
416
450
  Welcome: () => Welcome,
417
451
  WindowFocusParams: () => WindowFocusParams,
418
452
  WindowFocusResult: () => WindowFocusResult,
@@ -454,7 +488,7 @@ module.exports = __toCommonJS(src_exports);
454
488
  var import_zod = require("zod");
455
489
  var import_uuid = require("@ai-matrx/kit/uuid");
456
490
  var PROTOCOL_MAJOR = 1;
457
- var PROTOCOL_MINOR = 21;
491
+ var PROTOCOL_MINOR = 22;
458
492
  var PROTOCOL_VERSION = `${PROTOCOL_MAJOR}.${PROTOCOL_MINOR}`;
459
493
  var ProtocolVersion = import_zod.z.string().regex(/^[1-9][0-9]{0,2}\.[0-9]{1,3}$/);
460
494
  var RequestId = import_zod.z.string().min(1).max(64).regex(/^[A-Za-z0-9_-]+$/);
@@ -1763,7 +1797,7 @@ var AppsWindowsSaveNamesParams = import_zod13.z.strictObject({ app_key: AppKey }
1763
1797
  // src/schema/service.ts
1764
1798
  var import_zod14 = require("zod");
1765
1799
  var SERVICE_MAX_FRAME_BYTES = 16777216;
1766
- var ServiceName = import_zod14.z.enum(["ml", "coding"]);
1800
+ var ServiceName = import_zod14.z.enum(["ml", "coding", "tools"]);
1767
1801
  var ContractHash = import_zod14.z.string().regex(/^[0-9a-f]{64}$/);
1768
1802
  var ServiceToken = import_zod14.z.string().regex(/^[A-Za-z0-9_-]{43}$/);
1769
1803
  var ServiceRequestId = u32;
@@ -1898,112 +1932,251 @@ var ClipboardReadResult = import_zod17.z.strictObject({
1898
1932
  var ClipboardWriteParams = import_zod17.z.strictObject({ text: import_zod17.z.string().max(1048576) });
1899
1933
  var ClipboardWriteResult = import_zod17.z.strictObject({ bytes: nonNegInt });
1900
1934
 
1901
- // src/schema/system.ts
1935
+ // src/schema/git.ts
1902
1936
  var import_zod18 = require("zod");
1903
- var SystemOpenUrlParams = import_zod18.z.strictObject({
1937
+ var GIT_MAX_OUTPUT_CHARS = 262144;
1938
+ var GitText = import_zod18.z.string().max(GIT_MAX_OUTPUT_CHARS);
1939
+ var GitName = import_zod18.z.string().min(1).max(255).regex(/^[^-\s][^\s]*$/);
1940
+ var GitOutputResult = import_zod18.z.strictObject({ output: GitText, truncated: import_zod18.z.boolean() });
1941
+ var GitStatusParams = import_zod18.z.strictObject({ cwd: AbsPath });
1942
+ var GitStatusFile = import_zod18.z.strictObject({
1943
+ path: import_zod18.z.string(),
1944
+ /** Porcelain v1 status letters: index (staged) and worktree; "?" for untracked. */
1945
+ index: import_zod18.z.string().length(1),
1946
+ worktree: import_zod18.z.string().length(1)
1947
+ });
1948
+ var GitStatusResult = import_zod18.z.strictObject({
1949
+ /** The checked-out branch; null when HEAD is detached. */
1950
+ branch: import_zod18.z.string().nullable(),
1951
+ upstream: import_zod18.z.string().nullable(),
1952
+ ahead: nonNegInt,
1953
+ behind: nonNegInt,
1954
+ files: import_zod18.z.array(GitStatusFile).max(5e3),
1955
+ clean: import_zod18.z.boolean(),
1956
+ /** More than 5000 changed files: the list is cut. */
1957
+ truncated: import_zod18.z.boolean()
1958
+ });
1959
+ var GitDiffParams = import_zod18.z.strictObject({ cwd: AbsPath, path: import_zod18.z.string().max(4096).optional(), staged: import_zod18.z.boolean().default(false) });
1960
+ var GitDiffResult = import_zod18.z.strictObject({ diff: GitText, truncated: import_zod18.z.boolean() });
1961
+ var GitLogParams = import_zod18.z.strictObject({ cwd: AbsPath, limit: import_zod18.z.int().min(1).max(500).default(50) });
1962
+ var GitLogCommit = import_zod18.z.strictObject({ sha: import_zod18.z.string(), short: import_zod18.z.string(), author: import_zod18.z.string(), date: import_zod18.z.string(), subject: import_zod18.z.string() });
1963
+ var GitLogResult = import_zod18.z.strictObject({ commits: import_zod18.z.array(GitLogCommit).max(500) });
1964
+ var GitAddParams = import_zod18.z.strictObject({ cwd: AbsPath, paths: import_zod18.z.array(import_zod18.z.string().min(1).max(4096)).min(1).max(1e3) });
1965
+ var GitCommitParams = import_zod18.z.strictObject({
1966
+ cwd: AbsPath,
1967
+ message: import_zod18.z.string().min(1).max(65536),
1968
+ amend: import_zod18.z.boolean().default(false),
1969
+ /** "Name <email>"; absent = the computer's own git identity. */
1970
+ author: import_zod18.z.string().max(512).optional()
1971
+ });
1972
+ var GitCommitResult = import_zod18.z.strictObject({ sha: import_zod18.z.string(), output: GitText, truncated: import_zod18.z.boolean() });
1973
+ var GitPushParams = import_zod18.z.strictObject({ cwd: AbsPath, remote: GitName.default("origin"), branch: GitName.optional(), force_with_lease: import_zod18.z.boolean().default(false) });
1974
+ var GitPullParams = import_zod18.z.strictObject({ cwd: AbsPath, remote: GitName.default("origin"), branch: GitName.optional(), rebase: import_zod18.z.boolean().default(false) });
1975
+ var GitBranchParams = import_zod18.z.strictObject({ cwd: AbsPath, action: import_zod18.z.enum(["list", "create", "delete", "switch"]), name: GitName.optional() });
1976
+ var GitBranchResult = import_zod18.z.strictObject({
1977
+ /** The branch checked out after the action; null when detached. */
1978
+ current: import_zod18.z.string().nullable(),
1979
+ /** Local branches (filled by `list`; empty otherwise). */
1980
+ branches: import_zod18.z.array(import_zod18.z.string()).max(5e3),
1981
+ output: GitText,
1982
+ truncated: import_zod18.z.boolean()
1983
+ });
1984
+ var GitStashParams = import_zod18.z.strictObject({ cwd: AbsPath, action: import_zod18.z.enum(["push", "pop", "list", "drop"]), message: import_zod18.z.string().max(4096).optional() });
1985
+ var GitCloneParams = import_zod18.z.strictObject({
1986
+ url: import_zod18.z.string().min(1).max(4096).regex(/^[^-]/),
1987
+ /** The folder to create; must not exist yet (or be empty). */
1988
+ dest: AbsPath,
1989
+ branch: GitName.optional(),
1990
+ depth: import_zod18.z.int().min(1).max(1e6).optional()
1991
+ });
1992
+
1993
+ // src/schema/web.ts
1994
+ var import_zod19 = require("zod");
1995
+ var WEB_MAX_TEXT_CHARS = 524288;
1996
+ var WebUrl = import_zod19.z.string().min(1).max(8192).regex(/^https?:\/\//);
1997
+ var WebText = import_zod19.z.string().max(WEB_MAX_TEXT_CHARS);
1998
+ var WebHeader = import_zod19.z.strictObject({ name: import_zod19.z.string().min(1).max(256), value: import_zod19.z.string().max(8192) });
1999
+ var WebFetchParams = import_zod19.z.strictObject({
2000
+ url: WebUrl,
2001
+ method: import_zod19.z.enum(["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"]).default("GET"),
2002
+ headers: import_zod19.z.array(WebHeader).max(64).default([]),
2003
+ body: import_zod19.z.string().max(1048576).optional(),
2004
+ follow_redirects: import_zod19.z.boolean().default(true),
2005
+ timeout_s: import_zod19.z.int().min(1).max(300).default(30)
2006
+ });
2007
+ var WebFetchResult = import_zod19.z.strictObject({
2008
+ status: import_zod19.z.int().min(100).max(999),
2009
+ reason: import_zod19.z.string(),
2010
+ /** The final URL after redirects. */
2011
+ url: import_zod19.z.string(),
2012
+ content_type: import_zod19.z.string().nullable(),
2013
+ headers: import_zod19.z.array(WebHeader),
2014
+ body: WebText,
2015
+ truncated: import_zod19.z.boolean(),
2016
+ bytes: nonNegInt,
2017
+ elapsed_ms: nonNegInt
2018
+ });
2019
+ var WebScrapeParams = import_zod19.z.strictObject({
2020
+ urls: import_zod19.z.array(WebUrl).min(1).max(20),
2021
+ use_cache: import_zod19.z.boolean().default(true),
2022
+ get_links: import_zod19.z.boolean().default(false)
2023
+ });
2024
+ var WebScrapePage = import_zod19.z.strictObject({
2025
+ url: import_zod19.z.string(),
2026
+ ok: import_zod19.z.boolean(),
2027
+ status: import_zod19.z.int().min(0).max(999).nullable(),
2028
+ title: import_zod19.z.string().nullable(),
2029
+ /** The page's readable content (markdown-like text from the scraper's parse). */
2030
+ text: WebText,
2031
+ truncated: import_zod19.z.boolean(),
2032
+ /** Links found on the page (only with get_links). */
2033
+ links: import_zod19.z.array(import_zod19.z.string()).max(2e3),
2034
+ /** Why the page failed (blocked, timeout, not found…), in the scraper's words; null when ok. */
2035
+ error: import_zod19.z.string().nullable(),
2036
+ /** How the page was fetched (http, browser, cache). */
2037
+ via: import_zod19.z.string().nullable()
2038
+ });
2039
+ var WebScrapeResult = import_zod19.z.strictObject({ pages: import_zod19.z.array(WebScrapePage), elapsed_ms: nonNegInt });
2040
+ var WebSearchParams = import_zod19.z.strictObject({
2041
+ keywords: import_zod19.z.array(import_zod19.z.string().min(1).max(400)).min(1).max(5),
2042
+ country: import_zod19.z.string().min(2).max(2).default("us"),
2043
+ count: import_zod19.z.int().min(1).max(20).default(10),
2044
+ freshness: import_zod19.z.enum(["pd", "pw", "pm", "py"]).optional()
2045
+ });
2046
+ var WebSearchHit = import_zod19.z.strictObject({ title: import_zod19.z.string(), url: import_zod19.z.string(), description: import_zod19.z.string() });
2047
+ var WebSearchQueryResult = import_zod19.z.strictObject({ keyword: import_zod19.z.string(), hits: import_zod19.z.array(WebSearchHit), error: import_zod19.z.string().nullable() });
2048
+ var WebSearchResult = import_zod19.z.strictObject({ queries: import_zod19.z.array(WebSearchQueryResult), elapsed_ms: nonNegInt });
2049
+ var ToolsWebSearchParams = import_zod19.z.strictObject({
2050
+ keywords: import_zod19.z.array(import_zod19.z.string().min(1).max(400)).min(1).max(5),
2051
+ country: import_zod19.z.string().min(2).max(2).default("us"),
2052
+ count: import_zod19.z.int().min(1).max(20).default(10),
2053
+ freshness: import_zod19.z.enum(["pd", "pw", "pm", "py"]).optional(),
2054
+ brave_api_key: import_zod19.z.string().min(1).max(512).nullable()
2055
+ });
2056
+ var WebBrowserFetchParams = import_zod19.z.strictObject({
2057
+ url: WebUrl,
2058
+ /** A CSS selector to wait for before reading the page. */
2059
+ wait_for: import_zod19.z.string().max(1024).optional(),
2060
+ wait_timeout_ms: import_zod19.z.int().min(100).max(12e4).default(3e4),
2061
+ /** true: readable text; false: the rendered HTML. */
2062
+ extract_text: import_zod19.z.boolean().default(true)
2063
+ });
2064
+ var WebBrowserFetchResult = import_zod19.z.strictObject({
2065
+ url: import_zod19.z.string(),
2066
+ status: import_zod19.z.int().min(0).max(999).nullable(),
2067
+ title: import_zod19.z.string().nullable(),
2068
+ content: WebText,
2069
+ truncated: import_zod19.z.boolean(),
2070
+ elapsed_ms: nonNegInt
2071
+ });
2072
+ var ToolsServiceProgress = import_zod19.z.strictObject({ phase: import_zod19.z.enum(["fetching", "installing"]), done: nonNegInt, total: nonNegInt });
2073
+
2074
+ // src/schema/system.ts
2075
+ var import_zod20 = require("zod");
2076
+ var SystemOpenUrlParams = import_zod20.z.strictObject({
1904
2077
  /** http, https or mailto; opened in the person's default app for it. */
1905
- url: import_zod18.z.string().min(1).max(4096)
2078
+ url: import_zod20.z.string().min(1).max(4096)
1906
2079
  });
1907
- var SystemOpenUrlResult = import_zod18.z.strictObject({ url: import_zod18.z.string().max(4096) });
1908
- var SystemOpenPathParams = import_zod18.z.strictObject({
2080
+ var SystemOpenUrlResult = import_zod20.z.strictObject({ url: import_zod20.z.string().max(4096) });
2081
+ var SystemOpenPathParams = import_zod20.z.strictObject({
1909
2082
  path: AbsPath,
1910
2083
  /** Show it in the file manager (Finder, Explorer) instead of opening it. */
1911
- reveal: import_zod18.z.boolean().default(false)
2084
+ reveal: import_zod20.z.boolean().default(false)
1912
2085
  });
1913
- var SystemOpenPathResult = import_zod18.z.strictObject({ path: AbsPath, revealed: import_zod18.z.boolean() });
1914
- var SystemNotifyParams = import_zod18.z.strictObject({
1915
- title: import_zod18.z.string().min(1).max(128),
1916
- body: import_zod18.z.string().max(1024).default("")
2086
+ var SystemOpenPathResult = import_zod20.z.strictObject({ path: AbsPath, revealed: import_zod20.z.boolean() });
2087
+ var SystemNotifyParams = import_zod20.z.strictObject({
2088
+ title: import_zod20.z.string().min(1).max(128),
2089
+ body: import_zod20.z.string().max(1024).default("")
1917
2090
  });
1918
- var SystemNotifyResult = import_zod18.z.strictObject({
2091
+ var SystemNotifyResult = import_zod20.z.strictObject({
1919
2092
  /** False when this computer has no notification service to show it (a bare Linux box). */
1920
- shown: import_zod18.z.boolean()
2093
+ shown: import_zod20.z.boolean()
1921
2094
  });
1922
2095
 
1923
2096
  // src/schema/screen.ts
1924
- var import_zod19 = require("zod");
1925
- var ScreenDisplay = import_zod19.z.strictObject({
2097
+ var import_zod21 = require("zod");
2098
+ var ScreenDisplay = import_zod21.z.strictObject({
1926
2099
  /** The OS's display id; pass it to screen.capture. */
1927
2100
  id: nonNegInt,
1928
- name: import_zod19.z.string().max(128),
2101
+ name: import_zod21.z.string().max(128),
1929
2102
  /** Position and size in the OS's logical points (x and y may be negative left of or above the main display). */
1930
- x: import_zod19.z.int(),
1931
- y: import_zod19.z.int(),
1932
- width: import_zod19.z.int().min(1),
1933
- height: import_zod19.z.int().min(1),
2103
+ x: import_zod21.z.int(),
2104
+ y: import_zod21.z.int(),
2105
+ width: import_zod21.z.int().min(1),
2106
+ height: import_zod21.z.int().min(1),
1934
2107
  /** Pixels per point (2 on a Retina display). */
1935
- scale: import_zod19.z.number().min(0.1).max(8),
1936
- primary: import_zod19.z.boolean()
2108
+ scale: import_zod21.z.number().min(0.1).max(8),
2109
+ primary: import_zod21.z.boolean()
1937
2110
  });
1938
- var ScreenListParams = import_zod19.z.strictObject({});
1939
- var ScreenListResult = import_zod19.z.strictObject({ displays: import_zod19.z.array(ScreenDisplay).max(32) });
1940
- var ScreenCaptureParams = import_zod19.z.strictObject({
2111
+ var ScreenListParams = import_zod21.z.strictObject({});
2112
+ var ScreenListResult = import_zod21.z.strictObject({ displays: import_zod21.z.array(ScreenDisplay).max(32) });
2113
+ var ScreenCaptureParams = import_zod21.z.strictObject({
1941
2114
  /** The display (from screen.list); the primary display when absent. */
1942
2115
  display_id: nonNegInt.optional(),
1943
- format: import_zod19.z.enum(["jpeg", "png"]).default("jpeg"),
2116
+ format: import_zod21.z.enum(["jpeg", "png"]).default("jpeg"),
1944
2117
  /** Scale the picture down to at most this width in pixels (kept when already smaller). */
1945
- max_width: import_zod19.z.int().min(160).max(7680).default(1600)
2118
+ max_width: import_zod21.z.int().min(160).max(7680).default(1600)
1946
2119
  });
1947
- var ScreenCaptureResult = import_zod19.z.strictObject({
2120
+ var ScreenCaptureResult = import_zod21.z.strictObject({
1948
2121
  display_id: nonNegInt,
1949
- mime_type: import_zod19.z.enum(["image/jpeg", "image/png"]),
1950
- width: import_zod19.z.int().min(1),
1951
- height: import_zod19.z.int().min(1),
2122
+ mime_type: import_zod21.z.enum(["image/jpeg", "image/png"]),
2123
+ width: import_zod21.z.int().min(1),
2124
+ height: import_zod21.z.int().min(1),
1952
2125
  /** The display's full resolution in pixels, before scaling. */
1953
- source_width: import_zod19.z.int().min(1),
1954
- source_height: import_zod19.z.int().min(1),
2126
+ source_width: import_zod21.z.int().min(1),
2127
+ source_height: import_zod21.z.int().min(1),
1955
2128
  /** The image, base64 (at most 6 MiB of text). */
1956
- data_base64: import_zod19.z.string().max(6291456)
2129
+ data_base64: import_zod21.z.string().max(6291456)
1957
2130
  });
1958
2131
 
1959
2132
  // src/schema/window.ts
1960
- var import_zod20 = require("zod");
1961
- var WindowInfo = import_zod20.z.strictObject({
2133
+ var import_zod22 = require("zod");
2134
+ var WindowInfo = import_zod22.z.strictObject({
1962
2135
  /** The OS's window handle (macOS window number, Windows HWND, X11 window id). */
1963
2136
  id: nonNegInt,
1964
- title: import_zod20.z.string().max(512),
2137
+ title: import_zod22.z.string().max(512),
1965
2138
  /** Position and size in logical points. */
1966
- x: import_zod20.z.int(),
1967
- y: import_zod20.z.int(),
1968
- width: import_zod20.z.int().min(0),
1969
- height: import_zod20.z.int().min(0),
2139
+ x: import_zod22.z.int(),
2140
+ y: import_zod22.z.int(),
2141
+ width: import_zod22.z.int().min(0),
2142
+ height: import_zod22.z.int().min(0),
1970
2143
  /**
1971
2144
  * The application that owns the window, by the name the OS shows people; absent when the OS does
1972
2145
  * not say. Optional (never null, the schema rule) because it was added in protocol 1.7: an older
1973
2146
  * app's answer has no such field (FIELDS_SINCE).
1974
2147
  */
1975
- app: import_zod20.z.string().max(256).optional(),
2148
+ app: import_zod22.z.string().max(256).optional(),
1976
2149
  /** The owning process id; absent when the OS does not say. Added in protocol 1.7. */
1977
- pid: import_zod20.z.int().min(0).optional()
2150
+ pid: import_zod22.z.int().min(0).optional()
1978
2151
  });
1979
- var WindowListParams = import_zod20.z.strictObject({
2152
+ var WindowListParams = import_zod22.z.strictObject({
1980
2153
  /** Case-insensitive substring of the window title. */
1981
- title: import_zod20.z.string().min(1).max(256).optional(),
1982
- limit: import_zod20.z.int().min(1).max(500).default(100)
2154
+ title: import_zod22.z.string().min(1).max(256).optional(),
2155
+ limit: import_zod22.z.int().min(1).max(500).default(100)
1983
2156
  });
1984
- var WindowListResult = import_zod20.z.strictObject({
1985
- windows: import_zod20.z.array(WindowInfo).max(500),
2157
+ var WindowListResult = import_zod22.z.strictObject({
2158
+ windows: import_zod22.z.array(WindowInfo).max(500),
1986
2159
  total: nonNegInt,
1987
- truncated: import_zod20.z.boolean()
2160
+ truncated: import_zod22.z.boolean()
1988
2161
  });
1989
- var WindowFocusParams = import_zod20.z.strictObject({ id: nonNegInt });
1990
- var WindowFocusResult = import_zod20.z.strictObject({ window: WindowInfo });
1991
- var WindowMoveParams = import_zod20.z.strictObject({
2162
+ var WindowFocusParams = import_zod22.z.strictObject({ id: nonNegInt });
2163
+ var WindowFocusResult = import_zod22.z.strictObject({ window: WindowInfo });
2164
+ var WindowMoveParams = import_zod22.z.strictObject({
1992
2165
  id: nonNegInt,
1993
2166
  /** New top-left corner; unchanged when absent. */
1994
- x: import_zod20.z.int().optional(),
1995
- y: import_zod20.z.int().optional(),
2167
+ x: import_zod22.z.int().optional(),
2168
+ y: import_zod22.z.int().optional(),
1996
2169
  /** New size; unchanged when absent. */
1997
- width: import_zod20.z.int().min(50).max(16384).optional(),
1998
- height: import_zod20.z.int().min(50).max(16384).optional()
2170
+ width: import_zod22.z.int().min(50).max(16384).optional(),
2171
+ height: import_zod22.z.int().min(50).max(16384).optional()
1999
2172
  });
2000
- var WindowMoveResult = import_zod20.z.strictObject({ window: WindowInfo });
2001
- var WindowMinimizeParams = import_zod20.z.strictObject({ id: nonNegInt });
2002
- var WindowMinimizeResult = import_zod20.z.strictObject({ id: nonNegInt });
2173
+ var WindowMoveResult = import_zod22.z.strictObject({ window: WindowInfo });
2174
+ var WindowMinimizeParams = import_zod22.z.strictObject({ id: nonNegInt });
2175
+ var WindowMinimizeResult = import_zod22.z.strictObject({ id: nonNegInt });
2003
2176
 
2004
2177
  // src/schema/input.ts
2005
- var import_zod21 = require("zod");
2006
- var InputKey = import_zod21.z.enum([
2178
+ var import_zod23 = require("zod");
2179
+ var InputKey = import_zod23.z.enum([
2007
2180
  "cmd",
2008
2181
  "ctrl",
2009
2182
  "alt",
@@ -2083,65 +2256,65 @@ var InputKey = import_zod21.z.enum([
2083
2256
  "backslash",
2084
2257
  "grave"
2085
2258
  ]);
2086
- var InputTypeTextParams = import_zod21.z.strictObject({ text: import_zod21.z.string().min(1).max(1e4) });
2087
- var InputTypeTextResult = import_zod21.z.strictObject({ characters: import_zod21.z.int().min(1) });
2088
- var InputHotkeyParams = import_zod21.z.strictObject({
2259
+ var InputTypeTextParams = import_zod23.z.strictObject({ text: import_zod23.z.string().min(1).max(1e4) });
2260
+ var InputTypeTextResult = import_zod23.z.strictObject({ characters: import_zod23.z.int().min(1) });
2261
+ var InputHotkeyParams = import_zod23.z.strictObject({
2089
2262
  /** Pressed together in order and released in reverse: ["cmd", "shift", "t"]. */
2090
- keys: import_zod21.z.array(InputKey).min(1).max(6)
2263
+ keys: import_zod23.z.array(InputKey).min(1).max(6)
2091
2264
  });
2092
- var InputHotkeyResult = import_zod21.z.strictObject({ keys: import_zod21.z.array(InputKey) });
2093
- var InputPoint = import_zod21.z.strictObject({ x: import_zod21.z.int(), y: import_zod21.z.int() });
2094
- var InputMouseMoveParams = import_zod21.z.strictObject({
2265
+ var InputHotkeyResult = import_zod23.z.strictObject({ keys: import_zod23.z.array(InputKey) });
2266
+ var InputPoint = import_zod23.z.strictObject({ x: import_zod23.z.int(), y: import_zod23.z.int() });
2267
+ var InputMouseMoveParams = import_zod23.z.strictObject({
2095
2268
  /** Screen position in logical points (the coordinates screen.list and window.list report). */
2096
- x: import_zod21.z.int(),
2097
- y: import_zod21.z.int()
2269
+ x: import_zod23.z.int(),
2270
+ y: import_zod23.z.int()
2098
2271
  });
2099
- var InputMouseMoveResult = import_zod21.z.strictObject({
2272
+ var InputMouseMoveResult = import_zod23.z.strictObject({
2100
2273
  /** Where the pointer is now, read back from the OS. */
2101
2274
  position: InputPoint
2102
2275
  });
2103
- var InputMouseClickParams = import_zod21.z.strictObject({
2276
+ var InputMouseClickParams = import_zod23.z.strictObject({
2104
2277
  /** Move here first; clicks where the pointer is when absent. */
2105
- x: import_zod21.z.int().optional(),
2106
- y: import_zod21.z.int().optional(),
2107
- button: import_zod21.z.enum(["left", "right", "middle"]).default("left"),
2108
- double: import_zod21.z.boolean().default(false)
2278
+ x: import_zod23.z.int().optional(),
2279
+ y: import_zod23.z.int().optional(),
2280
+ button: import_zod23.z.enum(["left", "right", "middle"]).default("left"),
2281
+ double: import_zod23.z.boolean().default(false)
2109
2282
  });
2110
- var InputMouseClickResult = import_zod21.z.strictObject({
2283
+ var InputMouseClickResult = import_zod23.z.strictObject({
2111
2284
  position: InputPoint,
2112
- button: import_zod21.z.enum(["left", "right", "middle"]),
2113
- double: import_zod21.z.boolean()
2285
+ button: import_zod23.z.enum(["left", "right", "middle"]),
2286
+ double: import_zod23.z.boolean()
2114
2287
  });
2115
2288
 
2116
2289
  // src/schema/power.ts
2117
- var import_zod22 = require("zod");
2118
- var PowerStatusParams = import_zod22.z.strictObject({});
2119
- var PowerStatusResult = import_zod22.z.strictObject({
2120
- has_battery: import_zod22.z.boolean(),
2290
+ var import_zod24 = require("zod");
2291
+ var PowerStatusParams = import_zod24.z.strictObject({});
2292
+ var PowerStatusResult = import_zod24.z.strictObject({
2293
+ has_battery: import_zod24.z.boolean(),
2121
2294
  /** 0–100; null without a battery. */
2122
- percent: import_zod22.z.number().min(0).max(100).nullable(),
2123
- charging: import_zod22.z.boolean().nullable(),
2295
+ percent: import_zod24.z.number().min(0).max(100).nullable(),
2296
+ charging: import_zod24.z.boolean().nullable(),
2124
2297
  /** On wall power; null where the OS does not say. */
2125
- plugged_in: import_zod22.z.boolean().nullable(),
2298
+ plugged_in: import_zod24.z.boolean().nullable(),
2126
2299
  /** Minutes of battery left; null when charging, unknown or without a battery. */
2127
2300
  minutes_left: nonNegInt.nullable(),
2128
2301
  /** Matrx 2 is keeping the computer awake (power.prevent_sleep) until this time; null when it is not. */
2129
2302
  awake_until_ms: epochMs.nullable()
2130
2303
  });
2131
- var PowerPreventSleepParams = import_zod22.z.strictObject({
2304
+ var PowerPreventSleepParams = import_zod24.z.strictObject({
2132
2305
  /** Keep the computer awake this long; 0 lets it sleep again now. */
2133
- seconds: import_zod22.z.int().min(0).max(86400),
2306
+ seconds: import_zod24.z.int().min(0).max(86400),
2134
2307
  /** Shown where the OS lists what keeps it awake. */
2135
- reason: import_zod22.z.string().min(1).max(128).default("Matrx 2 is working")
2308
+ reason: import_zod24.z.string().min(1).max(128).default("Matrx 2 is working")
2136
2309
  });
2137
- var PowerPreventSleepResult = import_zod22.z.strictObject({
2310
+ var PowerPreventSleepResult = import_zod24.z.strictObject({
2138
2311
  /** When it may sleep again; null after seconds 0. */
2139
2312
  awake_until_ms: epochMs.nullable()
2140
2313
  });
2141
2314
 
2142
2315
  // src/schema/diag.ts
2143
- var import_zod23 = require("zod");
2144
- var DiagProcess = import_zod23.z.enum([
2316
+ var import_zod25 = require("zod");
2317
+ var DiagProcess = import_zod25.z.enum([
2145
2318
  "main",
2146
2319
  "renderer",
2147
2320
  "hosted_page",
@@ -2154,7 +2327,7 @@ var DiagProcess = import_zod23.z.enum([
2154
2327
  "coding_sessions",
2155
2328
  "claude_accounts"
2156
2329
  ]);
2157
- var DiagErrorKind = import_zod23.z.enum([
2330
+ var DiagErrorKind = import_zod25.z.enum([
2158
2331
  "uncaught_exception",
2159
2332
  "unhandled_rejection",
2160
2333
  "renderer_crash",
@@ -2166,148 +2339,148 @@ var DiagErrorKind = import_zod23.z.enum([
2166
2339
  "banner",
2167
2340
  "logged_error"
2168
2341
  ]);
2169
- var DiagErrorStatus = import_zod23.z.enum(["waiting", "sent", "resolved"]);
2170
- var DiagErrorEntry = import_zod23.z.strictObject({
2342
+ var DiagErrorStatus = import_zod25.z.enum(["waiting", "sent", "resolved"]);
2343
+ var DiagErrorEntry = import_zod25.z.strictObject({
2171
2344
  /** sha256 prefix over process, kind, source, code and the normalized message. */
2172
- signature: import_zod23.z.string().regex(/^[0-9a-f]{32}$/),
2345
+ signature: import_zod25.z.string().regex(/^[0-9a-f]{32}$/),
2173
2346
  process: DiagProcess,
2174
2347
  kind: DiagErrorKind,
2175
2348
  /** Where: a cap.op, a log event, a screen or page name. */
2176
- source: import_zod23.z.string().min(1).max(128),
2349
+ source: import_zod25.z.string().min(1).max(128),
2177
2350
  /** An ErrorCode, an exit code or signal, an error class; null when there is none. */
2178
- code: import_zod23.z.string().max(64).nullable(),
2351
+ code: import_zod25.z.string().max(64).nullable(),
2179
2352
  /** The first occurrence's message, personal data removed. */
2180
- message: import_zod23.z.string().max(500),
2353
+ message: import_zod25.z.string().max(500),
2181
2354
  count: nonNegInt,
2182
2355
  first_seen_ms: epochMs,
2183
2356
  last_seen_ms: epochMs,
2184
2357
  status: DiagErrorStatus,
2185
2358
  /** What the agent who resolved it wrote; null until resolved. */
2186
- resolution_note: import_zod23.z.string().max(500).nullable(),
2187
- app_version: import_zod23.z.string().max(64)
2359
+ resolution_note: import_zod25.z.string().max(500).nullable(),
2360
+ app_version: import_zod25.z.string().max(64)
2188
2361
  });
2189
- var DiagErrorsListParams = import_zod23.z.strictObject({
2362
+ var DiagErrorsListParams = import_zod25.z.strictObject({
2190
2363
  /** open = waiting or sent; all includes resolved. */
2191
- status: import_zod23.z.enum(["open", "all"]).default("open"),
2192
- limit: import_zod23.z.int().min(1).max(500).default(200)
2364
+ status: import_zod25.z.enum(["open", "all"]).default("open"),
2365
+ limit: import_zod25.z.int().min(1).max(500).default(200)
2193
2366
  });
2194
- var DiagErrorsListResult = import_zod23.z.strictObject({
2367
+ var DiagErrorsListResult = import_zod25.z.strictObject({
2195
2368
  /** Newest last_seen first. */
2196
- entries: import_zod23.z.array(DiagErrorEntry).max(500),
2369
+ entries: import_zod25.z.array(DiagErrorEntry).max(500),
2197
2370
  total_signatures: nonNegInt,
2198
2371
  total_occurrences: nonNegInt,
2199
2372
  /** Signatures with occurrences not yet delivered. */
2200
2373
  waiting: nonNegInt,
2201
2374
  /** signed_out = kept until sign-in; ok = the last delivery worked; failing = the last delivery failed (kept, retried). */
2202
- delivery: import_zod23.z.enum(["signed_out", "ok", "failing"]),
2375
+ delivery: import_zod25.z.enum(["signed_out", "ok", "failing"]),
2203
2376
  last_delivery_ms: epochMs.nullable()
2204
2377
  });
2205
- var DiagErrorsReportParams = import_zod23.z.strictObject({
2206
- process: import_zod23.z.enum(["renderer", "hosted_page"]),
2207
- kind: import_zod23.z.enum(["uncaught_exception", "unhandled_rejection", "console_error", "banner"]),
2378
+ var DiagErrorsReportParams = import_zod25.z.strictObject({
2379
+ process: import_zod25.z.enum(["renderer", "hosted_page"]),
2380
+ kind: import_zod25.z.enum(["uncaught_exception", "unhandled_rejection", "console_error", "banner"]),
2208
2381
  /** The screen or page, e.g. "code.chats". */
2209
- source: import_zod23.z.string().min(1).max(128),
2210
- message: import_zod23.z.string().min(1).max(2e3),
2211
- code: import_zod23.z.string().max(64).optional(),
2212
- stack: import_zod23.z.string().max(8e3).optional()
2382
+ source: import_zod25.z.string().min(1).max(128),
2383
+ message: import_zod25.z.string().min(1).max(2e3),
2384
+ code: import_zod25.z.string().max(64).optional(),
2385
+ stack: import_zod25.z.string().max(8e3).optional()
2213
2386
  });
2214
- var DiagErrorsReportResult = import_zod23.z.strictObject({
2215
- signature: import_zod23.z.string().regex(/^[0-9a-f]{32}$/)
2387
+ var DiagErrorsReportResult = import_zod25.z.strictObject({
2388
+ signature: import_zod25.z.string().regex(/^[0-9a-f]{32}$/)
2216
2389
  });
2217
- var DiagErrorsChangedEvent = import_zod23.z.strictObject({
2390
+ var DiagErrorsChangedEvent = import_zod25.z.strictObject({
2218
2391
  total_signatures: nonNegInt,
2219
2392
  waiting: nonNegInt
2220
2393
  });
2221
2394
 
2222
2395
  // src/schema/resources.ts
2223
- var import_zod24 = require("zod");
2224
- var ResourcesDisk = import_zod24.z.strictObject({
2396
+ var import_zod26 = require("zod");
2397
+ var ResourcesDisk = import_zod26.z.strictObject({
2225
2398
  /** Where it is mounted ("/", "C:"). */
2226
- mount: import_zod24.z.string().max(512),
2399
+ mount: import_zod26.z.string().max(512),
2227
2400
  /** The volume's name as the file manager shows it ("Macintosh HD", "Local Disk (C:)"). Since 1.17. */
2228
- name: import_zod24.z.string().max(256).optional(),
2401
+ name: import_zod26.z.string().max(256).optional(),
2229
2402
  /** The file system ("apfs", "NTFS", "ext4"). */
2230
- fs: import_zod24.z.string().max(64),
2403
+ fs: import_zod26.z.string().max(64),
2231
2404
  size_bytes: nonNegInt,
2232
2405
  used_bytes: nonNegInt,
2233
2406
  available_bytes: nonNegInt
2234
2407
  });
2235
- var ResourcesSnapshotParams = import_zod24.z.strictObject({});
2236
- var ResourcesSnapshotResult = import_zod24.z.strictObject({
2237
- cpu: import_zod24.z.strictObject({
2408
+ var ResourcesSnapshotParams = import_zod26.z.strictObject({});
2409
+ var ResourcesSnapshotResult = import_zod26.z.strictObject({
2410
+ cpu: import_zod26.z.strictObject({
2238
2411
  /** Busy share of all cores, 0–100, measured now. */
2239
- percent: import_zod24.z.number().min(0).max(100),
2240
- cores: import_zod24.z.int().min(1),
2412
+ percent: import_zod26.z.number().min(0).max(100),
2413
+ cores: import_zod26.z.int().min(1),
2241
2414
  /** 1, 5 and 15 minute load averages; null on Windows. */
2242
- load: import_zod24.z.array(import_zod24.z.number().min(0)).length(3).nullable()
2415
+ load: import_zod26.z.array(import_zod26.z.number().min(0)).length(3).nullable()
2243
2416
  }),
2244
- memory: import_zod24.z.strictObject({ total_bytes: nonNegInt, used_bytes: nonNegInt, available_bytes: nonNegInt }),
2245
- swap: import_zod24.z.strictObject({ total_bytes: nonNegInt, used_bytes: nonNegInt }),
2246
- disks: import_zod24.z.array(ResourcesDisk).max(64),
2417
+ memory: import_zod26.z.strictObject({ total_bytes: nonNegInt, used_bytes: nonNegInt, available_bytes: nonNegInt }),
2418
+ swap: import_zod26.z.strictObject({ total_bytes: nonNegInt, used_bytes: nonNegInt }),
2419
+ disks: import_zod26.z.array(ResourcesDisk).max(64),
2247
2420
  uptime_seconds: nonNegInt
2248
2421
  });
2249
- var ResourcesJobKind = import_zod24.z.enum(["type-check", "tests", "build", "lint", "dev server", "language server", "search"]);
2250
- var ResourcesStrain = import_zod24.z.enum(["good", "strain", "overloaded"]);
2251
- var ResourcesPressure = import_zod24.z.enum(["normal", "warning", "critical"]);
2252
- var ResourcesJob = import_zod24.z.strictObject({
2422
+ var ResourcesJobKind = import_zod26.z.enum(["type-check", "tests", "build", "lint", "dev server", "language server", "search"]);
2423
+ var ResourcesStrain = import_zod26.z.enum(["good", "strain", "overloaded"]);
2424
+ var ResourcesPressure = import_zod26.z.enum(["normal", "warning", "critical"]);
2425
+ var ResourcesJob = import_zod26.z.strictObject({
2253
2426
  /** The job's root process (Stop takes its whole tree). */
2254
- pid: import_zod24.z.int().min(0),
2427
+ pid: import_zod26.z.int().min(0),
2255
2428
  kind: ResourcesJobKind,
2256
2429
  /** Its heaviest process's command line, shortened ("…/lib/tsc --noEmit -p tsconfig.json"). */
2257
- command: import_zod24.z.string().max(256),
2430
+ command: import_zod26.z.string().max(256),
2258
2431
  /** Who started it: "Claude Code", "Codex", "Cursor", "VS Code", "Terminal", "local stack", "detached"; null when unknown. */
2259
- started_by: import_zod24.z.string().max(64).nullable(),
2432
+ started_by: import_zod26.z.string().max(64).nullable(),
2260
2433
  /** Whatever started it is gone and nothing waits for it. */
2261
- orphan: import_zod24.z.boolean(),
2434
+ orphan: import_zod26.z.boolean(),
2262
2435
  /** A type-check queued for its turn (no compiler running yet). */
2263
- waiting: import_zod24.z.boolean(),
2436
+ waiting: import_zod26.z.boolean(),
2264
2437
  /** The project folder it runs in ("matrx-frontend"); null when not in one. */
2265
- folder: import_zod24.z.string().max(256).nullable(),
2438
+ folder: import_zod26.z.string().max(256).nullable(),
2266
2439
  /** The same command in the same folder, running this many times (1 = no duplicate). */
2267
- duplicates: import_zod24.z.int().min(1),
2268
- processes: import_zod24.z.int().min(1),
2440
+ duplicates: import_zod26.z.int().min(1),
2441
+ processes: import_zod26.z.int().min(1),
2269
2442
  /** Sum over the tree, as `ps` reports it: 100 = one full core. */
2270
- cpu_percent: import_zod24.z.number().min(0),
2443
+ cpu_percent: import_zod26.z.number().min(0),
2271
2444
  /** Real memory (macOS: the physical footprint Activity Monitor shows, compressed included). */
2272
2445
  memory_bytes: nonNegInt,
2273
2446
  started_at_ms: epochMs.nullable(),
2274
2447
  /** False for an app, an agent session, a terminal, a system process, the local stack or Matrx 2 itself. */
2275
- stoppable: import_zod24.z.boolean()
2448
+ stoppable: import_zod26.z.boolean()
2276
2449
  });
2277
- var ResourcesProcess = import_zod24.z.strictObject({
2278
- pid: import_zod24.z.int().min(0),
2450
+ var ResourcesProcess = import_zod26.z.strictObject({
2451
+ pid: import_zod26.z.int().min(0),
2279
2452
  /** The command line, shortened. */
2280
- name: import_zod24.z.string().max(256),
2281
- cpu_percent: import_zod24.z.number().min(0),
2453
+ name: import_zod26.z.string().max(256),
2454
+ cpu_percent: import_zod26.z.number().min(0),
2282
2455
  memory_bytes: nonNegInt,
2283
- started_by: import_zod24.z.string().max(64).nullable(),
2456
+ started_by: import_zod26.z.string().max(64).nullable(),
2284
2457
  /** The job it belongs to ("type-check in aidream"); null when none. */
2285
- job: import_zod24.z.string().max(256).nullable(),
2458
+ job: import_zod26.z.string().max(256).nullable(),
2286
2459
  started_at_ms: epochMs.nullable()
2287
2460
  });
2288
- var ResourcesVerdict = import_zod24.z.strictObject({
2461
+ var ResourcesVerdict = import_zod26.z.strictObject({
2289
2462
  level: ResourcesStrain,
2290
2463
  /** One sentence ("Your Mac is under strain. 3 type-checks are running at once."). */
2291
- text: import_zod24.z.string().max(256),
2464
+ text: import_zod26.z.string().max(256),
2292
2465
  /** The biggest jobs behind it; null when all is well. */
2293
- cause: import_zod24.z.string().max(1024).nullable()
2466
+ cause: import_zod26.z.string().max(1024).nullable()
2294
2467
  });
2295
- var ResourcesSample = import_zod24.z.strictObject({
2468
+ var ResourcesSample = import_zod26.z.strictObject({
2296
2469
  at_ms: epochMs,
2297
2470
  /** The 1-minute load average. */
2298
- load: import_zod24.z.number().min(0),
2471
+ load: import_zod26.z.number().min(0),
2299
2472
  memory_used_bytes: nonNegInt,
2300
2473
  typechecks: nonNegInt
2301
2474
  });
2302
- var ResourcesActivityParams = import_zod24.z.strictObject({});
2303
- var ResourcesActivityResult = import_zod24.z.strictObject({
2475
+ var ResourcesActivityParams = import_zod26.z.strictObject({});
2476
+ var ResourcesActivityResult = import_zod26.z.strictObject({
2304
2477
  /** False until the first reading (a second or two after start). */
2305
- ready: import_zod24.z.boolean(),
2478
+ ready: import_zod26.z.boolean(),
2306
2479
  sampled_at_ms: epochMs.nullable(),
2307
- cores: import_zod24.z.int().min(1),
2480
+ cores: import_zod26.z.int().min(1),
2308
2481
  /** 1, 5 and 15 minute load averages. */
2309
- load: import_zod24.z.array(import_zod24.z.number().min(0)).length(3),
2310
- memory: import_zod24.z.strictObject({
2482
+ load: import_zod26.z.array(import_zod26.z.number().min(0)).length(3),
2483
+ memory: import_zod26.z.strictObject({
2311
2484
  total_bytes: nonNegInt,
2312
2485
  /** Activity Monitor's Memory Used: app memory + wired + compressed. */
2313
2486
  used_bytes: nonNegInt,
@@ -2318,252 +2491,252 @@ var ResourcesActivityResult = import_zod24.z.strictObject({
2318
2491
  pressure: ResourcesPressure.nullable()
2319
2492
  }),
2320
2493
  verdict: ResourcesVerdict,
2321
- typechecks: import_zod24.z.strictObject({ running: nonNegInt, waiting: nonNegInt, comfort: nonNegInt }),
2494
+ typechecks: import_zod26.z.strictObject({ running: nonNegInt, waiting: nonNegInt, comfort: nonNegInt }),
2322
2495
  /** Heaviest first (1 GB weighs as much as 16 % of a core). */
2323
- jobs: import_zod24.z.array(ResourcesJob).max(200),
2496
+ jobs: import_zod26.z.array(ResourcesJob).max(200),
2324
2497
  /** The 15 heaviest by memory and the 15 busiest by CPU, together. */
2325
- top: import_zod24.z.array(ResourcesProcess).max(30),
2498
+ top: import_zod26.z.array(ResourcesProcess).max(30),
2326
2499
  /** The last hour, oldest first. */
2327
- history: import_zod24.z.array(ResourcesSample).max(1200)
2500
+ history: import_zod26.z.array(ResourcesSample).max(1200)
2328
2501
  });
2329
- var ResourcesStopJobParams = import_zod24.z.strictObject({ pid: import_zod24.z.int().min(1) });
2330
- var ResourcesStopJobResult = import_zod24.z.strictObject({
2502
+ var ResourcesStopJobParams = import_zod26.z.strictObject({ pid: import_zod26.z.int().min(1) });
2503
+ var ResourcesStopJobResult = import_zod26.z.strictObject({
2331
2504
  /** Processes signalled; whatever is still running 5 seconds later is force-stopped. */
2332
2505
  processes: nonNegInt,
2333
2506
  /** It had finished before the request arrived. */
2334
- already_finished: import_zod24.z.boolean()
2507
+ already_finished: import_zod26.z.boolean()
2335
2508
  });
2336
- var ResourcesIncident = import_zod24.z.strictObject({
2509
+ var ResourcesIncident = import_zod26.z.strictObject({
2337
2510
  at_ms: epochMs,
2338
2511
  verdict: ResourcesVerdict,
2339
- load: import_zod24.z.number().min(0),
2512
+ load: import_zod26.z.number().min(0),
2340
2513
  memory_used_bytes: nonNegInt,
2341
2514
  compressed_bytes: nonNegInt,
2342
2515
  pressure: ResourcesPressure.nullable(),
2343
- jobs: import_zod24.z.array(
2344
- import_zod24.z.strictObject({
2516
+ jobs: import_zod26.z.array(
2517
+ import_zod26.z.strictObject({
2345
2518
  kind: ResourcesJobKind,
2346
- started_by: import_zod24.z.string().max(64).nullable(),
2347
- folder: import_zod24.z.string().max(256).nullable(),
2348
- command: import_zod24.z.string().max(256),
2349
- cpu_percent: import_zod24.z.number().min(0),
2519
+ started_by: import_zod26.z.string().max(64).nullable(),
2520
+ folder: import_zod26.z.string().max(256).nullable(),
2521
+ command: import_zod26.z.string().max(256),
2522
+ cpu_percent: import_zod26.z.number().min(0),
2350
2523
  memory_bytes: nonNegInt,
2351
- duplicates: import_zod24.z.int().min(1)
2524
+ duplicates: import_zod26.z.int().min(1)
2352
2525
  })
2353
2526
  ).max(8)
2354
2527
  });
2355
- var ResourcesIncidentsParams = import_zod24.z.strictObject({ limit: import_zod24.z.int().min(1).max(200).default(50) });
2356
- var ResourcesIncidentsResult = import_zod24.z.strictObject({
2528
+ var ResourcesIncidentsParams = import_zod26.z.strictObject({ limit: import_zod26.z.int().min(1).max(200).default(50) });
2529
+ var ResourcesIncidentsResult = import_zod26.z.strictObject({
2357
2530
  /** Newest first; at most one a minute is written. */
2358
- incidents: import_zod24.z.array(ResourcesIncident).max(200)
2531
+ incidents: import_zod26.z.array(ResourcesIncident).max(200)
2359
2532
  });
2360
2533
 
2361
2534
  // src/schema/stack.ts
2362
- var import_zod25 = require("zod");
2363
- var StackServerName = import_zod25.z.string().regex(/^[a-z0-9_-]{1,64}$/);
2364
- var StackTone = import_zod25.z.enum(["good", "wait", "bad", "off"]);
2365
- var StackServer = import_zod25.z.strictObject({
2535
+ var import_zod27 = require("zod");
2536
+ var StackServerName = import_zod27.z.string().regex(/^[a-z0-9_-]{1,64}$/);
2537
+ var StackTone = import_zod27.z.enum(["good", "wait", "bad", "off"]);
2538
+ var StackServer = import_zod27.z.strictObject({
2366
2539
  name: StackServerName,
2367
2540
  /** One word: Healthy, Starting, Unhealthy, Restarting, Stopping, Waiting, Stopped, Crashed, Off. */
2368
- label: import_zod25.z.string().max(32),
2541
+ label: import_zod27.z.string().max(32),
2369
2542
  tone: StackTone,
2370
2543
  /** What is going on, in one or two plain sentences. */
2371
- sentence: import_zod25.z.string().max(2e3),
2544
+ sentence: import_zod27.z.string().max(2e3),
2372
2545
  /** The config's own description of the server. */
2373
- description: import_zod25.z.string().max(512),
2546
+ description: import_zod27.z.string().max(512),
2374
2547
  /** Where the server answers, when its description names an address. */
2375
- open_url: import_zod25.z.string().max(2048).nullable(),
2376
- log_file: import_zod25.z.string().max(4096),
2548
+ open_url: import_zod27.z.string().max(2048).nullable(),
2549
+ log_file: import_zod27.z.string().max(4096),
2377
2550
  /** When its log file was last written. */
2378
2551
  last_output_at_ms: epochMs.nullable(),
2379
2552
  started_at_ms: epochMs.nullable(),
2380
2553
  restarts: nonNegInt,
2381
- exit_code: import_zod25.z.int().nullable(),
2382
- pid: import_zod25.z.int().nullable(),
2554
+ exit_code: import_zod27.z.int().nullable(),
2555
+ pid: import_zod27.z.int().nullable(),
2383
2556
  /** (1.18) CPU of the server's process and everything under it, in percent of one core; absent when it is not running. */
2384
- cpu_percent: import_zod25.z.number().min(0).optional(),
2557
+ cpu_percent: import_zod27.z.number().min(0).optional(),
2385
2558
  /** (1.18) Memory of the same processes: the physical footprint (Activity Monitor's Memory) summed; absent when it is not running. */
2386
2559
  memory_bytes: nonNegInt.optional()
2387
2560
  });
2388
- var StackEvent = import_zod25.z.strictObject({
2561
+ var StackEvent = import_zod27.z.strictObject({
2389
2562
  at_ms: epochMs,
2390
2563
  /** A server name, or "stack" for the stack as a whole. */
2391
- server: import_zod25.z.string().max(64),
2564
+ server: import_zod27.z.string().max(64),
2392
2565
  /** started · stopped · healthy · unhealthy · crashed · exited · restarting · stopping · action · action-done · action-failed · setup · error */
2393
- kind: import_zod25.z.string().max(32),
2394
- text: import_zod25.z.string().max(4e3)
2566
+ kind: import_zod27.z.string().max(32),
2567
+ text: import_zod27.z.string().max(4e3)
2395
2568
  });
2396
- var StackStateParams = import_zod25.z.strictObject({});
2397
- var StackStateResult = import_zod25.z.strictObject({
2569
+ var StackStateParams = import_zod27.z.strictObject({});
2570
+ var StackStateResult = import_zod27.z.strictObject({
2398
2571
  /** The stack's config file, when found. */
2399
- config_path: import_zod25.z.string().max(4096).nullable(),
2572
+ config_path: import_zod27.z.string().max(4096).nullable(),
2400
2573
  /** Why the stack cannot be run from here (no config, no process-compose), else null. */
2401
- problem: import_zod25.z.string().max(1e3).nullable(),
2402
- stack_up: import_zod25.z.boolean(),
2574
+ problem: import_zod27.z.string().max(1e3).nullable(),
2575
+ stack_up: import_zod27.z.boolean(),
2403
2576
  stack_started_at_ms: epochMs.nullable(),
2404
- servers: import_zod25.z.array(StackServer).max(64),
2577
+ servers: import_zod27.z.array(StackServer).max(64),
2405
2578
  /** One line about the one-shot setup steps ("Docker Desktop: running."), or null. */
2406
- setup_note: import_zod25.z.string().max(500).nullable(),
2579
+ setup_note: import_zod27.z.string().max(500).nullable(),
2407
2580
  /** Start everything / Stop everything in flight. */
2408
- pending: import_zod25.z.strictObject({ verb: import_zod25.z.enum(["start", "stop"]), label: import_zod25.z.string().max(64), since_ms: epochMs }).nullable(),
2581
+ pending: import_zod27.z.strictObject({ verb: import_zod27.z.enum(["start", "stop"]), label: import_zod27.z.string().max(64), since_ms: epochMs }).nullable(),
2409
2582
  /** The newest entries last. */
2410
- events: import_zod25.z.array(StackEvent).max(300)
2583
+ events: import_zod27.z.array(StackEvent).max(300)
2411
2584
  });
2412
- var StackStartParams = import_zod25.z.strictObject({});
2413
- var StackStopParams = import_zod25.z.strictObject({});
2414
- var StackRunResult = import_zod25.z.strictObject({ accepted: import_zod25.z.boolean() });
2415
- var StackServerActionParams = import_zod25.z.strictObject({
2585
+ var StackStartParams = import_zod27.z.strictObject({});
2586
+ var StackStopParams = import_zod27.z.strictObject({});
2587
+ var StackRunResult = import_zod27.z.strictObject({ accepted: import_zod27.z.boolean() });
2588
+ var StackServerActionParams = import_zod27.z.strictObject({
2416
2589
  name: StackServerName,
2417
- verb: import_zod25.z.enum(["start", "stop", "restart"])
2590
+ verb: import_zod27.z.enum(["start", "stop", "restart"])
2418
2591
  });
2419
- var StackServerActionResult = import_zod25.z.strictObject({ message: import_zod25.z.string().max(1e3) });
2420
- var StackLogsParams = import_zod25.z.strictObject({
2592
+ var StackServerActionResult = import_zod27.z.strictObject({ message: import_zod27.z.string().max(1e3) });
2593
+ var StackLogsParams = import_zod27.z.strictObject({
2421
2594
  name: StackServerName,
2422
2595
  /** Without `offset`: the last this-many complete lines. With it: new lines after it, at most this many. */
2423
- lines: import_zod25.z.int().min(1).max(2e5).default(2e3),
2596
+ lines: import_zod27.z.int().min(1).max(2e5).default(2e3),
2424
2597
  /** Byte offset the last read ended at: answer only what was written after it (follow). */
2425
2598
  offset: nonNegInt.optional(),
2426
2599
  /** A "Clear" point: the lines written after this byte offset (no `offset`). */
2427
2600
  since: nonNegInt.optional(),
2428
2601
  /** With `offset`: wait up to this long for a new line when none is waiting (0 answers at once). */
2429
- wait_ms: import_zod25.z.int().min(0).max(25e3).default(0)
2602
+ wait_ms: import_zod27.z.int().min(0).max(25e3).default(0)
2430
2603
  });
2431
- var StackLogsResult = import_zod25.z.strictObject({
2604
+ var StackLogsResult = import_zod27.z.strictObject({
2432
2605
  /** Complete lines, colour codes removed. */
2433
- lines: import_zod25.z.array(import_zod25.z.string().max(65536)).max(2e5),
2606
+ lines: import_zod27.z.array(import_zod27.z.string().max(65536)).max(2e5),
2434
2607
  /** Where these lines end: pass it back as `offset` to follow. */
2435
2608
  offset: nonNegInt,
2436
2609
  /** False when `since` no longer exists (the log rotated): the lines are the plain tail instead. */
2437
- since_valid: import_zod25.z.boolean(),
2610
+ since_valid: import_zod27.z.boolean(),
2438
2611
  /** The log was rotated or truncated since `offset`: these lines start the file again. */
2439
- reset: import_zod25.z.boolean(),
2440
- log_file: import_zod25.z.string().max(4096)
2612
+ reset: import_zod27.z.boolean(),
2613
+ log_file: import_zod27.z.string().max(4096)
2441
2614
  });
2442
- var StackErrorsParams = import_zod25.z.strictObject({
2443
- window_minutes: import_zod25.z.int().min(1).max(1440).default(60)
2615
+ var StackErrorsParams = import_zod27.z.strictObject({
2616
+ window_minutes: import_zod27.z.int().min(1).max(1440).default(60)
2444
2617
  });
2445
- var StackErrorsResult = import_zod25.z.strictObject({
2618
+ var StackErrorsResult = import_zod27.z.strictObject({
2446
2619
  /** Per server: a heading line ("=== aidream — errors in the last 60 minutes (<file>) ===") and each error with the 10 lines after it. */
2447
- sections: import_zod25.z.array(import_zod25.z.strictObject({ name: StackServerName, heading: import_zod25.z.string().max(4096), lines: import_zod25.z.array(import_zod25.z.string().max(65536)).max(5e3) })).max(64),
2448
- window_minutes: import_zod25.z.int().min(1).max(1440)
2620
+ sections: import_zod27.z.array(import_zod27.z.strictObject({ name: StackServerName, heading: import_zod27.z.string().max(4096), lines: import_zod27.z.array(import_zod27.z.string().max(65536)).max(5e3) })).max(64),
2621
+ window_minutes: import_zod27.z.int().min(1).max(1440)
2449
2622
  });
2450
2623
 
2451
2624
  // src/schema/audio.ts
2452
- var import_zod26 = require("zod");
2453
- var AudioDevice = import_zod26.z.strictObject({
2625
+ var import_zod28 = require("zod");
2626
+ var AudioDevice = import_zod28.z.strictObject({
2454
2627
  /** The OS's name for it, as audio.record takes it. */
2455
- id: import_zod26.z.string().min(1).max(256),
2456
- name: import_zod26.z.string().max(256),
2457
- default: import_zod26.z.boolean()
2628
+ id: import_zod28.z.string().min(1).max(256),
2629
+ name: import_zod28.z.string().max(256),
2630
+ default: import_zod28.z.boolean()
2458
2631
  });
2459
- var AudioDevicesParams = import_zod26.z.strictObject({});
2460
- var AudioDevicesResult = import_zod26.z.strictObject({
2461
- inputs: import_zod26.z.array(AudioDevice).max(64),
2462
- outputs: import_zod26.z.array(AudioDevice).max(64)
2632
+ var AudioDevicesParams = import_zod28.z.strictObject({});
2633
+ var AudioDevicesResult = import_zod28.z.strictObject({
2634
+ inputs: import_zod28.z.array(AudioDevice).max(64),
2635
+ outputs: import_zod28.z.array(AudioDevice).max(64)
2463
2636
  });
2464
- var AudioRecordParams = import_zod26.z.strictObject({
2465
- seconds: import_zod26.z.number().min(0.5).max(600),
2637
+ var AudioRecordParams = import_zod28.z.strictObject({
2638
+ seconds: import_zod28.z.number().min(0.5).max(600),
2466
2639
  /** The microphone (from audio.devices); the default input when absent. */
2467
- device_id: import_zod26.z.string().min(1).max(256).optional(),
2640
+ device_id: import_zod28.z.string().min(1).max(256).optional(),
2468
2641
  /** Where the WAV file goes; a new file in the temp folder when absent. */
2469
2642
  path: AbsPath.optional()
2470
2643
  });
2471
- var AudioRecordResult = import_zod26.z.strictObject({
2644
+ var AudioRecordResult = import_zod28.z.strictObject({
2472
2645
  path: AbsPath,
2473
- seconds: import_zod26.z.number().min(0),
2646
+ seconds: import_zod28.z.number().min(0),
2474
2647
  bytes: nonNegInt,
2475
2648
  /** Loudest sample, 0–1: 0 means the device gave silence. */
2476
- peak: import_zod26.z.number().min(0).max(1)
2649
+ peak: import_zod28.z.number().min(0).max(1)
2477
2650
  });
2478
- var AudioPlayParams = import_zod26.z.strictObject({ path: AbsPath });
2479
- var AudioPlayResult = import_zod26.z.strictObject({ path: AbsPath, seconds: import_zod26.z.number().min(0) });
2651
+ var AudioPlayParams = import_zod28.z.strictObject({ path: AbsPath });
2652
+ var AudioPlayResult = import_zod28.z.strictObject({ path: AbsPath, seconds: import_zod28.z.number().min(0) });
2480
2653
 
2481
2654
  // src/schema/fs-watch.ts
2482
- var import_zod27 = require("zod");
2483
- var FsWatchId = import_zod27.z.string().regex(/^fw_[A-Za-z0-9]{12,40}$/);
2484
- var FsWatchStartParams = import_zod27.z.strictObject({
2655
+ var import_zod29 = require("zod");
2656
+ var FsWatchId = import_zod29.z.string().regex(/^fw_[A-Za-z0-9]{12,40}$/);
2657
+ var FsWatchStartParams = import_zod29.z.strictObject({
2485
2658
  path: AbsPath,
2486
- recursive: import_zod27.z.boolean().default(true),
2659
+ recursive: import_zod29.z.boolean().default(true),
2487
2660
  /** Globs relative to `path` whose changes are not reported (".git/**", "node_modules/**"). */
2488
- ignore: import_zod27.z.array(import_zod27.z.string().max(256)).max(64).default([])
2661
+ ignore: import_zod29.z.array(import_zod29.z.string().max(256)).max(64).default([])
2489
2662
  });
2490
- var FsWatchStartResult = import_zod27.z.strictObject({
2663
+ var FsWatchStartResult = import_zod29.z.strictObject({
2491
2664
  watch_id: FsWatchId,
2492
2665
  path: AbsPath,
2493
2666
  /** The watch ends by itself if nobody reads it for 30 minutes. */
2494
2667
  expires_at_ms: epochMs
2495
2668
  });
2496
- var FsWatchEventsParams = import_zod27.z.strictObject({
2669
+ var FsWatchEventsParams = import_zod29.z.strictObject({
2497
2670
  watch_id: FsWatchId,
2498
2671
  /** Wait up to this long for a first change when none is waiting (0 answers at once). */
2499
- wait_ms: import_zod27.z.int().min(0).max(25e3).default(0)
2672
+ wait_ms: import_zod29.z.int().min(0).max(25e3).default(0)
2500
2673
  });
2501
- var FsWatchEventsResult = import_zod27.z.strictObject({
2674
+ var FsWatchEventsResult = import_zod29.z.strictObject({
2502
2675
  /** What changed since the last read, oldest first; re-checked against the disk when read. */
2503
- changes: import_zod27.z.array(FsChange).max(1e3),
2676
+ changes: import_zod29.z.array(FsChange).max(1e3),
2504
2677
  /** Changes were dropped (more than 1000 waited): list the folder again. */
2505
- overflow: import_zod27.z.boolean(),
2678
+ overflow: import_zod29.z.boolean(),
2506
2679
  expires_at_ms: epochMs
2507
2680
  });
2508
- var FsWatchStopParams = import_zod27.z.strictObject({ watch_id: FsWatchId });
2509
- var FsWatchStopResult = import_zod27.z.strictObject({ watch_id: FsWatchId });
2681
+ var FsWatchStopParams = import_zod29.z.strictObject({ watch_id: FsWatchId });
2682
+ var FsWatchStopResult = import_zod29.z.strictObject({ watch_id: FsWatchId });
2510
2683
 
2511
2684
  // src/schema/exec-job.ts
2512
- var import_zod28 = require("zod");
2513
- var ExecJobId = import_zod28.z.string().regex(/^job_[A-Za-z0-9]{12,40}$/);
2514
- var ExecJobStartParams = import_zod28.z.strictObject({
2515
- command: import_zod28.z.string().min(1).max(131072),
2685
+ var import_zod30 = require("zod");
2686
+ var ExecJobId = import_zod30.z.string().regex(/^job_[A-Za-z0-9]{12,40}$/);
2687
+ var ExecJobStartParams = import_zod30.z.strictObject({
2688
+ command: import_zod30.z.string().min(1).max(131072),
2516
2689
  /** The folder it runs in; the home folder when absent. */
2517
2690
  cwd: AbsPath.optional(),
2518
- env: import_zod28.z.record(import_zod28.z.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(128), import_zod28.z.string().max(32768)).optional()
2691
+ env: import_zod30.z.record(import_zod30.z.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(128), import_zod30.z.string().max(32768)).optional()
2519
2692
  });
2520
- var ExecJobStartResult = import_zod28.z.strictObject({ job_id: ExecJobId, pid: import_zod28.z.int().min(1), cwd: AbsPath });
2521
- var ExecJobOutputParams = import_zod28.z.strictObject({
2693
+ var ExecJobStartResult = import_zod30.z.strictObject({ job_id: ExecJobId, pid: import_zod30.z.int().min(1), cwd: AbsPath });
2694
+ var ExecJobOutputParams = import_zod30.z.strictObject({
2522
2695
  job_id: ExecJobId,
2523
2696
  /** Byte offset into the job's output to read from (next_offset of the last read; 0 = the start). */
2524
2697
  offset: nonNegInt.default(0),
2525
2698
  /** Wait up to this long for new output or the exit when none is waiting (0 answers at once). */
2526
- wait_ms: import_zod28.z.int().min(0).max(25e3).default(0),
2527
- max_bytes: import_zod28.z.int().min(1024).max(1048576).default(65536)
2699
+ wait_ms: import_zod30.z.int().min(0).max(25e3).default(0),
2700
+ max_bytes: import_zod30.z.int().min(1024).max(1048576).default(65536)
2528
2701
  });
2529
- var ExecJobOutputResult = import_zod28.z.strictObject({
2702
+ var ExecJobOutputResult = import_zod30.z.strictObject({
2530
2703
  /** stdout and stderr interleaved as they arrived (UTF-8). */
2531
- output: import_zod28.z.string(),
2704
+ output: import_zod30.z.string(),
2532
2705
  next_offset: nonNegInt,
2533
2706
  /** Bytes before `offset` that are gone (the job keeps its last 4 MiB). */
2534
2707
  dropped_bytes: nonNegInt,
2535
- running: import_zod28.z.boolean(),
2536
- exit_code: import_zod28.z.int().nullable()
2708
+ running: import_zod30.z.boolean(),
2709
+ exit_code: import_zod30.z.int().nullable()
2537
2710
  });
2538
- var ExecJobStopParams = import_zod28.z.strictObject({
2711
+ var ExecJobStopParams = import_zod30.z.strictObject({
2539
2712
  job_id: ExecJobId,
2540
2713
  /** End it at once (SIGKILL; on Windows the whole tree with /F) instead of asking it to quit. */
2541
- force: import_zod28.z.boolean().default(false)
2714
+ force: import_zod30.z.boolean().default(false)
2542
2715
  });
2543
- var ExecJobStopResult = import_zod28.z.strictObject({ job_id: ExecJobId, exited: import_zod28.z.boolean(), exit_code: import_zod28.z.int().nullable() });
2544
- var ExecJobInfo = import_zod28.z.strictObject({
2716
+ var ExecJobStopResult = import_zod30.z.strictObject({ job_id: ExecJobId, exited: import_zod30.z.boolean(), exit_code: import_zod30.z.int().nullable() });
2717
+ var ExecJobInfo = import_zod30.z.strictObject({
2545
2718
  job_id: ExecJobId,
2546
- command: import_zod28.z.string().max(1024),
2547
- pid: import_zod28.z.int().min(1),
2719
+ command: import_zod30.z.string().max(1024),
2720
+ pid: import_zod30.z.int().min(1),
2548
2721
  cwd: AbsPath,
2549
- running: import_zod28.z.boolean(),
2550
- exit_code: import_zod28.z.int().nullable(),
2722
+ running: import_zod30.z.boolean(),
2723
+ exit_code: import_zod30.z.int().nullable(),
2551
2724
  started_at_ms: epochMs,
2552
2725
  output_bytes: nonNegInt
2553
2726
  });
2554
- var ExecJobListParams = import_zod28.z.strictObject({});
2555
- var ExecJobListResult = import_zod28.z.strictObject({ jobs: import_zod28.z.array(ExecJobInfo).max(64) });
2727
+ var ExecJobListParams = import_zod30.z.strictObject({});
2728
+ var ExecJobListResult = import_zod30.z.strictObject({ jobs: import_zod30.z.array(ExecJobInfo).max(64) });
2556
2729
 
2557
2730
  // src/schema/coding.ts
2558
- var import_zod29 = require("zod");
2731
+ var import_zod31 = require("zod");
2559
2732
  var import_uuid3 = require("@ai-matrx/kit/uuid");
2560
- var CodingServiceCredentials = import_zod29.z.strictObject({
2561
- access_token: import_zod29.z.string().min(16).max(16384),
2562
- user_id: import_zod29.z.string().regex(import_uuid3.UUID_SHAPE_PATTERN),
2733
+ var CodingServiceCredentials = import_zod31.z.strictObject({
2734
+ access_token: import_zod31.z.string().min(16).max(16384),
2735
+ user_id: import_zod31.z.string().regex(import_uuid3.UUID_SHAPE_PATTERN),
2563
2736
  /** The AI Matrx server this app talks to (production, or a local server on the nightly copy). */
2564
- server_url: import_zod29.z.string().min(1).max(2048).regex(/^https?:\/\/[^\s/?#]+(\/[^\s?#]*)?$/)
2737
+ server_url: import_zod31.z.string().min(1).max(2048).regex(/^https?:\/\/[^\s/?#]+(\/[^\s?#]*)?$/)
2565
2738
  });
2566
- var CodingHistoryBlocked = import_zod29.z.enum([
2739
+ var CodingHistoryBlocked = import_zod31.z.enum([
2567
2740
  "signed_out",
2568
2741
  "offline",
2569
2742
  "organization_required",
@@ -2571,11 +2744,11 @@ var CodingHistoryBlocked = import_zod29.z.enum([
2571
2744
  "cloud_list_unavailable",
2572
2745
  "history_too_large"
2573
2746
  ]);
2574
- var CodingHistoryFailure = import_zod29.z.strictObject({
2575
- session_id: import_zod29.z.string().max(64),
2576
- reason: import_zod29.z.string().max(300)
2747
+ var CodingHistoryFailure = import_zod31.z.strictObject({
2748
+ session_id: import_zod31.z.string().max(64),
2749
+ reason: import_zod31.z.string().max(300)
2577
2750
  });
2578
- var CodingHistoryRun = import_zod29.z.strictObject({
2751
+ var CodingHistoryRun = import_zod31.z.strictObject({
2579
2752
  /** Claude Code sessions found on this computer. */
2580
2753
  local_sessions: nonNegInt,
2581
2754
  /** Of those, already complete in AI Matrx. */
@@ -2590,39 +2763,39 @@ var CodingHistoryRun = import_zod29.z.strictObject({
2590
2763
  /** Changed while being read; a later run takes them. */
2591
2764
  changed: nonNegInt,
2592
2765
  failed: nonNegInt,
2593
- failures: import_zod29.z.array(CodingHistoryFailure).max(20),
2766
+ failures: import_zod31.z.array(CodingHistoryFailure).max(20),
2594
2767
  /** Candidates not reached yet. */
2595
2768
  remaining: nonNegInt,
2596
2769
  /** The one line a person reads, e.g. "Imported 12 of 14 sessions. 140 already in AI Matrx." */
2597
- summary: import_zod29.z.string().max(400)
2770
+ summary: import_zod31.z.string().max(400)
2598
2771
  });
2599
- var CodingHistoryStep = import_zod29.z.strictObject({
2772
+ var CodingHistoryStep = import_zod31.z.strictObject({
2600
2773
  /** Null when the run could not start (blocked before a plan existed). */
2601
- plan_id: import_zod29.z.string().regex(/^[0-9a-f]{32}$/).nullable(),
2602
- finished: import_zod29.z.boolean(),
2774
+ plan_id: import_zod31.z.string().regex(/^[0-9a-f]{32}$/).nullable(),
2775
+ finished: import_zod31.z.boolean(),
2603
2776
  blocked: CodingHistoryBlocked.nullable(),
2604
2777
  run: CodingHistoryRun
2605
2778
  });
2606
- var CodingPlanMissingParams = import_zod29.z.strictObject({ credentials: CodingServiceCredentials.nullable() });
2607
- var CodingImportNextParams = import_zod29.z.strictObject({
2608
- plan_id: import_zod29.z.string().regex(/^[0-9a-f]{32}$/),
2779
+ var CodingPlanMissingParams = import_zod31.z.strictObject({ credentials: CodingServiceCredentials.nullable() });
2780
+ var CodingImportNextParams = import_zod31.z.strictObject({
2781
+ plan_id: import_zod31.z.string().regex(/^[0-9a-f]{32}$/),
2609
2782
  credentials: CodingServiceCredentials.nullable()
2610
2783
  });
2611
- var CodingServiceProgress = import_zod29.z.strictObject({
2612
- phase: import_zod29.z.enum(["checking", "importing"]),
2784
+ var CodingServiceProgress = import_zod31.z.strictObject({
2785
+ phase: import_zod31.z.enum(["checking", "importing"]),
2613
2786
  done: nonNegInt,
2614
2787
  total: nonNegInt
2615
2788
  });
2616
- var CodingHistoryImportMissingParams = import_zod29.z.strictObject({});
2617
- var CodingHistoryImportMissingResult = import_zod29.z.strictObject({
2618
- state: import_zod29.z.enum(["done", "blocked", "cancelled"]),
2789
+ var CodingHistoryImportMissingParams = import_zod31.z.strictObject({});
2790
+ var CodingHistoryImportMissingResult = import_zod31.z.strictObject({
2791
+ state: import_zod31.z.enum(["done", "blocked", "cancelled"]),
2619
2792
  blocked: CodingHistoryBlocked.nullable(),
2620
2793
  run: CodingHistoryRun,
2621
2794
  elapsed_ms: nonNegInt
2622
2795
  });
2623
- var CodingHistoryProgressEvent = import_zod29.z.strictObject({
2796
+ var CodingHistoryProgressEvent = import_zod31.z.strictObject({
2624
2797
  request_id: RequestId,
2625
- phase: import_zod29.z.enum(["checking", "importing"]),
2798
+ phase: import_zod31.z.enum(["checking", "importing"]),
2626
2799
  /** Sessions settled so far, of `total` candidates (0 of 0 while checking). */
2627
2800
  done: nonNegInt,
2628
2801
  total: nonNegInt,
@@ -2744,7 +2917,23 @@ var OPS = {
2744
2917
  // 1.21: what a window's sidebar draws (the Move-all grouping check).
2745
2918
  "apps.windows.shown": { params: AppsWindowsShownParams, result: AppsWindowsShownResult, kind: "unary", since: "1.21", errors: ["NOT_FOUND", "PERMISSION_DENIED_OS", "PLATFORM_UNSUPPORTED", "INTERNAL"] },
2746
2919
  // Claude Code history (SPEC §6 coding): served by the `coding` Python service through SERVICES below.
2747
- "coding.history.import_missing": { params: CodingHistoryImportMissingParams, result: CodingHistoryImportMissingResult, kind: "unary", since: "1.5", errors: ["RESOURCE_BUSY", "RESOURCE_GONE", "CANCELLED", "INTERNAL"] }
2920
+ "coding.history.import_missing": { params: CodingHistoryImportMissingParams, result: CodingHistoryImportMissingResult, kind: "unary", since: "1.5", errors: ["RESOURCE_BUSY", "RESOURCE_GONE", "CANCELLED", "INTERNAL"] },
2921
+ // 1.22: git for agents (core `git`, the system git; the cloud sandbox's /git/* set, SPEC 6.1).
2922
+ "git.status": { params: GitStatusParams, result: GitStatusResult, kind: "unary", since: "1.22", errors: ["NOT_FOUND", "INVALID_PARAMS", "CONFLICT", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
2923
+ "git.diff": { params: GitDiffParams, result: GitDiffResult, kind: "unary", since: "1.22", errors: ["NOT_FOUND", "INVALID_PARAMS", "CONFLICT", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
2924
+ "git.log": { params: GitLogParams, result: GitLogResult, kind: "unary", since: "1.22", errors: ["NOT_FOUND", "INVALID_PARAMS", "CONFLICT", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
2925
+ "git.add": { params: GitAddParams, result: GitOutputResult, kind: "unary", since: "1.22", errors: ["NOT_FOUND", "INVALID_PARAMS", "CONFLICT", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
2926
+ "git.commit": { params: GitCommitParams, result: GitCommitResult, kind: "unary", since: "1.22", errors: ["NOT_FOUND", "INVALID_PARAMS", "CONFLICT", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
2927
+ "git.push": { params: GitPushParams, result: GitOutputResult, kind: "unary", since: "1.22", errors: ["NOT_FOUND", "INVALID_PARAMS", "CONFLICT", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
2928
+ "git.pull": { params: GitPullParams, result: GitOutputResult, kind: "unary", since: "1.22", errors: ["NOT_FOUND", "INVALID_PARAMS", "CONFLICT", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
2929
+ "git.branch": { params: GitBranchParams, result: GitBranchResult, kind: "unary", since: "1.22", errors: ["NOT_FOUND", "INVALID_PARAMS", "CONFLICT", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
2930
+ "git.stash": { params: GitStashParams, result: GitOutputResult, kind: "unary", since: "1.22", errors: ["NOT_FOUND", "INVALID_PARAMS", "CONFLICT", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
2931
+ "git.clone": { params: GitCloneParams, result: GitOutputResult, kind: "unary", since: "1.22", errors: ["NOT_FOUND", "INVALID_PARAMS", "CONFLICT", "PLATFORM_UNSUPPORTED", "TIMEOUT", "INTERNAL"] },
2932
+ // 1.22: the web from this computer (the `tools` Python service: matrx_scraper's local lane).
2933
+ "web.fetch": { params: WebFetchParams, result: WebFetchResult, kind: "unary", since: "1.22", errors: ["INVALID_PARAMS", "TIMEOUT", "RESOURCE_BUSY", "AUTH_REQUIRED", "INTERNAL"] },
2934
+ "web.scrape": { params: WebScrapeParams, result: WebScrapeResult, kind: "unary", since: "1.22", errors: ["INVALID_PARAMS", "TIMEOUT", "RESOURCE_BUSY", "AUTH_REQUIRED", "INTERNAL"] },
2935
+ "web.search": { params: WebSearchParams, result: WebSearchResult, kind: "unary", since: "1.22", errors: ["INVALID_PARAMS", "TIMEOUT", "RESOURCE_BUSY", "AUTH_REQUIRED", "INTERNAL"] },
2936
+ "web.fetch_with_browser": { params: WebBrowserFetchParams, result: WebBrowserFetchResult, kind: "unary", since: "1.22", errors: ["INVALID_PARAMS", "TIMEOUT", "RESOURCE_BUSY", "AUTH_REQUIRED", "INTERNAL"] }
2748
2937
  };
2749
2938
  var EVENTS = {
2750
2939
  "fs.changed": FsChangedEvent,
@@ -2775,6 +2964,15 @@ var SERVICES = {
2775
2964
  "coding.plan_missing": { params: CodingPlanMissingParams, result: CodingHistoryStep },
2776
2965
  "coding.import_next": { params: CodingImportNextParams, result: CodingHistoryStep }
2777
2966
  }
2967
+ },
2968
+ tools: {
2969
+ progress: ToolsServiceProgress,
2970
+ ops: {
2971
+ "tools.web_fetch": { params: WebFetchParams, result: WebFetchResult },
2972
+ "tools.web_scrape": { params: WebScrapeParams, result: WebScrapeResult },
2973
+ "tools.web_search": { params: ToolsWebSearchParams, result: WebSearchResult },
2974
+ "tools.web_browser_fetch": { params: WebBrowserFetchParams, result: WebBrowserFetchResult }
2975
+ }
2778
2976
  }
2779
2977
  };
2780
2978
  var NAMED_SCHEMAS = {
@@ -3136,7 +3334,39 @@ var NAMED_SCHEMAS = {
3136
3334
  AppsWindowsProcessesParams,
3137
3335
  AppsWindowsProcessesResult,
3138
3336
  AppsWindowsAddParams,
3139
- AppsWindowsSaveNamesParams
3337
+ AppsWindowsSaveNamesParams,
3338
+ GitOutputResult,
3339
+ GitStatusParams,
3340
+ GitStatusFile,
3341
+ GitStatusResult,
3342
+ GitDiffParams,
3343
+ GitDiffResult,
3344
+ GitLogParams,
3345
+ GitLogCommit,
3346
+ GitLogResult,
3347
+ GitAddParams,
3348
+ GitCommitParams,
3349
+ GitCommitResult,
3350
+ GitPushParams,
3351
+ GitPullParams,
3352
+ GitBranchParams,
3353
+ GitBranchResult,
3354
+ GitStashParams,
3355
+ GitCloneParams,
3356
+ WebHeader,
3357
+ WebFetchParams,
3358
+ WebFetchResult,
3359
+ WebScrapeParams,
3360
+ WebScrapePage,
3361
+ WebScrapeResult,
3362
+ WebSearchParams,
3363
+ WebSearchHit,
3364
+ WebSearchQueryResult,
3365
+ WebSearchResult,
3366
+ ToolsWebSearchParams,
3367
+ WebBrowserFetchParams,
3368
+ WebBrowserFetchResult,
3369
+ ToolsServiceProgress
3140
3370
  };
3141
3371
 
3142
3372
  // src/versioning.ts
@@ -3282,7 +3512,7 @@ function forPeer(op, part, value, version) {
3282
3512
  var VERSIONED_RESULT_OPS = [.../* @__PURE__ */ new Set([...RESULT_PATH.keys(), ...WINDOW_RESULTS.keys(), ...NESTED_RESULTS.keys()])];
3283
3513
 
3284
3514
  // src/contract.ts
3285
- var CONTRACT_SHA256 = "5745ca5b70c283eadfce68d0c66c06207405b60c7e112cb75aca7ff29b15d12e";
3515
+ var CONTRACT_SHA256 = "ac2b599f9511abd871a7374e298fab94a25972512797689c8022da288a5f2e06";
3286
3516
 
3287
3517
  // src/close-policy.ts
3288
3518
  var CLOSE_RULES = {
@@ -3315,7 +3545,7 @@ var TOOL_GROUPS = [
3315
3545
  { id: "files_shell", order: 1, title: "Files and shell", owner: "core" },
3316
3546
  { id: "os_control", order: 2, title: "Computer control", owner: "core" },
3317
3547
  { id: "personal_automation", order: 3, title: "Personal apps and automation", owner: "core" },
3318
- { id: "tools_service", order: 4, title: "Documents, OCR and entities", owner: "python_tools" },
3548
+ { id: "tools_service", order: 4, title: "Web, documents, OCR and entities", owner: "python_tools" },
3319
3549
  { id: "ml_service", order: 5, title: "Speech", owner: "python_ml" },
3320
3550
  { id: "windows_admin", order: 6, title: "Windows administration", owner: "core" }
3321
3551
  ];
@@ -3331,6 +3561,7 @@ var TOOL_CATALOG = [
3331
3561
  { name: "fs_search", group: "files_shell", state: "built", path: "sandbox_proxy", ops: ["fs.search_paths", "fs.search_content"], platforms: ALL, summary: "Find files by name or content" },
3332
3562
  { name: "shell_execute", group: "files_shell", state: "built", path: "sandbox_proxy", ops: ["exec.run"], platforms: ALL, summary: "Run a command; cd carries over" },
3333
3563
  { name: "shell_python", group: "files_shell", state: "built", path: "sandbox_proxy", ops: ["exec.run"], platforms: ALL, summary: "Run a Python script" },
3564
+ { name: "desktop_git", group: "files_shell", state: "planned", path: "device_op", ops: ["git.status", "git.diff", "git.log", "git.add", "git.commit", "git.push", "git.pull", "git.branch", "git.stash", "git.clone"], platforms: ALL, summary: "Git: status, diff, log, commit, branches, push and pull" },
3334
3565
  { name: "shell_job", group: "files_shell", state: "built", path: "device_op", ops: ["exec.job.start", "exec.job.output", "exec.job.stop", "exec.job.list"], platforms: ALL, summary: "Background commands: start, read output, stop" },
3335
3566
  // ── 2. Computer control (TS owners) ──────────────────────────────────────────────────────────
3336
3567
  { name: "desktop_process", group: "os_control", state: "built", path: "device_op", ops: ["proc.list", "proc.ports", "proc.kill"], platforms: ALL, summary: "Running processes and ports; stop one" },
@@ -3355,6 +3586,7 @@ var TOOL_CATALOG = [
3355
3586
  { name: "desktop_net", group: "personal_automation", state: "planned", path: "device_op", ops: ["net.info", "net.wifi", "net.bluetooth", "net.devices", "net.mdns", "net.scan", "net.download"], platforms: ALL, summary: "Local network and downloads" },
3356
3587
  // ── 4. Python `tools` service ────────────────────────────────────────────────────────────────
3357
3588
  { name: "desktop_documents", group: "tools_service", state: "planned", path: "device_op", ops: ["tools.pdf_extract", "tools.office_generate", "tools.ocr", "tools.image_resize"], platforms: ALL, summary: "PDF text, Office files, OCR, images" },
3589
+ { name: "desktop_web", group: "tools_service", state: "planned", path: "device_op", ops: ["web.fetch", "web.scrape", "web.search", "web.fetch_with_browser"], platforms: ALL, summary: "Fetch, scrape and search the web from this computer's own connection" },
3358
3590
  { name: "desktop_entities", group: "tools_service", state: "planned", path: "device_op", ops: ["tools.ner", "tools.pii"], platforms: ALL, summary: "Names and private data, found on the device" },
3359
3591
  // ── 5. Python `ml` service ───────────────────────────────────────────────────────────────────
3360
3592
  // Built: models.transcribe through local_proxy's POST /op/{cap.op} (matrx-ai implementations/desktop.py).
@@ -3427,10 +3659,10 @@ var LEGACY_ACTIONS = {
3427
3659
  "local_browser.eval": dropped("The browser agent is the extension (matrx-extend) and the cloud browser"),
3428
3660
  "local_browser.tabs": dropped("The browser agent is the extension (matrx-extend) and the cloud browser"),
3429
3661
  "local_browser.close": dropped("The browser agent is the extension (matrx-extend) and the cloud browser"),
3430
- "local_web.fetch": dropped(CLOUD_SCRAPER),
3431
- "local_web.fetch_with_browser": dropped(CLOUD_SCRAPER),
3432
- "local_web.scrape": dropped(CLOUD_SCRAPER),
3433
- "local_web.search": dropped(CLOUD_SCRAPER),
3662
+ "local_web.fetch": tool("desktop_web"),
3663
+ "local_web.fetch_with_browser": tool("desktop_web"),
3664
+ "local_web.scrape": tool("desktop_web"),
3665
+ "local_web.search": tool("desktop_web"),
3434
3666
  "local_web.research": dropped(CLOUD_SCRAPER),
3435
3667
  "local_web.download": tool("desktop_net"),
3436
3668
  "local_web.upload": dropped("Uploads are cloud files (matrx-files) and file sync, one upload path"),