@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.
- package/LICENSE +67 -0
- package/dist/headless.d.ts +26 -0
- package/dist/headless.d.ts.map +1 -0
- package/dist/headless.js +26 -0
- package/dist/headless.js.map +1 -0
- package/dist/headlessAgentSurface.d.ts +97 -0
- package/dist/headlessAgentSurface.d.ts.map +1 -0
- package/dist/headlessAgentSurface.js +80 -0
- package/dist/headlessAgentSurface.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/permissionIpc.d.ts +38 -0
- package/dist/permissionIpc.d.ts.map +1 -0
- package/dist/permissionIpc.js +101 -0
- package/dist/permissionIpc.js.map +1 -0
- package/dist/sdkAgent.d.ts +232 -0
- package/dist/sdkAgent.d.ts.map +1 -0
- package/dist/sdkAgent.js +5268 -0
- package/dist/sdkAgent.js.map +1 -0
- package/dist/sdkAgentSurface.d.ts +45 -0
- package/dist/sdkAgentSurface.d.ts.map +1 -0
- package/dist/sdkAgentSurface.js +2 -0
- package/dist/sdkAgentSurface.js.map +1 -0
- package/dist/sdkNativeHeadlessRunner.d.ts +45 -0
- package/dist/sdkNativeHeadlessRunner.d.ts.map +1 -0
- package/dist/sdkNativeHeadlessRunner.js +101 -0
- package/dist/sdkNativeHeadlessRunner.js.map +1 -0
- package/dist/sdkNativeRunner.d.ts +11 -0
- package/dist/sdkNativeRunner.d.ts.map +1 -0
- package/dist/sdkNativeRunner.js +93 -0
- package/dist/sdkNativeRunner.js.map +1 -0
- package/dist/surfaceRuntimeBridge.d.ts +59 -0
- package/dist/surfaceRuntimeBridge.d.ts.map +1 -0
- package/dist/surfaceRuntimeBridge.js +64 -0
- package/dist/surfaceRuntimeBridge.js.map +1 -0
- package/dist/workspaceStateBridge.d.ts +18 -0
- package/dist/workspaceStateBridge.d.ts.map +1 -0
- package/dist/workspaceStateBridge.js +22 -0
- package/dist/workspaceStateBridge.js.map +1 -0
- 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":"AAOA,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAA;AACtE,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AA6CpG,MAAM,UAAU,6BAA6B,CAC3C,OAA6C;IAE7C,OAAO;QACL,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO;YACtB,MAAM,iBAAiB,GAAG,sBAAsB,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAA;YACzE,MAAM,YAAY,GAAG,OAAO,CAAC,iBAAiB;gBAC5C,CAAC,CAAC,sBAAsB,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE;oBAC5C,qFAAqF;oBACrF,mFAAmF;oBACnF,IAAI,SAAS,KAAK,KAAK,CAAC,SAAS;wBAAE,OAAM;oBACzC,OAAO,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;gBACxE,CAAC,CAAC;gBACJ,CAAC,CAAC,SAAS,CAAA;YAEb,MAAM,OAAO,GAAG,0BAA0B,CAAC;gBACzC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;oBAClC,SAAS,EAAE,OAAO,CAAC,kBAAkB,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;iBAC9D,CAAC;gBACF,yBAAyB,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE;oBAClD,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;gBACtC,CAAC;gBACD,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC5E,CAAC,CAAA;YAEF,IAAI,CAAC;gBACH,MAAM,WAAW,CAAC;oBAChB,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,cAAc,EAAE,KAAK,CAAC,cAAc;oBACpC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACnE,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACtE,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAChE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACjD,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACpD,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACnE,aAAa,EAAE,KAAK,CAAC,aAAa;oBAClC,cAAc,EAAE,KAAK,CAAC,cAAc;oBACpC,YAAY,EAAE,OAAO,CAAC,YAAY;oBAClC,GAAG,CAAC,OAAO,CAAC,oBAAoB;wBAC9B,CAAC,CAAC,EAAE,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,EAAE;wBACxD,CAAC,CAAC,EAAE,CAAC;oBACP,UAAU,EAAE,OAAO;oBACnB,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,GAAG,CAAC,KAAK,CAAC,YAAY;wBACpB,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAwC,EAAE;wBAClE,CAAC,CAAC,EAAE,CAAC;oBACP,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACnD,kBAAkB,EAAE,CAAC,GAAG,KAAK,CAAC,kBAAkB,CAAC;oBACjD,aAAa,EAAE,eAAe,CAAC,KAAK,CAAC,aAAa,CAAC;oBACnD,qBAAqB,EAAE,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,qBAAqB;oBAC3E,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACtE,uBAAuB,EAAE,OAAO,CAAC,4BAA4B;oBAC7D,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACtF,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACtF,yFAAyF;oBACzF,uFAAuF;oBACvF,0BAA0B;oBAC1B,GAAG,CAAC,OAAO,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;iBACtF,CAAC,CAAA;YACJ,CAAC;oBAAS,CAAC;gBACT,wFAAwF;gBACxF,8BAA8B;gBAC9B,YAAY,EAAE,EAAE,CAAA;YAClB,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,kBAAkB,CAAC,OAAe,EAAE,OAA4C;IACvF,IAAI,OAAO,KAAK,0BAA0B,EAAE,CAAC;QAC3C,MAAM,YAAY,GAAG,OAAO,OAAO,EAAE,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAA;QAC1F,IAAI,YAAY;YAAE,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC,CAAA;QACjD,OAAM;IACR,CAAC;IACD,IAAI,OAAO,KAAK,wBAAwB,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,OAAO,OAAO,EAAE,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAA;QACjF,2FAA2F;QAC3F,6FAA6F;QAC7F,IAAI,SAAS;YAAE,gBAAgB,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACjE,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAyB;IACvD,OAAO,KAAK,KAAK,UAAU;WACtB,KAAK,KAAK,WAAW;WACrB,KAAK,KAAK,oBAAoB;WAC9B,KAAK,KAAK,mBAAmB;WAC7B,KAAK,KAAK,MAAM;QACnB,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,SAAS,CAAA;AACf,CAAC"}
|
|
@@ -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
|
+
}
|