@xenosystem/agent-interface-electron-host 0.1.3

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.
Files changed (42) hide show
  1. package/LICENSE +67 -0
  2. package/dist/headless.d.ts +26 -0
  3. package/dist/headless.d.ts.map +1 -0
  4. package/dist/headless.js +26 -0
  5. package/dist/headless.js.map +1 -0
  6. package/dist/headlessAgentSurface.d.ts +97 -0
  7. package/dist/headlessAgentSurface.d.ts.map +1 -0
  8. package/dist/headlessAgentSurface.js +80 -0
  9. package/dist/headlessAgentSurface.js.map +1 -0
  10. package/dist/index.d.ts +13 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +13 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/permissionIpc.d.ts +38 -0
  15. package/dist/permissionIpc.d.ts.map +1 -0
  16. package/dist/permissionIpc.js +101 -0
  17. package/dist/permissionIpc.js.map +1 -0
  18. package/dist/sdkAgent.d.ts +232 -0
  19. package/dist/sdkAgent.d.ts.map +1 -0
  20. package/dist/sdkAgent.js +5268 -0
  21. package/dist/sdkAgent.js.map +1 -0
  22. package/dist/sdkAgentSurface.d.ts +45 -0
  23. package/dist/sdkAgentSurface.d.ts.map +1 -0
  24. package/dist/sdkAgentSurface.js +2 -0
  25. package/dist/sdkAgentSurface.js.map +1 -0
  26. package/dist/sdkNativeHeadlessRunner.d.ts +45 -0
  27. package/dist/sdkNativeHeadlessRunner.d.ts.map +1 -0
  28. package/dist/sdkNativeHeadlessRunner.js +101 -0
  29. package/dist/sdkNativeHeadlessRunner.js.map +1 -0
  30. package/dist/sdkNativeRunner.d.ts +11 -0
  31. package/dist/sdkNativeRunner.d.ts.map +1 -0
  32. package/dist/sdkNativeRunner.js +93 -0
  33. package/dist/sdkNativeRunner.js.map +1 -0
  34. package/dist/surfaceRuntimeBridge.d.ts +59 -0
  35. package/dist/surfaceRuntimeBridge.d.ts.map +1 -0
  36. package/dist/surfaceRuntimeBridge.js +64 -0
  37. package/dist/surfaceRuntimeBridge.js.map +1 -0
  38. package/dist/workspaceStateBridge.d.ts +18 -0
  39. package/dist/workspaceStateBridge.d.ts.map +1 -0
  40. package/dist/workspaceStateBridge.js +22 -0
  41. package/dist/workspaceStateBridge.js.map +1 -0
  42. package/package.json +37 -0
@@ -0,0 +1,101 @@
1
+ import { createHeadlessAgentSurface } from './headlessAgentSurface.js';
2
+ import { answerSdkAskUser, denySdkAccess, onPermissionWaitChange, runSdkAgent } from './sdkAgent.js';
3
+ export function createSdkNativeHeadlessRunner(options) {
4
+ return {
5
+ async run(input, context) {
6
+ const permissionProfile = knownPermissionProfile(input.permissionProfile);
7
+ const stopWatching = context.reportRunActivity
8
+ ? onPermissionWaitChange((requestId, waiting) => {
9
+ // Filtered by THIS run: the registry is module-global and shared by concurrent runs,
10
+ // so an unfiltered listener reports every run blocked whenever any one of them is.
11
+ if (requestId !== input.requestId)
12
+ return;
13
+ context.reportRunActivity?.(waiting ? 'awaiting-approval' : 'running');
14
+ })
15
+ : undefined;
16
+ const surface = createHeadlessAgentSurface({
17
+ onEvent: ({ channel, payload }) => ({
18
+ delivered: options.deliverElicitation(channel, payload ?? {}),
19
+ }),
20
+ onUnanswerableInteraction: ({ channel, payload }) => {
21
+ refuseUnanswerable(channel, payload);
22
+ },
23
+ ...(options.onSurfaceError ? { onEventError: options.onSurfaceError } : {}),
24
+ });
25
+ try {
26
+ await runSdkAgent({
27
+ requestId: input.requestId,
28
+ conversationId: input.conversationId,
29
+ ...(input.sdkSessionId ? { sdkSessionId: input.sdkSessionId } : {}),
30
+ ...(input.subagentRunId ? { subagentRunId: input.subagentRunId } : {}),
31
+ ...(input.workspaceId ? { workspaceId: input.workspaceId } : {}),
32
+ ...(input.teamId ? { teamId: input.teamId } : {}),
33
+ ...(input.agentId ? { agentId: input.agentId } : {}),
34
+ model: input.model,
35
+ messages: input.messages,
36
+ ...(input.systemPrompt ? { systemPrompt: input.systemPrompt } : {}),
37
+ maxIterations: input.maxIterations,
38
+ enableThinking: input.enableThinking,
39
+ getAuthToken: options.getAuthToken,
40
+ ...(options.getPlatformAuthToken
41
+ ? { getPlatformAuthToken: options.getPlatformAuthToken }
42
+ : {}),
43
+ mainWindow: surface,
44
+ signal: context.signal,
45
+ ...(input.capabilities
46
+ ? { capabilities: input.capabilities }
47
+ : {}),
48
+ ...(permissionProfile ? { permissionProfile } : {}),
49
+ allowedDirectories: [...input.allowedDirectories],
50
+ approvalRules: structuredClone(input.approvalRules),
51
+ allowTextOnlyFallback: input.mode === 'chat' && input.allowTextOnlyFallback,
52
+ ...(input.toolExecution ? { toolExecution: input.toolExecution } : {}),
53
+ onPersistedRuntimeEvent: context.publishPersistedRuntimeEvent,
54
+ ...(context.coordinationTools ? { coordinationTools: context.coordinationTools } : {}),
55
+ ...(options.runtimeEventStore ? { runtimeEventStore: options.runtimeEventStore } : {}),
56
+ // Absent means "assume production", which is the restrictive answer. A headless host has
57
+ // no `app.isPackaged` to consult, and the permissive value is the one that unlocks the
58
+ // `debug-bypass` profile.
59
+ ...(options.isProduction === undefined ? {} : { isProduction: options.isProduction }),
60
+ });
61
+ }
62
+ finally {
63
+ // A turn ending while a prompt is outstanding would otherwise leave the run reported as
64
+ // blocked on a human forever.
65
+ stopWatching?.();
66
+ }
67
+ },
68
+ };
69
+ }
70
+ /**
71
+ * Answer a prompt that reached nobody, in the only direction that is safe.
72
+ *
73
+ * The loop already encodes this rule for a surface that has gone away — `if (!mainWindow ||
74
+ * mainWindow.isDestroyed()) return false`. Same rule, different cause: unreachable and unattended
75
+ * are the same fact from the turn's point of view.
76
+ */
77
+ function refuseUnanswerable(channel, payload) {
78
+ if (channel === 'agent:permission-request') {
79
+ const permissionId = typeof payload?.permissionId === 'string' ? payload.permissionId : '';
80
+ if (permissionId)
81
+ denySdkAccess({ permissionId });
82
+ return;
83
+ }
84
+ if (channel === 'agent:ask-user-request') {
85
+ const askUserId = typeof payload?.askUserId === 'string' ? payload.askUserId : '';
86
+ // `cancelled`, not an empty answer: the agent asked a question and got no answer, which is
87
+ // not the same as being told "". One is a refusal it can reason about; the other is content.
88
+ if (askUserId)
89
+ answerSdkAskUser({ askUserId, cancelled: true });
90
+ }
91
+ }
92
+ function knownPermissionProfile(value) {
93
+ return value === 'standard'
94
+ || value === 'read-only'
95
+ || value === 'edit-with-approval'
96
+ || value === 'trusted-workspace'
97
+ || value === 'plan'
98
+ ? value
99
+ : undefined;
100
+ }
101
+ //# sourceMappingURL=sdkNativeHeadlessRunner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdkNativeHeadlessRunner.js","sourceRoot":"","sources":["../src/sdkNativeHeadlessRunner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { BrowserWindow } from 'electron';
2
+ import type { RuntimeEventStore } from '@xenosystem/agent-interface-host/node';
3
+ import type { SdkNativeAgentRunInput, SdkNativeAgentRunner } from '@xenosystem/agent-interface-host/node';
4
+ export interface CreateSdkNativeElectronRunnerOptions {
5
+ getAuthToken(): string | null;
6
+ getPlatformAuthToken?(): string | null;
7
+ createRuntimeWindow(input: SdkNativeAgentRunInput): BrowserWindow;
8
+ runtimeEventStore?: RuntimeEventStore;
9
+ }
10
+ export declare function createSdkNativeElectronRunner(options: CreateSdkNativeElectronRunnerOptions): SdkNativeAgentRunner;
11
+ //# sourceMappingURL=sdkNativeRunner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdkNativeRunner.d.ts","sourceRoot":"","sources":["../src/sdkNativeRunner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAE7C,OAAO,KAAK,EAGV,iBAAiB,EAClB,MAAM,uCAAuC,CAAA;AAC9C,OAAO,KAAK,EACV,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,uCAAuC,CAAA;AAI9C,MAAM,WAAW,oCAAoC;IACnD,YAAY,IAAI,MAAM,GAAG,IAAI,CAAA;IAC7B,oBAAoB,CAAC,IAAI,MAAM,GAAG,IAAI,CAAA;IACtC,mBAAmB,CAAC,KAAK,EAAE,sBAAsB,GAAG,aAAa,CAAA;IACjE,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;CACtC;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,oCAAoC,GAC5C,oBAAoB,CA2DtB"}
@@ -0,0 +1,93 @@
1
+ import { app } from 'electron';
2
+ import { onPermissionWaitChange, runSdkAgent } from './sdkAgent.js';
3
+ export function createSdkNativeElectronRunner(options) {
4
+ return {
5
+ async run(input, context) {
6
+ const permissionProfile = knownPermissionProfile(input.permissionProfile);
7
+ /**
8
+ * \u{1F534} Filtered by THIS run's request id. `pendingPermissions` is
9
+ * module-global and shared by concurrent runs, so an unfiltered listener
10
+ * would report every run blocked whenever any one of them was.
11
+ */
12
+ const stopWatching = context.reportRunActivity
13
+ ? onPermissionWaitChange((requestId, waiting) => {
14
+ if (requestId !== input.requestId)
15
+ return;
16
+ context.reportRunActivity?.(waiting ? 'awaiting-approval' : 'running');
17
+ })
18
+ : undefined;
19
+ try {
20
+ await runSdkAgent({
21
+ requestId: input.requestId,
22
+ conversationId: input.conversationId,
23
+ ...(input.sdkSessionId ? { sdkSessionId: input.sdkSessionId } : {}),
24
+ ...(input.subagentRunId ? { subagentRunId: input.subagentRunId } : {}),
25
+ ...(input.workspaceId ? { workspaceId: input.workspaceId } : {}),
26
+ ...(input.teamId ? { teamId: input.teamId } : {}),
27
+ ...(input.agentId ? { agentId: input.agentId } : {}),
28
+ model: input.model,
29
+ messages: input.messages,
30
+ ...(input.systemPrompt ? { systemPrompt: input.systemPrompt } : {}),
31
+ maxIterations: input.maxIterations,
32
+ enableThinking: input.enableThinking,
33
+ getAuthToken: options.getAuthToken,
34
+ ...(options.getPlatformAuthToken
35
+ ? { getPlatformAuthToken: options.getPlatformAuthToken }
36
+ : {}),
37
+ mainWindow: electronSurface(options.createRuntimeWindow(input)),
38
+ signal: context.signal,
39
+ // The Electron lane knows this and the loop must not: `app.isPackaged` is the fact that
40
+ // forbids `debug-bypass` in a packaged build. Passed here so behaviour is byte-identical
41
+ // to the previous inline read, while the loop's own default stays restrictive for hosts
42
+ // that have no `app` at all.
43
+ isProduction: app.isPackaged || process.env.NODE_ENV === 'production',
44
+ ...(input.capabilities
45
+ ? { capabilities: input.capabilities }
46
+ : {}),
47
+ ...(permissionProfile ? { permissionProfile } : {}),
48
+ allowedDirectories: [...input.allowedDirectories],
49
+ approvalRules: structuredClone(input.approvalRules),
50
+ allowTextOnlyFallback: input.mode === 'chat' && input.allowTextOnlyFallback,
51
+ ...(input.toolExecution ? { toolExecution: input.toolExecution } : {}),
52
+ onPersistedRuntimeEvent: context.publishPersistedRuntimeEvent,
53
+ ...(context.coordinationTools ? { coordinationTools: context.coordinationTools } : {}),
54
+ ...(options.runtimeEventStore ? { runtimeEventStore: options.runtimeEventStore } : {}),
55
+ });
56
+ }
57
+ finally {
58
+ // A turn that ends while a prompt is outstanding would otherwise leave
59
+ // the run reported as blocked on a human forever.
60
+ stopWatching?.();
61
+ }
62
+ },
63
+ };
64
+ }
65
+ /**
66
+ * The Electron end of `SdkAgentSurface` — the ONLY place that knows a surface might be a window.
67
+ *
68
+ * Kept as an explicit adapter rather than making the port structurally satisfied by
69
+ * `BrowserWindow`: the latter would have required `webContents` in the port itself, exporting an
70
+ * Electron shape into every headless implementation for as long as the port exists.
71
+ */
72
+ function electronSurface(window) {
73
+ return {
74
+ send: (channel, payload) => {
75
+ // Guarded here as well as at the call sites: a window can be destroyed between the
76
+ // caller's check and this send, and Electron throws on a destroyed webContents.
77
+ if (window.isDestroyed())
78
+ return;
79
+ window.webContents.send(channel, payload);
80
+ },
81
+ isDestroyed: () => window.isDestroyed(),
82
+ };
83
+ }
84
+ function knownPermissionProfile(value) {
85
+ return value === 'standard'
86
+ || value === 'read-only'
87
+ || value === 'edit-with-approval'
88
+ || value === 'trusted-workspace'
89
+ || value === 'plan'
90
+ ? value
91
+ : undefined;
92
+ }
93
+ //# sourceMappingURL=sdkNativeRunner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdkNativeRunner.js","sourceRoot":"","sources":["../src/sdkNativeRunner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ export interface AgentPtySurfaceSession {
2
+ terminalId: string;
3
+ cwd: string;
4
+ outputChars: number;
5
+ }
6
+ export interface AgentPtyReadResult {
7
+ success: boolean;
8
+ terminalId: string;
9
+ cwd: string | null;
10
+ output: string;
11
+ error: string | null;
12
+ }
13
+ export interface AgentSurfaceMutationResult {
14
+ success: boolean;
15
+ error: string | null;
16
+ }
17
+ export interface AgentBrowserSurface {
18
+ browserTabId: string;
19
+ label: string;
20
+ webContentsId: number;
21
+ url: string;
22
+ title: string;
23
+ isLoading: boolean;
24
+ canGoBack: boolean;
25
+ canGoForward: boolean;
26
+ }
27
+ export interface AgentBrowserSnapshotResult {
28
+ success: boolean;
29
+ snapshot: unknown | null;
30
+ error: string | null;
31
+ }
32
+ export interface SdkAgentSurfaceRuntimeAdapter {
33
+ listPtySurfaceSessions(): AgentPtySurfaceSession[];
34
+ readPtySurfaceOutput(terminalId: string, tailChars?: number): AgentPtyReadResult;
35
+ writePtySurfaceInput(terminalId: string, data: string): AgentSurfaceMutationResult;
36
+ listBrowserSurfacesForAgent(): AgentBrowserSurface[];
37
+ snapshotBrowserSurface(browserTabId: string, options?: {
38
+ maxTextChars?: number;
39
+ maxElements?: number;
40
+ }): Promise<AgentBrowserSnapshotResult>;
41
+ gotoBrowserSurface(browserTabId: string, url: string): Promise<AgentSurfaceMutationResult>;
42
+ clickBrowserSurface(browserTabId: string, selector: string): Promise<AgentSurfaceMutationResult>;
43
+ typeBrowserSurface(browserTabId: string, selector: string, text: string, clear?: boolean): Promise<AgentSurfaceMutationResult>;
44
+ keyBrowserSurface(browserTabId: string, key: string): Promise<AgentSurfaceMutationResult>;
45
+ }
46
+ export declare function configureSdkAgentSurfaceRuntime(next: SdkAgentSurfaceRuntimeAdapter): () => void;
47
+ export declare function listPtySurfaceSessions(): AgentPtySurfaceSession[];
48
+ export declare function readPtySurfaceOutput(terminalId: string, tailChars?: number): AgentPtyReadResult;
49
+ export declare function writePtySurfaceInput(terminalId: string, data: string): AgentSurfaceMutationResult;
50
+ export declare function listBrowserSurfacesForAgent(): AgentBrowserSurface[];
51
+ export declare function snapshotBrowserSurface(browserTabId: string, options?: {
52
+ maxTextChars?: number;
53
+ maxElements?: number;
54
+ }): Promise<AgentBrowserSnapshotResult>;
55
+ export declare function gotoBrowserSurface(browserTabId: string, url: string): Promise<AgentSurfaceMutationResult>;
56
+ export declare function clickBrowserSurface(browserTabId: string, selector: string): Promise<AgentSurfaceMutationResult>;
57
+ export declare function typeBrowserSurface(browserTabId: string, selector: string, text: string, clear?: boolean): Promise<AgentSurfaceMutationResult>;
58
+ export declare function keyBrowserSurface(browserTabId: string, key: string): Promise<AgentSurfaceMutationResult>;
59
+ //# sourceMappingURL=surfaceRuntimeBridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surfaceRuntimeBridge.d.ts","sourceRoot":"","sources":["../src/surfaceRuntimeBridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ const unavailableMutation = async () => ({
2
+ success: false,
3
+ error: 'This host has not registered an interactive browser surface.',
4
+ });
5
+ let adapter = {
6
+ listPtySurfaceSessions: () => [],
7
+ readPtySurfaceOutput: (terminalId) => ({
8
+ success: false,
9
+ terminalId,
10
+ cwd: null,
11
+ output: '',
12
+ error: 'This host has not registered an interactive PTY surface.',
13
+ }),
14
+ writePtySurfaceInput: () => ({
15
+ success: false,
16
+ error: 'This host has not registered an interactive PTY surface.',
17
+ }),
18
+ listBrowserSurfacesForAgent: () => [],
19
+ snapshotBrowserSurface: async () => ({
20
+ success: false,
21
+ snapshot: null,
22
+ error: 'This host has not registered an interactive browser surface.',
23
+ }),
24
+ gotoBrowserSurface: unavailableMutation,
25
+ clickBrowserSurface: unavailableMutation,
26
+ typeBrowserSurface: unavailableMutation,
27
+ keyBrowserSurface: unavailableMutation,
28
+ };
29
+ export function configureSdkAgentSurfaceRuntime(next) {
30
+ const previous = adapter;
31
+ adapter = next;
32
+ return () => {
33
+ if (adapter === next)
34
+ adapter = previous;
35
+ };
36
+ }
37
+ export function listPtySurfaceSessions() {
38
+ return adapter.listPtySurfaceSessions();
39
+ }
40
+ export function readPtySurfaceOutput(terminalId, tailChars) {
41
+ return adapter.readPtySurfaceOutput(terminalId, tailChars);
42
+ }
43
+ export function writePtySurfaceInput(terminalId, data) {
44
+ return adapter.writePtySurfaceInput(terminalId, data);
45
+ }
46
+ export function listBrowserSurfacesForAgent() {
47
+ return adapter.listBrowserSurfacesForAgent();
48
+ }
49
+ export function snapshotBrowserSurface(browserTabId, options) {
50
+ return adapter.snapshotBrowserSurface(browserTabId, options);
51
+ }
52
+ export function gotoBrowserSurface(browserTabId, url) {
53
+ return adapter.gotoBrowserSurface(browserTabId, url);
54
+ }
55
+ export function clickBrowserSurface(browserTabId, selector) {
56
+ return adapter.clickBrowserSurface(browserTabId, selector);
57
+ }
58
+ export function typeBrowserSurface(browserTabId, selector, text, clear) {
59
+ return adapter.typeBrowserSurface(browserTabId, selector, text, clear);
60
+ }
61
+ export function keyBrowserSurface(browserTabId, key) {
62
+ return adapter.keyBrowserSurface(browserTabId, key);
63
+ }
64
+ //# sourceMappingURL=surfaceRuntimeBridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surfaceRuntimeBridge.js","sourceRoot":"","sources":["../src/surfaceRuntimeBridge.ts"],"names":[],"mappings":"AAwDA,MAAM,mBAAmB,GAAG,KAAK,IAAyC,EAAE,CAAC,CAAC;IAC5E,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,8DAA8D;CACtE,CAAC,CAAA;AAEF,IAAI,OAAO,GAAkC;IAC3C,sBAAsB,EAAE,GAAG,EAAE,CAAC,EAAE;IAChC,oBAAoB,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACrC,OAAO,EAAE,KAAK;QACd,UAAU;QACV,GAAG,EAAE,IAAI;QACT,MAAM,EAAE,EAAE;QACV,KAAK,EAAE,0DAA0D;KAClE,CAAC;IACF,oBAAoB,EAAE,GAAG,EAAE,CAAC,CAAC;QAC3B,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,0DAA0D;KAClE,CAAC;IACF,2BAA2B,EAAE,GAAG,EAAE,CAAC,EAAE;IACrC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QACnC,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,8DAA8D;KACtE,CAAC;IACF,kBAAkB,EAAE,mBAAmB;IACvC,mBAAmB,EAAE,mBAAmB;IACxC,kBAAkB,EAAE,mBAAmB;IACvC,iBAAiB,EAAE,mBAAmB;CACvC,CAAA;AAED,MAAM,UAAU,+BAA+B,CAC7C,IAAmC;IAEnC,MAAM,QAAQ,GAAG,OAAO,CAAA;IACxB,OAAO,GAAG,IAAI,CAAA;IACd,OAAO,GAAG,EAAE;QACV,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO,GAAG,QAAQ,CAAA;IAC1C,CAAC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,OAAO,CAAC,sBAAsB,EAAE,CAAA;AACzC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,UAAkB,EAAE,SAAkB;IACzE,OAAO,OAAO,CAAC,oBAAoB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;AAC5D,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,UAAkB,EAAE,IAAY;IACnE,OAAO,OAAO,CAAC,oBAAoB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;AACvD,CAAC;AAED,MAAM,UAAU,2BAA2B;IACzC,OAAO,OAAO,CAAC,2BAA2B,EAAE,CAAA;AAC9C,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,YAAoB,EACpB,OAAyD;IAEzD,OAAO,OAAO,CAAC,sBAAsB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;AAC9D,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,YAAoB,EAAE,GAAW;IAClE,OAAO,OAAO,CAAC,kBAAkB,CAAC,YAAY,EAAE,GAAG,CAAC,CAAA;AACtD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,YAAoB,EAAE,QAAgB;IACxE,OAAO,OAAO,CAAC,mBAAmB,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;AAC5D,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,YAAoB,EACpB,QAAgB,EAChB,IAAY,EACZ,KAAe;IAEf,OAAO,OAAO,CAAC,kBAAkB,CAAC,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;AACxE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,YAAoB,EAAE,GAAW;IACjE,OAAO,OAAO,CAAC,iBAAiB,CAAC,YAAY,EAAE,GAAG,CAAC,CAAA;AACrD,CAAC"}
@@ -0,0 +1,18 @@
1
+ export interface SdkWorkspaceStateAdapter {
2
+ loadWorkspaceTree(): Array<Record<string, unknown>>;
3
+ saveWorkspaceTree(workspaces: Array<Record<string, unknown>>): {
4
+ success: boolean;
5
+ workspaces?: Array<Record<string, unknown>>;
6
+ error?: string;
7
+ policy?: unknown;
8
+ };
9
+ }
10
+ export declare function configureSdkWorkspaceState(next: SdkWorkspaceStateAdapter): () => void;
11
+ export declare function loadWorkspaceTreeFromDisk(): Array<Record<string, unknown>>;
12
+ export declare function saveWorkspaceTreeToDisk(workspaces: Array<Record<string, unknown>>): {
13
+ success: boolean;
14
+ workspaces?: Array<Record<string, unknown>>;
15
+ error?: string;
16
+ policy?: unknown;
17
+ };
18
+ //# sourceMappingURL=workspaceStateBridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspaceStateBridge.d.ts","sourceRoot":"","sources":["../src/workspaceStateBridge.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,wBAAwB;IACvC,iBAAiB,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IACnD,iBAAiB,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG;QAC7D,OAAO,EAAE,OAAO,CAAA;QAChB,UAAU,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;QAC3C,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,MAAM,CAAC,EAAE,OAAO,CAAA;KACjB,CAAA;CACF;AAUD,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,wBAAwB,GAAG,MAAM,IAAI,CAMrF;AAED,wBAAgB,yBAAyB,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAE1E;AAED,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;aA3BrE,OAAO;iBACH,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACnC,MAAM;aACL,OAAO;EA0BnB"}
@@ -0,0 +1,22 @@
1
+ let adapter = {
2
+ loadWorkspaceTree: () => [],
3
+ saveWorkspaceTree: () => ({
4
+ success: false,
5
+ error: 'This host has not registered a workspace-state adapter.',
6
+ }),
7
+ };
8
+ export function configureSdkWorkspaceState(next) {
9
+ const previous = adapter;
10
+ adapter = next;
11
+ return () => {
12
+ if (adapter === next)
13
+ adapter = previous;
14
+ };
15
+ }
16
+ export function loadWorkspaceTreeFromDisk() {
17
+ return adapter.loadWorkspaceTree();
18
+ }
19
+ export function saveWorkspaceTreeToDisk(workspaces) {
20
+ return adapter.saveWorkspaceTree(workspaces);
21
+ }
22
+ //# sourceMappingURL=workspaceStateBridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspaceStateBridge.js","sourceRoot":"","sources":["../src/workspaceStateBridge.ts"],"names":[],"mappings":"AAUA,IAAI,OAAO,GAA6B;IACtC,iBAAiB,EAAE,GAAG,EAAE,CAAC,EAAE;IAC3B,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC;QACxB,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,yDAAyD;KACjE,CAAC;CACH,CAAA;AAED,MAAM,UAAU,0BAA0B,CAAC,IAA8B;IACvE,MAAM,QAAQ,GAAG,OAAO,CAAA;IACxB,OAAO,GAAG,IAAI,CAAA;IACd,OAAO,GAAG,EAAE;QACV,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO,GAAG,QAAQ,CAAA;IAC1C,CAAC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB;IACvC,OAAO,OAAO,CAAC,iBAAiB,EAAE,CAAA;AACpC,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,UAA0C;IAChF,OAAO,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAA;AAC9C,CAAC"}
package/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "@xenosystem/agent-interface-electron-host",
3
+ "version": "0.1.3",
4
+ "license": "UNLICENSED",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ },
13
+ "./headless": {
14
+ "types": "./dist/headless.d.ts",
15
+ "import": "./dist/headless.js"
16
+ }
17
+ },
18
+ "files": [
19
+ "dist"
20
+ ],
21
+ "publishConfig": {
22
+ "access": "public"
23
+ },
24
+ "repository": {
25
+ "type": "git",
26
+ "url": "git+https://github.com/XENO-CORPORATION/xeno-agent-interface.git",
27
+ "directory": "packages/electron-host"
28
+ },
29
+ "dependencies": {
30
+ "@xenosystem/agent-sdk": "^0.9.0",
31
+ "@xenosystem/agent-interface-host": "0.1.3"
32
+ },
33
+ "peerDependencies": {
34
+ "electron": ">=33"
35
+ },
36
+ "scripts": {}
37
+ }