@openclawbrain/openclaw 0.1.10 → 0.1.12
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/README.md +12 -6
- package/dist/src/cli.d.ts +14 -1
- package/dist/src/cli.js +223 -7
- package/dist/src/cli.js.map +1 -1
- package/dist/src/index.d.ts +420 -5
- package/dist/src/index.js +1909 -76
- package/dist/src/index.js.map +1 -1
- package/dist/src/learning-spine.d.ts +1 -0
- package/dist/src/learning-spine.js +9 -2
- package/dist/src/learning-spine.js.map +1 -1
- package/dist/src/local-session-passive-learning.d.ts +60 -0
- package/dist/src/local-session-passive-learning.js +359 -0
- package/dist/src/local-session-passive-learning.js.map +1 -0
- package/dist/src/session-store.d.ts +150 -0
- package/dist/src/session-store.js +199 -0
- package/dist/src/session-store.js.map +1 -0
- package/dist/src/session-tail.d.ts +68 -0
- package/dist/src/session-tail.js +519 -0
- package/dist/src/session-tail.js.map +1 -0
- package/package.json +7 -6
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
export interface OpenClawInjectedWorkspaceFile {
|
|
2
|
+
name: string;
|
|
3
|
+
path: string;
|
|
4
|
+
missing: boolean;
|
|
5
|
+
rawChars: number;
|
|
6
|
+
injectedChars: number;
|
|
7
|
+
truncated: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface OpenClawToolSurfaceEntry {
|
|
10
|
+
name: string;
|
|
11
|
+
summaryChars: number;
|
|
12
|
+
schemaChars: number;
|
|
13
|
+
propertiesCount: number;
|
|
14
|
+
}
|
|
15
|
+
export interface OpenClawSystemPromptReport {
|
|
16
|
+
source?: string;
|
|
17
|
+
generatedAt?: number;
|
|
18
|
+
sessionId?: string;
|
|
19
|
+
sessionKey?: string;
|
|
20
|
+
provider?: string;
|
|
21
|
+
model?: string;
|
|
22
|
+
workspaceDir?: string;
|
|
23
|
+
injectedWorkspaceFiles?: readonly OpenClawInjectedWorkspaceFile[];
|
|
24
|
+
tools?: {
|
|
25
|
+
listChars?: number;
|
|
26
|
+
schemaChars?: number;
|
|
27
|
+
entries?: readonly OpenClawToolSurfaceEntry[];
|
|
28
|
+
[key: string]: unknown;
|
|
29
|
+
};
|
|
30
|
+
[key: string]: unknown;
|
|
31
|
+
}
|
|
32
|
+
export interface OpenClawSessionIndexEntry {
|
|
33
|
+
sessionId: string;
|
|
34
|
+
updatedAt: number;
|
|
35
|
+
sessionFile?: string;
|
|
36
|
+
model?: string;
|
|
37
|
+
modelProvider?: string;
|
|
38
|
+
chatType?: string;
|
|
39
|
+
origin?: Record<string, unknown>;
|
|
40
|
+
deliveryContext?: Record<string, unknown>;
|
|
41
|
+
systemPromptReport?: OpenClawSystemPromptReport;
|
|
42
|
+
[key: string]: unknown;
|
|
43
|
+
}
|
|
44
|
+
export type OpenClawSessionIndex = Record<string, OpenClawSessionIndexEntry>;
|
|
45
|
+
export interface OpenClawSessionTextPart {
|
|
46
|
+
type: "text";
|
|
47
|
+
text: string;
|
|
48
|
+
textSignature?: string;
|
|
49
|
+
[key: string]: unknown;
|
|
50
|
+
}
|
|
51
|
+
export interface OpenClawSessionThinkingPart {
|
|
52
|
+
type: "thinking";
|
|
53
|
+
thinking: string;
|
|
54
|
+
thinkingSignature?: string;
|
|
55
|
+
[key: string]: unknown;
|
|
56
|
+
}
|
|
57
|
+
export interface OpenClawSessionToolCallPart {
|
|
58
|
+
type: "toolCall";
|
|
59
|
+
id: string;
|
|
60
|
+
name: string;
|
|
61
|
+
arguments: Record<string, unknown>;
|
|
62
|
+
partialJson?: string;
|
|
63
|
+
[key: string]: unknown;
|
|
64
|
+
}
|
|
65
|
+
export interface OpenClawSessionUnknownContentPart {
|
|
66
|
+
type: string;
|
|
67
|
+
[key: string]: unknown;
|
|
68
|
+
}
|
|
69
|
+
export type OpenClawSessionContentPart = OpenClawSessionTextPart | OpenClawSessionThinkingPart | OpenClawSessionToolCallPart | OpenClawSessionUnknownContentPart;
|
|
70
|
+
export interface OpenClawSessionMessagePayload {
|
|
71
|
+
role: string;
|
|
72
|
+
content: readonly OpenClawSessionContentPart[];
|
|
73
|
+
timestamp: number;
|
|
74
|
+
toolCallId?: string;
|
|
75
|
+
toolName?: string;
|
|
76
|
+
details?: Record<string, unknown>;
|
|
77
|
+
isError?: boolean;
|
|
78
|
+
api?: string;
|
|
79
|
+
provider?: string;
|
|
80
|
+
model?: string;
|
|
81
|
+
usage?: Record<string, unknown>;
|
|
82
|
+
stopReason?: string;
|
|
83
|
+
[key: string]: unknown;
|
|
84
|
+
}
|
|
85
|
+
export interface OpenClawSessionHeaderRecord {
|
|
86
|
+
type: "session";
|
|
87
|
+
version: number;
|
|
88
|
+
id: string;
|
|
89
|
+
timestamp: string;
|
|
90
|
+
cwd: string;
|
|
91
|
+
}
|
|
92
|
+
export interface OpenClawSessionModelChangeRecord {
|
|
93
|
+
type: "model_change";
|
|
94
|
+
id: string;
|
|
95
|
+
parentId: string | null;
|
|
96
|
+
timestamp: string;
|
|
97
|
+
provider: string;
|
|
98
|
+
modelId: string;
|
|
99
|
+
}
|
|
100
|
+
export interface OpenClawSessionThinkingLevelChangeRecord {
|
|
101
|
+
type: "thinking_level_change";
|
|
102
|
+
id: string;
|
|
103
|
+
parentId: string | null;
|
|
104
|
+
timestamp: string;
|
|
105
|
+
thinkingLevel: string;
|
|
106
|
+
}
|
|
107
|
+
export interface OpenClawSessionCustomRecord {
|
|
108
|
+
type: "custom";
|
|
109
|
+
customType: string;
|
|
110
|
+
data: Record<string, unknown>;
|
|
111
|
+
id: string;
|
|
112
|
+
parentId: string | null;
|
|
113
|
+
timestamp: string;
|
|
114
|
+
}
|
|
115
|
+
export interface OpenClawSessionMessageRecord {
|
|
116
|
+
type: "message";
|
|
117
|
+
id: string;
|
|
118
|
+
parentId: string | null;
|
|
119
|
+
timestamp: string;
|
|
120
|
+
message: OpenClawSessionMessagePayload;
|
|
121
|
+
}
|
|
122
|
+
export type OpenClawSessionRecord = OpenClawSessionHeaderRecord | OpenClawSessionModelChangeRecord | OpenClawSessionThinkingLevelChangeRecord | OpenClawSessionCustomRecord | OpenClawSessionMessageRecord;
|
|
123
|
+
export interface OpenClawAcpStreamRecord {
|
|
124
|
+
ts: string;
|
|
125
|
+
epochMs: number;
|
|
126
|
+
runId: string;
|
|
127
|
+
parentSessionKey: string;
|
|
128
|
+
childSessionKey: string;
|
|
129
|
+
agentId: string;
|
|
130
|
+
kind: string;
|
|
131
|
+
contextKey?: string;
|
|
132
|
+
text?: string;
|
|
133
|
+
delta?: string;
|
|
134
|
+
phase?: string;
|
|
135
|
+
data?: Record<string, unknown>;
|
|
136
|
+
[key: string]: unknown;
|
|
137
|
+
}
|
|
138
|
+
export interface OpenClawMainSessionStoreV1 {
|
|
139
|
+
profileRoot: string;
|
|
140
|
+
agentId: "main";
|
|
141
|
+
sessionsDir: string;
|
|
142
|
+
indexPath: string;
|
|
143
|
+
}
|
|
144
|
+
export declare function loadOpenClawSessionIndex(indexFilePath: string): OpenClawSessionIndex;
|
|
145
|
+
export declare function readOpenClawSessionFile(sessionFilePath: string): OpenClawSessionRecord[];
|
|
146
|
+
export declare function readOpenClawAcpStreamFile(streamFilePath: string): OpenClawAcpStreamRecord[];
|
|
147
|
+
export declare function discoverOpenClawMainSessionStores(options?: {
|
|
148
|
+
homeDir?: string;
|
|
149
|
+
profileRoots?: readonly string[];
|
|
150
|
+
}): OpenClawMainSessionStoreV1[];
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { existsSync, readFileSync, readdirSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
export function loadOpenClawSessionIndex(indexFilePath) {
|
|
5
|
+
return parseJsonFile(indexFilePath);
|
|
6
|
+
}
|
|
7
|
+
export function readOpenClawSessionFile(sessionFilePath) {
|
|
8
|
+
return readJsonlFile(sessionFilePath, parseOpenClawSessionRecord);
|
|
9
|
+
}
|
|
10
|
+
export function readOpenClawAcpStreamFile(streamFilePath) {
|
|
11
|
+
return readJsonlFile(streamFilePath, parseOpenClawAcpStreamRecord);
|
|
12
|
+
}
|
|
13
|
+
export function discoverOpenClawMainSessionStores(options = {}) {
|
|
14
|
+
const candidateRoots = options.profileRoots !== undefined
|
|
15
|
+
? [...new Set(options.profileRoots.map((root) => path.resolve(root)))]
|
|
16
|
+
: discoverOpenClawProfileRoots(options.homeDir);
|
|
17
|
+
return candidateRoots
|
|
18
|
+
.map((profileRoot) => {
|
|
19
|
+
const sessionsDir = path.join(profileRoot, "agents", "main", "sessions");
|
|
20
|
+
const indexPath = path.join(sessionsDir, "sessions.json");
|
|
21
|
+
if (!existsSync(indexPath)) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
profileRoot,
|
|
26
|
+
agentId: "main",
|
|
27
|
+
sessionsDir,
|
|
28
|
+
indexPath
|
|
29
|
+
};
|
|
30
|
+
})
|
|
31
|
+
.filter((store) => store !== null)
|
|
32
|
+
.sort((left, right) => left.indexPath.localeCompare(right.indexPath));
|
|
33
|
+
}
|
|
34
|
+
function discoverOpenClawProfileRoots(homeDir) {
|
|
35
|
+
const rootDir = path.resolve(homeDir ?? homedir());
|
|
36
|
+
if (!existsSync(rootDir)) {
|
|
37
|
+
return [];
|
|
38
|
+
}
|
|
39
|
+
return readdirSync(rootDir, { withFileTypes: true })
|
|
40
|
+
.filter((entry) => entry.isDirectory() && entry.name.startsWith(".openclaw-"))
|
|
41
|
+
.map((entry) => path.join(rootDir, entry.name))
|
|
42
|
+
.sort((left, right) => left.localeCompare(right));
|
|
43
|
+
}
|
|
44
|
+
function parseJsonFile(filePath) {
|
|
45
|
+
return JSON.parse(readFileSync(filePath, "utf8"));
|
|
46
|
+
}
|
|
47
|
+
function readJsonlFile(filePath, parseRecord) {
|
|
48
|
+
const text = readFileSync(filePath, "utf8");
|
|
49
|
+
if (text.trim() === "") {
|
|
50
|
+
return [];
|
|
51
|
+
}
|
|
52
|
+
return text
|
|
53
|
+
.split(/\r?\n/)
|
|
54
|
+
.filter((line) => line.trim().length > 0)
|
|
55
|
+
.map((line, index) => {
|
|
56
|
+
try {
|
|
57
|
+
return parseRecord(JSON.parse(line), index + 1);
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
61
|
+
throw new Error(`Could not parse JSONL record at ${filePath}:${index + 1}: ${message}`);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
function parseOpenClawSessionRecord(value, lineNumber) {
|
|
66
|
+
const record = expectRecord(value, lineNumber);
|
|
67
|
+
const type = expectString(record.type, `${lineNumber}.type`);
|
|
68
|
+
switch (type) {
|
|
69
|
+
case "session":
|
|
70
|
+
return {
|
|
71
|
+
type,
|
|
72
|
+
version: expectNumber(record.version, `${lineNumber}.version`),
|
|
73
|
+
id: expectString(record.id, `${lineNumber}.id`),
|
|
74
|
+
timestamp: expectString(record.timestamp, `${lineNumber}.timestamp`),
|
|
75
|
+
cwd: expectString(record.cwd, `${lineNumber}.cwd`)
|
|
76
|
+
};
|
|
77
|
+
case "model_change":
|
|
78
|
+
return {
|
|
79
|
+
type,
|
|
80
|
+
id: expectString(record.id, `${lineNumber}.id`),
|
|
81
|
+
parentId: expectNullableString(record.parentId, `${lineNumber}.parentId`),
|
|
82
|
+
timestamp: expectString(record.timestamp, `${lineNumber}.timestamp`),
|
|
83
|
+
provider: expectString(record.provider, `${lineNumber}.provider`),
|
|
84
|
+
modelId: expectString(record.modelId, `${lineNumber}.modelId`)
|
|
85
|
+
};
|
|
86
|
+
case "thinking_level_change":
|
|
87
|
+
return {
|
|
88
|
+
type,
|
|
89
|
+
id: expectString(record.id, `${lineNumber}.id`),
|
|
90
|
+
parentId: expectNullableString(record.parentId, `${lineNumber}.parentId`),
|
|
91
|
+
timestamp: expectString(record.timestamp, `${lineNumber}.timestamp`),
|
|
92
|
+
thinkingLevel: expectString(record.thinkingLevel, `${lineNumber}.thinkingLevel`)
|
|
93
|
+
};
|
|
94
|
+
case "custom":
|
|
95
|
+
return {
|
|
96
|
+
type,
|
|
97
|
+
customType: expectString(record.customType, `${lineNumber}.customType`),
|
|
98
|
+
data: expectRecord(record.data, `${lineNumber}.data`),
|
|
99
|
+
id: expectString(record.id, `${lineNumber}.id`),
|
|
100
|
+
parentId: expectNullableString(record.parentId, `${lineNumber}.parentId`),
|
|
101
|
+
timestamp: expectString(record.timestamp, `${lineNumber}.timestamp`)
|
|
102
|
+
};
|
|
103
|
+
case "message":
|
|
104
|
+
return {
|
|
105
|
+
type,
|
|
106
|
+
id: expectString(record.id, `${lineNumber}.id`),
|
|
107
|
+
parentId: expectNullableString(record.parentId, `${lineNumber}.parentId`),
|
|
108
|
+
timestamp: expectString(record.timestamp, `${lineNumber}.timestamp`),
|
|
109
|
+
message: parseMessagePayload(record.message, `${lineNumber}.message`)
|
|
110
|
+
};
|
|
111
|
+
default:
|
|
112
|
+
throw new Error(`Unknown OpenClaw session record type: ${type}`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
function parseMessagePayload(value, path) {
|
|
116
|
+
const payload = expectRecord(value, path);
|
|
117
|
+
const content = expectArray(payload.content, `${path}.content`).map((entry, index) => parseContentPart(entry, `${path}.content[${index}]`));
|
|
118
|
+
return {
|
|
119
|
+
...payload,
|
|
120
|
+
role: expectString(payload.role, `${path}.role`),
|
|
121
|
+
content,
|
|
122
|
+
timestamp: expectNumber(payload.timestamp, `${path}.timestamp`)
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
function parseContentPart(value, path) {
|
|
126
|
+
const content = expectRecord(value, path);
|
|
127
|
+
const type = expectString(content.type, `${path}.type`);
|
|
128
|
+
if (type === "text") {
|
|
129
|
+
return {
|
|
130
|
+
...content,
|
|
131
|
+
type,
|
|
132
|
+
text: expectString(content.text, `${path}.text`)
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
if (type === "thinking") {
|
|
136
|
+
return {
|
|
137
|
+
...content,
|
|
138
|
+
type,
|
|
139
|
+
thinking: expectString(content.thinking, `${path}.thinking`)
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
if (type === "toolCall") {
|
|
143
|
+
return {
|
|
144
|
+
...content,
|
|
145
|
+
type,
|
|
146
|
+
id: expectString(content.id, `${path}.id`),
|
|
147
|
+
name: expectString(content.name, `${path}.name`),
|
|
148
|
+
arguments: expectRecord(content.arguments, `${path}.arguments`)
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
return {
|
|
152
|
+
...content,
|
|
153
|
+
type
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
function parseOpenClawAcpStreamRecord(value, lineNumber) {
|
|
157
|
+
const record = expectRecord(value, lineNumber);
|
|
158
|
+
return {
|
|
159
|
+
...record,
|
|
160
|
+
ts: expectString(record.ts, `${lineNumber}.ts`),
|
|
161
|
+
epochMs: expectNumber(record.epochMs, `${lineNumber}.epochMs`),
|
|
162
|
+
runId: expectString(record.runId, `${lineNumber}.runId`),
|
|
163
|
+
parentSessionKey: expectString(record.parentSessionKey, `${lineNumber}.parentSessionKey`),
|
|
164
|
+
childSessionKey: expectString(record.childSessionKey, `${lineNumber}.childSessionKey`),
|
|
165
|
+
agentId: expectString(record.agentId, `${lineNumber}.agentId`),
|
|
166
|
+
kind: expectString(record.kind, `${lineNumber}.kind`)
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
function expectRecord(value, path) {
|
|
170
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
171
|
+
throw new Error(`${path} must be an object`);
|
|
172
|
+
}
|
|
173
|
+
return value;
|
|
174
|
+
}
|
|
175
|
+
function expectArray(value, path) {
|
|
176
|
+
if (!Array.isArray(value)) {
|
|
177
|
+
throw new Error(`${path} must be an array`);
|
|
178
|
+
}
|
|
179
|
+
return value;
|
|
180
|
+
}
|
|
181
|
+
function expectString(value, path) {
|
|
182
|
+
if (typeof value !== "string") {
|
|
183
|
+
throw new Error(`${path} must be a string`);
|
|
184
|
+
}
|
|
185
|
+
return value;
|
|
186
|
+
}
|
|
187
|
+
function expectNullableString(value, path) {
|
|
188
|
+
if (value === null) {
|
|
189
|
+
return null;
|
|
190
|
+
}
|
|
191
|
+
return expectString(value, path);
|
|
192
|
+
}
|
|
193
|
+
function expectNumber(value, path) {
|
|
194
|
+
if (typeof value !== "number" || !Number.isFinite(value)) {
|
|
195
|
+
throw new Error(`${path} must be a finite number`);
|
|
196
|
+
}
|
|
197
|
+
return value;
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=session-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../src/session-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { type OpenClawMainSessionStoreV1 } from "./session-store.js";
|
|
2
|
+
import type { ScannedEventExportInputV1 } from "./index.js";
|
|
3
|
+
export type OpenClawLocalSessionTailNoopReasonV1 = "seeded_existing_sessions" | "no_local_session_stores" | "no_session_changes";
|
|
4
|
+
export type OpenClawLocalSessionTailChangeKindV1 = "new_session" | "appended_records" | "metadata_only" | "session_reset" | "missing_session_path" | "missing_session_file";
|
|
5
|
+
export interface OpenClawLocalSessionTailCursorV1 {
|
|
6
|
+
sourceIndexPath: string;
|
|
7
|
+
sessionKey: string;
|
|
8
|
+
sessionId: string;
|
|
9
|
+
sessionFile: string | null;
|
|
10
|
+
updatedAt: number;
|
|
11
|
+
rawRecordCount: number;
|
|
12
|
+
bridgedEventCount: number;
|
|
13
|
+
}
|
|
14
|
+
export interface OpenClawLocalSessionTailChangeV1 {
|
|
15
|
+
source: OpenClawMainSessionStoreV1;
|
|
16
|
+
sessionKey: string;
|
|
17
|
+
sessionId: string;
|
|
18
|
+
sessionFile: string | null;
|
|
19
|
+
changeKind: OpenClawLocalSessionTailChangeKindV1;
|
|
20
|
+
rawRecordCount: number;
|
|
21
|
+
bridgedEventCount: number;
|
|
22
|
+
emittedEventCount: number;
|
|
23
|
+
warnings: string[];
|
|
24
|
+
scannedEventExport: ScannedEventExportInputV1 | null;
|
|
25
|
+
}
|
|
26
|
+
export interface OpenClawLocalSessionTailPollResultV1 {
|
|
27
|
+
runtimeOwner: "openclaw";
|
|
28
|
+
lane: "local_session_tail";
|
|
29
|
+
polledAt: string;
|
|
30
|
+
sources: OpenClawMainSessionStoreV1[];
|
|
31
|
+
changes: OpenClawLocalSessionTailChangeV1[];
|
|
32
|
+
noopReason: OpenClawLocalSessionTailNoopReasonV1 | null;
|
|
33
|
+
warnings: string[];
|
|
34
|
+
cursor: OpenClawLocalSessionTailCursorV1[];
|
|
35
|
+
}
|
|
36
|
+
export interface OpenClawLocalSessionTailInput {
|
|
37
|
+
homeDir?: string;
|
|
38
|
+
profileRoots?: readonly string[];
|
|
39
|
+
}
|
|
40
|
+
export interface OpenClawLocalSessionTailLoopOptionsV1 {
|
|
41
|
+
pollIntervalMs?: number;
|
|
42
|
+
maxPasses?: number;
|
|
43
|
+
stopWhenIdle?: boolean;
|
|
44
|
+
signal?: AbortSignal;
|
|
45
|
+
onPass?: (result: OpenClawLocalSessionTailPollResultV1) => void | Promise<void>;
|
|
46
|
+
}
|
|
47
|
+
export interface OpenClawLocalSessionTailLoopResultV1 {
|
|
48
|
+
runtimeOwner: "openclaw";
|
|
49
|
+
passCount: number;
|
|
50
|
+
changedSessionCount: number;
|
|
51
|
+
emittedEventCount: number;
|
|
52
|
+
stoppedReason: "idle" | "max_passes" | "aborted";
|
|
53
|
+
lastPoll: OpenClawLocalSessionTailPollResultV1 | null;
|
|
54
|
+
cursor: OpenClawLocalSessionTailCursorV1[];
|
|
55
|
+
}
|
|
56
|
+
export declare class OpenClawLocalSessionTail {
|
|
57
|
+
readonly homeDir: string | undefined;
|
|
58
|
+
readonly profileRoots: readonly string[] | undefined;
|
|
59
|
+
private initialized;
|
|
60
|
+
private readonly cursorBySession;
|
|
61
|
+
constructor(input?: OpenClawLocalSessionTailInput);
|
|
62
|
+
snapshot(): OpenClawLocalSessionTailCursorV1[];
|
|
63
|
+
pollOnce(options?: {
|
|
64
|
+
observedAt?: string;
|
|
65
|
+
}): OpenClawLocalSessionTailPollResultV1;
|
|
66
|
+
runLoop(options?: OpenClawLocalSessionTailLoopOptionsV1): Promise<OpenClawLocalSessionTailLoopResultV1>;
|
|
67
|
+
}
|
|
68
|
+
export declare function createOpenClawLocalSessionTail(input?: OpenClawLocalSessionTailInput): OpenClawLocalSessionTail;
|