@ericsanchezok/synergy-util 2.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ export declare namespace Binary {
2
+ function search<T>(array: T[], id: string, compare: (item: T) => string): {
3
+ found: boolean;
4
+ index: number;
5
+ };
6
+ function insert<T>(array: T[], item: T, compare: (item: T) => string): T[];
7
+ }
package/dist/binary.js ADDED
@@ -0,0 +1,40 @@
1
+ export var Binary;
2
+ (function (Binary) {
3
+ function search(array, id, compare) {
4
+ let left = 0;
5
+ let right = array.length - 1;
6
+ while (left <= right) {
7
+ const mid = Math.floor((left + right) / 2);
8
+ const midId = compare(array[mid]);
9
+ if (midId === id) {
10
+ return { found: true, index: mid };
11
+ }
12
+ else if (midId < id) {
13
+ left = mid + 1;
14
+ }
15
+ else {
16
+ right = mid - 1;
17
+ }
18
+ }
19
+ return { found: false, index: left };
20
+ }
21
+ Binary.search = search;
22
+ function insert(array, item, compare) {
23
+ const id = compare(item);
24
+ let left = 0;
25
+ let right = array.length;
26
+ while (left < right) {
27
+ const mid = Math.floor((left + right) / 2);
28
+ const midId = compare(array[mid]);
29
+ if (midId < id) {
30
+ left = mid + 1;
31
+ }
32
+ else {
33
+ right = mid;
34
+ }
35
+ }
36
+ array.splice(left, 0, item);
37
+ return array;
38
+ }
39
+ Binary.insert = insert;
40
+ })(Binary || (Binary = {}));
@@ -0,0 +1,97 @@
1
+ export declare const BROWSER_PROTOCOL_VERSION = 1;
2
+ export declare const BrowserPresentationKinds: readonly ["native", "webrtc"];
3
+ export type BrowserPresentationKind = (typeof BrowserPresentationKinds)[number];
4
+ export type BrowserPresentationPreference = "auto" | BrowserPresentationKind;
5
+ export declare function parseBrowserPresentationPreference(value: string | null | undefined): BrowserPresentationPreference;
6
+ export declare function normalizeBrowserURL(input: string, base?: string): string;
7
+ export interface BrowserPresentationCapabilities {
8
+ native: boolean;
9
+ webrtc: boolean;
10
+ }
11
+ export interface BrowserPresentationSelection {
12
+ protocolVersion: typeof BROWSER_PROTOCOL_VERSION;
13
+ kind: BrowserPresentationKind;
14
+ capabilities: BrowserPresentationCapabilities;
15
+ reason: "desktop-local" | "remote-client" | "requested";
16
+ }
17
+ export interface BrowserPresentationEnvironment {
18
+ desktop: boolean;
19
+ sameHost: boolean;
20
+ remote: boolean;
21
+ requested?: BrowserPresentationPreference;
22
+ capabilities?: Partial<BrowserPresentationCapabilities>;
23
+ }
24
+ export interface BrowserPage {
25
+ id: string;
26
+ url: string;
27
+ title: string;
28
+ isLoading: boolean;
29
+ lastActiveAt?: number | null;
30
+ }
31
+ export interface BrowserSession {
32
+ page: BrowserPage | null;
33
+ }
34
+ export interface BrowserPresentation {
35
+ selection: BrowserPresentationSelection;
36
+ }
37
+ export interface BrowserControl {
38
+ navigate(input: {
39
+ pageId?: string;
40
+ url: string;
41
+ }): Promise<{
42
+ url: string;
43
+ title: string;
44
+ }>;
45
+ reload(input?: {
46
+ pageId?: string;
47
+ }): Promise<void>;
48
+ stop(input?: {
49
+ pageId?: string;
50
+ }): Promise<void>;
51
+ setViewport(input: {
52
+ pageId?: string;
53
+ width: number;
54
+ height: number;
55
+ }): Promise<void>;
56
+ snapshot(input?: {
57
+ pageId?: string;
58
+ }): Promise<unknown>;
59
+ screenshot(input?: {
60
+ pageId?: string;
61
+ }): Promise<{
62
+ dataUrl: string;
63
+ width: number;
64
+ height: number;
65
+ }>;
66
+ }
67
+ export interface BrowserHost {
68
+ protocolVersion: typeof BROWSER_PROTOCOL_VERSION;
69
+ capabilities(): Promise<BrowserPresentationCapabilities> | BrowserPresentationCapabilities;
70
+ presentation(input: BrowserPresentationEnvironment): BrowserPresentationSelection;
71
+ session(input: {
72
+ ownerKey: string;
73
+ }): Promise<BrowserSession>;
74
+ control(input: {
75
+ ownerKey: string;
76
+ }): Promise<BrowserControl>;
77
+ }
78
+ export declare function selectBrowserPresentation(input: BrowserPresentationEnvironment): BrowserPresentationSelection;
79
+ export type BrowserWebRTCSignalMessage = {
80
+ type: "webrtc.offer";
81
+ pageId: string;
82
+ sdp: string;
83
+ traceId?: string;
84
+ } | {
85
+ type: "webrtc.answer";
86
+ pageId: string;
87
+ sdp: string;
88
+ } | {
89
+ type: "webrtc.ice";
90
+ pageId: string;
91
+ candidate: unknown;
92
+ traceId?: string;
93
+ } | {
94
+ type: "webrtc.close";
95
+ pageId: string;
96
+ traceId?: string;
97
+ };
@@ -0,0 +1,51 @@
1
+ export const BROWSER_PROTOCOL_VERSION = 1;
2
+ export const BrowserPresentationKinds = ["native", "webrtc"];
3
+ export function parseBrowserPresentationPreference(value) {
4
+ if (value === "native" || value === "webrtc")
5
+ return value;
6
+ return "auto";
7
+ }
8
+ export function normalizeBrowserURL(input, base) {
9
+ const raw = input.trim();
10
+ if (!raw)
11
+ throw new Error("URL is required");
12
+ if (/^(localhost|127\.0\.0\.1|\[::1\]|::1)(:\d+)?(\/.*)?$/i.test(raw)) {
13
+ return `http://${raw}`;
14
+ }
15
+ if (/^[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(:\d+)?(\/.*)?$/.test(raw)) {
16
+ return `https://${raw}`;
17
+ }
18
+ if (base || /^[a-zA-Z][a-zA-Z\d+.-]*:/.test(raw)) {
19
+ try {
20
+ return new URL(raw, base).toString();
21
+ }
22
+ catch {
23
+ // Continue to search fallback below.
24
+ }
25
+ }
26
+ return `https://www.google.com/search?q=${encodeURIComponent(raw)}`;
27
+ }
28
+ const defaultCapabilities = {
29
+ native: true,
30
+ webrtc: true,
31
+ };
32
+ function capabilities(input) {
33
+ return {
34
+ native: input?.native ?? defaultCapabilities.native,
35
+ webrtc: input?.webrtc ?? defaultCapabilities.webrtc,
36
+ };
37
+ }
38
+ export function selectBrowserPresentation(input) {
39
+ const caps = capabilities(input.capabilities);
40
+ const requested = input.requested ?? "auto";
41
+ if (requested === "native" && caps.native) {
42
+ return { protocolVersion: BROWSER_PROTOCOL_VERSION, kind: "native", capabilities: caps, reason: "requested" };
43
+ }
44
+ if (requested === "webrtc" && caps.webrtc) {
45
+ return { protocolVersion: BROWSER_PROTOCOL_VERSION, kind: "webrtc", capabilities: caps, reason: "requested" };
46
+ }
47
+ if (caps.native && input.desktop && input.sameHost && !input.remote) {
48
+ return { protocolVersion: BROWSER_PROTOCOL_VERSION, kind: "native", capabilities: caps, reason: "desktop-local" };
49
+ }
50
+ return { protocolVersion: BROWSER_PROTOCOL_VERSION, kind: "webrtc", capabilities: caps, reason: "remote-client" };
51
+ }
@@ -0,0 +1,289 @@
1
+ export type SynergyCapabilityRisk = "low" | "medium" | "high";
2
+ export type SynergyCapabilityRiskScope = "install" | "agent";
3
+ export declare const SYNERGY_CAPABILITY_CATEGORIES: readonly ["tools", "files", "network", "data", "ui", "runtime", "hooks", "session", "browser", "identity", "communication", "platform"];
4
+ export type SynergyCapabilityCategory = (typeof SYNERGY_CAPABILITY_CATEGORIES)[number];
5
+ export type SynergyCapabilitySeverity = SynergyCapabilityRisk;
6
+ export interface SynergyCapabilityPermissionItem {
7
+ key: string;
8
+ category: SynergyCapabilityCategory;
9
+ severity: SynergyCapabilitySeverity;
10
+ title: string;
11
+ description: string;
12
+ technical?: string;
13
+ }
14
+ export interface RegistryPermissionItem {
15
+ key: string;
16
+ description: string;
17
+ risk: SynergyCapabilityRisk;
18
+ }
19
+ export type ManifestTool = NonNullable<NonNullable<SynergyCapabilityManifest["contributes"]>["tools"]>[number];
20
+ export interface SynergyCapabilityManifestTool {
21
+ id?: string;
22
+ name: string;
23
+ exposure?: {
24
+ mode?: string;
25
+ };
26
+ capabilities?: {
27
+ filesystem?: "none" | "read" | "write";
28
+ shell?: boolean;
29
+ network?: boolean;
30
+ session?: "none" | "metadata" | "read";
31
+ workspace?: "none" | "metadata" | "read";
32
+ config?: "none" | "plugin" | "global";
33
+ };
34
+ }
35
+ export interface SynergyCapabilityManifest {
36
+ permissions?: {
37
+ tools?: {
38
+ filesystem?: "none" | "read" | "write";
39
+ shell?: boolean;
40
+ network?: boolean;
41
+ mcp?: "none" | "invoke" | "spawn";
42
+ task?: unknown;
43
+ };
44
+ data?: {
45
+ session?: "none" | "metadata" | "read";
46
+ workspace?: "none" | "metadata" | "read";
47
+ config?: "none" | "plugin" | "global";
48
+ secrets?: "none" | "own";
49
+ };
50
+ ui?: {
51
+ toolRenderers?: boolean;
52
+ partRenderers?: boolean;
53
+ workbenchPanels?: boolean;
54
+ appPanels?: boolean;
55
+ settings?: boolean;
56
+ messageSlots?: boolean;
57
+ themes?: boolean;
58
+ icons?: boolean;
59
+ appRoutes?: boolean;
60
+ commands?: boolean;
61
+ trustedImport?: boolean;
62
+ sandboxIframe?: boolean;
63
+ };
64
+ hooks?: {
65
+ promptTransform?: boolean;
66
+ compactionTransform?: boolean;
67
+ toolExecute?: "none" | "own" | "declared" | "all";
68
+ permissionAsk?: "none" | "own" | "all";
69
+ events?: "none" | "selected" | "all";
70
+ eventNames?: string[];
71
+ };
72
+ network?: {
73
+ connectDomains?: string[];
74
+ };
75
+ };
76
+ contributes?: {
77
+ permissions?: unknown;
78
+ tools?: SynergyCapabilityManifestTool[];
79
+ agents?: Array<{
80
+ name?: string;
81
+ mode?: string;
82
+ hidden?: boolean;
83
+ model?: unknown;
84
+ modelRole?: unknown;
85
+ permission?: unknown;
86
+ }>;
87
+ mcp?: unknown;
88
+ ui?: {
89
+ toolRenderers?: unknown[];
90
+ partRenderers?: unknown[];
91
+ workbenchPanels?: unknown[];
92
+ appPanels?: unknown[];
93
+ settings?: unknown[];
94
+ messageSlots?: unknown[];
95
+ themes?: unknown[];
96
+ icons?: unknown[];
97
+ appRoutes?: unknown[];
98
+ commands?: unknown[];
99
+ };
100
+ };
101
+ lifecycle?: unknown;
102
+ }
103
+ export interface SynergyCapabilityDefinition extends Omit<SynergyCapabilityPermissionItem, "key"> {
104
+ nonBypassable?: boolean;
105
+ }
106
+ export declare function publicToolNames(manifest: SynergyCapabilityManifest): string[];
107
+ export declare function hasPublicTools(manifest: SynergyCapabilityManifest): boolean;
108
+ export declare const SYNERGY_CAPABILITY_DETAILS: Record<string, SynergyCapabilityDefinition>;
109
+ export declare const SYNERGY_PROFILE_CAPABILITIES: readonly ["file_read", "file_write", "shell_read", "shell", "shell_remote_write", "shell_remote_publish", "shell_destructive", "shell_hardline", "file_external_read", "file_external_write", "network_read", "network_request", "mcp_invoke", "mcp_spawn", "session_data", "workspace_data", "config:read", "config:write", "secrets", "task", "prompt_transform", "compaction_transform", "tool_execution_hook", "permission_hook", "event_hook", "identity_act", "communication_email", "channel_outbound", "platform_control", "protected_op", "session_state", "browser_interact", "browser_inspect", "browser_eval_readonly", "browser_eval_trusted", "browser_clipboard", "browser_download", "browser_viewport"];
110
+ export declare const SYNERGY_PERMISSION_CAPABILITY: Record<string, string>;
111
+ export declare function permissionCapability(permission: string): string;
112
+ export declare function capabilityNonBypassable(capability: string): boolean;
113
+ export declare function capabilityRisk(capability: string, manifest?: SynergyCapabilityManifest): SynergyCapabilityRisk;
114
+ export declare function baseCapabilities(manifest: SynergyCapabilityManifest): string[];
115
+ export declare function toolCapabilities(manifest: SynergyCapabilityManifest, tool: ManifestTool): string[];
116
+ export declare function publicToolCapabilities(manifest: SynergyCapabilityManifest): string[];
117
+ export declare function computeRisk(capabilities: string[], manifest?: SynergyCapabilityManifest): SynergyCapabilityRisk;
118
+ export declare function capabilitiesForRiskScope(manifest: SynergyCapabilityManifest, scope: SynergyCapabilityRiskScope): string[];
119
+ export declare function pluginRisk(manifest: SynergyCapabilityManifest, input: {
120
+ scope: SynergyCapabilityRiskScope;
121
+ }): SynergyCapabilityRisk;
122
+ export declare function toolRisk(manifest: SynergyCapabilityManifest, tool: ManifestTool): SynergyCapabilityRisk;
123
+ export declare function permissionItems(manifest: SynergyCapabilityManifest, capabilities: string[]): SynergyCapabilityPermissionItem[];
124
+ export declare function registryPermissionSummary(manifest: SynergyCapabilityManifest, capabilities: string[]): RegistryPermissionItem[];
125
+ export declare function permissionCategoryForKey(key: string): SynergyCapabilityCategory;
126
+ export declare function permissionsHashPayload(manifest: SynergyCapabilityManifest, capabilities: string[]): {
127
+ capabilities: string[];
128
+ permissions: {
129
+ tools?: {
130
+ filesystem?: "none" | "read" | "write";
131
+ shell?: boolean;
132
+ network?: boolean;
133
+ mcp?: "none" | "invoke" | "spawn";
134
+ task?: unknown;
135
+ };
136
+ data?: {
137
+ session?: "none" | "metadata" | "read";
138
+ workspace?: "none" | "metadata" | "read";
139
+ config?: "none" | "plugin" | "global";
140
+ secrets?: "none" | "own";
141
+ };
142
+ ui?: {
143
+ toolRenderers?: boolean;
144
+ partRenderers?: boolean;
145
+ workbenchPanels?: boolean;
146
+ appPanels?: boolean;
147
+ settings?: boolean;
148
+ messageSlots?: boolean;
149
+ themes?: boolean;
150
+ icons?: boolean;
151
+ appRoutes?: boolean;
152
+ commands?: boolean;
153
+ trustedImport?: boolean;
154
+ sandboxIframe?: boolean;
155
+ };
156
+ hooks?: {
157
+ promptTransform?: boolean;
158
+ compactionTransform?: boolean;
159
+ toolExecute?: "none" | "own" | "declared" | "all";
160
+ permissionAsk?: "none" | "own" | "all";
161
+ events?: "none" | "selected" | "all";
162
+ eventNames?: string[];
163
+ };
164
+ network?: {
165
+ connectDomains?: string[];
166
+ };
167
+ };
168
+ contributes: {
169
+ ui?: {
170
+ toolRenderers: boolean;
171
+ partRenderers: boolean;
172
+ workbenchPanels: boolean;
173
+ appPanels: boolean;
174
+ settings: boolean;
175
+ messageSlots: boolean;
176
+ themes: boolean;
177
+ icons: boolean;
178
+ appRoutes: boolean;
179
+ commands: boolean;
180
+ } | undefined;
181
+ mcp?: {} | undefined;
182
+ agents?: {
183
+ name: string | undefined;
184
+ mode: string | undefined;
185
+ hidden: boolean | undefined;
186
+ model: unknown;
187
+ modelRole: unknown;
188
+ permission: unknown;
189
+ }[] | undefined;
190
+ tools?: {
191
+ id: string | undefined;
192
+ name: string;
193
+ exposure: {
194
+ mode?: string;
195
+ } | undefined;
196
+ capabilities: {
197
+ filesystem?: "none" | "read" | "write";
198
+ shell?: boolean;
199
+ network?: boolean;
200
+ session?: "none" | "metadata" | "read";
201
+ workspace?: "none" | "metadata" | "read";
202
+ config?: "none" | "plugin" | "global";
203
+ } | undefined;
204
+ }[] | undefined;
205
+ permissions?: {} | undefined;
206
+ } | undefined;
207
+ lifecycle: {};
208
+ };
209
+ export declare function manifestHashPayload(manifest: SynergyCapabilityManifest): SynergyCapabilityManifest;
210
+ export declare function stablePluginJson(value: unknown): string;
211
+ export type BridgeMethodPolicy = {
212
+ type: "capability";
213
+ capability: string;
214
+ } | {
215
+ type: "unprivileged";
216
+ } | {
217
+ type: "unknown";
218
+ };
219
+ export declare const SYNERGY_BRIDGE_METHOD_POLICY: {
220
+ readonly "config.get": {
221
+ readonly type: "capability";
222
+ readonly capability: "config:read";
223
+ };
224
+ readonly "config.set": {
225
+ readonly type: "capability";
226
+ readonly capability: "config:write";
227
+ };
228
+ readonly "config.replace": {
229
+ readonly type: "capability";
230
+ readonly capability: "config:write";
231
+ };
232
+ readonly "secret.get": {
233
+ readonly type: "capability";
234
+ readonly capability: "secrets";
235
+ };
236
+ readonly "secret.set": {
237
+ readonly type: "capability";
238
+ readonly capability: "secrets";
239
+ };
240
+ readonly "secret.delete": {
241
+ readonly type: "capability";
242
+ readonly capability: "secrets";
243
+ };
244
+ readonly "cache.get": {
245
+ readonly type: "unprivileged";
246
+ };
247
+ readonly "cache.set": {
248
+ readonly type: "unprivileged";
249
+ };
250
+ readonly "cache.delete": {
251
+ readonly type: "unprivileged";
252
+ };
253
+ readonly "file.read": {
254
+ readonly type: "capability";
255
+ readonly capability: "file_read";
256
+ };
257
+ readonly "file.write": {
258
+ readonly type: "capability";
259
+ readonly capability: "file_write";
260
+ };
261
+ readonly "network.fetch": {
262
+ readonly type: "capability";
263
+ readonly capability: "network_request";
264
+ };
265
+ readonly "shell.run": {
266
+ readonly type: "capability";
267
+ readonly capability: "shell";
268
+ };
269
+ readonly "session.getMetadata": {
270
+ readonly type: "capability";
271
+ readonly capability: "session_data";
272
+ };
273
+ readonly "workspace.getMetadata": {
274
+ readonly type: "capability";
275
+ readonly capability: "workspace_data";
276
+ };
277
+ readonly "task.run": {
278
+ readonly type: "capability";
279
+ readonly capability: "task";
280
+ };
281
+ readonly "tool.invoke": {
282
+ readonly type: "unprivileged";
283
+ };
284
+ readonly "permission.request": {
285
+ readonly type: "unprivileged";
286
+ };
287
+ };
288
+ export declare function bridgeMethodPolicy(method: string): BridgeMethodPolicy;
289
+ export declare function bridgeCapability(method: string): string | undefined;