@ai-matrx/desktop-protocol 0.21.15 → 0.21.16
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 +6 -0
- package/dist/client.cjs +675 -599
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +2 -2
- package/dist/client.d.ts +2 -2
- package/dist/client.js +675 -599
- package/dist/client.js.map +1 -1
- package/dist/index.cjs +844 -744
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +162 -6
- package/dist/index.d.ts +162 -6
- package/dist/index.js +844 -744
- package/dist/index.js.map +1 -1
- package/dist/{models-BFxuhPGw.d.cts → models-BpZriuN2.d.cts} +206 -1
- package/dist/{models-BFxuhPGw.d.ts → models-BpZriuN2.d.ts} +206 -1
- package/dist/react.d.cts +80 -0
- package/dist/react.d.ts +80 -0
- package/generated/desktop-protocol.schema.json +352 -1
- package/package.json +4 -4
package/dist/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import { UUID_SHAPE_PATTERN } from "@ai-matrx/kit/uuid";
|
|
4
4
|
var PROTOCOL_MAJOR = 1;
|
|
5
|
-
var PROTOCOL_MINOR =
|
|
5
|
+
var PROTOCOL_MINOR = 23;
|
|
6
6
|
var PROTOCOL_VERSION = `${PROTOCOL_MAJOR}.${PROTOCOL_MINOR}`;
|
|
7
7
|
var ProtocolVersion = z.string().regex(/^[1-9][0-9]{0,2}\.[0-9]{1,3}$/);
|
|
8
8
|
var RequestId = z.string().min(1).max(64).regex(/^[A-Za-z0-9_-]+$/);
|
|
@@ -800,24 +800,96 @@ var ModelsStatusResult = z10.strictObject({
|
|
|
800
800
|
});
|
|
801
801
|
var ModelsProgressEvent = z10.strictObject({ request_id: RequestId, progress: MlProgress });
|
|
802
802
|
|
|
803
|
-
// src/schema/
|
|
803
|
+
// src/schema/account.ts
|
|
804
804
|
import { z as z11 } from "zod";
|
|
805
805
|
import { UUID_SHAPE_PATTERN as UUID_SHAPE_PATTERN2 } from "@ai-matrx/kit/uuid";
|
|
806
|
-
var
|
|
807
|
-
var
|
|
808
|
-
var
|
|
809
|
-
|
|
810
|
-
|
|
806
|
+
var AccountRowId = z11.string().regex(UUID_SHAPE_PATTERN2);
|
|
807
|
+
var AccountReadState = z11.enum(["ok", "signed_out", "unavailable"]);
|
|
808
|
+
var AccountAgent = z11.strictObject({
|
|
809
|
+
id: AccountRowId,
|
|
810
|
+
name: z11.string().min(1).max(200),
|
|
811
|
+
description: z11.string().max(2e3),
|
|
812
|
+
/** The agent's category ("" when it has none): the library's folders. */
|
|
813
|
+
category: z11.string().max(120),
|
|
814
|
+
/** The agent's kind as the platform names it (user, builtin, orchestra…). */
|
|
815
|
+
agent_type: z11.string().max(40),
|
|
816
|
+
is_favorite: z11.boolean(),
|
|
817
|
+
/** The person owns it (false: shared with them). */
|
|
818
|
+
is_owner: z11.boolean(),
|
|
819
|
+
/** Who shared it, when it is shared with the person. */
|
|
820
|
+
shared_by: z11.string().max(320).nullable(),
|
|
821
|
+
/** The organization it belongs to. */
|
|
822
|
+
organization: z11.string().max(200).nullable(),
|
|
823
|
+
updated_at_ms: epochMs
|
|
824
|
+
});
|
|
825
|
+
var AccountAgentsListParams = z11.strictObject({});
|
|
826
|
+
var AccountAgentsListResult = z11.strictObject({
|
|
827
|
+
state: AccountReadState,
|
|
828
|
+
/** One line when state is not "ok" (what went wrong, in plain words); null otherwise. */
|
|
829
|
+
problem: z11.string().max(300).nullable(),
|
|
830
|
+
agents: z11.array(AccountAgent).max(2e3)
|
|
831
|
+
});
|
|
832
|
+
var VaultItemKind = z11.enum(["login", "passkey", "key", "other"]);
|
|
833
|
+
var VaultFieldSummary = z11.strictObject({
|
|
834
|
+
key: z11.string().min(1).max(120),
|
|
835
|
+
/** visible: shown as written; revealable: copyable on request; sealed: never leaves the server. */
|
|
836
|
+
handling: z11.enum(["visible", "revealable", "sealed"]),
|
|
837
|
+
/** The masked hint the server keeps ("••••ab12"), or "" when it keeps none. */
|
|
838
|
+
hint: z11.string().max(200)
|
|
839
|
+
});
|
|
840
|
+
var VaultItemSummary = z11.strictObject({
|
|
841
|
+
id: AccountRowId,
|
|
842
|
+
name: z11.string().min(1).max(200),
|
|
843
|
+
kind: VaultItemKind,
|
|
844
|
+
/** The platform's definition ("website_login", "native_passkey", "custom"…). */
|
|
845
|
+
definition: z11.string().max(80),
|
|
846
|
+
/** The sign-in's user name hint (its "username" field's hint); null when it has none. */
|
|
847
|
+
username: z11.string().max(200).nullable(),
|
|
848
|
+
/** The sites a sign-in is for. */
|
|
849
|
+
urls: z11.array(z11.string().max(2048)).max(20),
|
|
850
|
+
notes: z11.string().max(4e3).nullable(),
|
|
851
|
+
fields: z11.array(VaultFieldSummary).max(50),
|
|
852
|
+
/** Shared with the person by someone else (Passwords' shared groups). */
|
|
853
|
+
shared: z11.boolean(),
|
|
854
|
+
/** active, or the server's other states (a deleted item waits in "deleted"). */
|
|
855
|
+
status: z11.string().max(40),
|
|
856
|
+
created_at_ms: epochMs,
|
|
857
|
+
updated_at_ms: epochMs
|
|
858
|
+
});
|
|
859
|
+
var AccountVaultListParams = z11.strictObject({});
|
|
860
|
+
var AccountVaultListResult = z11.strictObject({
|
|
861
|
+
state: AccountReadState,
|
|
862
|
+
problem: z11.string().max(300).nullable(),
|
|
863
|
+
items: z11.array(VaultItemSummary).max(5e3)
|
|
864
|
+
});
|
|
865
|
+
var AccountVaultCopyParams = z11.strictObject({
|
|
866
|
+
item_id: AccountRowId,
|
|
867
|
+
field_key: z11.string().min(1).max(120)
|
|
868
|
+
});
|
|
869
|
+
var AccountVaultCopyResult = z11.strictObject({
|
|
870
|
+
copied: z11.boolean(),
|
|
871
|
+
/** When the clipboard is cleared again if it still holds the value (Passwords clears a copied password). */
|
|
872
|
+
clears_at_ms: epochMs
|
|
873
|
+
});
|
|
874
|
+
|
|
875
|
+
// src/schema/apps.ts
|
|
876
|
+
import { z as z12 } from "zod";
|
|
877
|
+
import { UUID_SHAPE_PATTERN as UUID_SHAPE_PATTERN3 } from "@ai-matrx/kit/uuid";
|
|
878
|
+
var AppKey = z12.string().regex(/^[a-z][a-z0-9_-]{0,39}$/);
|
|
879
|
+
var AppProfileId = z12.string().regex(UUID_SHAPE_PATTERN3);
|
|
880
|
+
var AppProfileLocator = z12.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}$/);
|
|
881
|
+
var AppSupport = z12.enum(["supported", "partial", "unsupported"]);
|
|
882
|
+
var AppFeatureStatus = z12.strictObject({
|
|
811
883
|
status: AppSupport,
|
|
812
884
|
/** One line, set whenever status is not "supported". */
|
|
813
|
-
reason:
|
|
885
|
+
reason: z12.string().max(140).nullable()
|
|
814
886
|
});
|
|
815
|
-
var AppInfo =
|
|
887
|
+
var AppInfo = z12.strictObject({
|
|
816
888
|
app_key: AppKey,
|
|
817
|
-
name:
|
|
818
|
-
installed:
|
|
889
|
+
name: z12.string().max(64),
|
|
890
|
+
installed: z12.boolean(),
|
|
819
891
|
/** The app's own version string, or null when it is not installed or does not say. */
|
|
820
|
-
version:
|
|
892
|
+
version: z12.string().max(64).nullable(),
|
|
821
893
|
/** The install found (an .app bundle, an .exe, a binary), or null. */
|
|
822
894
|
location: AbsPath.nullable(),
|
|
823
895
|
/** Open the app at all on this OS. */
|
|
@@ -827,148 +899,148 @@ var AppInfo = z11.strictObject({
|
|
|
827
899
|
/** Plan usage read from the app's own files on this OS. */
|
|
828
900
|
usage: AppFeatureStatus
|
|
829
901
|
});
|
|
830
|
-
var AppUsageReading =
|
|
831
|
-
window:
|
|
902
|
+
var AppUsageReading = z12.strictObject({
|
|
903
|
+
window: z12.enum(["five_hour", "weekly", "extra"]),
|
|
832
904
|
/** 0–100 for five_hour and weekly; extra-usage spend as a percent of its cap (may pass 100). */
|
|
833
|
-
percent:
|
|
905
|
+
percent: z12.number().min(0).max(1e4),
|
|
834
906
|
/** When the app recorded it. */
|
|
835
907
|
sampled_at_ms: epochMs,
|
|
836
908
|
/** True when the window has rolled over since the sample, so the figure has reset. */
|
|
837
|
-
reset_since:
|
|
909
|
+
reset_since: z12.boolean()
|
|
838
910
|
});
|
|
839
|
-
var AppProfile =
|
|
911
|
+
var AppProfile = z12.strictObject({
|
|
840
912
|
/** The row's id; null for a folder found on disk that no row names yet. */
|
|
841
913
|
id: AppProfileId.nullable(),
|
|
842
914
|
app_key: AppKey,
|
|
843
|
-
display_name:
|
|
915
|
+
display_name: z12.string().min(1).max(120),
|
|
844
916
|
/** The account the person means to be signed in here; null when not stated (never guessed). */
|
|
845
|
-
account_identity:
|
|
917
|
+
account_identity: z12.string().min(3).max(320).nullable(),
|
|
846
918
|
profile_locator: AppProfileLocator.nullable(),
|
|
847
919
|
/** The device the row is tied to; null when the row names none. */
|
|
848
920
|
device_id: DeviceId.nullable(),
|
|
849
921
|
/** The folder this profile resolves to on this device; null for a row tied to another device. */
|
|
850
922
|
folder: AbsPath.nullable(),
|
|
851
923
|
/** The folder exists on this device. */
|
|
852
|
-
on_disk:
|
|
924
|
+
on_disk: z12.boolean(),
|
|
853
925
|
/** An instance with this profile is running; null when it could not be determined. */
|
|
854
|
-
running:
|
|
926
|
+
running: z12.boolean().nullable(),
|
|
855
927
|
/** Usage the app recorded for this profile; null when the app exposes none here. */
|
|
856
|
-
usage:
|
|
928
|
+
usage: z12.array(AppUsageReading).nullable(),
|
|
857
929
|
last_opened_ms: epochMs.nullable()
|
|
858
930
|
});
|
|
859
|
-
var AppsListParams =
|
|
860
|
-
var AppsListResult =
|
|
861
|
-
var AppsProfilesListParams =
|
|
931
|
+
var AppsListParams = z12.strictObject({});
|
|
932
|
+
var AppsListResult = z12.strictObject({ apps: z12.array(AppInfo) });
|
|
933
|
+
var AppsProfilesListParams = z12.strictObject({
|
|
862
934
|
/** Only this app's profiles; every app's when absent. */
|
|
863
935
|
app_key: AppKey.optional()
|
|
864
936
|
});
|
|
865
|
-
var AppsProfilesListResult =
|
|
866
|
-
profiles:
|
|
937
|
+
var AppsProfilesListResult = z12.strictObject({
|
|
938
|
+
profiles: z12.array(AppProfile),
|
|
867
939
|
/**
|
|
868
940
|
* Whether the saved rows could be read: false while signed out or offline, when only folders
|
|
869
941
|
* found on disk are listed.
|
|
870
942
|
*/
|
|
871
|
-
registry:
|
|
943
|
+
registry: z12.enum(["ok", "signed_out", "unavailable"])
|
|
872
944
|
});
|
|
873
|
-
var AppsProfilesSaveParams =
|
|
945
|
+
var AppsProfilesSaveParams = z12.strictObject({
|
|
874
946
|
id: AppProfileId.optional(),
|
|
875
947
|
app_key: AppKey,
|
|
876
|
-
display_name:
|
|
877
|
-
account_identity:
|
|
948
|
+
display_name: z12.string().min(1).max(120),
|
|
949
|
+
account_identity: z12.string().min(3).max(320).nullable(),
|
|
878
950
|
/** On create: the folder to use (one found on disk), or null for the app's default profile. Ignored on update. */
|
|
879
951
|
profile_locator: AppProfileLocator.nullable(),
|
|
880
952
|
/** On create with profile_locator null: make a new folder named after display_name instead. */
|
|
881
|
-
new_folder:
|
|
953
|
+
new_folder: z12.boolean().default(false)
|
|
882
954
|
});
|
|
883
955
|
var AppsProfilesSaveResult = AppProfile;
|
|
884
|
-
var AppsProfilesRemoveParams =
|
|
885
|
-
var AppsProfilesRemoveResult =
|
|
886
|
-
var AppsOpenParams =
|
|
956
|
+
var AppsProfilesRemoveParams = z12.strictObject({ id: AppProfileId });
|
|
957
|
+
var AppsProfilesRemoveResult = z12.strictObject({ removed: z12.boolean() });
|
|
958
|
+
var AppsOpenParams = z12.strictObject({
|
|
887
959
|
app_key: AppKey,
|
|
888
960
|
profile_id: AppProfileId.optional()
|
|
889
961
|
});
|
|
890
|
-
var AppsOpenResult =
|
|
962
|
+
var AppsOpenResult = z12.strictObject({
|
|
891
963
|
/** True when an instance with this profile was already running; it is brought forward. */
|
|
892
|
-
already_running:
|
|
964
|
+
already_running: z12.boolean(),
|
|
893
965
|
folder: AbsPath.nullable()
|
|
894
966
|
});
|
|
895
967
|
|
|
896
968
|
// src/schema/apps-chats.ts
|
|
897
|
-
import { z as
|
|
898
|
-
var ChatId =
|
|
899
|
-
var ChatPlace =
|
|
900
|
-
var ChatProjectId =
|
|
901
|
-
var ChatWindow =
|
|
969
|
+
import { z as z13 } from "zod";
|
|
970
|
+
var ChatId = z13.string().regex(/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/);
|
|
971
|
+
var ChatPlace = z13.string().regex(/^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/);
|
|
972
|
+
var ChatProjectId = z13.string().regex(/^[a-z0-9][a-z0-9-]{0,63}$/);
|
|
973
|
+
var ChatWindow = z13.strictObject({
|
|
902
974
|
key: ChatPlace,
|
|
903
975
|
/** The app's default profile (Claude: the main window, which lists every account's chats). */
|
|
904
|
-
main:
|
|
976
|
+
main: z13.boolean(),
|
|
905
977
|
/** The account the window is signed into, when known. */
|
|
906
|
-
account:
|
|
978
|
+
account: z13.string().max(320).nullable()
|
|
907
979
|
});
|
|
908
|
-
var ChatProject =
|
|
980
|
+
var ChatProject = z13.strictObject({
|
|
909
981
|
id: ChatProjectId,
|
|
910
|
-
name:
|
|
911
|
-
archived:
|
|
982
|
+
name: z13.string().min(1).max(200),
|
|
983
|
+
archived: z13.boolean(),
|
|
912
984
|
/** Chats in it. */
|
|
913
985
|
count: nonNegInt
|
|
914
986
|
});
|
|
915
|
-
var ChatPin =
|
|
987
|
+
var ChatPin = z13.strictObject({
|
|
916
988
|
/** The window whose account pins it; an account with no window of its own is named by its email. */
|
|
917
|
-
window:
|
|
989
|
+
window: z13.string().min(1).max(320),
|
|
918
990
|
/** When that account's pin list was last read; null when the reading has no time. */
|
|
919
991
|
observed_at_ms: epochMs.nullable()
|
|
920
992
|
});
|
|
921
|
-
var ChatRunning =
|
|
993
|
+
var ChatRunning = z13.strictObject({
|
|
922
994
|
window: ChatPlace,
|
|
923
995
|
/** process: a live process resumed this chat there (exact); activity: that window's own record moved in the last 3 minutes. */
|
|
924
|
-
how:
|
|
996
|
+
how: z13.enum(["process", "activity"])
|
|
925
997
|
});
|
|
926
|
-
var ChatHidden =
|
|
998
|
+
var ChatHidden = z13.strictObject({
|
|
927
999
|
window: ChatPlace,
|
|
928
|
-
reason:
|
|
1000
|
+
reason: z13.string().max(200)
|
|
929
1001
|
});
|
|
930
|
-
var ChatLastUse =
|
|
1002
|
+
var ChatLastUse = z13.strictObject({
|
|
931
1003
|
/** The conversation's last reply. */
|
|
932
1004
|
at_ms: epochMs,
|
|
933
1005
|
window: ChatPlace.nullable(),
|
|
934
|
-
account:
|
|
1006
|
+
account: z13.string().max(320).nullable(),
|
|
935
1007
|
/** How the window was decided (one short line). */
|
|
936
|
-
how:
|
|
1008
|
+
how: z13.string().max(120).nullable(),
|
|
937
1009
|
/** The account's 1-hour prompt cache is still warm. */
|
|
938
|
-
cache_warm:
|
|
1010
|
+
cache_warm: z13.boolean(),
|
|
939
1011
|
cache_minutes_left: nonNegInt
|
|
940
1012
|
});
|
|
941
|
-
var ChatAppProject =
|
|
942
|
-
id:
|
|
943
|
-
name:
|
|
1013
|
+
var ChatAppProject = z13.strictObject({
|
|
1014
|
+
id: z13.string().min(1).max(200),
|
|
1015
|
+
name: z13.string().max(200)
|
|
944
1016
|
});
|
|
945
|
-
var ChatTitleSource =
|
|
946
|
-
var ChatRow =
|
|
1017
|
+
var ChatTitleSource = z13.enum(["app", "app-remembered", "custom-title", "ai-title", "agent-name", "summary", "first-prompt", "last-prompt"]);
|
|
1018
|
+
var ChatRow = z13.strictObject({
|
|
947
1019
|
id: ChatId,
|
|
948
1020
|
/** The short id people see (the listing's first 8 characters). */
|
|
949
|
-
short_id:
|
|
1021
|
+
short_id: z13.string().max(16),
|
|
950
1022
|
/** The listing's own name (Claude: local_<id>), null for a chat only in the holder. */
|
|
951
|
-
record:
|
|
952
|
-
title:
|
|
1023
|
+
record: z13.string().max(160).nullable(),
|
|
1024
|
+
title: z13.string().max(1e3),
|
|
953
1025
|
last_active_ms: epochMs.nullable(),
|
|
954
1026
|
created_ms: epochMs.nullable(),
|
|
955
|
-
projects:
|
|
956
|
-
starred:
|
|
957
|
-
pinned_in:
|
|
1027
|
+
projects: z13.array(ChatProjectId).max(500),
|
|
1028
|
+
starred: z13.boolean(),
|
|
1029
|
+
pinned_in: z13.array(ChatPin).max(200),
|
|
958
1030
|
/** Every place it is listed now: window keys, plus "holder". */
|
|
959
|
-
places:
|
|
960
|
-
held:
|
|
961
|
-
running:
|
|
962
|
-
hidden_in:
|
|
1031
|
+
places: z13.array(ChatPlace).max(200),
|
|
1032
|
+
held: z13.boolean(),
|
|
1033
|
+
running: z13.array(ChatRunning).max(200),
|
|
1034
|
+
hidden_in: z13.array(ChatHidden).max(200),
|
|
963
1035
|
/** Kept out of the main window on purpose. */
|
|
964
|
-
hidden_from_main:
|
|
1036
|
+
hidden_from_main: z13.boolean(),
|
|
965
1037
|
/** Listed in a side window and not yet copied into main. */
|
|
966
|
-
main_pending:
|
|
1038
|
+
main_pending: z13.boolean(),
|
|
967
1039
|
/** A scheduled routine's run (its task id). */
|
|
968
|
-
scheduled:
|
|
1040
|
+
scheduled: z13.string().max(200).nullable(),
|
|
969
1041
|
/** Created recently and in no project: offered for filing. */
|
|
970
|
-
new_unfiled:
|
|
971
|
-
warnings:
|
|
1042
|
+
new_unfiled: z13.boolean(),
|
|
1043
|
+
warnings: z13.array(z13.string().max(400)).max(20),
|
|
972
1044
|
last_use: ChatLastUse.nullable(),
|
|
973
1045
|
/** 1.13: the app's own project the chat is grouped under in the app (Codex), read only; absent = none or not an app that groups. */
|
|
974
1046
|
app_project: ChatAppProject.optional(),
|
|
@@ -978,718 +1050,718 @@ var ChatRow = z12.strictObject({
|
|
|
978
1050
|
* 1.14: the chat's own title before the person's rename (the one title rule, `@ai-matrx/coding-sessions/sessions`);
|
|
979
1051
|
* `title` is what to show (`title_override` when set, else this).
|
|
980
1052
|
*/
|
|
981
|
-
original_title:
|
|
1053
|
+
original_title: z13.string().max(1e3).optional(),
|
|
982
1054
|
/** 1.14: where `original_title` came from (the one rule's sources, strongest first; 1.15: a closed set). */
|
|
983
1055
|
title_source: ChatTitleSource.optional(),
|
|
984
1056
|
/** 1.14: the person's rename inside Matrx (Coding Sessions), applied once by the row builder; absent = none. */
|
|
985
|
-
title_override:
|
|
1057
|
+
title_override: z13.string().min(1).max(300).optional(),
|
|
986
1058
|
/** 1.15: the app itself archived it (hidden_in says where and why, in words for people; this is the typed fact). */
|
|
987
|
-
archived:
|
|
1059
|
+
archived: z13.boolean().optional()
|
|
988
1060
|
});
|
|
989
|
-
var ChatFamily =
|
|
1061
|
+
var ChatFamily = z13.strictObject({
|
|
990
1062
|
id: ChatId,
|
|
991
1063
|
fork_of: ChatId.nullable(),
|
|
992
1064
|
copy_of: ChatId.nullable()
|
|
993
1065
|
});
|
|
994
|
-
var AppsChatsListParams =
|
|
1066
|
+
var AppsChatsListParams = z13.strictObject({
|
|
995
1067
|
app_key: AppKey,
|
|
996
1068
|
/** Only these chats (a live update re-reads just what changed). */
|
|
997
|
-
ids:
|
|
1069
|
+
ids: z13.array(ChatId).max(500).optional()
|
|
998
1070
|
});
|
|
999
|
-
var AppsChatsListResult =
|
|
1071
|
+
var AppsChatsListResult = z13.strictObject({
|
|
1000
1072
|
app_key: AppKey,
|
|
1001
1073
|
/** Bumps on every change the index sees; `apps.chats.changed` carries the same number. */
|
|
1002
1074
|
version: nonNegInt,
|
|
1003
|
-
windows:
|
|
1004
|
-
projects:
|
|
1005
|
-
chats:
|
|
1075
|
+
windows: z13.array(ChatWindow).max(200),
|
|
1076
|
+
projects: z13.array(ChatProject).max(5e3),
|
|
1077
|
+
chats: z13.array(ChatRow).max(2e4),
|
|
1006
1078
|
/** How long a chat in no project counts as new. */
|
|
1007
1079
|
new_window_ms: nonNegInt,
|
|
1008
1080
|
/** 1.9: this is the copy saved at the last read, shown while everything is read again. */
|
|
1009
|
-
updating:
|
|
1081
|
+
updating: z13.boolean().optional(),
|
|
1010
1082
|
/** 1.9: false while the folder watches are down (changes are not arriving); `apps.chats.watch_state` says when it changes. */
|
|
1011
|
-
live:
|
|
1083
|
+
live: z13.boolean().optional(),
|
|
1012
1084
|
/** 1.10: every listed chat that is a fork or a copy of another (read from the conversations' first lines). */
|
|
1013
|
-
families:
|
|
1085
|
+
families: z13.array(ChatFamily).max(2e4).optional()
|
|
1014
1086
|
});
|
|
1015
|
-
var AppsChatsWatchParams =
|
|
1016
|
-
var AppsChatsWatchResult =
|
|
1017
|
-
var AppsChatsChangedEvent =
|
|
1087
|
+
var AppsChatsWatchParams = z13.strictObject({ app_key: AppKey });
|
|
1088
|
+
var AppsChatsWatchResult = z13.strictObject({ resource_id: ResourceId, version: nonNegInt });
|
|
1089
|
+
var AppsChatsChangedEvent = z13.strictObject({
|
|
1018
1090
|
app_key: AppKey,
|
|
1019
1091
|
version: nonNegInt,
|
|
1020
|
-
ids:
|
|
1021
|
-
all:
|
|
1092
|
+
ids: z13.array(ChatId).max(1e3),
|
|
1093
|
+
all: z13.boolean()
|
|
1022
1094
|
});
|
|
1023
|
-
var AppsChatsWatchStateEvent =
|
|
1095
|
+
var AppsChatsWatchStateEvent = z13.strictObject({
|
|
1024
1096
|
app_key: AppKey,
|
|
1025
|
-
live:
|
|
1026
|
-
updating:
|
|
1027
|
-
reason:
|
|
1097
|
+
live: z13.boolean(),
|
|
1098
|
+
updating: z13.boolean(),
|
|
1099
|
+
reason: z13.string().max(300).nullable()
|
|
1028
1100
|
});
|
|
1029
|
-
var AppsChatsPlaceParams =
|
|
1101
|
+
var AppsChatsPlaceParams = z13.strictObject({
|
|
1030
1102
|
app_key: AppKey,
|
|
1031
1103
|
chat_id: ChatId,
|
|
1032
|
-
action:
|
|
1104
|
+
action: z13.enum(["place", "take_off", "hold"]),
|
|
1033
1105
|
/** The window (for place and take_off). */
|
|
1034
1106
|
window: ChatPlace.optional(),
|
|
1035
1107
|
/** take_off where it is open: stop it there first (the person confirmed). */
|
|
1036
|
-
stop_if_open:
|
|
1108
|
+
stop_if_open: z13.boolean().default(false)
|
|
1037
1109
|
});
|
|
1038
|
-
var AppsChatsPlaceResult =
|
|
1039
|
-
var AppsProjectsFileManyParams =
|
|
1110
|
+
var AppsChatsPlaceResult = z13.strictObject({ chat: ChatRow, message: z13.string().max(400) });
|
|
1111
|
+
var AppsProjectsFileManyParams = z13.strictObject({
|
|
1040
1112
|
app_key: AppKey,
|
|
1041
|
-
chat_ids:
|
|
1113
|
+
chat_ids: z13.array(ChatId).min(1).max(500),
|
|
1042
1114
|
project_id: ChatProjectId.optional(),
|
|
1043
|
-
new_project_name:
|
|
1115
|
+
new_project_name: z13.string().min(1).max(200).optional()
|
|
1044
1116
|
});
|
|
1045
|
-
var AppsProjectsFileManyResult =
|
|
1046
|
-
var AppsProjectsUpdateParams =
|
|
1117
|
+
var AppsProjectsFileManyResult = z13.strictObject({ chats: z13.array(ChatRow).max(500), project: ChatProject });
|
|
1118
|
+
var AppsProjectsUpdateParams = z13.strictObject({
|
|
1047
1119
|
app_key: AppKey,
|
|
1048
1120
|
project_id: ChatProjectId,
|
|
1049
|
-
name:
|
|
1050
|
-
archived:
|
|
1121
|
+
name: z13.string().min(1).max(200).optional(),
|
|
1122
|
+
archived: z13.boolean().optional()
|
|
1051
1123
|
});
|
|
1052
|
-
var AppsProjectsUpdateResult =
|
|
1053
|
-
var AppsProjectsCopyParams =
|
|
1054
|
-
var AppsProjectsCopyResult =
|
|
1055
|
-
var AppsProjectsFileParams =
|
|
1124
|
+
var AppsProjectsUpdateResult = z13.strictObject({ project: ChatProject });
|
|
1125
|
+
var AppsProjectsCopyParams = z13.strictObject({ app_key: AppKey, project_id: ChatProjectId, new_project_name: z13.string().min(1).max(200) });
|
|
1126
|
+
var AppsProjectsCopyResult = z13.strictObject({ project: ChatProject });
|
|
1127
|
+
var AppsProjectsFileParams = z13.strictObject({
|
|
1056
1128
|
app_key: AppKey,
|
|
1057
1129
|
chat_id: ChatId,
|
|
1058
1130
|
project_id: ChatProjectId.optional(),
|
|
1059
|
-
new_project_name:
|
|
1131
|
+
new_project_name: z13.string().min(1).max(200).optional()
|
|
1060
1132
|
});
|
|
1061
|
-
var AppsProjectsFileResult =
|
|
1062
|
-
var AppsProjectsUnfileParams =
|
|
1063
|
-
var AppsProjectsUnfileResult =
|
|
1064
|
-
var AppsChatsStarParams =
|
|
1065
|
-
var AppsChatsStarResult =
|
|
1133
|
+
var AppsProjectsFileResult = z13.strictObject({ chat: ChatRow, project: ChatProject });
|
|
1134
|
+
var AppsProjectsUnfileParams = z13.strictObject({ app_key: AppKey, chat_id: ChatId, project_id: ChatProjectId });
|
|
1135
|
+
var AppsProjectsUnfileResult = z13.strictObject({ chat: ChatRow });
|
|
1136
|
+
var AppsChatsStarParams = z13.strictObject({ app_key: AppKey, chat_id: ChatId, starred: z13.boolean() });
|
|
1137
|
+
var AppsChatsStarResult = z13.strictObject({ chat: ChatRow });
|
|
1066
1138
|
|
|
1067
1139
|
// src/schema/apps-accounts.ts
|
|
1068
|
-
import { z as
|
|
1069
|
-
var AppWindowInfo =
|
|
1140
|
+
import { z as z14 } from "zod";
|
|
1141
|
+
var AppWindowInfo = z14.strictObject({
|
|
1070
1142
|
key: ChatPlace,
|
|
1071
1143
|
/** The app's default profile (Claude: main, which may sign into any account). */
|
|
1072
|
-
main:
|
|
1144
|
+
main: z14.boolean(),
|
|
1073
1145
|
/** The account the window is meant for (null for main). */
|
|
1074
|
-
account:
|
|
1146
|
+
account: z14.string().max(320).nullable(),
|
|
1075
1147
|
/** The account signed in there now: an email, or the account id while it has no saved name. */
|
|
1076
|
-
signed_in:
|
|
1077
|
-
signed_in_is_email:
|
|
1148
|
+
signed_in: z14.string().max(320).nullable(),
|
|
1149
|
+
signed_in_is_email: z14.boolean(),
|
|
1078
1150
|
/** Signed into another account than the one it is meant for. */
|
|
1079
|
-
mismatch:
|
|
1151
|
+
mismatch: z14.boolean(),
|
|
1080
1152
|
/** Its folder exists. */
|
|
1081
|
-
created:
|
|
1153
|
+
created: z14.boolean(),
|
|
1082
1154
|
/** Open now. */
|
|
1083
|
-
running:
|
|
1155
|
+
running: z14.boolean(),
|
|
1084
1156
|
/** Chats open in it now (a process resuming each one). */
|
|
1085
1157
|
open_chats: nonNegInt
|
|
1086
1158
|
});
|
|
1087
|
-
var AccountUsage =
|
|
1159
|
+
var AccountUsage = z14.strictObject({
|
|
1088
1160
|
/** The account's email, or "org <8 chars>" when no window has ever sampled that org. */
|
|
1089
|
-
account:
|
|
1090
|
-
org:
|
|
1161
|
+
account: z14.string().max(320),
|
|
1162
|
+
org: z14.string().max(80).nullable(),
|
|
1091
1163
|
/** False when the org was sampled in several accounts' windows and the vote is not clear (≥ 75 %). */
|
|
1092
|
-
account_certain:
|
|
1164
|
+
account_certain: z14.boolean(),
|
|
1093
1165
|
/** 5-hour use in percent (0 once the reading is over 5 hours old). */
|
|
1094
|
-
five_hour:
|
|
1095
|
-
five_hour_reset_since:
|
|
1166
|
+
five_hour: z14.number().nullable(),
|
|
1167
|
+
five_hour_reset_since: z14.boolean(),
|
|
1096
1168
|
/** Weekly use in percent (0 once the week reset after the reading). */
|
|
1097
|
-
weekly:
|
|
1098
|
-
weekly_reset_since:
|
|
1169
|
+
weekly: z14.number().nullable(),
|
|
1170
|
+
weekly_reset_since: z14.boolean(),
|
|
1099
1171
|
/** Extra-usage spend in percent of its cap, when on. */
|
|
1100
|
-
extra_usage:
|
|
1172
|
+
extra_usage: z14.number().nullable(),
|
|
1101
1173
|
extra_usage_as_of_ms: epochMs.nullable(),
|
|
1102
1174
|
as_of_ms: epochMs,
|
|
1103
1175
|
/** The windows meant for this account (and main when main took the reading). */
|
|
1104
|
-
windows:
|
|
1176
|
+
windows: z14.array(ChatPlace).max(200),
|
|
1105
1177
|
/** The window that took the reading is open now and the reading is under 30 minutes old. */
|
|
1106
|
-
live:
|
|
1178
|
+
live: z14.boolean(),
|
|
1107
1179
|
/** The next weekly reset, when known. */
|
|
1108
1180
|
weekly_resets_at_ms: epochMs.nullable(),
|
|
1109
1181
|
/** That reset time is Claude's own (its reading, or a reset seen in its usage history). */
|
|
1110
|
-
weekly_reset_official:
|
|
1182
|
+
weekly_reset_official: z14.boolean().nullable(),
|
|
1111
1183
|
/** 1.13: the account's plan as the app names it (Codex: "pro", "prolite"), when recorded. */
|
|
1112
|
-
plan:
|
|
1184
|
+
plan: z14.string().max(80).optional(),
|
|
1113
1185
|
/** 1.13: the account's credit balance as the app records it (Codex), when recorded. */
|
|
1114
|
-
credits:
|
|
1186
|
+
credits: z14.string().max(40).optional()
|
|
1115
1187
|
});
|
|
1116
|
-
var AccountReset =
|
|
1188
|
+
var AccountReset = z14.strictObject({
|
|
1117
1189
|
window: ChatPlace,
|
|
1118
|
-
account:
|
|
1190
|
+
account: z14.string().max(320).nullable(),
|
|
1119
1191
|
next_reset_ms: epochMs.nullable(),
|
|
1120
1192
|
/** claude: the app's own reading; usage_history: a weekly drop seen in its usage record; your_list: the person's own entry. */
|
|
1121
|
-
source:
|
|
1193
|
+
source: z14.enum(["claude", "usage_history", "your_list"]).nullable(),
|
|
1122
1194
|
/** claude or usage_history. */
|
|
1123
|
-
official:
|
|
1195
|
+
official: z14.boolean(),
|
|
1124
1196
|
/** Set when the person's list disagrees with the official time. */
|
|
1125
|
-
note:
|
|
1197
|
+
note: z14.string().max(200).nullable()
|
|
1126
1198
|
});
|
|
1127
|
-
var AppsWindowsListParams =
|
|
1128
|
-
var AppsWindowsListResult =
|
|
1129
|
-
var AppsAccountsUsageParams =
|
|
1130
|
-
var AppsAccountsUsageResult =
|
|
1199
|
+
var AppsWindowsListParams = z14.strictObject({ app_key: AppKey });
|
|
1200
|
+
var AppsWindowsListResult = z14.strictObject({ app_key: AppKey, windows: z14.array(AppWindowInfo).max(200) });
|
|
1201
|
+
var AppsAccountsUsageParams = z14.strictObject({ app_key: AppKey });
|
|
1202
|
+
var AppsAccountsUsageResult = z14.strictObject({
|
|
1131
1203
|
app_key: AppKey,
|
|
1132
|
-
accounts:
|
|
1204
|
+
accounts: z14.array(AccountUsage).max(500),
|
|
1133
1205
|
/** 1.12: the rows are right but something around them failed (a newly read reset time could not be saved); shown, never hidden. */
|
|
1134
|
-
problem:
|
|
1206
|
+
problem: z14.string().max(400).optional()
|
|
1135
1207
|
});
|
|
1136
|
-
var AppsAccountsResetsParams =
|
|
1137
|
-
var AppsAccountsResetsResult =
|
|
1208
|
+
var AppsAccountsResetsParams = z14.strictObject({ app_key: AppKey });
|
|
1209
|
+
var AppsAccountsResetsResult = z14.strictObject({
|
|
1138
1210
|
app_key: AppKey,
|
|
1139
|
-
resets:
|
|
1211
|
+
resets: z14.array(AccountReset).max(200),
|
|
1140
1212
|
/** 1.12: as on `apps.accounts.usage`. */
|
|
1141
|
-
problem:
|
|
1213
|
+
problem: z14.string().max(400).optional()
|
|
1142
1214
|
});
|
|
1143
|
-
var AppsWindowActionResult =
|
|
1144
|
-
var AppsWindowsOpenParams =
|
|
1145
|
-
var AppsWindowsReloadParams =
|
|
1146
|
-
var ShownSection =
|
|
1147
|
-
title:
|
|
1215
|
+
var AppsWindowActionResult = z14.strictObject({ message: z14.string().max(400) });
|
|
1216
|
+
var AppsWindowsOpenParams = z14.strictObject({ app_key: AppKey, window: ChatPlace });
|
|
1217
|
+
var AppsWindowsReloadParams = z14.strictObject({ app_key: AppKey, window: ChatPlace });
|
|
1218
|
+
var ShownSection = z14.strictObject({
|
|
1219
|
+
title: z14.string().max(300),
|
|
1148
1220
|
/** Rows drawn under it (a collapsed section draws none). */
|
|
1149
|
-
rows:
|
|
1150
|
-
expanded:
|
|
1221
|
+
rows: z14.number().int().nonnegative(),
|
|
1222
|
+
expanded: z14.boolean()
|
|
1151
1223
|
});
|
|
1152
|
-
var AppsWindowsShownParams =
|
|
1153
|
-
var AppsWindowsShownResult =
|
|
1224
|
+
var AppsWindowsShownParams = z14.strictObject({ app_key: AppKey, window: ChatPlace });
|
|
1225
|
+
var AppsWindowsShownResult = z14.strictObject({
|
|
1154
1226
|
window: ChatPlace,
|
|
1155
|
-
open:
|
|
1156
|
-
sections:
|
|
1157
|
-
problem:
|
|
1227
|
+
open: z14.boolean(),
|
|
1228
|
+
sections: z14.array(ShownSection).max(200),
|
|
1229
|
+
problem: z14.string().max(400).nullable()
|
|
1158
1230
|
});
|
|
1159
|
-
var AppsWindowsRestartParams =
|
|
1160
|
-
var AppsWindowsRefreshUsageParams =
|
|
1161
|
-
var AppsProjectsMoveParams =
|
|
1231
|
+
var AppsWindowsRestartParams = z14.strictObject({ app_key: AppKey, window: ChatPlace, force: z14.boolean().default(false) });
|
|
1232
|
+
var AppsWindowsRefreshUsageParams = z14.strictObject({ app_key: AppKey, window: ChatPlace });
|
|
1233
|
+
var AppsProjectsMoveParams = z14.strictObject({
|
|
1162
1234
|
app_key: AppKey,
|
|
1163
1235
|
chat_id: ChatId,
|
|
1164
1236
|
from_project_id: ChatProjectId,
|
|
1165
1237
|
to_project_id: ChatProjectId.optional(),
|
|
1166
|
-
new_project_name:
|
|
1167
|
-
});
|
|
1168
|
-
var AppsProjectsMoveResult =
|
|
1169
|
-
var AppsProjectsCreateParams =
|
|
1170
|
-
var AppsProjectsCreateResult =
|
|
1171
|
-
var AppsProjectsImportPinsParams =
|
|
1172
|
-
var AppsProjectsImportPinsResult =
|
|
1173
|
-
var ProjectMoveChat =
|
|
1174
|
-
var ProjectMoveSkip =
|
|
1175
|
-
var ProjectMoveGroup =
|
|
1176
|
-
ok:
|
|
1177
|
-
name:
|
|
1238
|
+
new_project_name: z14.string().min(1).max(200).optional()
|
|
1239
|
+
});
|
|
1240
|
+
var AppsProjectsMoveResult = z14.strictObject({ chat: ChatRow, project: ChatProject });
|
|
1241
|
+
var AppsProjectsCreateParams = z14.strictObject({ app_key: AppKey, name: z14.string().min(1).max(200) });
|
|
1242
|
+
var AppsProjectsCreateResult = z14.strictObject({ project: ChatProject });
|
|
1243
|
+
var AppsProjectsImportPinsParams = z14.strictObject({ app_key: AppKey });
|
|
1244
|
+
var AppsProjectsImportPinsResult = z14.strictObject({ message: z14.string().max(400) });
|
|
1245
|
+
var ProjectMoveChat = z14.strictObject({ chat_id: ChatId, title: z14.string().max(300) });
|
|
1246
|
+
var ProjectMoveSkip = z14.strictObject({ chat_id: ChatId, title: z14.string().max(300), window: ChatPlace.nullable(), reason: z14.string().max(400) });
|
|
1247
|
+
var ProjectMoveGroup = z14.strictObject({
|
|
1248
|
+
ok: z14.boolean(),
|
|
1249
|
+
name: z14.string().max(200),
|
|
1178
1250
|
/** Why it is not (or was not) grouped — e.g. the window is open. */
|
|
1179
|
-
reason:
|
|
1251
|
+
reason: z14.string().max(400).optional(),
|
|
1180
1252
|
/** Chats that get (or got) the group; already in it; taken from another group of the window. */
|
|
1181
1253
|
assign: nonNegInt.optional(),
|
|
1182
1254
|
already: nonNegInt.optional(),
|
|
1183
1255
|
from_other_groups: nonNegInt.optional(),
|
|
1184
1256
|
/** A group of that name was already there (reused, never doubled). */
|
|
1185
|
-
group_exists:
|
|
1257
|
+
group_exists: z14.boolean().optional()
|
|
1186
1258
|
});
|
|
1187
|
-
var AppsProjectsToWindowParams =
|
|
1259
|
+
var AppsProjectsToWindowParams = z14.strictObject({
|
|
1188
1260
|
app_key: AppKey,
|
|
1189
1261
|
project_id: ChatProjectId,
|
|
1190
1262
|
window: ChatPlace,
|
|
1191
1263
|
/** Also take each chat off its other side windows where safe (never main, the holder, an open window). */
|
|
1192
|
-
take_off:
|
|
1264
|
+
take_off: z14.boolean().default(false),
|
|
1193
1265
|
/** Also group them under the project's name in that window's sidebar (closed windows only). */
|
|
1194
|
-
group:
|
|
1195
|
-
dry_run:
|
|
1266
|
+
group: z14.boolean().default(false),
|
|
1267
|
+
dry_run: z14.boolean().default(false)
|
|
1196
1268
|
});
|
|
1197
|
-
var AppsProjectsToWindowResult =
|
|
1269
|
+
var AppsProjectsToWindowResult = z14.strictObject({
|
|
1198
1270
|
project_id: ChatProjectId,
|
|
1199
1271
|
window: ChatPlace,
|
|
1200
|
-
dry_run:
|
|
1201
|
-
place:
|
|
1202
|
-
already:
|
|
1203
|
-
take_off:
|
|
1204
|
-
skipped:
|
|
1272
|
+
dry_run: z14.boolean(),
|
|
1273
|
+
place: z14.array(ProjectMoveChat).max(5e3),
|
|
1274
|
+
already: z14.array(ProjectMoveChat).max(5e3),
|
|
1275
|
+
take_off: z14.array(ProjectMoveChat.extend({ window: ChatPlace })).max(2e4),
|
|
1276
|
+
skipped: z14.array(ProjectMoveSkip).max(2e4),
|
|
1205
1277
|
/** Chats of the project from other apps (no windows to place into), left as they are. */
|
|
1206
1278
|
other_apps: nonNegInt,
|
|
1207
1279
|
group: ProjectMoveGroup.nullable(),
|
|
1208
|
-
message:
|
|
1280
|
+
message: z14.string().max(400)
|
|
1209
1281
|
});
|
|
1210
|
-
var ColdChat =
|
|
1282
|
+
var ColdChat = z14.strictObject({
|
|
1211
1283
|
id: ChatId,
|
|
1212
|
-
title:
|
|
1213
|
-
repo:
|
|
1214
|
-
window:
|
|
1215
|
-
account:
|
|
1216
|
-
model_name:
|
|
1284
|
+
title: z14.string().max(1e3),
|
|
1285
|
+
repo: z14.string().max(200).nullable(),
|
|
1286
|
+
window: z14.string().max(64).nullable(),
|
|
1287
|
+
account: z14.string().max(320).nullable(),
|
|
1288
|
+
model_name: z14.string().max(120).nullable(),
|
|
1217
1289
|
context_tokens: nonNegInt,
|
|
1218
1290
|
cold_at_ms: epochMs,
|
|
1219
1291
|
/** Waking it once the cache is cold. */
|
|
1220
|
-
cold_cost:
|
|
1292
|
+
cold_cost: z14.number().nullable(),
|
|
1221
1293
|
/** Waking it while the cache is warm. */
|
|
1222
|
-
warm_cost:
|
|
1294
|
+
warm_cost: z14.number().nullable(),
|
|
1223
1295
|
/** Its account is on extra usage (a 5-minute cache, and real money). */
|
|
1224
|
-
extra_usage:
|
|
1296
|
+
extra_usage: z14.boolean(),
|
|
1225
1297
|
/** A scheduled routine's run. */
|
|
1226
|
-
scheduled:
|
|
1298
|
+
scheduled: z14.boolean(),
|
|
1227
1299
|
/** It can be shown in its window (started in the desktop app). */
|
|
1228
|
-
openable:
|
|
1300
|
+
openable: z14.boolean(),
|
|
1229
1301
|
/** How its window was decided, or why it can't be opened. */
|
|
1230
|
-
how:
|
|
1302
|
+
how: z14.string().max(200).nullable()
|
|
1231
1303
|
});
|
|
1232
|
-
var AppsChatsColdParams =
|
|
1233
|
-
var AppsChatsColdResult =
|
|
1304
|
+
var AppsChatsColdParams = z14.strictObject({ app_key: AppKey });
|
|
1305
|
+
var AppsChatsColdResult = z14.strictObject({
|
|
1234
1306
|
app_key: AppKey,
|
|
1235
1307
|
/** Waiting for the person with a warm cache, most urgent first. */
|
|
1236
|
-
waiting:
|
|
1308
|
+
waiting: z14.array(ColdChat).max(2e3),
|
|
1237
1309
|
/** Went cold in the last while. */
|
|
1238
|
-
recently_cold:
|
|
1310
|
+
recently_cold: z14.array(ColdChat).max(2e3),
|
|
1239
1311
|
/** Chats working right now (not waiting). */
|
|
1240
1312
|
working: nonNegInt
|
|
1241
1313
|
});
|
|
1242
|
-
var AppsChatsOpenParams =
|
|
1243
|
-
var SpendSplit =
|
|
1244
|
-
var SpendScopes =
|
|
1245
|
-
var SpendAccount =
|
|
1246
|
-
account:
|
|
1314
|
+
var AppsChatsOpenParams = z14.strictObject({ app_key: AppKey, chat_id: ChatId, window: ChatPlace.optional() });
|
|
1315
|
+
var SpendSplit = z14.strictObject({ main: z14.number(), helpers: z14.number() });
|
|
1316
|
+
var SpendScopes = z14.strictObject({ today: SpendSplit, week: SpendSplit });
|
|
1317
|
+
var SpendAccount = z14.strictObject({
|
|
1318
|
+
account: z14.string().max(320),
|
|
1247
1319
|
spend: SpendScopes,
|
|
1248
|
-
last_hour:
|
|
1249
|
-
last_5h:
|
|
1250
|
-
five_hour:
|
|
1251
|
-
weekly:
|
|
1320
|
+
last_hour: z14.number().nullable(),
|
|
1321
|
+
last_5h: z14.number().nullable(),
|
|
1322
|
+
five_hour: z14.number().nullable(),
|
|
1323
|
+
weekly: z14.number().nullable(),
|
|
1252
1324
|
as_of_ms: epochMs.nullable(),
|
|
1253
1325
|
weekly_resets_at_ms: epochMs.nullable(),
|
|
1254
1326
|
/** When the 5-hour or weekly limit is projected to be reached at the current burn. */
|
|
1255
1327
|
five_hour_full_at_ms: epochMs.nullable(),
|
|
1256
1328
|
weekly_full_at_ms: epochMs.nullable(),
|
|
1257
1329
|
/** The reading is too old to project. */
|
|
1258
|
-
stale:
|
|
1330
|
+
stale: z14.boolean()
|
|
1259
1331
|
});
|
|
1260
|
-
var SpendModel =
|
|
1261
|
-
var SpendChat =
|
|
1332
|
+
var SpendModel = z14.strictObject({ model: z14.string().max(120), name: z14.string().max(120), spend: SpendScopes });
|
|
1333
|
+
var SpendChat = z14.strictObject({
|
|
1262
1334
|
id: ChatId,
|
|
1263
|
-
title:
|
|
1264
|
-
repo:
|
|
1265
|
-
window:
|
|
1335
|
+
title: z14.string().max(1e3),
|
|
1336
|
+
repo: z14.string().max(200).nullable(),
|
|
1337
|
+
window: z14.string().max(64).nullable(),
|
|
1266
1338
|
spend: SpendScopes,
|
|
1267
1339
|
helpers: nonNegInt
|
|
1268
1340
|
});
|
|
1269
|
-
var SpendHelper =
|
|
1270
|
-
var SpendLive =
|
|
1271
|
-
var SpendIdleScope =
|
|
1272
|
-
var SpendIdle =
|
|
1273
|
-
var SpendStart =
|
|
1274
|
-
var AppsSpendParams =
|
|
1275
|
-
var AppsSpendResult =
|
|
1341
|
+
var SpendHelper = z14.strictObject({ model: z14.string().max(120), steps: nonNegInt, over_steps: z14.boolean(), description: z14.string().max(400) });
|
|
1342
|
+
var SpendLive = z14.strictObject({ id: ChatId, title: z14.string().max(1e3), window: z14.string().max(64).nullable(), helpers: z14.array(SpendHelper).max(200) });
|
|
1343
|
+
var SpendIdleScope = z14.strictObject({ count: nonNegInt, tokens: nonNegInt, cost: z14.number(), avoidable: z14.number() });
|
|
1344
|
+
var SpendIdle = z14.strictObject({ id: ChatId, chat: z14.string().max(1e3), who: z14.string().max(400), today: SpendIdleScope, week: SpendIdleScope, last_ms: epochMs });
|
|
1345
|
+
var SpendStart = z14.strictObject({ repo: z14.string().max(200), count: nonNegInt, median: nonNegInt, latest: z14.array(nonNegInt).max(20), alarm: z14.string().max(400).nullable() });
|
|
1346
|
+
var AppsSpendParams = z14.strictObject({ app_key: AppKey });
|
|
1347
|
+
var AppsSpendResult = z14.strictObject({
|
|
1276
1348
|
app_key: AppKey,
|
|
1277
1349
|
/** False while older chats are still being read. */
|
|
1278
|
-
complete:
|
|
1279
|
-
today_total:
|
|
1280
|
-
week_total:
|
|
1281
|
-
idle_today:
|
|
1282
|
-
idle_week:
|
|
1350
|
+
complete: z14.boolean(),
|
|
1351
|
+
today_total: z14.number(),
|
|
1352
|
+
week_total: z14.number(),
|
|
1353
|
+
idle_today: z14.number(),
|
|
1354
|
+
idle_week: z14.number(),
|
|
1283
1355
|
/** Models with no known list price. */
|
|
1284
|
-
unpriced:
|
|
1356
|
+
unpriced: z14.array(z14.string().max(120)).max(100),
|
|
1285
1357
|
/** Helpers past their step budget, unusual starting sizes. */
|
|
1286
|
-
alarms:
|
|
1287
|
-
live:
|
|
1288
|
-
accounts:
|
|
1289
|
-
models:
|
|
1290
|
-
chats:
|
|
1291
|
-
idle:
|
|
1292
|
-
starts:
|
|
1293
|
-
});
|
|
1294
|
-
var AppsSyncStatusParams =
|
|
1295
|
-
var AppsSyncStatusResult =
|
|
1296
|
-
healthy:
|
|
1297
|
-
summary:
|
|
1298
|
-
problems:
|
|
1299
|
-
warnings:
|
|
1358
|
+
alarms: z14.array(z14.string().max(400)).max(200),
|
|
1359
|
+
live: z14.array(SpendLive).max(200),
|
|
1360
|
+
accounts: z14.array(SpendAccount).max(200),
|
|
1361
|
+
models: z14.array(SpendModel).max(100),
|
|
1362
|
+
chats: z14.array(SpendChat).max(500),
|
|
1363
|
+
idle: z14.array(SpendIdle).max(500),
|
|
1364
|
+
starts: z14.array(SpendStart).max(200)
|
|
1365
|
+
});
|
|
1366
|
+
var AppsSyncStatusParams = z14.strictObject({ app_key: AppKey });
|
|
1367
|
+
var AppsSyncStatusResult = z14.strictObject({
|
|
1368
|
+
healthy: z14.boolean(),
|
|
1369
|
+
summary: z14.string().max(400),
|
|
1370
|
+
problems: z14.array(z14.string().max(400)).max(200),
|
|
1371
|
+
warnings: z14.array(z14.string().max(400)).max(200),
|
|
1300
1372
|
/** Accounts seen with no saved name yet (Save account names fixes them). */
|
|
1301
|
-
unnamed_accounts:
|
|
1373
|
+
unnamed_accounts: z14.array(z14.string().max(80)).max(200),
|
|
1302
1374
|
/** The full report. */
|
|
1303
|
-
output:
|
|
1375
|
+
output: z14.string().max(2e5)
|
|
1304
1376
|
});
|
|
1305
|
-
var AppsSyncRunParams =
|
|
1306
|
-
var AppsWindowsProcessesParams =
|
|
1307
|
-
var AppsWindowsProcessesResult =
|
|
1308
|
-
var AppsWindowsAddParams =
|
|
1309
|
-
var AppsWindowsSaveNamesParams =
|
|
1377
|
+
var AppsSyncRunParams = z14.strictObject({ app_key: AppKey });
|
|
1378
|
+
var AppsWindowsProcessesParams = z14.strictObject({ app_key: AppKey });
|
|
1379
|
+
var AppsWindowsProcessesResult = z14.strictObject({ processes: z14.array(z14.string().max(2e3)).max(2e3) });
|
|
1380
|
+
var AppsWindowsAddParams = z14.strictObject({ app_key: AppKey, window: ChatPlace, email: z14.string().min(3).max(320) });
|
|
1381
|
+
var AppsWindowsSaveNamesParams = z14.strictObject({ app_key: AppKey });
|
|
1310
1382
|
|
|
1311
1383
|
// src/schema/service.ts
|
|
1312
|
-
import { z as
|
|
1384
|
+
import { z as z15 } from "zod";
|
|
1313
1385
|
var SERVICE_MAX_FRAME_BYTES = 16777216;
|
|
1314
|
-
var ServiceName =
|
|
1315
|
-
var ContractHash =
|
|
1316
|
-
var ServiceToken =
|
|
1386
|
+
var ServiceName = z15.enum(["ml", "coding", "tools"]);
|
|
1387
|
+
var ContractHash = z15.string().regex(/^[0-9a-f]{64}$/);
|
|
1388
|
+
var ServiceToken = z15.string().regex(/^[A-Za-z0-9_-]{43}$/);
|
|
1317
1389
|
var ServiceRequestId = u32;
|
|
1318
|
-
var ServiceHello =
|
|
1319
|
-
var ServiceWelcome =
|
|
1320
|
-
type:
|
|
1390
|
+
var ServiceHello = z15.strictObject({ type: z15.literal("hello"), token: ServiceToken, contract: ContractHash });
|
|
1391
|
+
var ServiceWelcome = z15.strictObject({
|
|
1392
|
+
type: z15.literal("welcome"),
|
|
1321
1393
|
service: ServiceName,
|
|
1322
1394
|
contract: ContractHash,
|
|
1323
1395
|
pid: nonNegInt,
|
|
1324
1396
|
/** The interpreter's version, e.g. "3.13.15". */
|
|
1325
|
-
python:
|
|
1397
|
+
python: z15.string().max(32),
|
|
1326
1398
|
/** Every op this service serves; must equal SERVICES[service] exactly. */
|
|
1327
|
-
ops:
|
|
1399
|
+
ops: z15.array(z15.string().min(1).max(64)).max(64)
|
|
1328
1400
|
});
|
|
1329
|
-
var ServiceRequest =
|
|
1330
|
-
type:
|
|
1401
|
+
var ServiceRequest = z15.strictObject({
|
|
1402
|
+
type: z15.literal("request"),
|
|
1331
1403
|
id: ServiceRequestId,
|
|
1332
|
-
op:
|
|
1333
|
-
params:
|
|
1404
|
+
op: z15.string().min(1).max(64),
|
|
1405
|
+
params: z15.unknown()
|
|
1334
1406
|
// validated by the service against SERVICES[service][op].params
|
|
1335
1407
|
});
|
|
1336
|
-
var ServiceResponse =
|
|
1337
|
-
type:
|
|
1408
|
+
var ServiceResponse = z15.strictObject({
|
|
1409
|
+
type: z15.literal("response"),
|
|
1338
1410
|
id: ServiceRequestId,
|
|
1339
|
-
result:
|
|
1411
|
+
result: z15.unknown()
|
|
1340
1412
|
// validated by the core against SERVICES[service][op].result
|
|
1341
1413
|
});
|
|
1342
|
-
var ServiceErrorMsg =
|
|
1343
|
-
var ServiceProgressMsg =
|
|
1344
|
-
var ServiceCancel =
|
|
1345
|
-
var ServicePing =
|
|
1346
|
-
var ServicePong =
|
|
1347
|
-
type:
|
|
1414
|
+
var ServiceErrorMsg = z15.strictObject({ type: z15.literal("error"), id: ServiceRequestId, error: ProtocolErrorBody });
|
|
1415
|
+
var ServiceProgressMsg = z15.strictObject({ type: z15.literal("progress"), id: ServiceRequestId, progress: z15.unknown() });
|
|
1416
|
+
var ServiceCancel = z15.strictObject({ type: z15.literal("cancel"), id: ServiceRequestId });
|
|
1417
|
+
var ServicePing = z15.strictObject({ type: z15.literal("ping"), id: ServiceRequestId });
|
|
1418
|
+
var ServicePong = z15.strictObject({
|
|
1419
|
+
type: z15.literal("pong"),
|
|
1348
1420
|
id: ServiceRequestId,
|
|
1349
1421
|
/** Requests running now. */
|
|
1350
1422
|
busy: nonNegInt
|
|
1351
1423
|
});
|
|
1352
|
-
var ServiceShutdown =
|
|
1353
|
-
var CoreToServiceMsg =
|
|
1354
|
-
var ServiceToCoreMsg =
|
|
1424
|
+
var ServiceShutdown = z15.strictObject({ type: z15.literal("shutdown") });
|
|
1425
|
+
var CoreToServiceMsg = z15.discriminatedUnion("type", [ServiceHello, ServiceRequest, ServiceCancel, ServicePing, ServiceShutdown]);
|
|
1426
|
+
var ServiceToCoreMsg = z15.discriminatedUnion("type", [ServiceWelcome, ServiceResponse, ServiceErrorMsg, ServiceProgressMsg, ServicePong]);
|
|
1355
1427
|
|
|
1356
1428
|
// src/schema/tools.ts
|
|
1357
|
-
import { z as
|
|
1358
|
-
var ToolLevel =
|
|
1359
|
-
var ToolOutcome =
|
|
1360
|
-
var ToolPlatform =
|
|
1361
|
-
var ToolTransport =
|
|
1362
|
-
var ToolName =
|
|
1363
|
-
var ToolLevelResult =
|
|
1429
|
+
import { z as z16 } from "zod";
|
|
1430
|
+
var ToolLevel = z16.enum(["programmatic", "protocol", "chat"]);
|
|
1431
|
+
var ToolOutcome = z16.enum(["pass", "fail", "skip"]);
|
|
1432
|
+
var ToolPlatform = z16.enum(["darwin", "win32", "linux"]);
|
|
1433
|
+
var ToolTransport = z16.enum(["in_process", "localhost", "relay", "agent"]);
|
|
1434
|
+
var ToolName = z16.string().min(1).max(64).regex(/^[a-z][a-z0-9_]*$/);
|
|
1435
|
+
var ToolLevelResult = z16.strictObject({
|
|
1364
1436
|
tool: ToolName,
|
|
1365
1437
|
level: ToolLevel,
|
|
1366
1438
|
platform: ToolPlatform,
|
|
1367
1439
|
transport: ToolTransport,
|
|
1368
1440
|
outcome: ToolOutcome,
|
|
1369
1441
|
/** True when the caller sat on a different network from the device (a phone on cellular, CI). */
|
|
1370
|
-
remote_network:
|
|
1442
|
+
remote_network: z16.boolean(),
|
|
1371
1443
|
/** One line: what was asserted, or why it failed. Never a token, a file's contents or a path under a real home. */
|
|
1372
|
-
detail:
|
|
1444
|
+
detail: z16.string().max(500),
|
|
1373
1445
|
/** The harness that produced it, e.g. `matrx-desktop test/tools/programmatic.test.ts`. */
|
|
1374
|
-
suite:
|
|
1446
|
+
suite: z16.string().min(1).max(200),
|
|
1375
1447
|
/** The test case inside the suite. */
|
|
1376
|
-
test:
|
|
1377
|
-
run_at_ms:
|
|
1448
|
+
test: z16.string().min(1).max(300),
|
|
1449
|
+
run_at_ms: z16.int().min(0)
|
|
1378
1450
|
});
|
|
1379
|
-
var ToolResultsFile =
|
|
1380
|
-
schema:
|
|
1451
|
+
var ToolResultsFile = z16.strictObject({
|
|
1452
|
+
schema: z16.literal("matrx.tool-results.v1"),
|
|
1381
1453
|
/** The producing repo's commit (short or full SHA). */
|
|
1382
|
-
commit:
|
|
1383
|
-
results:
|
|
1454
|
+
commit: z16.string().min(4).max(64),
|
|
1455
|
+
results: z16.array(ToolLevelResult).max(1e4)
|
|
1384
1456
|
});
|
|
1385
1457
|
|
|
1386
1458
|
// src/schema/proc.ts
|
|
1387
|
-
import { z as
|
|
1388
|
-
var ProcSort =
|
|
1389
|
-
var ProcListParams =
|
|
1459
|
+
import { z as z17 } from "zod";
|
|
1460
|
+
var ProcSort = z17.enum(["cpu", "memory", "pid", "name"]);
|
|
1461
|
+
var ProcListParams = z17.strictObject({
|
|
1390
1462
|
/** Case-insensitive substring of the process name or its command line. */
|
|
1391
|
-
name:
|
|
1463
|
+
name: z17.string().min(1).max(128).optional(),
|
|
1392
1464
|
sort: ProcSort.default("cpu"),
|
|
1393
|
-
limit:
|
|
1465
|
+
limit: z17.int().min(1).max(500).default(50)
|
|
1394
1466
|
});
|
|
1395
|
-
var ProcInfo =
|
|
1396
|
-
pid:
|
|
1467
|
+
var ProcInfo = z17.strictObject({
|
|
1468
|
+
pid: z17.int().min(0),
|
|
1397
1469
|
/** Parent process id; null where the OS does not report it. */
|
|
1398
|
-
ppid:
|
|
1399
|
-
name:
|
|
1470
|
+
ppid: z17.int().min(0).nullable(),
|
|
1471
|
+
name: z17.string().max(256),
|
|
1400
1472
|
/** The command line, cut to 1024 characters. */
|
|
1401
|
-
command:
|
|
1473
|
+
command: z17.string().max(1024),
|
|
1402
1474
|
/** Share of one core, as `ps` and Task Manager report it; null where the OS does not say. */
|
|
1403
|
-
cpu_percent:
|
|
1475
|
+
cpu_percent: z17.number().min(0).nullable(),
|
|
1404
1476
|
memory_bytes: nonNegInt.nullable(),
|
|
1405
|
-
user:
|
|
1477
|
+
user: z17.string().max(128).nullable()
|
|
1406
1478
|
});
|
|
1407
|
-
var ProcListResult =
|
|
1408
|
-
processes:
|
|
1479
|
+
var ProcListResult = z17.strictObject({
|
|
1480
|
+
processes: z17.array(ProcInfo).max(500),
|
|
1409
1481
|
/** Processes that matched before `limit`. */
|
|
1410
1482
|
total: nonNegInt,
|
|
1411
|
-
truncated:
|
|
1483
|
+
truncated: z17.boolean()
|
|
1412
1484
|
});
|
|
1413
|
-
var ProcPortsParams =
|
|
1485
|
+
var ProcPortsParams = z17.strictObject({
|
|
1414
1486
|
/** Only this port. */
|
|
1415
|
-
port:
|
|
1487
|
+
port: z17.int().min(1).max(65535).optional()
|
|
1416
1488
|
});
|
|
1417
|
-
var ProcPort =
|
|
1418
|
-
port:
|
|
1419
|
-
protocol:
|
|
1489
|
+
var ProcPort = z17.strictObject({
|
|
1490
|
+
port: z17.int().min(1).max(65535),
|
|
1491
|
+
protocol: z17.enum(["tcp", "udp"]),
|
|
1420
1492
|
/** The local address it listens on ("127.0.0.1", "*", "::"). */
|
|
1421
|
-
address:
|
|
1422
|
-
pid:
|
|
1423
|
-
process:
|
|
1493
|
+
address: z17.string().max(64),
|
|
1494
|
+
pid: z17.int().min(0).nullable(),
|
|
1495
|
+
process: z17.string().max(256).nullable()
|
|
1424
1496
|
});
|
|
1425
|
-
var ProcPortsResult =
|
|
1426
|
-
var ProcKillParams =
|
|
1427
|
-
pid:
|
|
1497
|
+
var ProcPortsResult = z17.strictObject({ ports: z17.array(ProcPort).max(4e3) });
|
|
1498
|
+
var ProcKillParams = z17.strictObject({
|
|
1499
|
+
pid: z17.int().min(1),
|
|
1428
1500
|
/** Kill outright (SIGKILL; on Windows the same /F) instead of asking it to quit. */
|
|
1429
|
-
force:
|
|
1501
|
+
force: z17.boolean().default(false)
|
|
1430
1502
|
});
|
|
1431
|
-
var ProcKillResult =
|
|
1432
|
-
pid:
|
|
1433
|
-
signal:
|
|
1503
|
+
var ProcKillResult = z17.strictObject({
|
|
1504
|
+
pid: z17.int().min(1),
|
|
1505
|
+
signal: z17.enum(["SIGTERM", "SIGKILL"]),
|
|
1434
1506
|
/** True when the process was gone within 3 s. */
|
|
1435
|
-
exited:
|
|
1507
|
+
exited: z17.boolean()
|
|
1436
1508
|
});
|
|
1437
1509
|
|
|
1438
1510
|
// src/schema/clipboard.ts
|
|
1439
|
-
import { z as
|
|
1440
|
-
var ClipboardReadParams =
|
|
1441
|
-
var ClipboardReadResult =
|
|
1511
|
+
import { z as z18 } from "zod";
|
|
1512
|
+
var ClipboardReadParams = z18.strictObject({});
|
|
1513
|
+
var ClipboardReadResult = z18.strictObject({
|
|
1442
1514
|
/** The clipboard's text ("" when it holds none), cut to 1 MiB. */
|
|
1443
|
-
text:
|
|
1444
|
-
truncated:
|
|
1515
|
+
text: z18.string().max(1048576),
|
|
1516
|
+
truncated: z18.boolean()
|
|
1445
1517
|
});
|
|
1446
|
-
var ClipboardWriteParams =
|
|
1447
|
-
var ClipboardWriteResult =
|
|
1518
|
+
var ClipboardWriteParams = z18.strictObject({ text: z18.string().max(1048576) });
|
|
1519
|
+
var ClipboardWriteResult = z18.strictObject({ bytes: nonNegInt });
|
|
1448
1520
|
|
|
1449
1521
|
// src/schema/git.ts
|
|
1450
|
-
import { z as
|
|
1522
|
+
import { z as z19 } from "zod";
|
|
1451
1523
|
var GIT_MAX_OUTPUT_CHARS = 262144;
|
|
1452
|
-
var GitText =
|
|
1453
|
-
var GitName =
|
|
1454
|
-
var GitOutputResult =
|
|
1455
|
-
var GitStatusParams =
|
|
1456
|
-
var GitStatusFile =
|
|
1457
|
-
path:
|
|
1524
|
+
var GitText = z19.string().max(GIT_MAX_OUTPUT_CHARS);
|
|
1525
|
+
var GitName = z19.string().min(1).max(255).regex(/^[^-\s][^\s]*$/);
|
|
1526
|
+
var GitOutputResult = z19.strictObject({ output: GitText, truncated: z19.boolean() });
|
|
1527
|
+
var GitStatusParams = z19.strictObject({ cwd: AbsPath });
|
|
1528
|
+
var GitStatusFile = z19.strictObject({
|
|
1529
|
+
path: z19.string(),
|
|
1458
1530
|
/** Porcelain v1 status letters: index (staged) and worktree; "?" for untracked. */
|
|
1459
|
-
index:
|
|
1460
|
-
worktree:
|
|
1531
|
+
index: z19.string().length(1),
|
|
1532
|
+
worktree: z19.string().length(1)
|
|
1461
1533
|
});
|
|
1462
|
-
var GitStatusResult =
|
|
1534
|
+
var GitStatusResult = z19.strictObject({
|
|
1463
1535
|
/** The checked-out branch; null when HEAD is detached. */
|
|
1464
|
-
branch:
|
|
1465
|
-
upstream:
|
|
1536
|
+
branch: z19.string().nullable(),
|
|
1537
|
+
upstream: z19.string().nullable(),
|
|
1466
1538
|
ahead: nonNegInt,
|
|
1467
1539
|
behind: nonNegInt,
|
|
1468
|
-
files:
|
|
1469
|
-
clean:
|
|
1540
|
+
files: z19.array(GitStatusFile).max(5e3),
|
|
1541
|
+
clean: z19.boolean(),
|
|
1470
1542
|
/** More than 5000 changed files: the list is cut. */
|
|
1471
|
-
truncated:
|
|
1472
|
-
});
|
|
1473
|
-
var GitDiffParams =
|
|
1474
|
-
var GitDiffResult =
|
|
1475
|
-
var GitLogParams =
|
|
1476
|
-
var GitLogCommit =
|
|
1477
|
-
var GitLogResult =
|
|
1478
|
-
var GitAddParams =
|
|
1479
|
-
var GitCommitParams =
|
|
1543
|
+
truncated: z19.boolean()
|
|
1544
|
+
});
|
|
1545
|
+
var GitDiffParams = z19.strictObject({ cwd: AbsPath, path: z19.string().max(4096).optional(), staged: z19.boolean().default(false) });
|
|
1546
|
+
var GitDiffResult = z19.strictObject({ diff: GitText, truncated: z19.boolean() });
|
|
1547
|
+
var GitLogParams = z19.strictObject({ cwd: AbsPath, limit: z19.int().min(1).max(500).default(50) });
|
|
1548
|
+
var GitLogCommit = z19.strictObject({ sha: z19.string(), short: z19.string(), author: z19.string(), date: z19.string(), subject: z19.string() });
|
|
1549
|
+
var GitLogResult = z19.strictObject({ commits: z19.array(GitLogCommit).max(500) });
|
|
1550
|
+
var GitAddParams = z19.strictObject({ cwd: AbsPath, paths: z19.array(z19.string().min(1).max(4096)).min(1).max(1e3) });
|
|
1551
|
+
var GitCommitParams = z19.strictObject({
|
|
1480
1552
|
cwd: AbsPath,
|
|
1481
|
-
message:
|
|
1482
|
-
amend:
|
|
1553
|
+
message: z19.string().min(1).max(65536),
|
|
1554
|
+
amend: z19.boolean().default(false),
|
|
1483
1555
|
/** "Name <email>"; absent = the computer's own git identity. */
|
|
1484
|
-
author:
|
|
1556
|
+
author: z19.string().max(512).optional()
|
|
1485
1557
|
});
|
|
1486
|
-
var GitCommitResult =
|
|
1487
|
-
var GitPushParams =
|
|
1488
|
-
var GitPullParams =
|
|
1489
|
-
var GitBranchParams =
|
|
1490
|
-
var GitBranchResult =
|
|
1558
|
+
var GitCommitResult = z19.strictObject({ sha: z19.string(), output: GitText, truncated: z19.boolean() });
|
|
1559
|
+
var GitPushParams = z19.strictObject({ cwd: AbsPath, remote: GitName.default("origin"), branch: GitName.optional(), force_with_lease: z19.boolean().default(false) });
|
|
1560
|
+
var GitPullParams = z19.strictObject({ cwd: AbsPath, remote: GitName.default("origin"), branch: GitName.optional(), rebase: z19.boolean().default(false) });
|
|
1561
|
+
var GitBranchParams = z19.strictObject({ cwd: AbsPath, action: z19.enum(["list", "create", "delete", "switch"]), name: GitName.optional() });
|
|
1562
|
+
var GitBranchResult = z19.strictObject({
|
|
1491
1563
|
/** The branch checked out after the action; null when detached. */
|
|
1492
|
-
current:
|
|
1564
|
+
current: z19.string().nullable(),
|
|
1493
1565
|
/** Local branches (filled by `list`; empty otherwise). */
|
|
1494
|
-
branches:
|
|
1566
|
+
branches: z19.array(z19.string()).max(5e3),
|
|
1495
1567
|
output: GitText,
|
|
1496
|
-
truncated:
|
|
1568
|
+
truncated: z19.boolean()
|
|
1497
1569
|
});
|
|
1498
|
-
var GitStashParams =
|
|
1499
|
-
var GitCloneParams =
|
|
1500
|
-
url:
|
|
1570
|
+
var GitStashParams = z19.strictObject({ cwd: AbsPath, action: z19.enum(["push", "pop", "list", "drop"]), message: z19.string().max(4096).optional() });
|
|
1571
|
+
var GitCloneParams = z19.strictObject({
|
|
1572
|
+
url: z19.string().min(1).max(4096).regex(/^[^-]/),
|
|
1501
1573
|
/** The folder to create; must not exist yet (or be empty). */
|
|
1502
1574
|
dest: AbsPath,
|
|
1503
1575
|
branch: GitName.optional(),
|
|
1504
|
-
depth:
|
|
1576
|
+
depth: z19.int().min(1).max(1e6).optional()
|
|
1505
1577
|
});
|
|
1506
1578
|
|
|
1507
1579
|
// src/schema/web.ts
|
|
1508
|
-
import { z as
|
|
1580
|
+
import { z as z20 } from "zod";
|
|
1509
1581
|
var WEB_MAX_TEXT_CHARS = 524288;
|
|
1510
|
-
var WebUrl =
|
|
1511
|
-
var WebText =
|
|
1512
|
-
var WebHeader =
|
|
1513
|
-
var WebFetchParams =
|
|
1582
|
+
var WebUrl = z20.string().min(1).max(8192).regex(/^https?:\/\//);
|
|
1583
|
+
var WebText = z20.string().max(WEB_MAX_TEXT_CHARS);
|
|
1584
|
+
var WebHeader = z20.strictObject({ name: z20.string().min(1).max(256), value: z20.string().max(8192) });
|
|
1585
|
+
var WebFetchParams = z20.strictObject({
|
|
1514
1586
|
url: WebUrl,
|
|
1515
|
-
method:
|
|
1516
|
-
headers:
|
|
1517
|
-
body:
|
|
1518
|
-
follow_redirects:
|
|
1519
|
-
timeout_s:
|
|
1520
|
-
});
|
|
1521
|
-
var WebFetchResult =
|
|
1522
|
-
status:
|
|
1523
|
-
reason:
|
|
1587
|
+
method: z20.enum(["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"]).default("GET"),
|
|
1588
|
+
headers: z20.array(WebHeader).max(64).default([]),
|
|
1589
|
+
body: z20.string().max(1048576).optional(),
|
|
1590
|
+
follow_redirects: z20.boolean().default(true),
|
|
1591
|
+
timeout_s: z20.int().min(1).max(300).default(30)
|
|
1592
|
+
});
|
|
1593
|
+
var WebFetchResult = z20.strictObject({
|
|
1594
|
+
status: z20.int().min(100).max(999),
|
|
1595
|
+
reason: z20.string(),
|
|
1524
1596
|
/** The final URL after redirects. */
|
|
1525
|
-
url:
|
|
1526
|
-
content_type:
|
|
1527
|
-
headers:
|
|
1597
|
+
url: z20.string(),
|
|
1598
|
+
content_type: z20.string().nullable(),
|
|
1599
|
+
headers: z20.array(WebHeader),
|
|
1528
1600
|
body: WebText,
|
|
1529
|
-
truncated:
|
|
1601
|
+
truncated: z20.boolean(),
|
|
1530
1602
|
bytes: nonNegInt,
|
|
1531
1603
|
elapsed_ms: nonNegInt
|
|
1532
1604
|
});
|
|
1533
|
-
var WebScrapeParams =
|
|
1534
|
-
urls:
|
|
1535
|
-
use_cache:
|
|
1536
|
-
get_links:
|
|
1605
|
+
var WebScrapeParams = z20.strictObject({
|
|
1606
|
+
urls: z20.array(WebUrl).min(1).max(20),
|
|
1607
|
+
use_cache: z20.boolean().default(true),
|
|
1608
|
+
get_links: z20.boolean().default(false)
|
|
1537
1609
|
});
|
|
1538
|
-
var WebScrapePage =
|
|
1539
|
-
url:
|
|
1540
|
-
ok:
|
|
1541
|
-
status:
|
|
1542
|
-
title:
|
|
1610
|
+
var WebScrapePage = z20.strictObject({
|
|
1611
|
+
url: z20.string(),
|
|
1612
|
+
ok: z20.boolean(),
|
|
1613
|
+
status: z20.int().min(0).max(999).nullable(),
|
|
1614
|
+
title: z20.string().nullable(),
|
|
1543
1615
|
/** The page's readable content (markdown-like text from the scraper's parse). */
|
|
1544
1616
|
text: WebText,
|
|
1545
|
-
truncated:
|
|
1617
|
+
truncated: z20.boolean(),
|
|
1546
1618
|
/** Links found on the page (only with get_links). */
|
|
1547
|
-
links:
|
|
1619
|
+
links: z20.array(z20.string()).max(2e3),
|
|
1548
1620
|
/** Why the page failed (blocked, timeout, not found…), in the scraper's words; null when ok. */
|
|
1549
|
-
error:
|
|
1621
|
+
error: z20.string().nullable(),
|
|
1550
1622
|
/** How the page was fetched (http, browser, cache). */
|
|
1551
|
-
via:
|
|
1552
|
-
});
|
|
1553
|
-
var WebScrapeResult =
|
|
1554
|
-
var WebSearchParams =
|
|
1555
|
-
keywords:
|
|
1556
|
-
country:
|
|
1557
|
-
count:
|
|
1558
|
-
freshness:
|
|
1559
|
-
});
|
|
1560
|
-
var WebSearchHit =
|
|
1561
|
-
var WebSearchQueryResult =
|
|
1562
|
-
var WebSearchResult =
|
|
1563
|
-
var ToolsWebSearchParams =
|
|
1564
|
-
keywords:
|
|
1565
|
-
country:
|
|
1566
|
-
count:
|
|
1567
|
-
freshness:
|
|
1568
|
-
});
|
|
1569
|
-
var WebBrowserFetchParams =
|
|
1623
|
+
via: z20.string().nullable()
|
|
1624
|
+
});
|
|
1625
|
+
var WebScrapeResult = z20.strictObject({ pages: z20.array(WebScrapePage), elapsed_ms: nonNegInt });
|
|
1626
|
+
var WebSearchParams = z20.strictObject({
|
|
1627
|
+
keywords: z20.array(z20.string().min(1).max(400)).min(1).max(5),
|
|
1628
|
+
country: z20.string().min(2).max(2).default("us"),
|
|
1629
|
+
count: z20.int().min(1).max(20).default(10),
|
|
1630
|
+
freshness: z20.enum(["pd", "pw", "pm", "py"]).optional()
|
|
1631
|
+
});
|
|
1632
|
+
var WebSearchHit = z20.strictObject({ title: z20.string(), url: z20.string(), description: z20.string() });
|
|
1633
|
+
var WebSearchQueryResult = z20.strictObject({ keyword: z20.string(), hits: z20.array(WebSearchHit), error: z20.string().nullable() });
|
|
1634
|
+
var WebSearchResult = z20.strictObject({ queries: z20.array(WebSearchQueryResult), elapsed_ms: nonNegInt });
|
|
1635
|
+
var ToolsWebSearchParams = z20.strictObject({
|
|
1636
|
+
keywords: z20.array(z20.string().min(1).max(400)).min(1).max(5),
|
|
1637
|
+
country: z20.string().min(2).max(2).default("us"),
|
|
1638
|
+
count: z20.int().min(1).max(20).default(10),
|
|
1639
|
+
freshness: z20.enum(["pd", "pw", "pm", "py"]).optional()
|
|
1640
|
+
});
|
|
1641
|
+
var WebBrowserFetchParams = z20.strictObject({
|
|
1570
1642
|
url: WebUrl,
|
|
1571
1643
|
/** A CSS selector to wait for before reading the page. */
|
|
1572
|
-
wait_for:
|
|
1573
|
-
wait_timeout_ms:
|
|
1644
|
+
wait_for: z20.string().max(1024).optional(),
|
|
1645
|
+
wait_timeout_ms: z20.int().min(100).max(12e4).default(3e4),
|
|
1574
1646
|
/** true: readable text; false: the rendered HTML. */
|
|
1575
|
-
extract_text:
|
|
1647
|
+
extract_text: z20.boolean().default(true)
|
|
1576
1648
|
});
|
|
1577
|
-
var WebBrowserFetchResult =
|
|
1578
|
-
url:
|
|
1579
|
-
status:
|
|
1580
|
-
title:
|
|
1649
|
+
var WebBrowserFetchResult = z20.strictObject({
|
|
1650
|
+
url: z20.string(),
|
|
1651
|
+
status: z20.int().min(0).max(999).nullable(),
|
|
1652
|
+
title: z20.string().nullable(),
|
|
1581
1653
|
content: WebText,
|
|
1582
|
-
truncated:
|
|
1654
|
+
truncated: z20.boolean(),
|
|
1583
1655
|
elapsed_ms: nonNegInt
|
|
1584
1656
|
});
|
|
1585
|
-
var ToolsServiceProgress =
|
|
1657
|
+
var ToolsServiceProgress = z20.strictObject({ phase: z20.enum(["fetching", "installing"]), done: nonNegInt, total: nonNegInt });
|
|
1586
1658
|
|
|
1587
1659
|
// src/schema/system.ts
|
|
1588
|
-
import { z as
|
|
1589
|
-
var SystemOpenUrlParams =
|
|
1660
|
+
import { z as z21 } from "zod";
|
|
1661
|
+
var SystemOpenUrlParams = z21.strictObject({
|
|
1590
1662
|
/** http, https or mailto; opened in the person's default app for it. */
|
|
1591
|
-
url:
|
|
1663
|
+
url: z21.string().min(1).max(4096)
|
|
1592
1664
|
});
|
|
1593
|
-
var SystemOpenUrlResult =
|
|
1594
|
-
var SystemOpenPathParams =
|
|
1665
|
+
var SystemOpenUrlResult = z21.strictObject({ url: z21.string().max(4096) });
|
|
1666
|
+
var SystemOpenPathParams = z21.strictObject({
|
|
1595
1667
|
path: AbsPath,
|
|
1596
1668
|
/** Show it in the file manager (Finder, Explorer) instead of opening it. */
|
|
1597
|
-
reveal:
|
|
1669
|
+
reveal: z21.boolean().default(false)
|
|
1598
1670
|
});
|
|
1599
|
-
var SystemOpenPathResult =
|
|
1600
|
-
var SystemNotifyParams =
|
|
1601
|
-
title:
|
|
1602
|
-
body:
|
|
1671
|
+
var SystemOpenPathResult = z21.strictObject({ path: AbsPath, revealed: z21.boolean() });
|
|
1672
|
+
var SystemNotifyParams = z21.strictObject({
|
|
1673
|
+
title: z21.string().min(1).max(128),
|
|
1674
|
+
body: z21.string().max(1024).default("")
|
|
1603
1675
|
});
|
|
1604
|
-
var SystemNotifyResult =
|
|
1676
|
+
var SystemNotifyResult = z21.strictObject({
|
|
1605
1677
|
/** False when this computer has no notification service to show it (a bare Linux box). */
|
|
1606
|
-
shown:
|
|
1678
|
+
shown: z21.boolean()
|
|
1607
1679
|
});
|
|
1608
1680
|
|
|
1609
1681
|
// src/schema/screen.ts
|
|
1610
|
-
import { z as
|
|
1611
|
-
var ScreenDisplay =
|
|
1682
|
+
import { z as z22 } from "zod";
|
|
1683
|
+
var ScreenDisplay = z22.strictObject({
|
|
1612
1684
|
/** The OS's display id; pass it to screen.capture. */
|
|
1613
1685
|
id: nonNegInt,
|
|
1614
|
-
name:
|
|
1686
|
+
name: z22.string().max(128),
|
|
1615
1687
|
/** Position and size in the OS's logical points (x and y may be negative left of or above the main display). */
|
|
1616
|
-
x:
|
|
1617
|
-
y:
|
|
1618
|
-
width:
|
|
1619
|
-
height:
|
|
1688
|
+
x: z22.int(),
|
|
1689
|
+
y: z22.int(),
|
|
1690
|
+
width: z22.int().min(1),
|
|
1691
|
+
height: z22.int().min(1),
|
|
1620
1692
|
/** Pixels per point (2 on a Retina display). */
|
|
1621
|
-
scale:
|
|
1622
|
-
primary:
|
|
1693
|
+
scale: z22.number().min(0.1).max(8),
|
|
1694
|
+
primary: z22.boolean()
|
|
1623
1695
|
});
|
|
1624
|
-
var ScreenListParams =
|
|
1625
|
-
var ScreenListResult =
|
|
1626
|
-
var ScreenCaptureParams =
|
|
1696
|
+
var ScreenListParams = z22.strictObject({});
|
|
1697
|
+
var ScreenListResult = z22.strictObject({ displays: z22.array(ScreenDisplay).max(32) });
|
|
1698
|
+
var ScreenCaptureParams = z22.strictObject({
|
|
1627
1699
|
/** The display (from screen.list); the primary display when absent. */
|
|
1628
1700
|
display_id: nonNegInt.optional(),
|
|
1629
|
-
format:
|
|
1701
|
+
format: z22.enum(["jpeg", "png"]).default("jpeg"),
|
|
1630
1702
|
/** Scale the picture down to at most this width in pixels (kept when already smaller). */
|
|
1631
|
-
max_width:
|
|
1703
|
+
max_width: z22.int().min(160).max(7680).default(1600)
|
|
1632
1704
|
});
|
|
1633
|
-
var ScreenCaptureResult =
|
|
1705
|
+
var ScreenCaptureResult = z22.strictObject({
|
|
1634
1706
|
display_id: nonNegInt,
|
|
1635
|
-
mime_type:
|
|
1636
|
-
width:
|
|
1637
|
-
height:
|
|
1707
|
+
mime_type: z22.enum(["image/jpeg", "image/png"]),
|
|
1708
|
+
width: z22.int().min(1),
|
|
1709
|
+
height: z22.int().min(1),
|
|
1638
1710
|
/** The display's full resolution in pixels, before scaling. */
|
|
1639
|
-
source_width:
|
|
1640
|
-
source_height:
|
|
1711
|
+
source_width: z22.int().min(1),
|
|
1712
|
+
source_height: z22.int().min(1),
|
|
1641
1713
|
/** The image, base64 (at most 6 MiB of text). */
|
|
1642
|
-
data_base64:
|
|
1714
|
+
data_base64: z22.string().max(6291456)
|
|
1643
1715
|
});
|
|
1644
1716
|
|
|
1645
1717
|
// src/schema/window.ts
|
|
1646
|
-
import { z as
|
|
1647
|
-
var WindowInfo =
|
|
1718
|
+
import { z as z23 } from "zod";
|
|
1719
|
+
var WindowInfo = z23.strictObject({
|
|
1648
1720
|
/** The OS's window handle (macOS window number, Windows HWND, X11 window id). */
|
|
1649
1721
|
id: nonNegInt,
|
|
1650
|
-
title:
|
|
1722
|
+
title: z23.string().max(512),
|
|
1651
1723
|
/** Position and size in logical points. */
|
|
1652
|
-
x:
|
|
1653
|
-
y:
|
|
1654
|
-
width:
|
|
1655
|
-
height:
|
|
1724
|
+
x: z23.int(),
|
|
1725
|
+
y: z23.int(),
|
|
1726
|
+
width: z23.int().min(0),
|
|
1727
|
+
height: z23.int().min(0),
|
|
1656
1728
|
/**
|
|
1657
1729
|
* The application that owns the window, by the name the OS shows people; absent when the OS does
|
|
1658
1730
|
* not say. Optional (never null, the schema rule) because it was added in protocol 1.7: an older
|
|
1659
1731
|
* app's answer has no such field (FIELDS_SINCE).
|
|
1660
1732
|
*/
|
|
1661
|
-
app:
|
|
1733
|
+
app: z23.string().max(256).optional(),
|
|
1662
1734
|
/** The owning process id; absent when the OS does not say. Added in protocol 1.7. */
|
|
1663
|
-
pid:
|
|
1735
|
+
pid: z23.int().min(0).optional()
|
|
1664
1736
|
});
|
|
1665
|
-
var WindowListParams =
|
|
1737
|
+
var WindowListParams = z23.strictObject({
|
|
1666
1738
|
/** Case-insensitive substring of the window title. */
|
|
1667
|
-
title:
|
|
1668
|
-
limit:
|
|
1739
|
+
title: z23.string().min(1).max(256).optional(),
|
|
1740
|
+
limit: z23.int().min(1).max(500).default(100)
|
|
1669
1741
|
});
|
|
1670
|
-
var WindowListResult =
|
|
1671
|
-
windows:
|
|
1742
|
+
var WindowListResult = z23.strictObject({
|
|
1743
|
+
windows: z23.array(WindowInfo).max(500),
|
|
1672
1744
|
total: nonNegInt,
|
|
1673
|
-
truncated:
|
|
1745
|
+
truncated: z23.boolean()
|
|
1674
1746
|
});
|
|
1675
|
-
var WindowFocusParams =
|
|
1676
|
-
var WindowFocusResult =
|
|
1677
|
-
var WindowMoveParams =
|
|
1747
|
+
var WindowFocusParams = z23.strictObject({ id: nonNegInt });
|
|
1748
|
+
var WindowFocusResult = z23.strictObject({ window: WindowInfo });
|
|
1749
|
+
var WindowMoveParams = z23.strictObject({
|
|
1678
1750
|
id: nonNegInt,
|
|
1679
1751
|
/** New top-left corner; unchanged when absent. */
|
|
1680
|
-
x:
|
|
1681
|
-
y:
|
|
1752
|
+
x: z23.int().optional(),
|
|
1753
|
+
y: z23.int().optional(),
|
|
1682
1754
|
/** New size; unchanged when absent. */
|
|
1683
|
-
width:
|
|
1684
|
-
height:
|
|
1755
|
+
width: z23.int().min(50).max(16384).optional(),
|
|
1756
|
+
height: z23.int().min(50).max(16384).optional()
|
|
1685
1757
|
});
|
|
1686
|
-
var WindowMoveResult =
|
|
1687
|
-
var WindowMinimizeParams =
|
|
1688
|
-
var WindowMinimizeResult =
|
|
1758
|
+
var WindowMoveResult = z23.strictObject({ window: WindowInfo });
|
|
1759
|
+
var WindowMinimizeParams = z23.strictObject({ id: nonNegInt });
|
|
1760
|
+
var WindowMinimizeResult = z23.strictObject({ id: nonNegInt });
|
|
1689
1761
|
|
|
1690
1762
|
// src/schema/input.ts
|
|
1691
|
-
import { z as
|
|
1692
|
-
var InputKey =
|
|
1763
|
+
import { z as z24 } from "zod";
|
|
1764
|
+
var InputKey = z24.enum([
|
|
1693
1765
|
"cmd",
|
|
1694
1766
|
"ctrl",
|
|
1695
1767
|
"alt",
|
|
@@ -1769,65 +1841,65 @@ var InputKey = z23.enum([
|
|
|
1769
1841
|
"backslash",
|
|
1770
1842
|
"grave"
|
|
1771
1843
|
]);
|
|
1772
|
-
var InputTypeTextParams =
|
|
1773
|
-
var InputTypeTextResult =
|
|
1774
|
-
var InputHotkeyParams =
|
|
1844
|
+
var InputTypeTextParams = z24.strictObject({ text: z24.string().min(1).max(1e4) });
|
|
1845
|
+
var InputTypeTextResult = z24.strictObject({ characters: z24.int().min(1) });
|
|
1846
|
+
var InputHotkeyParams = z24.strictObject({
|
|
1775
1847
|
/** Pressed together in order and released in reverse: ["cmd", "shift", "t"]. */
|
|
1776
|
-
keys:
|
|
1848
|
+
keys: z24.array(InputKey).min(1).max(6)
|
|
1777
1849
|
});
|
|
1778
|
-
var InputHotkeyResult =
|
|
1779
|
-
var InputPoint =
|
|
1780
|
-
var InputMouseMoveParams =
|
|
1850
|
+
var InputHotkeyResult = z24.strictObject({ keys: z24.array(InputKey) });
|
|
1851
|
+
var InputPoint = z24.strictObject({ x: z24.int(), y: z24.int() });
|
|
1852
|
+
var InputMouseMoveParams = z24.strictObject({
|
|
1781
1853
|
/** Screen position in logical points (the coordinates screen.list and window.list report). */
|
|
1782
|
-
x:
|
|
1783
|
-
y:
|
|
1854
|
+
x: z24.int(),
|
|
1855
|
+
y: z24.int()
|
|
1784
1856
|
});
|
|
1785
|
-
var InputMouseMoveResult =
|
|
1857
|
+
var InputMouseMoveResult = z24.strictObject({
|
|
1786
1858
|
/** Where the pointer is now, read back from the OS. */
|
|
1787
1859
|
position: InputPoint
|
|
1788
1860
|
});
|
|
1789
|
-
var InputMouseClickParams =
|
|
1861
|
+
var InputMouseClickParams = z24.strictObject({
|
|
1790
1862
|
/** Move here first; clicks where the pointer is when absent. */
|
|
1791
|
-
x:
|
|
1792
|
-
y:
|
|
1793
|
-
button:
|
|
1794
|
-
double:
|
|
1863
|
+
x: z24.int().optional(),
|
|
1864
|
+
y: z24.int().optional(),
|
|
1865
|
+
button: z24.enum(["left", "right", "middle"]).default("left"),
|
|
1866
|
+
double: z24.boolean().default(false)
|
|
1795
1867
|
});
|
|
1796
|
-
var InputMouseClickResult =
|
|
1868
|
+
var InputMouseClickResult = z24.strictObject({
|
|
1797
1869
|
position: InputPoint,
|
|
1798
|
-
button:
|
|
1799
|
-
double:
|
|
1870
|
+
button: z24.enum(["left", "right", "middle"]),
|
|
1871
|
+
double: z24.boolean()
|
|
1800
1872
|
});
|
|
1801
1873
|
|
|
1802
1874
|
// src/schema/power.ts
|
|
1803
|
-
import { z as
|
|
1804
|
-
var PowerStatusParams =
|
|
1805
|
-
var PowerStatusResult =
|
|
1806
|
-
has_battery:
|
|
1875
|
+
import { z as z25 } from "zod";
|
|
1876
|
+
var PowerStatusParams = z25.strictObject({});
|
|
1877
|
+
var PowerStatusResult = z25.strictObject({
|
|
1878
|
+
has_battery: z25.boolean(),
|
|
1807
1879
|
/** 0–100; null without a battery. */
|
|
1808
|
-
percent:
|
|
1809
|
-
charging:
|
|
1880
|
+
percent: z25.number().min(0).max(100).nullable(),
|
|
1881
|
+
charging: z25.boolean().nullable(),
|
|
1810
1882
|
/** On wall power; null where the OS does not say. */
|
|
1811
|
-
plugged_in:
|
|
1883
|
+
plugged_in: z25.boolean().nullable(),
|
|
1812
1884
|
/** Minutes of battery left; null when charging, unknown or without a battery. */
|
|
1813
1885
|
minutes_left: nonNegInt.nullable(),
|
|
1814
1886
|
/** Matrx 2 is keeping the computer awake (power.prevent_sleep) until this time; null when it is not. */
|
|
1815
1887
|
awake_until_ms: epochMs.nullable()
|
|
1816
1888
|
});
|
|
1817
|
-
var PowerPreventSleepParams =
|
|
1889
|
+
var PowerPreventSleepParams = z25.strictObject({
|
|
1818
1890
|
/** Keep the computer awake this long; 0 lets it sleep again now. */
|
|
1819
|
-
seconds:
|
|
1891
|
+
seconds: z25.int().min(0).max(86400),
|
|
1820
1892
|
/** Shown where the OS lists what keeps it awake. */
|
|
1821
|
-
reason:
|
|
1893
|
+
reason: z25.string().min(1).max(128).default("Matrx 2 is working")
|
|
1822
1894
|
});
|
|
1823
|
-
var PowerPreventSleepResult =
|
|
1895
|
+
var PowerPreventSleepResult = z25.strictObject({
|
|
1824
1896
|
/** When it may sleep again; null after seconds 0. */
|
|
1825
1897
|
awake_until_ms: epochMs.nullable()
|
|
1826
1898
|
});
|
|
1827
1899
|
|
|
1828
1900
|
// src/schema/diag.ts
|
|
1829
|
-
import { z as
|
|
1830
|
-
var DiagProcess =
|
|
1901
|
+
import { z as z26 } from "zod";
|
|
1902
|
+
var DiagProcess = z26.enum([
|
|
1831
1903
|
"main",
|
|
1832
1904
|
"renderer",
|
|
1833
1905
|
"hosted_page",
|
|
@@ -1840,7 +1912,7 @@ var DiagProcess = z25.enum([
|
|
|
1840
1912
|
"coding_sessions",
|
|
1841
1913
|
"claude_accounts"
|
|
1842
1914
|
]);
|
|
1843
|
-
var DiagErrorKind =
|
|
1915
|
+
var DiagErrorKind = z26.enum([
|
|
1844
1916
|
"uncaught_exception",
|
|
1845
1917
|
"unhandled_rejection",
|
|
1846
1918
|
"renderer_crash",
|
|
@@ -1852,148 +1924,148 @@ var DiagErrorKind = z25.enum([
|
|
|
1852
1924
|
"banner",
|
|
1853
1925
|
"logged_error"
|
|
1854
1926
|
]);
|
|
1855
|
-
var DiagErrorStatus =
|
|
1856
|
-
var DiagErrorEntry =
|
|
1927
|
+
var DiagErrorStatus = z26.enum(["waiting", "sent", "resolved"]);
|
|
1928
|
+
var DiagErrorEntry = z26.strictObject({
|
|
1857
1929
|
/** sha256 prefix over process, kind, source, code and the normalized message. */
|
|
1858
|
-
signature:
|
|
1930
|
+
signature: z26.string().regex(/^[0-9a-f]{32}$/),
|
|
1859
1931
|
process: DiagProcess,
|
|
1860
1932
|
kind: DiagErrorKind,
|
|
1861
1933
|
/** Where: a cap.op, a log event, a screen or page name. */
|
|
1862
|
-
source:
|
|
1934
|
+
source: z26.string().min(1).max(128),
|
|
1863
1935
|
/** An ErrorCode, an exit code or signal, an error class; null when there is none. */
|
|
1864
|
-
code:
|
|
1936
|
+
code: z26.string().max(64).nullable(),
|
|
1865
1937
|
/** The first occurrence's message, personal data removed. */
|
|
1866
|
-
message:
|
|
1938
|
+
message: z26.string().max(500),
|
|
1867
1939
|
count: nonNegInt,
|
|
1868
1940
|
first_seen_ms: epochMs,
|
|
1869
1941
|
last_seen_ms: epochMs,
|
|
1870
1942
|
status: DiagErrorStatus,
|
|
1871
1943
|
/** What the agent who resolved it wrote; null until resolved. */
|
|
1872
|
-
resolution_note:
|
|
1873
|
-
app_version:
|
|
1944
|
+
resolution_note: z26.string().max(500).nullable(),
|
|
1945
|
+
app_version: z26.string().max(64)
|
|
1874
1946
|
});
|
|
1875
|
-
var DiagErrorsListParams =
|
|
1947
|
+
var DiagErrorsListParams = z26.strictObject({
|
|
1876
1948
|
/** open = waiting or sent; all includes resolved. */
|
|
1877
|
-
status:
|
|
1878
|
-
limit:
|
|
1949
|
+
status: z26.enum(["open", "all"]).default("open"),
|
|
1950
|
+
limit: z26.int().min(1).max(500).default(200)
|
|
1879
1951
|
});
|
|
1880
|
-
var DiagErrorsListResult =
|
|
1952
|
+
var DiagErrorsListResult = z26.strictObject({
|
|
1881
1953
|
/** Newest last_seen first. */
|
|
1882
|
-
entries:
|
|
1954
|
+
entries: z26.array(DiagErrorEntry).max(500),
|
|
1883
1955
|
total_signatures: nonNegInt,
|
|
1884
1956
|
total_occurrences: nonNegInt,
|
|
1885
1957
|
/** Signatures with occurrences not yet delivered. */
|
|
1886
1958
|
waiting: nonNegInt,
|
|
1887
1959
|
/** signed_out = kept until sign-in; ok = the last delivery worked; failing = the last delivery failed (kept, retried). */
|
|
1888
|
-
delivery:
|
|
1960
|
+
delivery: z26.enum(["signed_out", "ok", "failing"]),
|
|
1889
1961
|
last_delivery_ms: epochMs.nullable()
|
|
1890
1962
|
});
|
|
1891
|
-
var DiagErrorsReportParams =
|
|
1892
|
-
process:
|
|
1893
|
-
kind:
|
|
1963
|
+
var DiagErrorsReportParams = z26.strictObject({
|
|
1964
|
+
process: z26.enum(["renderer", "hosted_page"]),
|
|
1965
|
+
kind: z26.enum(["uncaught_exception", "unhandled_rejection", "console_error", "banner"]),
|
|
1894
1966
|
/** The screen or page, e.g. "code.chats". */
|
|
1895
|
-
source:
|
|
1896
|
-
message:
|
|
1897
|
-
code:
|
|
1898
|
-
stack:
|
|
1967
|
+
source: z26.string().min(1).max(128),
|
|
1968
|
+
message: z26.string().min(1).max(2e3),
|
|
1969
|
+
code: z26.string().max(64).optional(),
|
|
1970
|
+
stack: z26.string().max(8e3).optional()
|
|
1899
1971
|
});
|
|
1900
|
-
var DiagErrorsReportResult =
|
|
1901
|
-
signature:
|
|
1972
|
+
var DiagErrorsReportResult = z26.strictObject({
|
|
1973
|
+
signature: z26.string().regex(/^[0-9a-f]{32}$/)
|
|
1902
1974
|
});
|
|
1903
|
-
var DiagErrorsChangedEvent =
|
|
1975
|
+
var DiagErrorsChangedEvent = z26.strictObject({
|
|
1904
1976
|
total_signatures: nonNegInt,
|
|
1905
1977
|
waiting: nonNegInt
|
|
1906
1978
|
});
|
|
1907
1979
|
|
|
1908
1980
|
// src/schema/resources.ts
|
|
1909
|
-
import { z as
|
|
1910
|
-
var ResourcesDisk =
|
|
1981
|
+
import { z as z27 } from "zod";
|
|
1982
|
+
var ResourcesDisk = z27.strictObject({
|
|
1911
1983
|
/** Where it is mounted ("/", "C:"). */
|
|
1912
|
-
mount:
|
|
1984
|
+
mount: z27.string().max(512),
|
|
1913
1985
|
/** The volume's name as the file manager shows it ("Macintosh HD", "Local Disk (C:)"). Since 1.17. */
|
|
1914
|
-
name:
|
|
1986
|
+
name: z27.string().max(256).optional(),
|
|
1915
1987
|
/** The file system ("apfs", "NTFS", "ext4"). */
|
|
1916
|
-
fs:
|
|
1988
|
+
fs: z27.string().max(64),
|
|
1917
1989
|
size_bytes: nonNegInt,
|
|
1918
1990
|
used_bytes: nonNegInt,
|
|
1919
1991
|
available_bytes: nonNegInt
|
|
1920
1992
|
});
|
|
1921
|
-
var ResourcesSnapshotParams =
|
|
1922
|
-
var ResourcesSnapshotResult =
|
|
1923
|
-
cpu:
|
|
1993
|
+
var ResourcesSnapshotParams = z27.strictObject({});
|
|
1994
|
+
var ResourcesSnapshotResult = z27.strictObject({
|
|
1995
|
+
cpu: z27.strictObject({
|
|
1924
1996
|
/** Busy share of all cores, 0–100, measured now. */
|
|
1925
|
-
percent:
|
|
1926
|
-
cores:
|
|
1997
|
+
percent: z27.number().min(0).max(100),
|
|
1998
|
+
cores: z27.int().min(1),
|
|
1927
1999
|
/** 1, 5 and 15 minute load averages; null on Windows. */
|
|
1928
|
-
load:
|
|
2000
|
+
load: z27.array(z27.number().min(0)).length(3).nullable()
|
|
1929
2001
|
}),
|
|
1930
|
-
memory:
|
|
1931
|
-
swap:
|
|
1932
|
-
disks:
|
|
2002
|
+
memory: z27.strictObject({ total_bytes: nonNegInt, used_bytes: nonNegInt, available_bytes: nonNegInt }),
|
|
2003
|
+
swap: z27.strictObject({ total_bytes: nonNegInt, used_bytes: nonNegInt }),
|
|
2004
|
+
disks: z27.array(ResourcesDisk).max(64),
|
|
1933
2005
|
uptime_seconds: nonNegInt
|
|
1934
2006
|
});
|
|
1935
|
-
var ResourcesJobKind =
|
|
1936
|
-
var ResourcesStrain =
|
|
1937
|
-
var ResourcesPressure =
|
|
1938
|
-
var ResourcesJob =
|
|
2007
|
+
var ResourcesJobKind = z27.enum(["type-check", "tests", "build", "lint", "dev server", "language server", "search"]);
|
|
2008
|
+
var ResourcesStrain = z27.enum(["good", "strain", "overloaded"]);
|
|
2009
|
+
var ResourcesPressure = z27.enum(["normal", "warning", "critical"]);
|
|
2010
|
+
var ResourcesJob = z27.strictObject({
|
|
1939
2011
|
/** The job's root process (Stop takes its whole tree). */
|
|
1940
|
-
pid:
|
|
2012
|
+
pid: z27.int().min(0),
|
|
1941
2013
|
kind: ResourcesJobKind,
|
|
1942
2014
|
/** Its heaviest process's command line, shortened ("…/lib/tsc --noEmit -p tsconfig.json"). */
|
|
1943
|
-
command:
|
|
2015
|
+
command: z27.string().max(256),
|
|
1944
2016
|
/** Who started it: "Claude Code", "Codex", "Cursor", "VS Code", "Terminal", "local stack", "detached"; null when unknown. */
|
|
1945
|
-
started_by:
|
|
2017
|
+
started_by: z27.string().max(64).nullable(),
|
|
1946
2018
|
/** Whatever started it is gone and nothing waits for it. */
|
|
1947
|
-
orphan:
|
|
2019
|
+
orphan: z27.boolean(),
|
|
1948
2020
|
/** A type-check queued for its turn (no compiler running yet). */
|
|
1949
|
-
waiting:
|
|
2021
|
+
waiting: z27.boolean(),
|
|
1950
2022
|
/** The project folder it runs in ("matrx-frontend"); null when not in one. */
|
|
1951
|
-
folder:
|
|
2023
|
+
folder: z27.string().max(256).nullable(),
|
|
1952
2024
|
/** The same command in the same folder, running this many times (1 = no duplicate). */
|
|
1953
|
-
duplicates:
|
|
1954
|
-
processes:
|
|
2025
|
+
duplicates: z27.int().min(1),
|
|
2026
|
+
processes: z27.int().min(1),
|
|
1955
2027
|
/** Sum over the tree, as `ps` reports it: 100 = one full core. */
|
|
1956
|
-
cpu_percent:
|
|
2028
|
+
cpu_percent: z27.number().min(0),
|
|
1957
2029
|
/** Real memory (macOS: the physical footprint Activity Monitor shows, compressed included). */
|
|
1958
2030
|
memory_bytes: nonNegInt,
|
|
1959
2031
|
started_at_ms: epochMs.nullable(),
|
|
1960
2032
|
/** False for an app, an agent session, a terminal, a system process, the local stack or Matrx 2 itself. */
|
|
1961
|
-
stoppable:
|
|
2033
|
+
stoppable: z27.boolean()
|
|
1962
2034
|
});
|
|
1963
|
-
var ResourcesProcess =
|
|
1964
|
-
pid:
|
|
2035
|
+
var ResourcesProcess = z27.strictObject({
|
|
2036
|
+
pid: z27.int().min(0),
|
|
1965
2037
|
/** The command line, shortened. */
|
|
1966
|
-
name:
|
|
1967
|
-
cpu_percent:
|
|
2038
|
+
name: z27.string().max(256),
|
|
2039
|
+
cpu_percent: z27.number().min(0),
|
|
1968
2040
|
memory_bytes: nonNegInt,
|
|
1969
|
-
started_by:
|
|
2041
|
+
started_by: z27.string().max(64).nullable(),
|
|
1970
2042
|
/** The job it belongs to ("type-check in aidream"); null when none. */
|
|
1971
|
-
job:
|
|
2043
|
+
job: z27.string().max(256).nullable(),
|
|
1972
2044
|
started_at_ms: epochMs.nullable()
|
|
1973
2045
|
});
|
|
1974
|
-
var ResourcesVerdict =
|
|
2046
|
+
var ResourcesVerdict = z27.strictObject({
|
|
1975
2047
|
level: ResourcesStrain,
|
|
1976
2048
|
/** One sentence ("Your Mac is under strain. 3 type-checks are running at once."). */
|
|
1977
|
-
text:
|
|
2049
|
+
text: z27.string().max(256),
|
|
1978
2050
|
/** The biggest jobs behind it; null when all is well. */
|
|
1979
|
-
cause:
|
|
2051
|
+
cause: z27.string().max(1024).nullable()
|
|
1980
2052
|
});
|
|
1981
|
-
var ResourcesSample =
|
|
2053
|
+
var ResourcesSample = z27.strictObject({
|
|
1982
2054
|
at_ms: epochMs,
|
|
1983
2055
|
/** The 1-minute load average. */
|
|
1984
|
-
load:
|
|
2056
|
+
load: z27.number().min(0),
|
|
1985
2057
|
memory_used_bytes: nonNegInt,
|
|
1986
2058
|
typechecks: nonNegInt
|
|
1987
2059
|
});
|
|
1988
|
-
var ResourcesActivityParams =
|
|
1989
|
-
var ResourcesActivityResult =
|
|
2060
|
+
var ResourcesActivityParams = z27.strictObject({});
|
|
2061
|
+
var ResourcesActivityResult = z27.strictObject({
|
|
1990
2062
|
/** False until the first reading (a second or two after start). */
|
|
1991
|
-
ready:
|
|
2063
|
+
ready: z27.boolean(),
|
|
1992
2064
|
sampled_at_ms: epochMs.nullable(),
|
|
1993
|
-
cores:
|
|
2065
|
+
cores: z27.int().min(1),
|
|
1994
2066
|
/** 1, 5 and 15 minute load averages. */
|
|
1995
|
-
load:
|
|
1996
|
-
memory:
|
|
2067
|
+
load: z27.array(z27.number().min(0)).length(3),
|
|
2068
|
+
memory: z27.strictObject({
|
|
1997
2069
|
total_bytes: nonNegInt,
|
|
1998
2070
|
/** Activity Monitor's Memory Used: app memory + wired + compressed. */
|
|
1999
2071
|
used_bytes: nonNegInt,
|
|
@@ -2004,252 +2076,252 @@ var ResourcesActivityResult = z26.strictObject({
|
|
|
2004
2076
|
pressure: ResourcesPressure.nullable()
|
|
2005
2077
|
}),
|
|
2006
2078
|
verdict: ResourcesVerdict,
|
|
2007
|
-
typechecks:
|
|
2079
|
+
typechecks: z27.strictObject({ running: nonNegInt, waiting: nonNegInt, comfort: nonNegInt }),
|
|
2008
2080
|
/** Heaviest first (1 GB weighs as much as 16 % of a core). */
|
|
2009
|
-
jobs:
|
|
2081
|
+
jobs: z27.array(ResourcesJob).max(200),
|
|
2010
2082
|
/** The 15 heaviest by memory and the 15 busiest by CPU, together. */
|
|
2011
|
-
top:
|
|
2083
|
+
top: z27.array(ResourcesProcess).max(30),
|
|
2012
2084
|
/** The last hour, oldest first. */
|
|
2013
|
-
history:
|
|
2085
|
+
history: z27.array(ResourcesSample).max(1200)
|
|
2014
2086
|
});
|
|
2015
|
-
var ResourcesStopJobParams =
|
|
2016
|
-
var ResourcesStopJobResult =
|
|
2087
|
+
var ResourcesStopJobParams = z27.strictObject({ pid: z27.int().min(1) });
|
|
2088
|
+
var ResourcesStopJobResult = z27.strictObject({
|
|
2017
2089
|
/** Processes signalled; whatever is still running 5 seconds later is force-stopped. */
|
|
2018
2090
|
processes: nonNegInt,
|
|
2019
2091
|
/** It had finished before the request arrived. */
|
|
2020
|
-
already_finished:
|
|
2092
|
+
already_finished: z27.boolean()
|
|
2021
2093
|
});
|
|
2022
|
-
var ResourcesIncident =
|
|
2094
|
+
var ResourcesIncident = z27.strictObject({
|
|
2023
2095
|
at_ms: epochMs,
|
|
2024
2096
|
verdict: ResourcesVerdict,
|
|
2025
|
-
load:
|
|
2097
|
+
load: z27.number().min(0),
|
|
2026
2098
|
memory_used_bytes: nonNegInt,
|
|
2027
2099
|
compressed_bytes: nonNegInt,
|
|
2028
2100
|
pressure: ResourcesPressure.nullable(),
|
|
2029
|
-
jobs:
|
|
2030
|
-
|
|
2101
|
+
jobs: z27.array(
|
|
2102
|
+
z27.strictObject({
|
|
2031
2103
|
kind: ResourcesJobKind,
|
|
2032
|
-
started_by:
|
|
2033
|
-
folder:
|
|
2034
|
-
command:
|
|
2035
|
-
cpu_percent:
|
|
2104
|
+
started_by: z27.string().max(64).nullable(),
|
|
2105
|
+
folder: z27.string().max(256).nullable(),
|
|
2106
|
+
command: z27.string().max(256),
|
|
2107
|
+
cpu_percent: z27.number().min(0),
|
|
2036
2108
|
memory_bytes: nonNegInt,
|
|
2037
|
-
duplicates:
|
|
2109
|
+
duplicates: z27.int().min(1)
|
|
2038
2110
|
})
|
|
2039
2111
|
).max(8)
|
|
2040
2112
|
});
|
|
2041
|
-
var ResourcesIncidentsParams =
|
|
2042
|
-
var ResourcesIncidentsResult =
|
|
2113
|
+
var ResourcesIncidentsParams = z27.strictObject({ limit: z27.int().min(1).max(200).default(50) });
|
|
2114
|
+
var ResourcesIncidentsResult = z27.strictObject({
|
|
2043
2115
|
/** Newest first; at most one a minute is written. */
|
|
2044
|
-
incidents:
|
|
2116
|
+
incidents: z27.array(ResourcesIncident).max(200)
|
|
2045
2117
|
});
|
|
2046
2118
|
|
|
2047
2119
|
// src/schema/stack.ts
|
|
2048
|
-
import { z as
|
|
2049
|
-
var StackServerName =
|
|
2050
|
-
var StackTone =
|
|
2051
|
-
var StackServer =
|
|
2120
|
+
import { z as z28 } from "zod";
|
|
2121
|
+
var StackServerName = z28.string().regex(/^[a-z0-9_-]{1,64}$/);
|
|
2122
|
+
var StackTone = z28.enum(["good", "wait", "bad", "off"]);
|
|
2123
|
+
var StackServer = z28.strictObject({
|
|
2052
2124
|
name: StackServerName,
|
|
2053
2125
|
/** One word: Healthy, Starting, Unhealthy, Restarting, Stopping, Waiting, Stopped, Crashed, Off. */
|
|
2054
|
-
label:
|
|
2126
|
+
label: z28.string().max(32),
|
|
2055
2127
|
tone: StackTone,
|
|
2056
2128
|
/** What is going on, in one or two plain sentences. */
|
|
2057
|
-
sentence:
|
|
2129
|
+
sentence: z28.string().max(2e3),
|
|
2058
2130
|
/** The config's own description of the server. */
|
|
2059
|
-
description:
|
|
2131
|
+
description: z28.string().max(512),
|
|
2060
2132
|
/** Where the server answers, when its description names an address. */
|
|
2061
|
-
open_url:
|
|
2062
|
-
log_file:
|
|
2133
|
+
open_url: z28.string().max(2048).nullable(),
|
|
2134
|
+
log_file: z28.string().max(4096),
|
|
2063
2135
|
/** When its log file was last written. */
|
|
2064
2136
|
last_output_at_ms: epochMs.nullable(),
|
|
2065
2137
|
started_at_ms: epochMs.nullable(),
|
|
2066
2138
|
restarts: nonNegInt,
|
|
2067
|
-
exit_code:
|
|
2068
|
-
pid:
|
|
2139
|
+
exit_code: z28.int().nullable(),
|
|
2140
|
+
pid: z28.int().nullable(),
|
|
2069
2141
|
/** (1.18) CPU of the server's process and everything under it, in percent of one core; absent when it is not running. */
|
|
2070
|
-
cpu_percent:
|
|
2142
|
+
cpu_percent: z28.number().min(0).optional(),
|
|
2071
2143
|
/** (1.18) Memory of the same processes: the physical footprint (Activity Monitor's Memory) summed; absent when it is not running. */
|
|
2072
2144
|
memory_bytes: nonNegInt.optional()
|
|
2073
2145
|
});
|
|
2074
|
-
var StackEvent =
|
|
2146
|
+
var StackEvent = z28.strictObject({
|
|
2075
2147
|
at_ms: epochMs,
|
|
2076
2148
|
/** A server name, or "stack" for the stack as a whole. */
|
|
2077
|
-
server:
|
|
2149
|
+
server: z28.string().max(64),
|
|
2078
2150
|
/** started · stopped · healthy · unhealthy · crashed · exited · restarting · stopping · action · action-done · action-failed · setup · error */
|
|
2079
|
-
kind:
|
|
2080
|
-
text:
|
|
2151
|
+
kind: z28.string().max(32),
|
|
2152
|
+
text: z28.string().max(4e3)
|
|
2081
2153
|
});
|
|
2082
|
-
var StackStateParams =
|
|
2083
|
-
var StackStateResult =
|
|
2154
|
+
var StackStateParams = z28.strictObject({});
|
|
2155
|
+
var StackStateResult = z28.strictObject({
|
|
2084
2156
|
/** The stack's config file, when found. */
|
|
2085
|
-
config_path:
|
|
2157
|
+
config_path: z28.string().max(4096).nullable(),
|
|
2086
2158
|
/** Why the stack cannot be run from here (no config, no process-compose), else null. */
|
|
2087
|
-
problem:
|
|
2088
|
-
stack_up:
|
|
2159
|
+
problem: z28.string().max(1e3).nullable(),
|
|
2160
|
+
stack_up: z28.boolean(),
|
|
2089
2161
|
stack_started_at_ms: epochMs.nullable(),
|
|
2090
|
-
servers:
|
|
2162
|
+
servers: z28.array(StackServer).max(64),
|
|
2091
2163
|
/** One line about the one-shot setup steps ("Docker Desktop: running."), or null. */
|
|
2092
|
-
setup_note:
|
|
2164
|
+
setup_note: z28.string().max(500).nullable(),
|
|
2093
2165
|
/** Start everything / Stop everything in flight. */
|
|
2094
|
-
pending:
|
|
2166
|
+
pending: z28.strictObject({ verb: z28.enum(["start", "stop"]), label: z28.string().max(64), since_ms: epochMs }).nullable(),
|
|
2095
2167
|
/** The newest entries last. */
|
|
2096
|
-
events:
|
|
2168
|
+
events: z28.array(StackEvent).max(300)
|
|
2097
2169
|
});
|
|
2098
|
-
var StackStartParams =
|
|
2099
|
-
var StackStopParams =
|
|
2100
|
-
var StackRunResult =
|
|
2101
|
-
var StackServerActionParams =
|
|
2170
|
+
var StackStartParams = z28.strictObject({});
|
|
2171
|
+
var StackStopParams = z28.strictObject({});
|
|
2172
|
+
var StackRunResult = z28.strictObject({ accepted: z28.boolean() });
|
|
2173
|
+
var StackServerActionParams = z28.strictObject({
|
|
2102
2174
|
name: StackServerName,
|
|
2103
|
-
verb:
|
|
2175
|
+
verb: z28.enum(["start", "stop", "restart"])
|
|
2104
2176
|
});
|
|
2105
|
-
var StackServerActionResult =
|
|
2106
|
-
var StackLogsParams =
|
|
2177
|
+
var StackServerActionResult = z28.strictObject({ message: z28.string().max(1e3) });
|
|
2178
|
+
var StackLogsParams = z28.strictObject({
|
|
2107
2179
|
name: StackServerName,
|
|
2108
2180
|
/** Without `offset`: the last this-many complete lines. With it: new lines after it, at most this many. */
|
|
2109
|
-
lines:
|
|
2181
|
+
lines: z28.int().min(1).max(2e5).default(2e3),
|
|
2110
2182
|
/** Byte offset the last read ended at: answer only what was written after it (follow). */
|
|
2111
2183
|
offset: nonNegInt.optional(),
|
|
2112
2184
|
/** A "Clear" point: the lines written after this byte offset (no `offset`). */
|
|
2113
2185
|
since: nonNegInt.optional(),
|
|
2114
2186
|
/** With `offset`: wait up to this long for a new line when none is waiting (0 answers at once). */
|
|
2115
|
-
wait_ms:
|
|
2187
|
+
wait_ms: z28.int().min(0).max(25e3).default(0)
|
|
2116
2188
|
});
|
|
2117
|
-
var StackLogsResult =
|
|
2189
|
+
var StackLogsResult = z28.strictObject({
|
|
2118
2190
|
/** Complete lines, colour codes removed. */
|
|
2119
|
-
lines:
|
|
2191
|
+
lines: z28.array(z28.string().max(65536)).max(2e5),
|
|
2120
2192
|
/** Where these lines end: pass it back as `offset` to follow. */
|
|
2121
2193
|
offset: nonNegInt,
|
|
2122
2194
|
/** False when `since` no longer exists (the log rotated): the lines are the plain tail instead. */
|
|
2123
|
-
since_valid:
|
|
2195
|
+
since_valid: z28.boolean(),
|
|
2124
2196
|
/** The log was rotated or truncated since `offset`: these lines start the file again. */
|
|
2125
|
-
reset:
|
|
2126
|
-
log_file:
|
|
2197
|
+
reset: z28.boolean(),
|
|
2198
|
+
log_file: z28.string().max(4096)
|
|
2127
2199
|
});
|
|
2128
|
-
var StackErrorsParams =
|
|
2129
|
-
window_minutes:
|
|
2200
|
+
var StackErrorsParams = z28.strictObject({
|
|
2201
|
+
window_minutes: z28.int().min(1).max(1440).default(60)
|
|
2130
2202
|
});
|
|
2131
|
-
var StackErrorsResult =
|
|
2203
|
+
var StackErrorsResult = z28.strictObject({
|
|
2132
2204
|
/** Per server: a heading line ("=== aidream — errors in the last 60 minutes (<file>) ===") and each error with the 10 lines after it. */
|
|
2133
|
-
sections:
|
|
2134
|
-
window_minutes:
|
|
2205
|
+
sections: z28.array(z28.strictObject({ name: StackServerName, heading: z28.string().max(4096), lines: z28.array(z28.string().max(65536)).max(5e3) })).max(64),
|
|
2206
|
+
window_minutes: z28.int().min(1).max(1440)
|
|
2135
2207
|
});
|
|
2136
2208
|
|
|
2137
2209
|
// src/schema/audio.ts
|
|
2138
|
-
import { z as
|
|
2139
|
-
var AudioDevice =
|
|
2210
|
+
import { z as z29 } from "zod";
|
|
2211
|
+
var AudioDevice = z29.strictObject({
|
|
2140
2212
|
/** The OS's name for it, as audio.record takes it. */
|
|
2141
|
-
id:
|
|
2142
|
-
name:
|
|
2143
|
-
default:
|
|
2213
|
+
id: z29.string().min(1).max(256),
|
|
2214
|
+
name: z29.string().max(256),
|
|
2215
|
+
default: z29.boolean()
|
|
2144
2216
|
});
|
|
2145
|
-
var AudioDevicesParams =
|
|
2146
|
-
var AudioDevicesResult =
|
|
2147
|
-
inputs:
|
|
2148
|
-
outputs:
|
|
2217
|
+
var AudioDevicesParams = z29.strictObject({});
|
|
2218
|
+
var AudioDevicesResult = z29.strictObject({
|
|
2219
|
+
inputs: z29.array(AudioDevice).max(64),
|
|
2220
|
+
outputs: z29.array(AudioDevice).max(64)
|
|
2149
2221
|
});
|
|
2150
|
-
var AudioRecordParams =
|
|
2151
|
-
seconds:
|
|
2222
|
+
var AudioRecordParams = z29.strictObject({
|
|
2223
|
+
seconds: z29.number().min(0.5).max(600),
|
|
2152
2224
|
/** The microphone (from audio.devices); the default input when absent. */
|
|
2153
|
-
device_id:
|
|
2225
|
+
device_id: z29.string().min(1).max(256).optional(),
|
|
2154
2226
|
/** Where the WAV file goes; a new file in the temp folder when absent. */
|
|
2155
2227
|
path: AbsPath.optional()
|
|
2156
2228
|
});
|
|
2157
|
-
var AudioRecordResult =
|
|
2229
|
+
var AudioRecordResult = z29.strictObject({
|
|
2158
2230
|
path: AbsPath,
|
|
2159
|
-
seconds:
|
|
2231
|
+
seconds: z29.number().min(0),
|
|
2160
2232
|
bytes: nonNegInt,
|
|
2161
2233
|
/** Loudest sample, 0–1: 0 means the device gave silence. */
|
|
2162
|
-
peak:
|
|
2234
|
+
peak: z29.number().min(0).max(1)
|
|
2163
2235
|
});
|
|
2164
|
-
var AudioPlayParams =
|
|
2165
|
-
var AudioPlayResult =
|
|
2236
|
+
var AudioPlayParams = z29.strictObject({ path: AbsPath });
|
|
2237
|
+
var AudioPlayResult = z29.strictObject({ path: AbsPath, seconds: z29.number().min(0) });
|
|
2166
2238
|
|
|
2167
2239
|
// src/schema/fs-watch.ts
|
|
2168
|
-
import { z as
|
|
2169
|
-
var FsWatchId =
|
|
2170
|
-
var FsWatchStartParams =
|
|
2240
|
+
import { z as z30 } from "zod";
|
|
2241
|
+
var FsWatchId = z30.string().regex(/^fw_[A-Za-z0-9]{12,40}$/);
|
|
2242
|
+
var FsWatchStartParams = z30.strictObject({
|
|
2171
2243
|
path: AbsPath,
|
|
2172
|
-
recursive:
|
|
2244
|
+
recursive: z30.boolean().default(true),
|
|
2173
2245
|
/** Globs relative to `path` whose changes are not reported (".git/**", "node_modules/**"). */
|
|
2174
|
-
ignore:
|
|
2246
|
+
ignore: z30.array(z30.string().max(256)).max(64).default([])
|
|
2175
2247
|
});
|
|
2176
|
-
var FsWatchStartResult =
|
|
2248
|
+
var FsWatchStartResult = z30.strictObject({
|
|
2177
2249
|
watch_id: FsWatchId,
|
|
2178
2250
|
path: AbsPath,
|
|
2179
2251
|
/** The watch ends by itself if nobody reads it for 30 minutes. */
|
|
2180
2252
|
expires_at_ms: epochMs
|
|
2181
2253
|
});
|
|
2182
|
-
var FsWatchEventsParams =
|
|
2254
|
+
var FsWatchEventsParams = z30.strictObject({
|
|
2183
2255
|
watch_id: FsWatchId,
|
|
2184
2256
|
/** Wait up to this long for a first change when none is waiting (0 answers at once). */
|
|
2185
|
-
wait_ms:
|
|
2257
|
+
wait_ms: z30.int().min(0).max(25e3).default(0)
|
|
2186
2258
|
});
|
|
2187
|
-
var FsWatchEventsResult =
|
|
2259
|
+
var FsWatchEventsResult = z30.strictObject({
|
|
2188
2260
|
/** What changed since the last read, oldest first; re-checked against the disk when read. */
|
|
2189
|
-
changes:
|
|
2261
|
+
changes: z30.array(FsChange).max(1e3),
|
|
2190
2262
|
/** Changes were dropped (more than 1000 waited): list the folder again. */
|
|
2191
|
-
overflow:
|
|
2263
|
+
overflow: z30.boolean(),
|
|
2192
2264
|
expires_at_ms: epochMs
|
|
2193
2265
|
});
|
|
2194
|
-
var FsWatchStopParams =
|
|
2195
|
-
var FsWatchStopResult =
|
|
2266
|
+
var FsWatchStopParams = z30.strictObject({ watch_id: FsWatchId });
|
|
2267
|
+
var FsWatchStopResult = z30.strictObject({ watch_id: FsWatchId });
|
|
2196
2268
|
|
|
2197
2269
|
// src/schema/exec-job.ts
|
|
2198
|
-
import { z as
|
|
2199
|
-
var ExecJobId =
|
|
2200
|
-
var ExecJobStartParams =
|
|
2201
|
-
command:
|
|
2270
|
+
import { z as z31 } from "zod";
|
|
2271
|
+
var ExecJobId = z31.string().regex(/^job_[A-Za-z0-9]{12,40}$/);
|
|
2272
|
+
var ExecJobStartParams = z31.strictObject({
|
|
2273
|
+
command: z31.string().min(1).max(131072),
|
|
2202
2274
|
/** The folder it runs in; the home folder when absent. */
|
|
2203
2275
|
cwd: AbsPath.optional(),
|
|
2204
|
-
env:
|
|
2276
|
+
env: z31.record(z31.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(128), z31.string().max(32768)).optional()
|
|
2205
2277
|
});
|
|
2206
|
-
var ExecJobStartResult =
|
|
2207
|
-
var ExecJobOutputParams =
|
|
2278
|
+
var ExecJobStartResult = z31.strictObject({ job_id: ExecJobId, pid: z31.int().min(1), cwd: AbsPath });
|
|
2279
|
+
var ExecJobOutputParams = z31.strictObject({
|
|
2208
2280
|
job_id: ExecJobId,
|
|
2209
2281
|
/** Byte offset into the job's output to read from (next_offset of the last read; 0 = the start). */
|
|
2210
2282
|
offset: nonNegInt.default(0),
|
|
2211
2283
|
/** Wait up to this long for new output or the exit when none is waiting (0 answers at once). */
|
|
2212
|
-
wait_ms:
|
|
2213
|
-
max_bytes:
|
|
2284
|
+
wait_ms: z31.int().min(0).max(25e3).default(0),
|
|
2285
|
+
max_bytes: z31.int().min(1024).max(1048576).default(65536)
|
|
2214
2286
|
});
|
|
2215
|
-
var ExecJobOutputResult =
|
|
2287
|
+
var ExecJobOutputResult = z31.strictObject({
|
|
2216
2288
|
/** stdout and stderr interleaved as they arrived (UTF-8). */
|
|
2217
|
-
output:
|
|
2289
|
+
output: z31.string(),
|
|
2218
2290
|
next_offset: nonNegInt,
|
|
2219
2291
|
/** Bytes before `offset` that are gone (the job keeps its last 4 MiB). */
|
|
2220
2292
|
dropped_bytes: nonNegInt,
|
|
2221
|
-
running:
|
|
2222
|
-
exit_code:
|
|
2293
|
+
running: z31.boolean(),
|
|
2294
|
+
exit_code: z31.int().nullable()
|
|
2223
2295
|
});
|
|
2224
|
-
var ExecJobStopParams =
|
|
2296
|
+
var ExecJobStopParams = z31.strictObject({
|
|
2225
2297
|
job_id: ExecJobId,
|
|
2226
2298
|
/** End it at once (SIGKILL; on Windows the whole tree with /F) instead of asking it to quit. */
|
|
2227
|
-
force:
|
|
2299
|
+
force: z31.boolean().default(false)
|
|
2228
2300
|
});
|
|
2229
|
-
var ExecJobStopResult =
|
|
2230
|
-
var ExecJobInfo =
|
|
2301
|
+
var ExecJobStopResult = z31.strictObject({ job_id: ExecJobId, exited: z31.boolean(), exit_code: z31.int().nullable() });
|
|
2302
|
+
var ExecJobInfo = z31.strictObject({
|
|
2231
2303
|
job_id: ExecJobId,
|
|
2232
|
-
command:
|
|
2233
|
-
pid:
|
|
2304
|
+
command: z31.string().max(1024),
|
|
2305
|
+
pid: z31.int().min(1),
|
|
2234
2306
|
cwd: AbsPath,
|
|
2235
|
-
running:
|
|
2236
|
-
exit_code:
|
|
2307
|
+
running: z31.boolean(),
|
|
2308
|
+
exit_code: z31.int().nullable(),
|
|
2237
2309
|
started_at_ms: epochMs,
|
|
2238
2310
|
output_bytes: nonNegInt
|
|
2239
2311
|
});
|
|
2240
|
-
var ExecJobListParams =
|
|
2241
|
-
var ExecJobListResult =
|
|
2312
|
+
var ExecJobListParams = z31.strictObject({});
|
|
2313
|
+
var ExecJobListResult = z31.strictObject({ jobs: z31.array(ExecJobInfo).max(64) });
|
|
2242
2314
|
|
|
2243
2315
|
// src/schema/coding.ts
|
|
2244
|
-
import { z as
|
|
2245
|
-
import { UUID_SHAPE_PATTERN as
|
|
2246
|
-
var CodingServiceCredentials =
|
|
2247
|
-
access_token:
|
|
2248
|
-
user_id:
|
|
2316
|
+
import { z as z32 } from "zod";
|
|
2317
|
+
import { UUID_SHAPE_PATTERN as UUID_SHAPE_PATTERN4 } from "@ai-matrx/kit/uuid";
|
|
2318
|
+
var CodingServiceCredentials = z32.strictObject({
|
|
2319
|
+
access_token: z32.string().min(16).max(16384),
|
|
2320
|
+
user_id: z32.string().regex(UUID_SHAPE_PATTERN4),
|
|
2249
2321
|
/** The AI Matrx server this app talks to (production, or a local server on the nightly copy). */
|
|
2250
|
-
server_url:
|
|
2322
|
+
server_url: z32.string().min(1).max(2048).regex(/^https?:\/\/[^\s/?#]+(\/[^\s?#]*)?$/)
|
|
2251
2323
|
});
|
|
2252
|
-
var CodingHistoryBlocked =
|
|
2324
|
+
var CodingHistoryBlocked = z32.enum([
|
|
2253
2325
|
"signed_out",
|
|
2254
2326
|
"offline",
|
|
2255
2327
|
"organization_required",
|
|
@@ -2257,11 +2329,11 @@ var CodingHistoryBlocked = z31.enum([
|
|
|
2257
2329
|
"cloud_list_unavailable",
|
|
2258
2330
|
"history_too_large"
|
|
2259
2331
|
]);
|
|
2260
|
-
var CodingHistoryFailure =
|
|
2261
|
-
session_id:
|
|
2262
|
-
reason:
|
|
2332
|
+
var CodingHistoryFailure = z32.strictObject({
|
|
2333
|
+
session_id: z32.string().max(64),
|
|
2334
|
+
reason: z32.string().max(300)
|
|
2263
2335
|
});
|
|
2264
|
-
var CodingHistoryRun =
|
|
2336
|
+
var CodingHistoryRun = z32.strictObject({
|
|
2265
2337
|
/** Claude Code sessions found on this computer. */
|
|
2266
2338
|
local_sessions: nonNegInt,
|
|
2267
2339
|
/** Of those, already complete in AI Matrx. */
|
|
@@ -2276,39 +2348,39 @@ var CodingHistoryRun = z31.strictObject({
|
|
|
2276
2348
|
/** Changed while being read; a later run takes them. */
|
|
2277
2349
|
changed: nonNegInt,
|
|
2278
2350
|
failed: nonNegInt,
|
|
2279
|
-
failures:
|
|
2351
|
+
failures: z32.array(CodingHistoryFailure).max(20),
|
|
2280
2352
|
/** Candidates not reached yet. */
|
|
2281
2353
|
remaining: nonNegInt,
|
|
2282
2354
|
/** The one line a person reads, e.g. "Imported 12 of 14 sessions. 140 already in AI Matrx." */
|
|
2283
|
-
summary:
|
|
2355
|
+
summary: z32.string().max(400)
|
|
2284
2356
|
});
|
|
2285
|
-
var CodingHistoryStep =
|
|
2357
|
+
var CodingHistoryStep = z32.strictObject({
|
|
2286
2358
|
/** Null when the run could not start (blocked before a plan existed). */
|
|
2287
|
-
plan_id:
|
|
2288
|
-
finished:
|
|
2359
|
+
plan_id: z32.string().regex(/^[0-9a-f]{32}$/).nullable(),
|
|
2360
|
+
finished: z32.boolean(),
|
|
2289
2361
|
blocked: CodingHistoryBlocked.nullable(),
|
|
2290
2362
|
run: CodingHistoryRun
|
|
2291
2363
|
});
|
|
2292
|
-
var CodingPlanMissingParams =
|
|
2293
|
-
var CodingImportNextParams =
|
|
2294
|
-
plan_id:
|
|
2364
|
+
var CodingPlanMissingParams = z32.strictObject({ credentials: CodingServiceCredentials.nullable() });
|
|
2365
|
+
var CodingImportNextParams = z32.strictObject({
|
|
2366
|
+
plan_id: z32.string().regex(/^[0-9a-f]{32}$/),
|
|
2295
2367
|
credentials: CodingServiceCredentials.nullable()
|
|
2296
2368
|
});
|
|
2297
|
-
var CodingServiceProgress =
|
|
2298
|
-
phase:
|
|
2369
|
+
var CodingServiceProgress = z32.strictObject({
|
|
2370
|
+
phase: z32.enum(["checking", "importing"]),
|
|
2299
2371
|
done: nonNegInt,
|
|
2300
2372
|
total: nonNegInt
|
|
2301
2373
|
});
|
|
2302
|
-
var CodingHistoryImportMissingParams =
|
|
2303
|
-
var CodingHistoryImportMissingResult =
|
|
2304
|
-
state:
|
|
2374
|
+
var CodingHistoryImportMissingParams = z32.strictObject({});
|
|
2375
|
+
var CodingHistoryImportMissingResult = z32.strictObject({
|
|
2376
|
+
state: z32.enum(["done", "blocked", "cancelled"]),
|
|
2305
2377
|
blocked: CodingHistoryBlocked.nullable(),
|
|
2306
2378
|
run: CodingHistoryRun,
|
|
2307
2379
|
elapsed_ms: nonNegInt
|
|
2308
2380
|
});
|
|
2309
|
-
var CodingHistoryProgressEvent =
|
|
2381
|
+
var CodingHistoryProgressEvent = z32.strictObject({
|
|
2310
2382
|
request_id: RequestId,
|
|
2311
|
-
phase:
|
|
2383
|
+
phase: z32.enum(["checking", "importing"]),
|
|
2312
2384
|
/** Sessions settled so far, of `total` candidates (0 of 0 while checking). */
|
|
2313
2385
|
done: nonNegInt,
|
|
2314
2386
|
total: nonNegInt,
|
|
@@ -2446,7 +2518,11 @@ var OPS = {
|
|
|
2446
2518
|
"web.fetch": { params: WebFetchParams, result: WebFetchResult, kind: "unary", since: "1.22", errors: ["INVALID_PARAMS", "TIMEOUT", "RESOURCE_BUSY", "AUTH_REQUIRED", "INTERNAL"] },
|
|
2447
2519
|
"web.scrape": { params: WebScrapeParams, result: WebScrapeResult, kind: "unary", since: "1.22", errors: ["INVALID_PARAMS", "TIMEOUT", "RESOURCE_BUSY", "AUTH_REQUIRED", "INTERNAL"] },
|
|
2448
2520
|
"web.search": { params: WebSearchParams, result: WebSearchResult, kind: "unary", since: "1.22", errors: ["INVALID_PARAMS", "TIMEOUT", "RESOURCE_BUSY", "AUTH_REQUIRED", "INTERNAL"] },
|
|
2449
|
-
"web.fetch_with_browser": { params: WebBrowserFetchParams, result: WebBrowserFetchResult, kind: "unary", since: "1.22", errors: ["INVALID_PARAMS", "TIMEOUT", "RESOURCE_BUSY", "AUTH_REQUIRED", "INTERNAL"] }
|
|
2521
|
+
"web.fetch_with_browser": { params: WebBrowserFetchParams, result: WebBrowserFetchResult, kind: "unary", since: "1.22", errors: ["INVALID_PARAMS", "TIMEOUT", "RESOURCE_BUSY", "AUTH_REQUIRED", "INTERNAL"] },
|
|
2522
|
+
// 1.23: the signed-in person's own agents and Vault, read as them (the desktop's Agents library and Vault).
|
|
2523
|
+
"account.agents.list": { params: AccountAgentsListParams, result: AccountAgentsListResult, kind: "unary", since: "1.23", errors: ["INTERNAL"] },
|
|
2524
|
+
"account.vault.list": { params: AccountVaultListParams, result: AccountVaultListResult, kind: "unary", since: "1.23", errors: ["INTERNAL"] },
|
|
2525
|
+
"account.vault.copy": { params: AccountVaultCopyParams, result: AccountVaultCopyResult, kind: "unary", since: "1.23", errors: ["AUTH_REQUIRED", "AUTH_FORBIDDEN", "NOT_FOUND", "INVALID_PARAMS", "DEVICE_OFFLINE", "INTERNAL"] }
|
|
2450
2526
|
};
|
|
2451
2527
|
var EVENTS = {
|
|
2452
2528
|
"fs.changed": FsChangedEvent,
|
|
@@ -2879,7 +2955,19 @@ var NAMED_SCHEMAS = {
|
|
|
2879
2955
|
ToolsWebSearchParams,
|
|
2880
2956
|
WebBrowserFetchParams,
|
|
2881
2957
|
WebBrowserFetchResult,
|
|
2882
|
-
ToolsServiceProgress
|
|
2958
|
+
ToolsServiceProgress,
|
|
2959
|
+
AccountRowId,
|
|
2960
|
+
AccountReadState,
|
|
2961
|
+
AccountAgent,
|
|
2962
|
+
AccountAgentsListParams,
|
|
2963
|
+
AccountAgentsListResult,
|
|
2964
|
+
VaultItemKind,
|
|
2965
|
+
VaultFieldSummary,
|
|
2966
|
+
VaultItemSummary,
|
|
2967
|
+
AccountVaultListParams,
|
|
2968
|
+
AccountVaultListResult,
|
|
2969
|
+
AccountVaultCopyParams,
|
|
2970
|
+
AccountVaultCopyResult
|
|
2883
2971
|
};
|
|
2884
2972
|
|
|
2885
2973
|
// src/versioning.ts
|
|
@@ -3025,7 +3113,7 @@ function forPeer(op, part, value, version) {
|
|
|
3025
3113
|
var VERSIONED_RESULT_OPS = [.../* @__PURE__ */ new Set([...RESULT_PATH.keys(), ...WINDOW_RESULTS.keys(), ...NESTED_RESULTS.keys()])];
|
|
3026
3114
|
|
|
3027
3115
|
// src/contract.ts
|
|
3028
|
-
var CONTRACT_SHA256 = "
|
|
3116
|
+
var CONTRACT_SHA256 = "764fdad5d8851da877e508f4aad2853aaa8fc3b057291488523ef2dd35615208";
|
|
3029
3117
|
|
|
3030
3118
|
// src/close-policy.ts
|
|
3031
3119
|
var CLOSE_RULES = {
|
|
@@ -3369,8 +3457,17 @@ function renderToolStatusMarkdown(status) {
|
|
|
3369
3457
|
}
|
|
3370
3458
|
export {
|
|
3371
3459
|
AbsPath,
|
|
3460
|
+
AccountAgent,
|
|
3461
|
+
AccountAgentsListParams,
|
|
3462
|
+
AccountAgentsListResult,
|
|
3463
|
+
AccountReadState,
|
|
3372
3464
|
AccountReset,
|
|
3465
|
+
AccountRowId,
|
|
3373
3466
|
AccountUsage,
|
|
3467
|
+
AccountVaultCopyParams,
|
|
3468
|
+
AccountVaultCopyResult,
|
|
3469
|
+
AccountVaultListParams,
|
|
3470
|
+
AccountVaultListResult,
|
|
3374
3471
|
AppFeatureStatus,
|
|
3375
3472
|
AppInfo,
|
|
3376
3473
|
AppKey,
|
|
@@ -3782,6 +3879,9 @@ export {
|
|
|
3782
3879
|
TranscriptionModelId,
|
|
3783
3880
|
TranscriptionModelInfo,
|
|
3784
3881
|
VERSIONED_RESULT_OPS,
|
|
3882
|
+
VaultFieldSummary,
|
|
3883
|
+
VaultItemKind,
|
|
3884
|
+
VaultItemSummary,
|
|
3785
3885
|
WEB_MAX_TEXT_CHARS,
|
|
3786
3886
|
WebBrowserFetchParams,
|
|
3787
3887
|
WebBrowserFetchResult,
|