@aotui/runtime 1.0.3 → 1.0.5

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,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":""}
@@ -42,6 +42,10 @@ export interface InstalledApp {
42
42
  modulePath?: string;
43
43
  /** [RFC-014] 懒加载: Worker 脚本路径 */
44
44
  workerScript?: string;
45
+ /** [RFC-025] Reopen 时复用的启动配置 */
46
+ config?: import('../../spi/app/app-config.interface.js').AppLaunchConfig;
47
+ /** [RFC-005] Reopen 时复用的 Runtime 配置 */
48
+ runtimeConfig?: import('../../spi/config/index.js').RuntimeConfig;
45
49
  /** [RFC-014] 消息角色 */
46
50
  promptRole?: 'user' | 'assistant';
47
51
  }
@@ -131,7 +135,10 @@ export declare class AppManager {
131
135
  */
132
136
  openApp(appId: AppID): Promise<void>;
133
137
  /**
134
- * 关闭指定 App (隐藏 UI)
138
+ * 关闭指定 App
139
+ *
140
+ * 关闭后会真正释放 Worker,并把 App 从活动 Snapshot/Tool 集合中移除。
141
+ * 安装元数据会保留,因此后续仍可通过 open_app 重新启动。
135
142
  */
136
143
  closeApp(appId: AppID): Promise<void>;
137
144
  /**
@@ -80,6 +80,10 @@ export class AppManager {
80
80
  html: '', // 初始为空,之后通过 mirrorDOM 同步
81
81
  status: 'running',
82
82
  installedAt: Date.now(),
83
+ modulePath: appModulePath,
84
+ workerScript: options?.workerScriptPath,
85
+ config: options?.config,
86
+ runtimeConfig: options?.runtimeConfig,
83
87
  promptRole: options?.promptRole,
84
88
  });
85
89
  this.desktop.logSystem(`Installed Worker app: ${appId}`);
@@ -106,6 +110,8 @@ export class AppManager {
106
110
  installedAt: Date.now(),
107
111
  modulePath: options.modulePath,
108
112
  workerScript: options.workerScriptPath,
113
+ config: undefined,
114
+ runtimeConfig: undefined,
109
115
  promptRole: options.promptRole,
110
116
  });
111
117
  this.desktop.logSystem(`Registered pending app: ${appId} (${options.name ?? 'unnamed'})`);
@@ -122,8 +128,8 @@ export class AppManager {
122
128
  console.warn(`[AppManager] Cannot start ${appId}: not found`);
123
129
  return false;
124
130
  }
125
- if (app.status !== 'pending') {
126
- console.warn(`[AppManager] App ${appId} is not pending (status: ${app.status})`);
131
+ if (app.status !== 'pending' && app.status !== 'closed') {
132
+ console.warn(`[AppManager] App ${appId} is not startable (status: ${app.status})`);
127
133
  return false;
128
134
  }
129
135
  if (!app.modulePath) {
@@ -135,10 +141,14 @@ export class AppManager {
135
141
  appId,
136
142
  name: app.name,
137
143
  description: app.description,
144
+ whatItIs: app.whatItIs,
145
+ whenToUse: app.whenToUse,
138
146
  workerScriptPath: app.workerScript,
147
+ config: app.config,
148
+ runtimeConfig: app.runtimeConfig,
139
149
  promptRole: app.promptRole,
140
150
  });
141
- this.desktop.logSystem(`Started pending app: ${appId}`);
151
+ this.desktop.logSystem(`Started staged app: ${appId}`);
142
152
  return true;
143
153
  }
144
154
  // ════════════════════════════════════════════════════════════════
@@ -193,15 +203,15 @@ export class AppManager {
193
203
  * 打开指定 App (显示已关闭/折叠的 App)
194
204
  */
195
205
  async openApp(appId) {
196
- // [RFC-014] Check if app is pending and start it
206
+ // [RFC-014] Check if app is staged (pending/closed) and start it
197
207
  const app = this.installedApps.get(appId);
198
- if (app?.status === 'pending') {
208
+ if (app && (app.status === 'pending' || app.status === 'closed')) {
199
209
  const started = await this.startPendingApp(appId);
200
210
  if (!started) {
201
- console.warn(`Failed to start pending app ${appId}`);
211
+ console.warn(`Failed to start staged app ${appId}`);
202
212
  return;
203
213
  }
204
- // After start, worker should exist and status should be running
214
+ return;
205
215
  }
206
216
  const worker = this.workers.get(appId);
207
217
  if (!worker) {
@@ -216,13 +226,18 @@ export class AppManager {
216
226
  this.desktop.emitSignal('app_opened');
217
227
  }
218
228
  /**
219
- * 关闭指定 App (隐藏 UI)
229
+ * 关闭指定 App
230
+ *
231
+ * 关闭后会真正释放 Worker,并把 App 从活动 Snapshot/Tool 集合中移除。
232
+ * 安装元数据会保留,因此后续仍可通过 open_app 重新启动。
220
233
  */
221
234
  async closeApp(appId) {
222
235
  const worker = this.workers.get(appId);
223
236
  if (!worker)
224
237
  return;
225
- // [RFC-001 Phase 2] UI logic should be handled by Frontend/Product layer based on app status
238
+ await worker.close();
239
+ worker.dispose();
240
+ this.workers.delete(appId);
226
241
  const app = this.installedApps.get(appId);
227
242
  if (app)
228
243
  app.status = 'closed';
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/engine/app/manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/engine/app/manager.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aotui/runtime",
3
- "version": "1.0.3",
3
+ "version": "1.0.5",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",