@openclawbrain/openclaw 0.2.3 → 0.3.1
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 +2 -1
- package/dist/extension/index.d.ts +1 -0
- package/dist/extension/index.js +81 -0
- package/dist/extension/index.js.map +1 -0
- package/dist/extension/runtime-guard.d.ts +61 -0
- package/dist/extension/runtime-guard.js +230 -0
- package/dist/extension/runtime-guard.js.map +1 -0
- package/dist/src/cli.d.ts +19 -9
- package/dist/src/cli.js +1464 -380
- package/dist/src/cli.js.map +1 -1
- package/dist/src/daemon.d.ts +7 -4
- package/dist/src/daemon.js +275 -47
- package/dist/src/daemon.js.map +1 -1
- package/dist/src/index.d.ts +150 -2
- package/dist/src/index.js +769 -139
- package/dist/src/index.js.map +1 -1
- package/dist/src/learning-spine.d.ts +2 -1
- package/dist/src/learning-spine.js +8 -0
- package/dist/src/learning-spine.js.map +1 -1
- package/dist/src/ollama-client.d.ts +46 -0
- package/dist/src/ollama-client.js +231 -0
- package/dist/src/ollama-client.js.map +1 -0
- package/dist/src/openclaw-home-layout.d.ts +17 -0
- package/dist/src/openclaw-home-layout.js +182 -0
- package/dist/src/openclaw-home-layout.js.map +1 -0
- package/dist/src/provider-config.d.ts +64 -0
- package/dist/src/provider-config.js +306 -0
- package/dist/src/provider-config.js.map +1 -0
- package/dist/src/resolve-activation-root.d.ts +5 -5
- package/dist/src/resolve-activation-root.js +76 -34
- package/dist/src/resolve-activation-root.js.map +1 -1
- package/dist/src/session-store.js +16 -5
- package/dist/src/session-store.js.map +1 -1
- package/dist/src/session-tail.js +14 -2
- package/dist/src/session-tail.js.map +1 -1
- package/dist/src/shadow-extension-proof.d.ts +40 -0
- package/dist/src/shadow-extension-proof.js +214 -0
- package/dist/src/shadow-extension-proof.js.map +1 -0
- package/dist/src/teacher-labeler.d.ts +50 -0
- package/dist/src/teacher-labeler.js +424 -0
- package/dist/src/teacher-labeler.js.map +1 -0
- package/extension/index.ts +22 -1
- package/extension/runtime-guard.ts +17 -2
- package/package.json +8 -7
package/README.md
CHANGED
|
@@ -102,10 +102,11 @@ This package stays fail-open for non-learned-required compile misses, and event-
|
|
|
102
102
|
Keep `install` as the front-door lifecycle command:
|
|
103
103
|
|
|
104
104
|
- `openclawbrain install` is the default attach path. On many-profile hosts, pass `--openclaw-home <path>` or set `OPENCLAW_HOME` so the target profile is explicit instead of guessed.
|
|
105
|
+
- `openclawbrain install` now writes only the real profile hook and activation state. It no longer creates `BRAIN.md` or rewrites `AGENTS.md`.
|
|
105
106
|
- `openclawbrain detach --openclaw-home <path>` removes only the OpenClaw profile hook. It preserves OpenClawBrain activation data and now says so plainly in both human output and JSON.
|
|
106
107
|
- `openclawbrain uninstall --openclaw-home <path> --keep-data|--purge-data` removes the profile hook and forces the operator to pick the data outcome explicitly.
|
|
107
108
|
- `--restart <never|safe|external>` is guidance only for detach/uninstall. The default `safe` guidance stays conservative: restart the running OpenClaw profile before expecting hook-state changes to take effect; otherwise the next launch picks them up.
|
|
108
|
-
- plain `status` stays the human answer to “How’s the brain?” and now keeps compact lifecycle truth visible
|
|
109
|
+
- plain `status` stays the human answer to “How’s the brain?” and now keeps compact lifecycle truth visible without dumping teacher/no-op or other proof chatter by default; use `--detailed` when you want the dense operator report.
|
|
109
110
|
|
|
110
111
|
## Narrow operator contract
|
|
111
112
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function register(api: unknown): void;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenClawBrain extension template — canonical, pre-built, versioned with the package.
|
|
3
|
+
*
|
|
4
|
+
* The placeholder __ACTIVATION_ROOT__ is replaced by `openclawbrain install`
|
|
5
|
+
* with the real activation root path at install time.
|
|
6
|
+
*
|
|
7
|
+
* Design constraints:
|
|
8
|
+
* - Empty brain → returns empty object (no context injected)
|
|
9
|
+
* - Compilation errors → fail-open, never breaks the session
|
|
10
|
+
* - Missing activation root → fail-open with console.warn
|
|
11
|
+
*/
|
|
12
|
+
import { fileURLToPath } from "node:url";
|
|
13
|
+
import { compileRuntimeContext } from "@openclawbrain/openclaw";
|
|
14
|
+
import { createBeforePromptBuildHandler, isActivationRootPlaceholder, validateExtensionRegistrationApi } from "./runtime-guard.js";
|
|
15
|
+
const ACTIVATION_ROOT = "__ACTIVATION_ROOT__";
|
|
16
|
+
const EXTENSION_ENTRY_PATH = fileURLToPath(import.meta.url);
|
|
17
|
+
const warnedDiagnostics = new Set();
|
|
18
|
+
function warnOnce(key, message) {
|
|
19
|
+
if (warnedDiagnostics.has(key)) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
warnedDiagnostics.add(key);
|
|
23
|
+
console.warn(message);
|
|
24
|
+
}
|
|
25
|
+
async function appendLocalDiagnosticLog(message) {
|
|
26
|
+
try {
|
|
27
|
+
const fs = await import("fs");
|
|
28
|
+
const os = await import("os");
|
|
29
|
+
const rootDir = `${os.homedir()}/.openclawbrain`;
|
|
30
|
+
const logPath = `${rootDir}/extension-errors.log`;
|
|
31
|
+
fs.mkdirSync(rootDir, { recursive: true });
|
|
32
|
+
fs.appendFileSync(logPath, `${new Date().toISOString()} ${message.replace(/\s+/g, " ").trim()}\n`);
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
36
|
+
warnOnce(`local-diagnostic-log:${detail}`, `[openclawbrain] failed to append local extension diagnostic log: ${detail}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
async function reportDiagnostic(input) {
|
|
40
|
+
if (input.once) {
|
|
41
|
+
if (warnedDiagnostics.has(input.key)) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
warnedDiagnostics.add(input.key);
|
|
45
|
+
}
|
|
46
|
+
console.warn(input.message);
|
|
47
|
+
await appendLocalDiagnosticLog(input.message);
|
|
48
|
+
}
|
|
49
|
+
function announceStartupBreadcrumb() {
|
|
50
|
+
if (isActivationRootPlaceholder(ACTIVATION_ROOT)) {
|
|
51
|
+
warnOnce("startup-brain-not-yet-loaded", "[openclawbrain] BRAIN NOT YET LOADED: install has not pinned ACTIVATION_ROOT yet. Run: openclawbrain install --openclaw-home <path>");
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
warnOnce("startup-brain-loaded", `[openclawbrain] BRAIN LOADED: runtime hook registered for before_prompt_build (activationRoot=${ACTIVATION_ROOT})`);
|
|
55
|
+
}
|
|
56
|
+
export default function register(api) {
|
|
57
|
+
const registration = validateExtensionRegistrationApi(api);
|
|
58
|
+
if (!registration.ok) {
|
|
59
|
+
void reportDiagnostic(registration.diagnostic);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
registration.api.on("before_prompt_build", createBeforePromptBuildHandler({
|
|
64
|
+
activationRoot: ACTIVATION_ROOT,
|
|
65
|
+
extensionEntryPath: EXTENSION_ENTRY_PATH,
|
|
66
|
+
compileRuntimeContext,
|
|
67
|
+
reportDiagnostic,
|
|
68
|
+
debug: (message) => console.debug(message)
|
|
69
|
+
}), { priority: 5 });
|
|
70
|
+
announceStartupBreadcrumb();
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
const detail = error instanceof Error ? error.stack ?? error.message : String(error);
|
|
74
|
+
void reportDiagnostic({
|
|
75
|
+
key: "registration-failed",
|
|
76
|
+
once: true,
|
|
77
|
+
message: `[openclawbrain] extension registration failed: ${detail}`
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../extension/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export interface ExtensionCompileInput {
|
|
2
|
+
activationRoot: string;
|
|
3
|
+
message: string;
|
|
4
|
+
sessionId?: string;
|
|
5
|
+
channel?: string;
|
|
6
|
+
_serveRouteBreadcrumbs?: {
|
|
7
|
+
invocationSurface: "installed_extension_before_prompt_build";
|
|
8
|
+
hostEvent: "before_prompt_build";
|
|
9
|
+
installedEntryPath: string;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export interface ExtensionCompileSuccess {
|
|
13
|
+
ok: true;
|
|
14
|
+
brainContext: string;
|
|
15
|
+
}
|
|
16
|
+
export interface ExtensionCompileFailure {
|
|
17
|
+
ok: false;
|
|
18
|
+
hardRequirementViolated: boolean;
|
|
19
|
+
error: string;
|
|
20
|
+
brainContext: string;
|
|
21
|
+
}
|
|
22
|
+
export type ExtensionCompileResult = ExtensionCompileSuccess | ExtensionCompileFailure;
|
|
23
|
+
export type ExtensionCompileRuntimeContext = (input: ExtensionCompileInput) => ExtensionCompileResult;
|
|
24
|
+
export interface ExtensionDiagnostic {
|
|
25
|
+
key: string;
|
|
26
|
+
message: string;
|
|
27
|
+
once?: boolean;
|
|
28
|
+
}
|
|
29
|
+
export interface ExtensionRegistrationApi {
|
|
30
|
+
on(eventName: string, handler: (event: unknown, ctx: unknown) => Promise<Record<string, unknown>>, options?: {
|
|
31
|
+
priority?: number;
|
|
32
|
+
}): void;
|
|
33
|
+
}
|
|
34
|
+
export interface NormalizedPromptBuildEvent {
|
|
35
|
+
message: string;
|
|
36
|
+
sessionId?: string;
|
|
37
|
+
channel?: string;
|
|
38
|
+
warnings: ExtensionDiagnostic[];
|
|
39
|
+
}
|
|
40
|
+
export declare function isActivationRootPlaceholder(activationRoot: string): boolean;
|
|
41
|
+
export declare function validateExtensionRegistrationApi(api: unknown): {
|
|
42
|
+
ok: true;
|
|
43
|
+
api: ExtensionRegistrationApi;
|
|
44
|
+
} | {
|
|
45
|
+
ok: false;
|
|
46
|
+
diagnostic: ExtensionDiagnostic;
|
|
47
|
+
};
|
|
48
|
+
export declare function normalizePromptBuildEvent(event: unknown): {
|
|
49
|
+
ok: true;
|
|
50
|
+
event: NormalizedPromptBuildEvent;
|
|
51
|
+
} | {
|
|
52
|
+
ok: false;
|
|
53
|
+
diagnostic: ExtensionDiagnostic;
|
|
54
|
+
};
|
|
55
|
+
export declare function createBeforePromptBuildHandler(input: {
|
|
56
|
+
activationRoot: string;
|
|
57
|
+
compileRuntimeContext: ExtensionCompileRuntimeContext;
|
|
58
|
+
reportDiagnostic: (diagnostic: ExtensionDiagnostic) => void | Promise<void>;
|
|
59
|
+
debug?: (message: string) => void;
|
|
60
|
+
extensionEntryPath?: string;
|
|
61
|
+
}): (event: unknown, ctx: unknown) => Promise<Record<string, unknown>>;
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
export function isActivationRootPlaceholder(activationRoot) {
|
|
2
|
+
return activationRoot === "__ACTIVATION_" + "ROOT__" || activationRoot.trim().length === 0;
|
|
3
|
+
}
|
|
4
|
+
export function validateExtensionRegistrationApi(api) {
|
|
5
|
+
if (!isRecord(api) || typeof api.on !== "function") {
|
|
6
|
+
return {
|
|
7
|
+
ok: false,
|
|
8
|
+
diagnostic: {
|
|
9
|
+
key: "registration-api-invalid",
|
|
10
|
+
once: true,
|
|
11
|
+
message: `[openclawbrain] extension inactive: host registration API is missing api.on(event, handler, options) ` +
|
|
12
|
+
`(received=${describeValue(api)})`
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
return {
|
|
17
|
+
ok: true,
|
|
18
|
+
api: api
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export function normalizePromptBuildEvent(event) {
|
|
22
|
+
if (!isRecord(event)) {
|
|
23
|
+
return {
|
|
24
|
+
ok: false,
|
|
25
|
+
diagnostic: failOpenDiagnostic("runtime-event-not-object", "before_prompt_build event is not an object", `event=${describeValue(event)}`)
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
const messages = event.messages;
|
|
29
|
+
if (!Array.isArray(messages)) {
|
|
30
|
+
return {
|
|
31
|
+
ok: false,
|
|
32
|
+
diagnostic: failOpenDiagnostic("runtime-messages-not-array", "before_prompt_build event.messages is not an array", `event=${describeValue(event)} messages=${describeValue(messages)}`)
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
const warnings = [];
|
|
36
|
+
const sessionId = normalizeOptionalScalarField(event.sessionId, "sessionId", warnings);
|
|
37
|
+
const channel = normalizeOptionalScalarField(event.channel, "channel", warnings);
|
|
38
|
+
let extractedMessage = "";
|
|
39
|
+
if (messages.length === 0) {
|
|
40
|
+
warnings.push(failOpenDiagnostic("runtime-messages-empty", "before_prompt_build event.messages is empty", `event=${describeValue(event)}`));
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
const lastMessage = messages.at(-1);
|
|
44
|
+
extractedMessage = extractPromptMessage(lastMessage) ?? "";
|
|
45
|
+
if (extractedMessage.length === 0) {
|
|
46
|
+
warnings.push(failOpenDiagnostic("runtime-last-message-invalid", "before_prompt_build last message has no usable text content", `lastMessage=${describeValue(lastMessage)}`));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
ok: true,
|
|
51
|
+
event: {
|
|
52
|
+
message: extractedMessage,
|
|
53
|
+
...(sessionId !== undefined ? { sessionId } : {}),
|
|
54
|
+
...(channel !== undefined ? { channel } : {}),
|
|
55
|
+
warnings
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
export function createBeforePromptBuildHandler(input) {
|
|
60
|
+
return async (event, _ctx) => {
|
|
61
|
+
if (isActivationRootPlaceholder(input.activationRoot)) {
|
|
62
|
+
await input.reportDiagnostic({
|
|
63
|
+
key: "activation-root-placeholder",
|
|
64
|
+
once: true,
|
|
65
|
+
message: "[openclawbrain] BRAIN NOT YET LOADED: ACTIVATION_ROOT is still a placeholder. Run: openclawbrain install --openclaw-home <path>"
|
|
66
|
+
});
|
|
67
|
+
return {};
|
|
68
|
+
}
|
|
69
|
+
const normalized = normalizePromptBuildEvent(event);
|
|
70
|
+
if (!normalized.ok) {
|
|
71
|
+
await input.reportDiagnostic(normalized.diagnostic);
|
|
72
|
+
return {};
|
|
73
|
+
}
|
|
74
|
+
for (const warning of normalized.event.warnings) {
|
|
75
|
+
await input.reportDiagnostic(warning);
|
|
76
|
+
}
|
|
77
|
+
try {
|
|
78
|
+
const result = input.compileRuntimeContext({
|
|
79
|
+
activationRoot: input.activationRoot,
|
|
80
|
+
message: normalized.event.message,
|
|
81
|
+
...(normalized.event.sessionId !== undefined ? { sessionId: normalized.event.sessionId } : {}),
|
|
82
|
+
...(normalized.event.channel !== undefined ? { channel: normalized.event.channel } : {}),
|
|
83
|
+
...(input.extensionEntryPath === undefined
|
|
84
|
+
? {}
|
|
85
|
+
: {
|
|
86
|
+
_serveRouteBreadcrumbs: {
|
|
87
|
+
invocationSurface: "installed_extension_before_prompt_build",
|
|
88
|
+
hostEvent: "before_prompt_build",
|
|
89
|
+
installedEntryPath: input.extensionEntryPath
|
|
90
|
+
}
|
|
91
|
+
})
|
|
92
|
+
});
|
|
93
|
+
if (!result.ok) {
|
|
94
|
+
const mode = result.hardRequirementViolated ? "hard-fail" : "fail-open";
|
|
95
|
+
await input.reportDiagnostic({
|
|
96
|
+
key: `compile-${mode}`,
|
|
97
|
+
message: `[openclawbrain] ${mode}: ${result.error} ` +
|
|
98
|
+
`(activationRoot=${input.activationRoot}, sessionId=${normalized.event.sessionId ?? "unknown"}, channel=${normalized.event.channel ?? "unknown"})`
|
|
99
|
+
});
|
|
100
|
+
return {};
|
|
101
|
+
}
|
|
102
|
+
if (result.brainContext.length > 0) {
|
|
103
|
+
input.debug?.(`[openclawbrain] compiled context, chars: ${result.brainContext.length}`);
|
|
104
|
+
return {
|
|
105
|
+
appendSystemContext: result.brainContext
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
const detail = error instanceof Error ? error.stack ?? error.message : String(error);
|
|
111
|
+
await input.reportDiagnostic({
|
|
112
|
+
key: "compile-threw",
|
|
113
|
+
message: `[openclawbrain] compile threw: ${detail} ` +
|
|
114
|
+
`(activationRoot=${input.activationRoot}, sessionId=${normalized.event.sessionId ?? "unknown"}, channel=${normalized.event.channel ?? "unknown"})`
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
return {};
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
function failOpenDiagnostic(key, reason, detail) {
|
|
121
|
+
return {
|
|
122
|
+
key,
|
|
123
|
+
message: `[openclawbrain] fail-open: ${reason} (${detail})`
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
function normalizeOptionalScalarField(value, fieldName, warnings) {
|
|
127
|
+
if (value === undefined || value === null) {
|
|
128
|
+
return undefined;
|
|
129
|
+
}
|
|
130
|
+
if (typeof value === "string") {
|
|
131
|
+
const trimmed = value.trim();
|
|
132
|
+
return trimmed.length > 0 ? trimmed : undefined;
|
|
133
|
+
}
|
|
134
|
+
if (typeof value === "number" || typeof value === "bigint" || typeof value === "boolean") {
|
|
135
|
+
return String(value);
|
|
136
|
+
}
|
|
137
|
+
warnings.push({
|
|
138
|
+
key: `runtime-${fieldName}-ignored`,
|
|
139
|
+
message: `[openclawbrain] fail-open: ignored unsupported before_prompt_build ${fieldName} ` +
|
|
140
|
+
`(${fieldName}=${describeValue(value)})`
|
|
141
|
+
});
|
|
142
|
+
return undefined;
|
|
143
|
+
}
|
|
144
|
+
function extractPromptMessage(message) {
|
|
145
|
+
if (typeof message === "string") {
|
|
146
|
+
return normalizeText(message);
|
|
147
|
+
}
|
|
148
|
+
if (!isRecord(message)) {
|
|
149
|
+
return undefined;
|
|
150
|
+
}
|
|
151
|
+
return extractTextContent(message.content);
|
|
152
|
+
}
|
|
153
|
+
function extractTextContent(content) {
|
|
154
|
+
if (typeof content === "string") {
|
|
155
|
+
return normalizeText(content);
|
|
156
|
+
}
|
|
157
|
+
if (Array.isArray(content)) {
|
|
158
|
+
const parts = content
|
|
159
|
+
.map((part) => extractTextPart(part))
|
|
160
|
+
.filter((part) => part !== undefined);
|
|
161
|
+
return parts.length > 0 ? parts.join("\n") : undefined;
|
|
162
|
+
}
|
|
163
|
+
if (isRecord(content)) {
|
|
164
|
+
if (typeof content.text === "string") {
|
|
165
|
+
return normalizeText(content.text);
|
|
166
|
+
}
|
|
167
|
+
if (typeof content.content === "string") {
|
|
168
|
+
return normalizeText(content.content);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return undefined;
|
|
172
|
+
}
|
|
173
|
+
function extractTextPart(part) {
|
|
174
|
+
if (typeof part === "string") {
|
|
175
|
+
return normalizeText(part);
|
|
176
|
+
}
|
|
177
|
+
if (!isRecord(part)) {
|
|
178
|
+
return undefined;
|
|
179
|
+
}
|
|
180
|
+
if ("text" in part && typeof part.text === "string") {
|
|
181
|
+
return normalizeText(part.text);
|
|
182
|
+
}
|
|
183
|
+
if ("content" in part && typeof part.content === "string") {
|
|
184
|
+
return normalizeText(part.content);
|
|
185
|
+
}
|
|
186
|
+
return undefined;
|
|
187
|
+
}
|
|
188
|
+
function normalizeText(value) {
|
|
189
|
+
const trimmed = value.trim();
|
|
190
|
+
return trimmed.length > 0 ? trimmed : undefined;
|
|
191
|
+
}
|
|
192
|
+
function describeValue(value) {
|
|
193
|
+
if (value === null) {
|
|
194
|
+
return "null";
|
|
195
|
+
}
|
|
196
|
+
if (Array.isArray(value)) {
|
|
197
|
+
const itemKinds = Array.from(new Set(value.slice(0, 4).map((entry) => {
|
|
198
|
+
if (entry === null) {
|
|
199
|
+
return "null";
|
|
200
|
+
}
|
|
201
|
+
if (Array.isArray(entry)) {
|
|
202
|
+
return "array";
|
|
203
|
+
}
|
|
204
|
+
return typeof entry;
|
|
205
|
+
})));
|
|
206
|
+
const suffix = value.length > 4 ? ",..." : "";
|
|
207
|
+
return `array(len=${value.length}, itemKinds=${itemKinds.join("|") || "none"}${suffix})`;
|
|
208
|
+
}
|
|
209
|
+
if (typeof value === "string") {
|
|
210
|
+
const preview = value.replace(/\s+/g, " ").trim().slice(0, 48);
|
|
211
|
+
const suffix = value.trim().length > 48 ? "..." : "";
|
|
212
|
+
return `string(len=${value.length}, preview=${JSON.stringify(preview + suffix)})`;
|
|
213
|
+
}
|
|
214
|
+
if (typeof value === "object") {
|
|
215
|
+
const keys = Object.keys(value).slice(0, 6);
|
|
216
|
+
const suffix = Object.keys(value).length > 6 ? ",..." : "";
|
|
217
|
+
return `object(keys=${keys.join(",") || "none"}${suffix})`;
|
|
218
|
+
}
|
|
219
|
+
if (typeof value === "function") {
|
|
220
|
+
return "function";
|
|
221
|
+
}
|
|
222
|
+
if (typeof value === "symbol") {
|
|
223
|
+
return `symbol(${String(value.description ?? "")})`;
|
|
224
|
+
}
|
|
225
|
+
return `${typeof value}(${String(value)})`;
|
|
226
|
+
}
|
|
227
|
+
function isRecord(value) {
|
|
228
|
+
return typeof value === "object" && value !== null;
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=runtime-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-guard.js","sourceRoot":"","sources":["../../extension/runtime-guard.ts"],"names":[],"mappings":"AA6CA,MAAM,UAAU,2BAA2B,CAAC,cAAsB;IAChE,OAAO,cAAc,KAAK,eAAe,GAAG,QAAQ,IAAI,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC;AAC7F,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,GAAY;IAC3D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,UAAU,EAAE,CAAC;QACnD,OAAO;YACL,EAAE,EAAE,KAAK;YACT,UAAU,EAAE;gBACV,GAAG,EAAE,0BAA0B;gBAC/B,IAAI,EAAE,IAAI;gBACV,OAAO,EACL,uGAAuG;oBACvG,aAAa,aAAa,CAAC,GAAG,CAAC,GAAG;aACrC;SACF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,EAAE,EAAE,IAAI;QACR,GAAG,EAAE,GAA0C;KAChD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAAc;IACtD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,UAAU,EAAE,kBAAkB,CAC5B,0BAA0B,EAC1B,4CAA4C,EAC5C,SAAS,aAAa,CAAC,KAAK,CAAC,EAAE,CAChC;SACF,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IAChC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO;YACL,EAAE,EAAE,KAAK;YACT,UAAU,EAAE,kBAAkB,CAC5B,4BAA4B,EAC5B,oDAAoD,EACpD,SAAS,aAAa,CAAC,KAAK,CAAC,aAAa,aAAa,CAAC,QAAQ,CAAC,EAAE,CACpE;SACF,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAA0B,EAAE,CAAC;IAC3C,MAAM,SAAS,GAAG,4BAA4B,CAAC,KAAK,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IACvF,MAAM,OAAO,GAAG,4BAA4B,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACjF,IAAI,gBAAgB,GAAG,EAAE,CAAC;IAE1B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,QAAQ,CAAC,IAAI,CACX,kBAAkB,CAChB,wBAAwB,EACxB,6CAA6C,EAC7C,SAAS,aAAa,CAAC,KAAK,CAAC,EAAE,CAChC,CACF,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,WAAW,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,gBAAgB,GAAG,oBAAoB,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QAC3D,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,QAAQ,CAAC,IAAI,CACX,kBAAkB,CAChB,8BAA8B,EAC9B,6DAA6D,EAC7D,eAAe,aAAa,CAAC,WAAW,CAAC,EAAE,CAC5C,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO;QACL,EAAE,EAAE,IAAI;QACR,KAAK,EAAE;YACL,OAAO,EAAE,gBAAgB;YACzB,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,QAAQ;SACT;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,KAM9C;IACC,OAAO,KAAK,EAAE,KAAc,EAAE,IAAa,EAAE,EAAE;QAC7C,IAAI,2BAA2B,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;YACtD,MAAM,KAAK,CAAC,gBAAgB,CAAC;gBAC3B,GAAG,EAAE,6BAA6B;gBAClC,IAAI,EAAE,IAAI;gBACV,OAAO,EACL,iIAAiI;aACpI,CAAC,CAAC;YACH,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,UAAU,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;QACpD,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;YACnB,MAAM,KAAK,CAAC,gBAAgB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YACpD,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YAChD,MAAM,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,KAAK,CAAC,qBAAqB,CAAC;gBACzC,cAAc,EAAE,KAAK,CAAC,cAAc;gBACpC,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,OAAO;gBACjC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9F,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxF,GAAG,CAAC,KAAK,CAAC,kBAAkB,KAAK,SAAS;oBACxC,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC;wBACE,sBAAsB,EAAE;4BACtB,iBAAiB,EAAE,yCAAkD;4BACrE,SAAS,EAAE,qBAA8B;4BACzC,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;yBAC7C;qBACF,CAAC;aACP,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,IAAI,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC;gBACxE,MAAM,KAAK,CAAC,gBAAgB,CAAC;oBAC3B,GAAG,EAAE,WAAW,IAAI,EAAE;oBACtB,OAAO,EACL,mBAAmB,IAAI,KAAK,MAAM,CAAC,KAAK,GAAG;wBAC3C,mBAAmB,KAAK,CAAC,cAAc,eAAe,UAAU,CAAC,KAAK,CAAC,SAAS,IAAI,SAAS,aAAa,UAAU,CAAC,KAAK,CAAC,OAAO,IAAI,SAAS,GAAG;iBACrJ,CAAC,CAAC;gBACH,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnC,KAAK,CAAC,KAAK,EAAE,CAAC,4CAA4C,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;gBACxF,OAAO;oBACL,mBAAmB,EAAE,MAAM,CAAC,YAAY;iBACzC,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACrF,MAAM,KAAK,CAAC,gBAAgB,CAAC;gBAC3B,GAAG,EAAE,eAAe;gBACpB,OAAO,EACL,kCAAkC,MAAM,GAAG;oBAC3C,mBAAmB,KAAK,CAAC,cAAc,eAAe,UAAU,CAAC,KAAK,CAAC,SAAS,IAAI,SAAS,aAAa,UAAU,CAAC,KAAK,CAAC,OAAO,IAAI,SAAS,GAAG;aACrJ,CAAC,CAAC;QACL,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAW,EAAE,MAAc,EAAE,MAAc;IACrE,OAAO;QACL,GAAG;QACH,OAAO,EAAE,8BAA8B,MAAM,KAAK,MAAM,GAAG;KAC5D,CAAC;AACJ,CAAC;AAED,SAAS,4BAA4B,CACnC,KAAc,EACd,SAAkC,EAClC,QAA+B;IAE/B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAClD,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QACzF,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,QAAQ,CAAC,IAAI,CAAC;QACZ,GAAG,EAAE,WAAW,SAAS,UAAU;QACnC,OAAO,EACL,sEAAsE,SAAS,GAAG;YAClF,IAAI,SAAS,IAAI,aAAa,CAAC,KAAK,CAAC,GAAG;KAC3C,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAgB;IAC5C,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACvB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAgB;IAC1C,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,OAAO;aAClB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;aACpC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QACxD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzD,CAAC;IAED,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACtB,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrC,OAAO,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACxC,OAAO,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,eAAe,CAAC,IAAa;IACpC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACpB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACpD,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,SAAS,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC1D,OAAO,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAC1B,IAAI,GAAG,CACL,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAC9B,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,OAAO,CAAC;YACjB,CAAC;YACD,OAAO,OAAO,KAAK,CAAC;QACtB,CAAC,CAAC,CACH,CACF,CAAC;QACF,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,OAAO,aAAa,KAAK,CAAC,MAAM,eAAe,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,GAAG,MAAM,GAAG,CAAC;IAC3F,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,OAAO,cAAc,KAAK,CAAC,MAAM,aAAa,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC;IACpF,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,OAAO,eAAe,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,GAAG,MAAM,GAAG,CAAC;IAC7D,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QAChC,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,UAAU,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,GAAG,CAAC;IACtD,CAAC;IAED,OAAO,GAAG,OAAO,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;AAC7C,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACrD,CAAC"}
|
package/dist/src/cli.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { type DaemonCliArgs } from "./daemon.js";
|
|
3
|
-
import { createAsyncTeacherLiveLoop, createOpenClawLocalSessionTail, createRuntimeEventExportScanner, type CurrentProfileBrainStatusInput } from "./index.js";
|
|
3
|
+
import { createAsyncTeacherLiveLoop, createOpenClawLocalSessionTail, createRuntimeEventExportScanner, type AsyncTeacherLabelerConfigV1, type CurrentProfileBrainStatusInput } from "./index.js";
|
|
4
4
|
interface ParsedStatusRollbackCliArgs {
|
|
5
5
|
command: "status" | "rollback";
|
|
6
6
|
input: CurrentProfileBrainStatusInput;
|
|
7
|
+
openclawHome: string | null;
|
|
7
8
|
json: boolean;
|
|
8
9
|
help: boolean;
|
|
9
10
|
dryRun: boolean;
|
|
@@ -11,23 +12,29 @@ interface ParsedStatusRollbackCliArgs {
|
|
|
11
12
|
}
|
|
12
13
|
interface ParsedAttachCliArgs {
|
|
13
14
|
command: "attach";
|
|
15
|
+
openclawHome: string;
|
|
16
|
+
openclawHomeSource: "explicit";
|
|
14
17
|
activationRoot: string;
|
|
15
|
-
|
|
16
|
-
|
|
18
|
+
activationRootSource: ParsedInstallCliArgs["activationRootSource"];
|
|
19
|
+
shared: boolean;
|
|
17
20
|
workspaceId: string;
|
|
18
|
-
|
|
21
|
+
workspaceIdSource: ParsedInstallCliArgs["workspaceIdSource"];
|
|
22
|
+
skipEmbedderProvision: boolean;
|
|
23
|
+
skipEmbedderProvisionSource: ParsedInstallCliArgs["skipEmbedderProvisionSource"];
|
|
19
24
|
json: boolean;
|
|
20
25
|
help: boolean;
|
|
21
26
|
}
|
|
22
|
-
interface
|
|
23
|
-
command: "install"
|
|
27
|
+
interface ParsedInstallCliArgs {
|
|
28
|
+
command: "install";
|
|
24
29
|
openclawHome: string;
|
|
25
|
-
openclawHomeSource: "explicit" | "env" | "
|
|
30
|
+
openclawHomeSource: "explicit" | "env" | "discovered_single_home";
|
|
26
31
|
activationRoot: string;
|
|
27
32
|
activationRootSource: "explicit" | "default_from_openclaw_home";
|
|
28
33
|
shared: boolean;
|
|
29
34
|
workspaceId: string;
|
|
30
|
-
workspaceIdSource: "explicit" | "openclaw_json_profile" | "openclaw_home_dir" | "fallback";
|
|
35
|
+
workspaceIdSource: "explicit" | "openclaw_json_profile" | "openclaw_json_single_profile_key" | "current_profile_boundary" | "openclaw_home_dir" | "fallback";
|
|
36
|
+
skipEmbedderProvision: boolean;
|
|
37
|
+
skipEmbedderProvisionSource: "flag" | "env" | null;
|
|
31
38
|
json: boolean;
|
|
32
39
|
help: boolean;
|
|
33
40
|
}
|
|
@@ -111,13 +118,15 @@ interface ParsedResetCliArgs {
|
|
|
111
118
|
json: boolean;
|
|
112
119
|
help: boolean;
|
|
113
120
|
}
|
|
114
|
-
type ParsedOperatorCliArgs = ParsedStatusRollbackCliArgs | ParsedAttachCliArgs | ParsedScanCliArgs |
|
|
121
|
+
type ParsedOperatorCliArgs = ParsedStatusRollbackCliArgs | ParsedAttachCliArgs | ParsedScanCliArgs | ParsedInstallCliArgs | ParsedDetachCliArgs | ParsedUninstallCliArgs | ParsedContextCliArgs | ParsedHistoryCliArgs | ParsedLearnCliArgs | ParsedWatchCliArgs | DaemonCliArgs | ParsedExportCliArgs | ParsedImportCliArgs | ParsedResetCliArgs;
|
|
115
122
|
export declare function parseOperatorCliArgs(argv: readonly string[]): ParsedOperatorCliArgs;
|
|
116
123
|
export interface WatchCommandRuntimeV1 {
|
|
117
124
|
activationRoot: string;
|
|
118
125
|
scanRoot: string;
|
|
119
126
|
sessionTailCursorPath: string;
|
|
120
127
|
teacherSnapshotPath: string;
|
|
128
|
+
startupWarnings: string[];
|
|
129
|
+
lastTeacherError: string | null;
|
|
121
130
|
replayState: {
|
|
122
131
|
replayedBundleCount: number;
|
|
123
132
|
replayedEventCount: number;
|
|
@@ -132,6 +141,7 @@ export interface CreateWatchCommandRuntimeInputV1 {
|
|
|
132
141
|
scanRoot?: string | null;
|
|
133
142
|
profileRoots?: readonly string[];
|
|
134
143
|
log?: (message: string) => void;
|
|
144
|
+
teacherLabeler?: AsyncTeacherLabelerConfigV1 | null;
|
|
135
145
|
}
|
|
136
146
|
export interface WatchCommandPassResultV1 {
|
|
137
147
|
localPoll: ReturnType<WatchCommandRuntimeV1["localSessionTail"]["pollOnce"]>;
|