@aotui/runtime 1.0.3 → 1.0.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.
@@ -5,3 +5,4 @@
5
5
  */
6
6
  export { AOTUIDrivenSource, type AOTUIDrivenSourceOptions } from './aotui-driven-source.js';
7
7
  export { DEFAULT_AOTUI_SYSTEM_INSTRUCTION } from './system-instruction.js';
8
+ export * from './openclaw/index.js';
@@ -5,4 +5,5 @@
5
5
  */
6
6
  export { AOTUIDrivenSource } from './aotui-driven-source.js';
7
7
  export { DEFAULT_AOTUI_SYSTEM_INSTRUCTION } from './system-instruction.js';
8
+ export * from './openclaw/index.js';
8
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAiC,MAAM,0BAA0B,CAAC;AAC5F,OAAO,EAAE,gCAAgC,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAiC,MAAM,0BAA0B,CAAC;AAC5F,OAAO,EAAE,gCAAgC,EAAE,MAAM,yBAAyB,CAAC;AAC3E,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,37 @@
1
+ import type { IKernel } from '../../spi/runtime/kernel.interface.js';
2
+ import type { AOTUIAgentAdapter, AOTUISnapshotProjector, DesktopRecord, OpenClawLikeAgentRuntime, OpenClawLikeMessage, OpenClawLikeTool, SessionDesktopManager } from './types.js';
3
+ type OpenClawAgentAdapterOptions = {
4
+ sessionKey: string;
5
+ sessionId?: string;
6
+ agentId?: string;
7
+ kernel: IKernel;
8
+ desktopManager: SessionDesktopManager;
9
+ agent: OpenClawLikeAgentRuntime;
10
+ baseTools?: OpenClawLikeTool[];
11
+ projector?: AOTUISnapshotProjector;
12
+ ownerId?: string;
13
+ };
14
+ export declare class OpenClawAgentAdapter implements AOTUIAgentAdapter {
15
+ private readonly options;
16
+ private readonly sessionKey;
17
+ private readonly ownerId;
18
+ private readonly baseTools;
19
+ private readonly projector;
20
+ private readonly bindingCache;
21
+ private originalTransformContext?;
22
+ private desktopRecord?;
23
+ constructor(options: OpenClawAgentAdapterOptions);
24
+ install(): Promise<void>;
25
+ dispose(): Promise<void>;
26
+ getSessionKey(): string;
27
+ getDesktopRecord(): DesktopRecord;
28
+ ensureDesktopReady(): Promise<void>;
29
+ buildAotuiMessages(): Promise<OpenClawLikeMessage[]>;
30
+ buildAotuiTools(): Promise<OpenClawLikeTool[]>;
31
+ routeToolCall(toolName: string, args: unknown, toolCallId: string): Promise<unknown>;
32
+ refreshToolsAndContext(): Promise<void>;
33
+ private acquireSnapshot;
34
+ private createTool;
35
+ private resolveBinding;
36
+ }
37
+ export {};
@@ -0,0 +1,156 @@
1
+ import { OpenClawSnapshotProjector, replaceAotuiInjectedMessages } from './projector.js';
2
+ function normalizeSessionKey(sessionKey) {
3
+ return sessionKey.trim().toLowerCase();
4
+ }
5
+ export class OpenClawAgentAdapter {
6
+ options;
7
+ sessionKey;
8
+ ownerId;
9
+ baseTools;
10
+ projector;
11
+ bindingCache = new Map();
12
+ originalTransformContext;
13
+ desktopRecord;
14
+ constructor(options) {
15
+ this.options = options;
16
+ this.sessionKey = normalizeSessionKey(options.sessionKey);
17
+ this.ownerId = options.ownerId ?? 'openclaw';
18
+ this.baseTools = [...(options.baseTools ?? [])];
19
+ this.projector = options.projector ?? new OpenClawSnapshotProjector();
20
+ }
21
+ async install() {
22
+ await this.ensureDesktopReady();
23
+ await this.refreshToolsAndContext();
24
+ this.originalTransformContext = this.options.agent.transformContext;
25
+ this.options.agent.transformContext = async (messages, signal) => {
26
+ const baseMessages = this.originalTransformContext
27
+ ? await this.originalTransformContext(messages, signal)
28
+ : messages;
29
+ await this.refreshToolsAndContext();
30
+ const injectedMessages = await this.buildAotuiMessages();
31
+ return replaceAotuiInjectedMessages(baseMessages, injectedMessages);
32
+ };
33
+ }
34
+ async dispose() {
35
+ this.options.agent.transformContext = this.originalTransformContext;
36
+ }
37
+ getSessionKey() {
38
+ return this.sessionKey;
39
+ }
40
+ getDesktopRecord() {
41
+ if (!this.desktopRecord) {
42
+ throw new Error(`Desktop is not ready for session ${this.sessionKey}`);
43
+ }
44
+ return this.desktopRecord;
45
+ }
46
+ async ensureDesktopReady() {
47
+ if (this.desktopRecord) {
48
+ await this.options.desktopManager.touchDesktop(this.sessionKey, this.options.sessionId);
49
+ return;
50
+ }
51
+ this.desktopRecord = await this.options.desktopManager.ensureDesktop({
52
+ sessionKey: this.sessionKey,
53
+ sessionId: this.options.sessionId,
54
+ agentId: this.options.agentId,
55
+ });
56
+ }
57
+ async buildAotuiMessages() {
58
+ const snapshot = await this.acquireSnapshot();
59
+ try {
60
+ return this.projector.projectMessages(snapshot, this.getDesktopRecord());
61
+ }
62
+ finally {
63
+ this.options.kernel.releaseSnapshot(snapshot.id);
64
+ }
65
+ }
66
+ async buildAotuiTools() {
67
+ const snapshot = await this.acquireSnapshot();
68
+ try {
69
+ const bindings = this.projector.projectToolBindings(snapshot, this.getDesktopRecord());
70
+ this.bindingCache.clear();
71
+ for (const binding of bindings) {
72
+ this.bindingCache.set(binding.toolName, binding);
73
+ }
74
+ return bindings.map((binding) => this.createTool(binding));
75
+ }
76
+ finally {
77
+ this.options.kernel.releaseSnapshot(snapshot.id);
78
+ }
79
+ }
80
+ async routeToolCall(toolName, args, toolCallId) {
81
+ const binding = await this.resolveBinding(toolName);
82
+ if (!binding) {
83
+ return {
84
+ toolCallId,
85
+ toolName,
86
+ error: {
87
+ code: 'E_TOOL_NOT_FOUND',
88
+ message: `Unknown AOTUI tool: ${toolName}`,
89
+ },
90
+ };
91
+ }
92
+ const operation = {
93
+ ...binding.operation,
94
+ args: args ?? {},
95
+ };
96
+ const desktopRecord = this.getDesktopRecord();
97
+ this.options.kernel.acquireLock(desktopRecord.desktopId, this.ownerId);
98
+ try {
99
+ const result = await this.options.kernel.execute(desktopRecord.desktopId, operation, this.ownerId);
100
+ if (result.success) {
101
+ return {
102
+ toolCallId,
103
+ toolName,
104
+ result: result.data ?? { success: true },
105
+ };
106
+ }
107
+ return {
108
+ toolCallId,
109
+ toolName,
110
+ error: result.error ?? {
111
+ code: 'E_OPERATION_FAILED',
112
+ message: 'AOTUI operation failed',
113
+ },
114
+ };
115
+ }
116
+ finally {
117
+ this.options.kernel.releaseLock(desktopRecord.desktopId, this.ownerId);
118
+ }
119
+ }
120
+ async refreshToolsAndContext() {
121
+ const aotuiTools = await this.buildAotuiTools();
122
+ this.options.agent.setTools([...this.baseTools, ...aotuiTools]);
123
+ await this.options.desktopManager.touchDesktop(this.sessionKey, this.options.sessionId);
124
+ }
125
+ async acquireSnapshot() {
126
+ await this.ensureDesktopReady();
127
+ return await this.options.kernel.acquireSnapshot(this.getDesktopRecord().desktopId);
128
+ }
129
+ createTool(binding) {
130
+ return {
131
+ name: binding.toolName,
132
+ description: binding.description,
133
+ parameters: binding.parameters,
134
+ execute: async (toolCallId, args) => await this.routeToolCall(binding.toolName, args, toolCallId),
135
+ };
136
+ }
137
+ async resolveBinding(toolName) {
138
+ const cached = this.bindingCache.get(toolName);
139
+ if (cached) {
140
+ return cached;
141
+ }
142
+ const snapshot = await this.acquireSnapshot();
143
+ try {
144
+ const bindings = this.projector.projectToolBindings(snapshot, this.getDesktopRecord());
145
+ this.bindingCache.clear();
146
+ for (const binding of bindings) {
147
+ this.bindingCache.set(binding.toolName, binding);
148
+ }
149
+ return this.bindingCache.get(toolName);
150
+ }
151
+ finally {
152
+ this.options.kernel.releaseSnapshot(snapshot.id);
153
+ }
154
+ }
155
+ }
156
+ //# sourceMappingURL=agent-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-adapter.js","sourceRoot":"","sources":["../../../src/adapters/openclaw/agent-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export * from './types.js';
2
+ export * from './projector.js';
3
+ export * from './session-desktop-manager.js';
4
+ export * from './kernel-service.js';
5
+ export * from './agent-adapter.js';
@@ -0,0 +1,6 @@
1
+ export * from './types.js';
2
+ export * from './projector.js';
3
+ export * from './session-desktop-manager.js';
4
+ export * from './kernel-service.js';
5
+ export * from './agent-adapter.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/openclaw/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { AOTUIKernelService, OpenClawKernelServiceOptions, SessionDesktopManager } from './types.js';
2
+ export declare class DefaultAOTUIKernelService implements AOTUIKernelService {
3
+ private readonly options;
4
+ private started;
5
+ private kernel?;
6
+ private desktopManager?;
7
+ constructor(options?: OpenClawKernelServiceOptions);
8
+ start(): Promise<void>;
9
+ stop(reason?: string): Promise<void>;
10
+ isStarted(): boolean;
11
+ getKernel(): import("../../index.js").IKernel;
12
+ getDesktopManager(): SessionDesktopManager;
13
+ }
14
+ export declare function createOpenClawKernelService(options?: OpenClawKernelServiceOptions): AOTUIKernelService;
@@ -0,0 +1,52 @@
1
+ import { createRuntime } from '../../facades/facades.js';
2
+ import { InMemorySessionDesktopManager } from './session-desktop-manager.js';
3
+ export class DefaultAOTUIKernelService {
4
+ options;
5
+ started = false;
6
+ kernel;
7
+ desktopManager;
8
+ constructor(options = {}) {
9
+ this.options = options;
10
+ }
11
+ async start() {
12
+ if (this.started) {
13
+ return;
14
+ }
15
+ this.kernel = createRuntime(this.options.runtimeConfig ?? {});
16
+ this.desktopManager = new InMemorySessionDesktopManager(this.kernel, {
17
+ idleSuspendMs: this.options.idleSuspendMs,
18
+ idleDestroyMs: this.options.idleDestroyMs,
19
+ });
20
+ this.started = true;
21
+ }
22
+ async stop(reason) {
23
+ if (!this.started) {
24
+ return;
25
+ }
26
+ if (this.desktopManager) {
27
+ await this.desktopManager.destroyAll(reason ?? 'service_stop');
28
+ }
29
+ this.desktopManager = undefined;
30
+ this.kernel = undefined;
31
+ this.started = false;
32
+ }
33
+ isStarted() {
34
+ return this.started;
35
+ }
36
+ getKernel() {
37
+ if (!this.kernel) {
38
+ throw new Error('AOTUI kernel service has not been started');
39
+ }
40
+ return this.kernel;
41
+ }
42
+ getDesktopManager() {
43
+ if (!this.desktopManager) {
44
+ throw new Error('AOTUI kernel service has not been started');
45
+ }
46
+ return this.desktopManager;
47
+ }
48
+ }
49
+ export function createOpenClawKernelService(options = {}) {
50
+ return new DefaultAOTUIKernelService(options);
51
+ }
52
+ //# sourceMappingURL=kernel-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kernel-service.js","sourceRoot":"","sources":["../../../src/adapters/openclaw/kernel-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAO7E,MAAM,OAAO,yBAAyB;IAKL;IAJrB,OAAO,GAAG,KAAK,CAAC;IAChB,MAAM,CAAoC;IAC1C,cAAc,CAAyB;IAE/C,YAA6B,UAAwC,EAAE;QAA1C,YAAO,GAAP,OAAO,CAAmC;IAAG,CAAC;IAE3E,KAAK,CAAC,KAAK;QACP,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,OAAO;QACX,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,cAAc,GAAG,IAAI,6BAA6B,CAAC,IAAI,CAAC,MAAM,EAAE;YACjE,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa;YACzC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa;SAC5C,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAe;QACtB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,OAAO;QACX,CAAC;QAED,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,IAAI,cAAc,CAAC,CAAC;QACnE,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IACzB,CAAC;IAED,SAAS;QACL,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,SAAS;QACL,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,iBAAiB;QACb,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;CACJ;AAED,MAAM,UAAU,2BAA2B,CACvC,UAAwC,EAAE;IAE1C,OAAO,IAAI,yBAAyB,CAAC,OAAO,CAAC,CAAC;AAClD,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { CachedSnapshot } from '../../spi/core/snapshot.js';
2
+ import type { AOTUISnapshotProjector, AOTUIToolBinding, DesktopRecord, OpenClawLikeMessage } from './types.js';
3
+ export declare function isAotuiInjectedMessage(message: OpenClawLikeMessage): boolean;
4
+ export declare function stripAotuiInjectedMessages(messages: OpenClawLikeMessage[]): OpenClawLikeMessage[];
5
+ export declare function replaceAotuiInjectedMessages(messages: OpenClawLikeMessage[], injected: OpenClawLikeMessage[]): OpenClawLikeMessage[];
6
+ export declare class OpenClawSnapshotProjector implements AOTUISnapshotProjector {
7
+ projectMessages(snapshot: CachedSnapshot, meta: DesktopRecord): OpenClawLikeMessage[];
8
+ projectToolBindings(snapshot: CachedSnapshot, _meta: DesktopRecord): AOTUIToolBinding[];
9
+ }
@@ -0,0 +1,164 @@
1
+ const AOTUI_METADATA_KEY = 'aotui';
2
+ function createInjectedMetadata(meta, snapshotId, kind, viewId) {
3
+ return {
4
+ aotui: true,
5
+ desktopKey: meta.desktopKey,
6
+ snapshotId,
7
+ kind,
8
+ ...(viewId ? { viewId } : {}),
9
+ };
10
+ }
11
+ function isOperationEntry(entry) {
12
+ return typeof entry === 'object'
13
+ && entry !== null
14
+ && entry.type === 'operation'
15
+ && typeof entry.appId === 'string'
16
+ && typeof entry.operation?.id === 'string';
17
+ }
18
+ function isTypeToolEntry(entry) {
19
+ return typeof entry === 'object' && entry !== null;
20
+ }
21
+ function convertParamsToSchema(params) {
22
+ const properties = {};
23
+ const required = [];
24
+ for (const param of params ?? []) {
25
+ const paramType = param.type ?? 'string';
26
+ const property = {
27
+ type: paramType === 'enum' ? 'string' : paramType,
28
+ };
29
+ if (param.description) {
30
+ property.description = param.description;
31
+ }
32
+ if (paramType === 'enum' && Array.isArray(param.options)) {
33
+ property.enum = [...param.options];
34
+ }
35
+ properties[param.name] = property;
36
+ if (param.required) {
37
+ required.push(param.name);
38
+ }
39
+ }
40
+ return {
41
+ type: 'object',
42
+ properties,
43
+ required,
44
+ additionalProperties: false,
45
+ };
46
+ }
47
+ function createViewOperation(meta) {
48
+ return {
49
+ context: {
50
+ appId: meta.appId,
51
+ snapshotId: 'latest',
52
+ ...(meta.viewId ? { viewId: meta.viewId } : {}),
53
+ },
54
+ name: meta.operationName,
55
+ args: {},
56
+ };
57
+ }
58
+ function projectStructuredMessages(snapshot, meta) {
59
+ const structured = snapshot.structured;
60
+ if (!structured) {
61
+ return [];
62
+ }
63
+ const messages = [];
64
+ if (structured.systemInstruction) {
65
+ messages.push({
66
+ role: 'user',
67
+ content: structured.systemInstruction,
68
+ metadata: { [AOTUI_METADATA_KEY]: createInjectedMetadata(meta, snapshot.id, 'system_instruction') },
69
+ });
70
+ }
71
+ if (structured.desktopState) {
72
+ messages.push({
73
+ role: 'user',
74
+ content: structured.desktopState,
75
+ metadata: { [AOTUI_METADATA_KEY]: createInjectedMetadata(meta, snapshot.id, 'desktop_state') },
76
+ });
77
+ }
78
+ if (Array.isArray(structured.viewStates) && structured.viewStates.length > 0) {
79
+ for (const view of structured.viewStates) {
80
+ messages.push({
81
+ role: view.role ?? 'user',
82
+ content: view.markup,
83
+ metadata: {
84
+ [AOTUI_METADATA_KEY]: createInjectedMetadata(meta, snapshot.id, 'view_state', view.viewId),
85
+ },
86
+ });
87
+ }
88
+ return messages;
89
+ }
90
+ for (const fragment of structured.appStates) {
91
+ messages.push({
92
+ role: fragment.role ?? 'user',
93
+ content: fragment.markup,
94
+ metadata: {
95
+ [AOTUI_METADATA_KEY]: createInjectedMetadata(meta, snapshot.id, 'view_state', fragment.appId),
96
+ },
97
+ });
98
+ }
99
+ return messages;
100
+ }
101
+ export function isAotuiInjectedMessage(message) {
102
+ const metadata = message.metadata?.[AOTUI_METADATA_KEY];
103
+ return typeof metadata === 'object' && metadata !== null && metadata.aotui === true;
104
+ }
105
+ export function stripAotuiInjectedMessages(messages) {
106
+ return messages.filter((message) => !isAotuiInjectedMessage(message));
107
+ }
108
+ export function replaceAotuiInjectedMessages(messages, injected) {
109
+ return [...stripAotuiInjectedMessages(messages), ...injected];
110
+ }
111
+ export class OpenClawSnapshotProjector {
112
+ projectMessages(snapshot, meta) {
113
+ if (snapshot.structured) {
114
+ return projectStructuredMessages(snapshot, meta);
115
+ }
116
+ if (!snapshot.markup) {
117
+ return [];
118
+ }
119
+ return [
120
+ {
121
+ role: 'user',
122
+ content: snapshot.markup,
123
+ metadata: {
124
+ [AOTUI_METADATA_KEY]: createInjectedMetadata(meta, snapshot.id, 'desktop_state'),
125
+ },
126
+ },
127
+ ];
128
+ }
129
+ projectToolBindings(snapshot, _meta) {
130
+ const bindings = [];
131
+ const indexMap = snapshot.indexMap;
132
+ for (const [key, value] of Object.entries(indexMap ?? {})) {
133
+ if (isOperationEntry(value)) {
134
+ bindings.push({
135
+ toolName: value.operation.id,
136
+ description: value.operation.displayName || value.operation.id,
137
+ parameters: convertParamsToSchema(value.operation.params),
138
+ operation: createViewOperation({
139
+ appId: value.appId,
140
+ operationName: value.operation.id,
141
+ }),
142
+ });
143
+ continue;
144
+ }
145
+ if (key.startsWith('tool:') && isTypeToolEntry(value)) {
146
+ const toolName = key.slice('tool:'.length);
147
+ const appId = value.appId || 'system';
148
+ const operationName = value.toolName || toolName;
149
+ bindings.push({
150
+ toolName,
151
+ description: value.description || toolName,
152
+ parameters: convertParamsToSchema(value.params),
153
+ operation: createViewOperation({
154
+ appId,
155
+ viewId: value.viewType,
156
+ operationName,
157
+ }),
158
+ });
159
+ }
160
+ }
161
+ return bindings;
162
+ }
163
+ }
164
+ //# sourceMappingURL=projector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projector.js","sourceRoot":"","sources":["../../../src/adapters/openclaw/projector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { IKernel } from '../../spi/runtime/kernel.interface.js';
2
+ import type { DesktopBindingInput, DesktopRecord, SessionDesktopManager } from './types.js';
3
+ type SessionDesktopManagerOptions = {
4
+ idleSuspendMs?: number;
5
+ idleDestroyMs?: number;
6
+ afterCreate?: (record: DesktopRecord) => Promise<void> | void;
7
+ };
8
+ export declare class InMemorySessionDesktopManager implements SessionDesktopManager {
9
+ private readonly kernel;
10
+ private readonly records;
11
+ private readonly idleSuspendMs;
12
+ private readonly idleDestroyMs;
13
+ private readonly afterCreate?;
14
+ constructor(kernel: IKernel, options?: SessionDesktopManagerOptions);
15
+ ensureDesktop(input: DesktopBindingInput): Promise<DesktopRecord>;
16
+ touchDesktop(sessionKey: string, sessionId?: string): Promise<void>;
17
+ suspendDesktop(sessionKey: string, _reason?: string): Promise<void>;
18
+ resumeDesktop(sessionKey: string): Promise<void>;
19
+ resetDesktop(sessionKey: string, next?: {
20
+ sessionId?: string;
21
+ reason?: string;
22
+ }): Promise<DesktopRecord>;
23
+ destroyDesktop(sessionKey: string, _reason?: string): Promise<void>;
24
+ destroyAll(reason?: string): Promise<void>;
25
+ getDesktop(sessionKey: string): DesktopRecord | undefined;
26
+ listDesktops(): DesktopRecord[];
27
+ sweepIdle(now?: number): Promise<void>;
28
+ }
29
+ export {};
@@ -0,0 +1,136 @@
1
+ function normalizeSessionKey(sessionKey) {
2
+ return sessionKey.trim().toLowerCase();
3
+ }
4
+ function normalizeAgentId(agentId) {
5
+ return agentId?.trim().toLowerCase() || 'main';
6
+ }
7
+ function parseThreadInfo(sessionKey) {
8
+ const normalized = normalizeSessionKey(sessionKey);
9
+ const topicIndex = normalized.lastIndexOf(':topic:');
10
+ const threadIndex = normalized.lastIndexOf(':thread:');
11
+ const markerIndex = Math.max(topicIndex, threadIndex);
12
+ const marker = topicIndex > threadIndex ? ':topic:' : ':thread:';
13
+ if (markerIndex === -1) {
14
+ return {};
15
+ }
16
+ const baseSessionKey = normalized.slice(0, markerIndex);
17
+ const threadId = normalized.slice(markerIndex + marker.length) || undefined;
18
+ return { baseSessionKey, threadId };
19
+ }
20
+ function toDesktopId(sessionKey) {
21
+ return normalizeSessionKey(sessionKey);
22
+ }
23
+ export class InMemorySessionDesktopManager {
24
+ kernel;
25
+ records = new Map();
26
+ idleSuspendMs;
27
+ idleDestroyMs;
28
+ afterCreate;
29
+ constructor(kernel, options = {}) {
30
+ this.kernel = kernel;
31
+ this.idleSuspendMs = options.idleSuspendMs ?? 5 * 60_000;
32
+ this.idleDestroyMs = options.idleDestroyMs ?? 60 * 60_000;
33
+ this.afterCreate = options.afterCreate;
34
+ }
35
+ async ensureDesktop(input) {
36
+ const sessionKey = normalizeSessionKey(input.sessionKey);
37
+ const existing = this.records.get(sessionKey);
38
+ if (existing) {
39
+ existing.lastActiveAt = Date.now();
40
+ existing.sessionId = input.sessionId ?? existing.sessionId;
41
+ if (existing.status === 'suspended') {
42
+ await this.kernel.resume(existing.desktopId);
43
+ }
44
+ existing.status = 'active';
45
+ return existing;
46
+ }
47
+ const { baseSessionKey, threadId } = parseThreadInfo(sessionKey);
48
+ const desktopId = await this.kernel.createDesktop(toDesktopId(sessionKey));
49
+ const record = {
50
+ desktopKey: sessionKey,
51
+ desktopId,
52
+ sessionKey,
53
+ ...(baseSessionKey ? { baseSessionKey } : {}),
54
+ ...(input.parentSessionKey ? { parentSessionKey: normalizeSessionKey(input.parentSessionKey) } : {}),
55
+ ...(threadId ? { threadId } : {}),
56
+ ...(input.sessionId ? { sessionId: input.sessionId } : {}),
57
+ agentId: normalizeAgentId(input.agentId),
58
+ createdAt: Date.now(),
59
+ lastActiveAt: Date.now(),
60
+ status: 'active',
61
+ };
62
+ this.records.set(sessionKey, record);
63
+ if (this.afterCreate) {
64
+ await this.afterCreate(record);
65
+ }
66
+ return record;
67
+ }
68
+ async touchDesktop(sessionKey, sessionId) {
69
+ const record = this.records.get(normalizeSessionKey(sessionKey));
70
+ if (!record) {
71
+ return;
72
+ }
73
+ record.lastActiveAt = Date.now();
74
+ record.status = 'active';
75
+ if (sessionId) {
76
+ record.sessionId = sessionId;
77
+ }
78
+ }
79
+ async suspendDesktop(sessionKey, _reason) {
80
+ const record = this.records.get(normalizeSessionKey(sessionKey));
81
+ if (!record || record.status === 'suspended') {
82
+ return;
83
+ }
84
+ await this.kernel.suspend(record.desktopId);
85
+ record.status = 'suspended';
86
+ }
87
+ async resumeDesktop(sessionKey) {
88
+ const record = this.records.get(normalizeSessionKey(sessionKey));
89
+ if (!record) {
90
+ return;
91
+ }
92
+ await this.kernel.resume(record.desktopId);
93
+ record.status = 'active';
94
+ record.lastActiveAt = Date.now();
95
+ }
96
+ async resetDesktop(sessionKey, next) {
97
+ await this.destroyDesktop(sessionKey, next?.reason);
98
+ return await this.ensureDesktop({ sessionKey, sessionId: next?.sessionId });
99
+ }
100
+ async destroyDesktop(sessionKey, _reason) {
101
+ const normalized = normalizeSessionKey(sessionKey);
102
+ const record = this.records.get(normalized);
103
+ if (!record) {
104
+ return;
105
+ }
106
+ record.status = 'destroying';
107
+ await this.kernel.destroyDesktop(record.desktopId);
108
+ this.records.delete(normalized);
109
+ }
110
+ async destroyAll(reason) {
111
+ const keys = Array.from(this.records.keys());
112
+ for (const sessionKey of keys) {
113
+ await this.destroyDesktop(sessionKey, reason);
114
+ }
115
+ }
116
+ getDesktop(sessionKey) {
117
+ return this.records.get(normalizeSessionKey(sessionKey));
118
+ }
119
+ listDesktops() {
120
+ return Array.from(this.records.values());
121
+ }
122
+ async sweepIdle(now = Date.now()) {
123
+ for (const record of this.records.values()) {
124
+ const idleMs = now - record.lastActiveAt;
125
+ if (idleMs >= this.idleDestroyMs) {
126
+ await this.destroyDesktop(record.sessionKey, 'idle_destroy');
127
+ continue;
128
+ }
129
+ if (idleMs >= this.idleSuspendMs && record.status === 'active') {
130
+ await this.suspendDesktop(record.sessionKey, 'idle_suspend');
131
+ record.status = 'idle';
132
+ }
133
+ }
134
+ }
135
+ }
136
+ //# sourceMappingURL=session-desktop-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-desktop-manager.js","sourceRoot":"","sources":["../../../src/adapters/openclaw/session-desktop-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ import type { Operation } from '../../spi/core/operations.js';
2
+ import type { CachedSnapshot } from '../../spi/core/snapshot.js';
3
+ import type { DesktopID } from '../../spi/core/types.js';
4
+ import type { IKernel } from '../../spi/runtime/kernel.interface.js';
5
+ import type { RuntimeConfigInput } from '../../facades/facades.js';
6
+ export type OpenClawLikeMessageRole = 'system' | 'user' | 'assistant' | 'tool';
7
+ export type OpenClawLikeMessage = {
8
+ role: OpenClawLikeMessageRole;
9
+ content: unknown;
10
+ metadata?: Record<string, unknown>;
11
+ [key: string]: unknown;
12
+ };
13
+ export type OpenClawLikeTool = {
14
+ name: string;
15
+ description?: string;
16
+ parameters?: Record<string, unknown>;
17
+ execute: (toolCallId: string, args: unknown, signal?: AbortSignal, onUpdate?: (update: unknown) => void) => Promise<unknown>;
18
+ };
19
+ export type OpenClawLikeAgentRuntime = {
20
+ setTools(tools: OpenClawLikeTool[]): void;
21
+ transformContext?: (messages: OpenClawLikeMessage[], signal?: AbortSignal) => Promise<OpenClawLikeMessage[]>;
22
+ };
23
+ export type AOTUIInjectedMessageKind = 'system_instruction' | 'desktop_state' | 'view_state';
24
+ export type AOTUIInjectedMessageMeta = {
25
+ aotui: true;
26
+ desktopKey: string;
27
+ snapshotId: string;
28
+ kind: AOTUIInjectedMessageKind;
29
+ viewId?: string;
30
+ };
31
+ export type DesktopBindingInput = {
32
+ sessionKey: string;
33
+ sessionId?: string;
34
+ agentId?: string;
35
+ channelId?: string;
36
+ accountId?: string;
37
+ threadId?: string | number;
38
+ parentSessionKey?: string;
39
+ workspaceDir?: string;
40
+ };
41
+ export type DesktopRecordStatus = 'active' | 'idle' | 'suspended' | 'destroying';
42
+ export type DesktopRecord = {
43
+ desktopKey: string;
44
+ desktopId: DesktopID;
45
+ sessionKey: string;
46
+ baseSessionKey?: string;
47
+ parentSessionKey?: string;
48
+ threadId?: string;
49
+ sessionId?: string;
50
+ agentId: string;
51
+ createdAt: number;
52
+ lastActiveAt: number;
53
+ status: DesktopRecordStatus;
54
+ };
55
+ export type AOTUIToolBinding = {
56
+ toolName: string;
57
+ description: string;
58
+ parameters?: Record<string, unknown>;
59
+ operation: Operation;
60
+ };
61
+ export interface SessionDesktopManager {
62
+ ensureDesktop(input: DesktopBindingInput): Promise<DesktopRecord>;
63
+ touchDesktop(sessionKey: string, sessionId?: string): Promise<void>;
64
+ suspendDesktop(sessionKey: string, reason?: string): Promise<void>;
65
+ resumeDesktop(sessionKey: string): Promise<void>;
66
+ resetDesktop(sessionKey: string, next?: {
67
+ sessionId?: string;
68
+ reason?: string;
69
+ }): Promise<DesktopRecord>;
70
+ destroyDesktop(sessionKey: string, reason?: string): Promise<void>;
71
+ destroyAll(reason?: string): Promise<void>;
72
+ getDesktop(sessionKey: string): DesktopRecord | undefined;
73
+ listDesktops(): DesktopRecord[];
74
+ sweepIdle(now?: number): Promise<void>;
75
+ }
76
+ export interface AOTUISnapshotProjector {
77
+ projectMessages(snapshot: CachedSnapshot, meta: DesktopRecord): OpenClawLikeMessage[];
78
+ projectToolBindings(snapshot: CachedSnapshot, meta: DesktopRecord): AOTUIToolBinding[];
79
+ }
80
+ export interface AOTUIAgentAdapter {
81
+ install(): Promise<void>;
82
+ dispose(): Promise<void>;
83
+ getSessionKey(): string;
84
+ getDesktopRecord(): DesktopRecord;
85
+ ensureDesktopReady(): Promise<void>;
86
+ buildAotuiMessages(): Promise<OpenClawLikeMessage[]>;
87
+ buildAotuiTools(): Promise<OpenClawLikeTool[]>;
88
+ routeToolCall(toolName: string, args: unknown, toolCallId: string): Promise<unknown>;
89
+ refreshToolsAndContext(): Promise<void>;
90
+ }
91
+ export interface AOTUIKernelService {
92
+ start(): Promise<void>;
93
+ stop(reason?: string): Promise<void>;
94
+ isStarted(): boolean;
95
+ getKernel(): IKernel;
96
+ getDesktopManager(): SessionDesktopManager;
97
+ }
98
+ export type OpenClawKernelServiceOptions = {
99
+ runtimeConfig?: RuntimeConfigInput;
100
+ idleSuspendMs?: number;
101
+ idleDestroyMs?: number;
102
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/adapters/openclaw/types.ts"],"names":[],"mappings":""}
package/dist/index.d.ts CHANGED
@@ -30,6 +30,7 @@ export * from './facades/index.js';
30
30
  export * from './spi/index.js';
31
31
  export * from './kernel/index.js';
32
32
  export * from './adapters/bridge/index.js';
33
+ export * from './adapters/openclaw/index.js';
33
34
  export { AppRegistry } from './engine/app/index.js';
34
35
  export type { LoadedApp, AppRegistryOptions, TUIConfig, AppConfigEntry } from './engine/app/index.js';
35
36
  export { createSystemOperationRegistry } from './engine/system/operations/index.js';
package/dist/index.js CHANGED
@@ -44,6 +44,7 @@ export * from './kernel/index.js';
44
44
  // 🟢 Public: Adapters Layer (Integration Points)
45
45
  // ============================================================================
46
46
  export * from './adapters/bridge/index.js';
47
+ export * from './adapters/openclaw/index.js';
47
48
  // ============================================================================
48
49
  // 🟢 Public: App Registry (Third-Party App Management)
49
50
  // Used by Product Layer to load and manage third-party TUI apps
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,+EAA+E;AAC/E,uDAAuD;AACvD,+EAA+E;AAC/E,sFAAsF;AACtF,yFAAyF;AACzF,cAAc,oBAAoB,CAAC;AAEnC,+EAA+E;AAC/E,8DAA8D;AAC9D,+EAA+E;AAC/E,cAAc,gBAAgB,CAAC;AAE/B,+EAA+E;AAC/E,gDAAgD;AAChD,+EAA+E;AAC/E,cAAc,mBAAmB,CAAC;AAElC,+EAA+E;AAC/E,iDAAiD;AACjD,+EAA+E;AAC/E,cAAc,4BAA4B,CAAC;AAG3C,+EAA+E;AAC/E,uDAAuD;AACvD,gEAAgE;AAChE,+EAA+E;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpD,+EAA+E;AAC/E,kDAAkD;AAClD,+EAA+E;AAC/E,OAAO,EAAE,6BAA6B,EAAE,MAAM,qCAAqC,CAAC;AAEpF,+EAA+E;AAC/E,sCAAsC;AACtC,uEAAuE;AACvE,+EAA+E;AAC/E,OAAO,EACH,mBAAmB,EAGtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACH,aAAa,EACb,aAAa,EAEhB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACH,cAAc,EACd,+BAA+B,EAC/B,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,EAMlB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACH,kBAAkB,EAClB,iBAAiB,EAKpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACH,iBAAiB,EAGpB,MAAM,wBAAwB,CAAC;AAEhC,+EAA+E;AAC/E,mCAAmC;AACnC,EAAE;AACF,wEAAwE;AACxE,qEAAqE;AACrE,EAAE;AACF,wEAAwE;AACxE,sDAAsD;AACtD,EAAE;AACF,oEAAoE;AACpE,uDAAuD;AACvD,iEAAiE;AACjE,+EAA+E"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,+EAA+E;AAC/E,uDAAuD;AACvD,+EAA+E;AAC/E,sFAAsF;AACtF,yFAAyF;AACzF,cAAc,oBAAoB,CAAC;AAEnC,+EAA+E;AAC/E,8DAA8D;AAC9D,+EAA+E;AAC/E,cAAc,gBAAgB,CAAC;AAE/B,+EAA+E;AAC/E,gDAAgD;AAChD,+EAA+E;AAC/E,cAAc,mBAAmB,CAAC;AAElC,+EAA+E;AAC/E,iDAAiD;AACjD,+EAA+E;AAC/E,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAG7C,+EAA+E;AAC/E,uDAAuD;AACvD,gEAAgE;AAChE,+EAA+E;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpD,+EAA+E;AAC/E,kDAAkD;AAClD,+EAA+E;AAC/E,OAAO,EAAE,6BAA6B,EAAE,MAAM,qCAAqC,CAAC;AAEpF,+EAA+E;AAC/E,sCAAsC;AACtC,uEAAuE;AACvE,+EAA+E;AAC/E,OAAO,EACH,mBAAmB,EAGtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACH,aAAa,EACb,aAAa,EAEhB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACH,cAAc,EACd,+BAA+B,EAC/B,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,EAMlB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACH,kBAAkB,EAClB,iBAAiB,EAKpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACH,iBAAiB,EAGpB,MAAM,wBAAwB,CAAC;AAEhC,+EAA+E;AAC/E,mCAAmC;AACnC,EAAE;AACF,wEAAwE;AACxE,qEAAqE;AACrE,EAAE;AACF,wEAAwE;AACxE,sDAAsD;AACtD,EAAE;AACF,oEAAoE;AACpE,uDAAuD;AACvD,iEAAiE;AACjE,+EAA+E"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aotui/runtime",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",