@producible/cereworker-cerebellum-client 26.520.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/LICENSE +21 -0
- package/dist/client.d.ts +238 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +553 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/package.json +33 -0
- package/proto/cerebellum.proto +287 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Producible
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
export interface CerebellumStatus {
|
|
2
|
+
healthy: boolean;
|
|
3
|
+
modelName: string;
|
|
4
|
+
uptimeSeconds: number;
|
|
5
|
+
tasksRegistered: number;
|
|
6
|
+
}
|
|
7
|
+
export interface TaskState {
|
|
8
|
+
taskId: string;
|
|
9
|
+
description: string;
|
|
10
|
+
status: 'pending' | 'running' | 'waiting' | 'completed';
|
|
11
|
+
lastRun?: number;
|
|
12
|
+
scheduleHint: string;
|
|
13
|
+
schedule?: TaskSchedule;
|
|
14
|
+
metadata?: Record<string, string>;
|
|
15
|
+
}
|
|
16
|
+
export interface TaskAction {
|
|
17
|
+
taskId: string;
|
|
18
|
+
action: 'invoke' | 'skip' | 'defer' | 'cancel' | 'invoke_task' | 'continue_task' | 'retry_task' | 'report_issue' | 'noop';
|
|
19
|
+
reason: string;
|
|
20
|
+
scheduledFor?: string;
|
|
21
|
+
slotKey?: string;
|
|
22
|
+
}
|
|
23
|
+
export type SchedulerStatus = 'registered' | 'pending_cerebellum' | 'registration_failed' | 'running' | 'disabled';
|
|
24
|
+
export type TaskSchedule = {
|
|
25
|
+
type: 'interval';
|
|
26
|
+
every: number;
|
|
27
|
+
unit: 'minutes' | 'hours' | 'days' | 'weeks';
|
|
28
|
+
} | {
|
|
29
|
+
type: 'daily_at';
|
|
30
|
+
time: string;
|
|
31
|
+
timezone?: string;
|
|
32
|
+
catchUpPolicy?: 'none' | 'once';
|
|
33
|
+
} | {
|
|
34
|
+
type: 'one_shot';
|
|
35
|
+
dueAt: string;
|
|
36
|
+
timezone?: string;
|
|
37
|
+
catchUpPolicy?: 'none' | 'once';
|
|
38
|
+
};
|
|
39
|
+
export interface HeartbeatEvent {
|
|
40
|
+
timestamp: number;
|
|
41
|
+
actions: TaskAction[];
|
|
42
|
+
}
|
|
43
|
+
export interface SupervisorTaskState {
|
|
44
|
+
taskId: string;
|
|
45
|
+
description: string;
|
|
46
|
+
enabled: boolean;
|
|
47
|
+
kind: 'recurring' | 'one_shot';
|
|
48
|
+
executionSurface?: 'browser' | 'api' | 'either' | 'none';
|
|
49
|
+
scheduleHint: string;
|
|
50
|
+
schedule: TaskSchedule;
|
|
51
|
+
status: 'pending' | 'idle' | 'running' | 'success' | 'failure' | 'cancelled';
|
|
52
|
+
createdAt?: string;
|
|
53
|
+
lastRunAt?: string;
|
|
54
|
+
lastScheduledSlot?: string;
|
|
55
|
+
schedulerStatus?: SchedulerStatus;
|
|
56
|
+
lastSummary?: string;
|
|
57
|
+
metadata?: Record<string, string>;
|
|
58
|
+
}
|
|
59
|
+
export interface SupervisorState {
|
|
60
|
+
timestamp: number;
|
|
61
|
+
timezone: string;
|
|
62
|
+
tasks: SupervisorTaskState[];
|
|
63
|
+
activeTaskIds: string[];
|
|
64
|
+
browserAvailable: boolean;
|
|
65
|
+
channelsAvailable: boolean;
|
|
66
|
+
cerebrumBusy: boolean;
|
|
67
|
+
fineTuneRunning: boolean;
|
|
68
|
+
}
|
|
69
|
+
export interface VerificationCheck {
|
|
70
|
+
name: string;
|
|
71
|
+
passed: boolean;
|
|
72
|
+
description: string;
|
|
73
|
+
}
|
|
74
|
+
export interface VerificationResult {
|
|
75
|
+
passed: boolean;
|
|
76
|
+
checks: VerificationCheck[];
|
|
77
|
+
modelVerdict: boolean;
|
|
78
|
+
}
|
|
79
|
+
export interface RecoveryBrowserTab {
|
|
80
|
+
id: string;
|
|
81
|
+
title?: string;
|
|
82
|
+
url: string;
|
|
83
|
+
active: boolean;
|
|
84
|
+
}
|
|
85
|
+
export interface RecoveryBrowserState {
|
|
86
|
+
currentUrl?: string;
|
|
87
|
+
activeTabId?: string;
|
|
88
|
+
tabs?: RecoveryBrowserTab[];
|
|
89
|
+
}
|
|
90
|
+
export interface RecoveryProgressEntry {
|
|
91
|
+
source: 'tool' | 'checkpoint';
|
|
92
|
+
action: string;
|
|
93
|
+
summary: string;
|
|
94
|
+
toolName?: string;
|
|
95
|
+
url?: string;
|
|
96
|
+
tabId?: string;
|
|
97
|
+
stateChanging: boolean;
|
|
98
|
+
isError: boolean;
|
|
99
|
+
checkpointStatus?: 'done' | 'in_progress';
|
|
100
|
+
}
|
|
101
|
+
export interface RecoveryTaskCheckpoint {
|
|
102
|
+
step: string;
|
|
103
|
+
status: 'done' | 'in_progress';
|
|
104
|
+
evidence: string;
|
|
105
|
+
summary: string;
|
|
106
|
+
}
|
|
107
|
+
export interface RecoveryBoundary {
|
|
108
|
+
id: string;
|
|
109
|
+
kind: 'tool' | 'checkpoint' | 'completion' | 'stall' | 'recovery';
|
|
110
|
+
action: string;
|
|
111
|
+
summary: string;
|
|
112
|
+
createdAt: number;
|
|
113
|
+
stateChanging: boolean;
|
|
114
|
+
browserState?: RecoveryBrowserState;
|
|
115
|
+
url?: string;
|
|
116
|
+
tabId?: string;
|
|
117
|
+
evidence?: string;
|
|
118
|
+
checkpointStatus?: 'done' | 'in_progress';
|
|
119
|
+
}
|
|
120
|
+
export type TurnOutcome = 'completed' | 'completed_no_text' | 'ended_on_tool_calls' | 'completion_signal_missing' | 'aborted' | 'stalled' | 'protocol_error';
|
|
121
|
+
export type StreamContentKind = 'text' | 'tool-call' | 'empty' | 'other' | 'error';
|
|
122
|
+
export interface TurnRecoveryRequest {
|
|
123
|
+
conversationId: string;
|
|
124
|
+
turnId: string;
|
|
125
|
+
attempt: number;
|
|
126
|
+
cause: 'stall' | 'completion';
|
|
127
|
+
phase: string;
|
|
128
|
+
activeToolName?: string;
|
|
129
|
+
activeToolCallId?: string;
|
|
130
|
+
stallRetryCount: number;
|
|
131
|
+
completionRetryCount: number;
|
|
132
|
+
finishReason?: string;
|
|
133
|
+
turnOutcome: TurnOutcome;
|
|
134
|
+
lastContentKind: StreamContentKind;
|
|
135
|
+
elapsedSeconds?: number;
|
|
136
|
+
partialContent?: string;
|
|
137
|
+
latestUserMessage?: string;
|
|
138
|
+
browserState: RecoveryBrowserState;
|
|
139
|
+
progressEntries: RecoveryProgressEntry[];
|
|
140
|
+
taskCheckpoints: RecoveryTaskCheckpoint[];
|
|
141
|
+
latestBoundary?: RecoveryBoundary;
|
|
142
|
+
recentBoundaries: RecoveryBoundary[];
|
|
143
|
+
repetitionSignals: string[];
|
|
144
|
+
}
|
|
145
|
+
export interface TurnRecoveryAssessment {
|
|
146
|
+
action: 'wait' | 'retry' | 'stop';
|
|
147
|
+
operatorMessage: string;
|
|
148
|
+
modelMessage: string;
|
|
149
|
+
diagnosis: string;
|
|
150
|
+
nextStep: string;
|
|
151
|
+
completedSteps: string[];
|
|
152
|
+
waitSeconds?: number;
|
|
153
|
+
}
|
|
154
|
+
export interface AgentHealthAction {
|
|
155
|
+
agentId: string;
|
|
156
|
+
action: 'ok' | 'ping' | 'retry' | 'cancel' | 'timeout';
|
|
157
|
+
reason: string;
|
|
158
|
+
}
|
|
159
|
+
export interface AgentStateInput {
|
|
160
|
+
id: string;
|
|
161
|
+
task: string;
|
|
162
|
+
status: string;
|
|
163
|
+
spawnedAt: number;
|
|
164
|
+
lastActivityAt: number;
|
|
165
|
+
timeoutMs: number;
|
|
166
|
+
messagesCount: number;
|
|
167
|
+
toolCallsCount: number;
|
|
168
|
+
retryCount: number;
|
|
169
|
+
progressNote?: string;
|
|
170
|
+
progressPercent?: number;
|
|
171
|
+
lastProgressAt?: number;
|
|
172
|
+
deadlineAt?: number;
|
|
173
|
+
}
|
|
174
|
+
export interface SystemStatus {
|
|
175
|
+
healthy: boolean;
|
|
176
|
+
modelName: string;
|
|
177
|
+
uptimeSeconds: number;
|
|
178
|
+
tasksRegistered: number;
|
|
179
|
+
agentsTotal: number;
|
|
180
|
+
agentsRunning: number;
|
|
181
|
+
agentsCompleted: number;
|
|
182
|
+
agentsFailed: number;
|
|
183
|
+
pendingActions: AgentHealthAction[];
|
|
184
|
+
}
|
|
185
|
+
export interface FineTuneStatus {
|
|
186
|
+
status: 'idle' | 'running' | 'completed' | 'failed';
|
|
187
|
+
jobId: string;
|
|
188
|
+
progress: number;
|
|
189
|
+
currentStep: number;
|
|
190
|
+
totalSteps: number;
|
|
191
|
+
currentLoss: number;
|
|
192
|
+
error: string;
|
|
193
|
+
checkpointPath: string;
|
|
194
|
+
startedAt: number;
|
|
195
|
+
completedAt: number;
|
|
196
|
+
}
|
|
197
|
+
export interface FineTuneStartResult {
|
|
198
|
+
jobId: string;
|
|
199
|
+
started: boolean;
|
|
200
|
+
error: string;
|
|
201
|
+
}
|
|
202
|
+
export interface TrainingPairInput {
|
|
203
|
+
instruction: string;
|
|
204
|
+
response: string;
|
|
205
|
+
source: string;
|
|
206
|
+
createdAt: number;
|
|
207
|
+
}
|
|
208
|
+
export declare class CerebellumClient {
|
|
209
|
+
private address;
|
|
210
|
+
private connected;
|
|
211
|
+
private client;
|
|
212
|
+
constructor(address?: string);
|
|
213
|
+
connect(): Promise<void>;
|
|
214
|
+
disconnect(): Promise<void>;
|
|
215
|
+
isConnected(): boolean;
|
|
216
|
+
getStatus(): Promise<CerebellumStatus | null>;
|
|
217
|
+
registerTask(description: string, scheduleHint: string, metadata?: Record<string, string>, schedule?: TaskSchedule): Promise<string | null>;
|
|
218
|
+
unregisterTask(taskId: string): Promise<void>;
|
|
219
|
+
listTasks(): Promise<TaskState[]>;
|
|
220
|
+
syncManagedTasks(tasks: SupervisorTaskState[], timezone: string): Promise<number>;
|
|
221
|
+
reportSupervisorState(request: SupervisorState): Promise<TaskAction[]>;
|
|
222
|
+
subscribeHeartbeat(intervalSeconds?: number): AsyncIterable<HeartbeatEvent>;
|
|
223
|
+
verifyToolResult(toolName: string, toolArgs: Record<string, string>, toolOutput: string, claimedSuccess: boolean): Promise<VerificationResult | null>;
|
|
224
|
+
assessTurnRecovery(request: TurnRecoveryRequest): Promise<TurnRecoveryAssessment | null>;
|
|
225
|
+
reportAgentStates(agents: AgentStateInput[]): Promise<AgentHealthAction[]>;
|
|
226
|
+
getSystemStatus(): Promise<SystemStatus | null>;
|
|
227
|
+
ingestTrainingData(pairs: TrainingPairInput[]): Promise<number>;
|
|
228
|
+
startFineTune(config?: {
|
|
229
|
+
method?: string;
|
|
230
|
+
epochs?: number;
|
|
231
|
+
learningRate?: number;
|
|
232
|
+
batchSize?: number;
|
|
233
|
+
}): Promise<FineTuneStartResult>;
|
|
234
|
+
getFineTuneStatus(): Promise<FineTuneStatus | null>;
|
|
235
|
+
private serializeTaskSchedule;
|
|
236
|
+
private deserializeTaskSchedule;
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,553 @@
|
|
|
1
|
+
import * as grpc from '@grpc/grpc-js';
|
|
2
|
+
import * as protoLoader from '@grpc/proto-loader';
|
|
3
|
+
import { existsSync } from 'fs';
|
|
4
|
+
import { fileURLToPath } from 'url';
|
|
5
|
+
import { dirname, resolve } from 'path';
|
|
6
|
+
export class CerebellumClient {
|
|
7
|
+
address;
|
|
8
|
+
connected = false;
|
|
9
|
+
client = null;
|
|
10
|
+
constructor(address = 'localhost:50051') {
|
|
11
|
+
this.address = address;
|
|
12
|
+
}
|
|
13
|
+
async connect() {
|
|
14
|
+
const currentDir = dirname(fileURLToPath(import.meta.url));
|
|
15
|
+
// Look for proto bundled with this package first, fall back to monorepo root
|
|
16
|
+
let protoPath = resolve(currentDir, '../proto/cerebellum.proto');
|
|
17
|
+
if (!existsSync(protoPath)) {
|
|
18
|
+
protoPath = resolve(currentDir, '../../../proto/cerebellum.proto');
|
|
19
|
+
}
|
|
20
|
+
if (!existsSync(protoPath)) {
|
|
21
|
+
this.connected = false;
|
|
22
|
+
throw new Error(`Proto file not found at ${protoPath}. Reinstall @producible/cereworker-cerebellum-client.`);
|
|
23
|
+
}
|
|
24
|
+
const packageDefinition = protoLoader.loadSync(protoPath, {
|
|
25
|
+
keepCase: false,
|
|
26
|
+
longs: Number,
|
|
27
|
+
enums: String,
|
|
28
|
+
defaults: true,
|
|
29
|
+
oneofs: true,
|
|
30
|
+
});
|
|
31
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
32
|
+
const proto = grpc.loadPackageDefinition(packageDefinition);
|
|
33
|
+
const CerebellumService = proto.cereworker.cerebellum.Cerebellum;
|
|
34
|
+
this.client = new CerebellumService(this.address, grpc.credentials.createInsecure());
|
|
35
|
+
// Test connection with a deadline
|
|
36
|
+
try {
|
|
37
|
+
await new Promise((resolve, reject) => {
|
|
38
|
+
const deadline = new Date(Date.now() + 5000);
|
|
39
|
+
this.client.waitForReady(deadline, (err) => {
|
|
40
|
+
if (err)
|
|
41
|
+
reject(err);
|
|
42
|
+
else
|
|
43
|
+
resolve();
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
this.connected = true;
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
this.connected = false;
|
|
50
|
+
throw err;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
async disconnect() {
|
|
54
|
+
if (this.client) {
|
|
55
|
+
this.client.close();
|
|
56
|
+
this.client = null;
|
|
57
|
+
}
|
|
58
|
+
this.connected = false;
|
|
59
|
+
}
|
|
60
|
+
isConnected() {
|
|
61
|
+
return this.connected;
|
|
62
|
+
}
|
|
63
|
+
async getStatus() {
|
|
64
|
+
if (!this.connected)
|
|
65
|
+
return null;
|
|
66
|
+
return new Promise((resolve, reject) => {
|
|
67
|
+
this.client.getStatus({}, (err, response) => {
|
|
68
|
+
if (err) {
|
|
69
|
+
reject(err);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
resolve({
|
|
73
|
+
healthy: response.healthy,
|
|
74
|
+
modelName: response.modelName,
|
|
75
|
+
uptimeSeconds: response.uptimeSeconds,
|
|
76
|
+
tasksRegistered: response.tasksRegistered,
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
async registerTask(description, scheduleHint, metadata, schedule) {
|
|
82
|
+
if (!this.connected)
|
|
83
|
+
return null;
|
|
84
|
+
return new Promise((resolve, reject) => {
|
|
85
|
+
this.client.registerTask({
|
|
86
|
+
description,
|
|
87
|
+
scheduleHint,
|
|
88
|
+
metadata: metadata || {},
|
|
89
|
+
schedule: this.serializeTaskSchedule(schedule),
|
|
90
|
+
}, (err, response) => {
|
|
91
|
+
if (err) {
|
|
92
|
+
reject(err);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
resolve(response.taskId);
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
async unregisterTask(taskId) {
|
|
100
|
+
if (!this.connected)
|
|
101
|
+
return;
|
|
102
|
+
return new Promise((resolve, reject) => {
|
|
103
|
+
this.client.unregisterTask({ taskId }, (err) => {
|
|
104
|
+
if (err)
|
|
105
|
+
reject(err);
|
|
106
|
+
else
|
|
107
|
+
resolve();
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
async listTasks() {
|
|
112
|
+
if (!this.connected)
|
|
113
|
+
return [];
|
|
114
|
+
return new Promise((resolve, reject) => {
|
|
115
|
+
this.client.listTasks({}, (err, response) => {
|
|
116
|
+
if (err) {
|
|
117
|
+
reject(err);
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
resolve((response.tasks || []).map((t) => ({
|
|
121
|
+
taskId: t.taskId,
|
|
122
|
+
description: t.description,
|
|
123
|
+
status: t.status,
|
|
124
|
+
lastRun: t.lastRun,
|
|
125
|
+
scheduleHint: t.scheduleHint,
|
|
126
|
+
schedule: this.deserializeTaskSchedule(t.schedule),
|
|
127
|
+
metadata: t.metadata,
|
|
128
|
+
})));
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
async syncManagedTasks(tasks, timezone) {
|
|
133
|
+
if (!this.connected)
|
|
134
|
+
return 0;
|
|
135
|
+
return new Promise((resolve, reject) => {
|
|
136
|
+
this.client.syncManagedTasks({
|
|
137
|
+
timezone,
|
|
138
|
+
tasks: tasks.map((task) => ({
|
|
139
|
+
taskId: task.taskId,
|
|
140
|
+
description: task.description,
|
|
141
|
+
enabled: task.enabled,
|
|
142
|
+
kind: task.kind,
|
|
143
|
+
scheduleHint: task.scheduleHint,
|
|
144
|
+
schedule: this.serializeTaskSchedule(task.schedule),
|
|
145
|
+
status: task.status,
|
|
146
|
+
createdAt: task.createdAt ?? '',
|
|
147
|
+
lastRunAt: task.lastRunAt ?? '',
|
|
148
|
+
lastScheduledSlot: task.lastScheduledSlot ?? '',
|
|
149
|
+
schedulerStatus: task.schedulerStatus ?? '',
|
|
150
|
+
lastSummary: task.lastSummary ?? '',
|
|
151
|
+
metadata: task.metadata ?? {},
|
|
152
|
+
})),
|
|
153
|
+
}, (err, response) => {
|
|
154
|
+
if (err) {
|
|
155
|
+
reject(err);
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
resolve(response.syncedCount ?? 0);
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
async reportSupervisorState(request) {
|
|
163
|
+
if (!this.connected)
|
|
164
|
+
return [];
|
|
165
|
+
return new Promise((resolve, reject) => {
|
|
166
|
+
this.client.reportSupervisorState({
|
|
167
|
+
timestamp: request.timestamp,
|
|
168
|
+
timezone: request.timezone,
|
|
169
|
+
activeTaskIds: request.activeTaskIds,
|
|
170
|
+
browserAvailable: request.browserAvailable,
|
|
171
|
+
channelsAvailable: request.channelsAvailable,
|
|
172
|
+
cerebrumBusy: request.cerebrumBusy,
|
|
173
|
+
fineTuneRunning: request.fineTuneRunning,
|
|
174
|
+
tasks: request.tasks.map((task) => ({
|
|
175
|
+
taskId: task.taskId,
|
|
176
|
+
description: task.description,
|
|
177
|
+
enabled: task.enabled,
|
|
178
|
+
kind: task.kind,
|
|
179
|
+
scheduleHint: task.scheduleHint,
|
|
180
|
+
schedule: this.serializeTaskSchedule(task.schedule),
|
|
181
|
+
status: task.status,
|
|
182
|
+
createdAt: task.createdAt ?? '',
|
|
183
|
+
lastRunAt: task.lastRunAt ?? '',
|
|
184
|
+
lastScheduledSlot: task.lastScheduledSlot ?? '',
|
|
185
|
+
schedulerStatus: task.schedulerStatus ?? '',
|
|
186
|
+
lastSummary: task.lastSummary ?? '',
|
|
187
|
+
metadata: task.metadata ?? {},
|
|
188
|
+
})),
|
|
189
|
+
}, (err, response) => {
|
|
190
|
+
if (err) {
|
|
191
|
+
reject(err);
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
resolve((response.actions || []).map((action) => ({
|
|
195
|
+
taskId: action.taskId,
|
|
196
|
+
action: action.action,
|
|
197
|
+
reason: action.reason,
|
|
198
|
+
scheduledFor: action.scheduledFor || undefined,
|
|
199
|
+
slotKey: action.slotKey || undefined,
|
|
200
|
+
})));
|
|
201
|
+
});
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
async *subscribeHeartbeat(intervalSeconds = 30) {
|
|
205
|
+
if (!this.connected)
|
|
206
|
+
return;
|
|
207
|
+
const stream = this.client.subscribeHeartbeat({ intervalSeconds });
|
|
208
|
+
try {
|
|
209
|
+
for await (const event of stream) {
|
|
210
|
+
yield {
|
|
211
|
+
timestamp: event.timestamp,
|
|
212
|
+
actions: (event.actions || []).map((a) => ({
|
|
213
|
+
taskId: a.taskId,
|
|
214
|
+
action: a.action,
|
|
215
|
+
reason: a.reason,
|
|
216
|
+
scheduledFor: a.scheduledFor || undefined,
|
|
217
|
+
slotKey: a.slotKey || undefined,
|
|
218
|
+
})),
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
catch (err) {
|
|
223
|
+
// Stream ended or connection lost
|
|
224
|
+
if (err?.code !== grpc.status.CANCELLED) {
|
|
225
|
+
throw err;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
async verifyToolResult(toolName, toolArgs, toolOutput, claimedSuccess) {
|
|
230
|
+
if (!this.connected)
|
|
231
|
+
return null;
|
|
232
|
+
return new Promise((resolve, reject) => {
|
|
233
|
+
const deadline = new Date(Date.now() + 5_000);
|
|
234
|
+
this.client.verifyToolResult({
|
|
235
|
+
toolName,
|
|
236
|
+
toolArgs,
|
|
237
|
+
toolOutput,
|
|
238
|
+
claimedSuccess,
|
|
239
|
+
}, { deadline }, (err, response) => {
|
|
240
|
+
if (err) {
|
|
241
|
+
reject(err);
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
resolve({
|
|
245
|
+
passed: response.passed,
|
|
246
|
+
modelVerdict: response.modelVerdict,
|
|
247
|
+
checks: (response.checks || []).map((c) => ({
|
|
248
|
+
name: c.name,
|
|
249
|
+
passed: c.passed,
|
|
250
|
+
description: c.description,
|
|
251
|
+
})),
|
|
252
|
+
});
|
|
253
|
+
});
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
async assessTurnRecovery(request) {
|
|
257
|
+
if (!this.connected)
|
|
258
|
+
return null;
|
|
259
|
+
return new Promise((resolve, reject) => {
|
|
260
|
+
const deadline = new Date(Date.now() + 5_000);
|
|
261
|
+
this.client.assessTurnRecovery({
|
|
262
|
+
conversationId: request.conversationId,
|
|
263
|
+
turnId: request.turnId,
|
|
264
|
+
attempt: request.attempt,
|
|
265
|
+
cause: request.cause,
|
|
266
|
+
phase: request.phase,
|
|
267
|
+
activeToolName: request.activeToolName ?? '',
|
|
268
|
+
activeToolCallId: request.activeToolCallId ?? '',
|
|
269
|
+
stallRetryCount: request.stallRetryCount,
|
|
270
|
+
completionRetryCount: request.completionRetryCount,
|
|
271
|
+
finishReason: request.finishReason ?? '',
|
|
272
|
+
turnOutcome: request.turnOutcome,
|
|
273
|
+
lastContentKind: request.lastContentKind,
|
|
274
|
+
elapsedSeconds: request.elapsedSeconds ?? 0,
|
|
275
|
+
partialContent: request.partialContent ?? '',
|
|
276
|
+
latestUserMessage: request.latestUserMessage ?? '',
|
|
277
|
+
browserState: {
|
|
278
|
+
currentUrl: request.browserState.currentUrl ?? '',
|
|
279
|
+
activeTabId: request.browserState.activeTabId ?? '',
|
|
280
|
+
tabs: (request.browserState.tabs ?? []).map((tab) => ({
|
|
281
|
+
id: tab.id,
|
|
282
|
+
title: tab.title ?? '',
|
|
283
|
+
url: tab.url,
|
|
284
|
+
active: tab.active,
|
|
285
|
+
})),
|
|
286
|
+
},
|
|
287
|
+
progressEntries: request.progressEntries.map((entry) => ({
|
|
288
|
+
source: entry.source,
|
|
289
|
+
action: entry.action,
|
|
290
|
+
summary: entry.summary,
|
|
291
|
+
toolName: entry.toolName ?? '',
|
|
292
|
+
url: entry.url ?? '',
|
|
293
|
+
tabId: entry.tabId ?? '',
|
|
294
|
+
stateChanging: entry.stateChanging,
|
|
295
|
+
isError: entry.isError,
|
|
296
|
+
checkpointStatus: entry.checkpointStatus ?? '',
|
|
297
|
+
})),
|
|
298
|
+
taskCheckpoints: request.taskCheckpoints.map((checkpoint) => ({
|
|
299
|
+
step: checkpoint.step,
|
|
300
|
+
status: checkpoint.status,
|
|
301
|
+
evidence: checkpoint.evidence,
|
|
302
|
+
summary: checkpoint.summary,
|
|
303
|
+
})),
|
|
304
|
+
latestBoundary: request.latestBoundary
|
|
305
|
+
? {
|
|
306
|
+
id: request.latestBoundary.id,
|
|
307
|
+
kind: request.latestBoundary.kind,
|
|
308
|
+
action: request.latestBoundary.action,
|
|
309
|
+
summary: request.latestBoundary.summary,
|
|
310
|
+
createdAt: request.latestBoundary.createdAt,
|
|
311
|
+
stateChanging: request.latestBoundary.stateChanging,
|
|
312
|
+
browserState: request.latestBoundary.browserState
|
|
313
|
+
? {
|
|
314
|
+
currentUrl: request.latestBoundary.browserState.currentUrl ?? '',
|
|
315
|
+
activeTabId: request.latestBoundary.browserState.activeTabId ?? '',
|
|
316
|
+
tabs: (request.latestBoundary.browserState.tabs ?? []).map((tab) => ({
|
|
317
|
+
id: tab.id,
|
|
318
|
+
title: tab.title ?? '',
|
|
319
|
+
url: tab.url,
|
|
320
|
+
active: tab.active,
|
|
321
|
+
})),
|
|
322
|
+
}
|
|
323
|
+
: undefined,
|
|
324
|
+
url: request.latestBoundary.url ?? '',
|
|
325
|
+
tabId: request.latestBoundary.tabId ?? '',
|
|
326
|
+
evidence: request.latestBoundary.evidence ?? '',
|
|
327
|
+
checkpointStatus: request.latestBoundary.checkpointStatus ?? '',
|
|
328
|
+
}
|
|
329
|
+
: undefined,
|
|
330
|
+
recentBoundaries: request.recentBoundaries.map((boundary) => ({
|
|
331
|
+
id: boundary.id,
|
|
332
|
+
kind: boundary.kind,
|
|
333
|
+
action: boundary.action,
|
|
334
|
+
summary: boundary.summary,
|
|
335
|
+
createdAt: boundary.createdAt,
|
|
336
|
+
stateChanging: boundary.stateChanging,
|
|
337
|
+
browserState: boundary.browserState
|
|
338
|
+
? {
|
|
339
|
+
currentUrl: boundary.browserState.currentUrl ?? '',
|
|
340
|
+
activeTabId: boundary.browserState.activeTabId ?? '',
|
|
341
|
+
tabs: (boundary.browserState.tabs ?? []).map((tab) => ({
|
|
342
|
+
id: tab.id,
|
|
343
|
+
title: tab.title ?? '',
|
|
344
|
+
url: tab.url,
|
|
345
|
+
active: tab.active,
|
|
346
|
+
})),
|
|
347
|
+
}
|
|
348
|
+
: undefined,
|
|
349
|
+
url: boundary.url ?? '',
|
|
350
|
+
tabId: boundary.tabId ?? '',
|
|
351
|
+
evidence: boundary.evidence ?? '',
|
|
352
|
+
checkpointStatus: boundary.checkpointStatus ?? '',
|
|
353
|
+
})),
|
|
354
|
+
repetitionSignals: request.repetitionSignals,
|
|
355
|
+
}, { deadline }, (err, response) => {
|
|
356
|
+
if (err) {
|
|
357
|
+
reject(err);
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
360
|
+
resolve({
|
|
361
|
+
action: response.action,
|
|
362
|
+
operatorMessage: response.operatorMessage,
|
|
363
|
+
modelMessage: response.modelMessage,
|
|
364
|
+
diagnosis: response.diagnosis,
|
|
365
|
+
nextStep: response.nextStep,
|
|
366
|
+
completedSteps: response.completedSteps ?? [],
|
|
367
|
+
waitSeconds: response.waitSeconds || undefined,
|
|
368
|
+
});
|
|
369
|
+
});
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
async reportAgentStates(agents) {
|
|
373
|
+
if (!this.connected)
|
|
374
|
+
return [];
|
|
375
|
+
const grpcAgents = agents.map((a) => ({
|
|
376
|
+
id: a.id,
|
|
377
|
+
task: a.task,
|
|
378
|
+
status: a.status,
|
|
379
|
+
spawnedAt: a.spawnedAt,
|
|
380
|
+
lastActivityAt: a.lastActivityAt,
|
|
381
|
+
timeoutMs: a.timeoutMs,
|
|
382
|
+
messagesCount: a.messagesCount,
|
|
383
|
+
toolCallsCount: a.toolCallsCount,
|
|
384
|
+
retryCount: a.retryCount,
|
|
385
|
+
progressNote: a.progressNote ?? '',
|
|
386
|
+
progressPercent: a.progressPercent ?? -1,
|
|
387
|
+
lastProgressAt: a.lastProgressAt ?? 0,
|
|
388
|
+
deadlineAt: a.deadlineAt ?? 0,
|
|
389
|
+
}));
|
|
390
|
+
return new Promise((resolve, reject) => {
|
|
391
|
+
this.client.reportAgentStates({ agents: grpcAgents }, (err, response) => {
|
|
392
|
+
if (err) {
|
|
393
|
+
reject(err);
|
|
394
|
+
return;
|
|
395
|
+
}
|
|
396
|
+
resolve((response.actions || []).map((a) => ({
|
|
397
|
+
agentId: a.agentId,
|
|
398
|
+
action: a.action,
|
|
399
|
+
reason: a.reason,
|
|
400
|
+
})));
|
|
401
|
+
});
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
async getSystemStatus() {
|
|
405
|
+
if (!this.connected)
|
|
406
|
+
return null;
|
|
407
|
+
return new Promise((resolve, reject) => {
|
|
408
|
+
this.client.getSystemStatus({}, (err, response) => {
|
|
409
|
+
if (err) {
|
|
410
|
+
reject(err);
|
|
411
|
+
return;
|
|
412
|
+
}
|
|
413
|
+
resolve({
|
|
414
|
+
healthy: response.healthy,
|
|
415
|
+
modelName: response.modelName,
|
|
416
|
+
uptimeSeconds: response.uptimeSeconds,
|
|
417
|
+
tasksRegistered: response.tasksRegistered,
|
|
418
|
+
agentsTotal: response.agentsTotal,
|
|
419
|
+
agentsRunning: response.agentsRunning,
|
|
420
|
+
agentsCompleted: response.agentsCompleted,
|
|
421
|
+
agentsFailed: response.agentsFailed,
|
|
422
|
+
pendingActions: (response.pendingActions || []).map((a) => ({
|
|
423
|
+
agentId: a.agentId,
|
|
424
|
+
action: a.action,
|
|
425
|
+
reason: a.reason,
|
|
426
|
+
})),
|
|
427
|
+
});
|
|
428
|
+
});
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
async ingestTrainingData(pairs) {
|
|
432
|
+
if (!this.connected)
|
|
433
|
+
return 0;
|
|
434
|
+
const grpcPairs = pairs.map((p) => ({
|
|
435
|
+
instruction: p.instruction,
|
|
436
|
+
response: p.response,
|
|
437
|
+
source: p.source,
|
|
438
|
+
createdAt: p.createdAt,
|
|
439
|
+
}));
|
|
440
|
+
return new Promise((resolve, reject) => {
|
|
441
|
+
this.client.ingestTrainingData({ pairs: grpcPairs }, (err, response) => {
|
|
442
|
+
if (err) {
|
|
443
|
+
reject(err);
|
|
444
|
+
return;
|
|
445
|
+
}
|
|
446
|
+
resolve(response.totalPending);
|
|
447
|
+
});
|
|
448
|
+
});
|
|
449
|
+
}
|
|
450
|
+
async startFineTune(config) {
|
|
451
|
+
if (!this.connected)
|
|
452
|
+
return { jobId: '', started: false, error: 'Not connected' };
|
|
453
|
+
return new Promise((resolve, reject) => {
|
|
454
|
+
this.client.startFineTune({
|
|
455
|
+
method: config?.method ?? 'auto',
|
|
456
|
+
epochs: config?.epochs ?? 3,
|
|
457
|
+
learningRate: config?.learningRate ?? 2e-4,
|
|
458
|
+
batchSize: config?.batchSize ?? 4,
|
|
459
|
+
}, (err, response) => {
|
|
460
|
+
if (err) {
|
|
461
|
+
reject(err);
|
|
462
|
+
return;
|
|
463
|
+
}
|
|
464
|
+
resolve({
|
|
465
|
+
jobId: response.jobId,
|
|
466
|
+
started: response.started,
|
|
467
|
+
error: response.error,
|
|
468
|
+
});
|
|
469
|
+
});
|
|
470
|
+
});
|
|
471
|
+
}
|
|
472
|
+
async getFineTuneStatus() {
|
|
473
|
+
if (!this.connected)
|
|
474
|
+
return null;
|
|
475
|
+
return new Promise((resolve, reject) => {
|
|
476
|
+
this.client.getFineTuneStatus({}, (err, response) => {
|
|
477
|
+
if (err) {
|
|
478
|
+
reject(err);
|
|
479
|
+
return;
|
|
480
|
+
}
|
|
481
|
+
resolve({
|
|
482
|
+
status: response.status,
|
|
483
|
+
jobId: response.jobId,
|
|
484
|
+
progress: response.progress,
|
|
485
|
+
currentStep: response.currentStep,
|
|
486
|
+
totalSteps: response.totalSteps,
|
|
487
|
+
currentLoss: response.currentLoss,
|
|
488
|
+
error: response.error,
|
|
489
|
+
checkpointPath: response.checkpointPath,
|
|
490
|
+
startedAt: response.startedAt,
|
|
491
|
+
completedAt: response.completedAt,
|
|
492
|
+
});
|
|
493
|
+
});
|
|
494
|
+
});
|
|
495
|
+
}
|
|
496
|
+
serializeTaskSchedule(schedule) {
|
|
497
|
+
if (!schedule)
|
|
498
|
+
return undefined;
|
|
499
|
+
if (schedule.type === 'interval') {
|
|
500
|
+
return {
|
|
501
|
+
interval: {
|
|
502
|
+
every: schedule.every,
|
|
503
|
+
unit: schedule.unit,
|
|
504
|
+
},
|
|
505
|
+
};
|
|
506
|
+
}
|
|
507
|
+
if (schedule.type === 'daily_at') {
|
|
508
|
+
return {
|
|
509
|
+
dailyAt: {
|
|
510
|
+
time: schedule.time,
|
|
511
|
+
timezone: schedule.timezone ?? '',
|
|
512
|
+
catchUpPolicy: schedule.catchUpPolicy ?? 'once',
|
|
513
|
+
},
|
|
514
|
+
};
|
|
515
|
+
}
|
|
516
|
+
return {
|
|
517
|
+
oneShot: {
|
|
518
|
+
dueAt: schedule.dueAt,
|
|
519
|
+
timezone: schedule.timezone ?? '',
|
|
520
|
+
catchUpPolicy: schedule.catchUpPolicy ?? 'once',
|
|
521
|
+
},
|
|
522
|
+
};
|
|
523
|
+
}
|
|
524
|
+
deserializeTaskSchedule(raw) {
|
|
525
|
+
if (!raw)
|
|
526
|
+
return undefined;
|
|
527
|
+
if (raw.interval && Number(raw.interval.every) > 0) {
|
|
528
|
+
return {
|
|
529
|
+
type: 'interval',
|
|
530
|
+
every: Number(raw.interval.every),
|
|
531
|
+
unit: raw.interval.unit,
|
|
532
|
+
};
|
|
533
|
+
}
|
|
534
|
+
if (raw.dailyAt && raw.dailyAt.time) {
|
|
535
|
+
return {
|
|
536
|
+
type: 'daily_at',
|
|
537
|
+
time: raw.dailyAt.time,
|
|
538
|
+
timezone: raw.dailyAt.timezone || undefined,
|
|
539
|
+
catchUpPolicy: raw.dailyAt.catchUpPolicy || undefined,
|
|
540
|
+
};
|
|
541
|
+
}
|
|
542
|
+
if (raw.oneShot && raw.oneShot.dueAt) {
|
|
543
|
+
return {
|
|
544
|
+
type: 'one_shot',
|
|
545
|
+
dueAt: raw.oneShot.dueAt,
|
|
546
|
+
timezone: raw.oneShot.timezone || undefined,
|
|
547
|
+
catchUpPolicy: raw.oneShot.catchUpPolicy || undefined,
|
|
548
|
+
};
|
|
549
|
+
}
|
|
550
|
+
return undefined;
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { CerebellumClient } from './client.js';
|
|
2
|
+
export type { CerebellumStatus, TaskState, TaskAction, SchedulerStatus, TaskSchedule, HeartbeatEvent, SupervisorTaskState, SupervisorState, VerificationResult, VerificationCheck, AgentHealthAction, AgentStateInput, SystemStatus, TurnRecoveryAssessment, TurnRecoveryRequest, } from './client.js';
|
|
3
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,YAAY,EACV,gBAAgB,EAChB,SAAS,EACT,UAAU,EACV,eAAe,EACf,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,aAAa,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@producible/cereworker-cerebellum-client",
|
|
3
|
+
"version": "26.520.1",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist",
|
|
9
|
+
"proto"
|
|
10
|
+
],
|
|
11
|
+
"publishConfig": {
|
|
12
|
+
"access": "public"
|
|
13
|
+
},
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "https://github.com/Producible/CereWorker.git",
|
|
17
|
+
"directory": "packages/cerebellum-client"
|
|
18
|
+
},
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"@grpc/grpc-js": "^1.12.0",
|
|
21
|
+
"@grpc/proto-loader": "^0.7.0",
|
|
22
|
+
"@producible/cereworker-core": "26.520.1"
|
|
23
|
+
},
|
|
24
|
+
"devDependencies": {
|
|
25
|
+
"typescript": "^5.7.3"
|
|
26
|
+
},
|
|
27
|
+
"scripts": {
|
|
28
|
+
"build": "tsc",
|
|
29
|
+
"typecheck": "tsc --noEmit",
|
|
30
|
+
"lint": "eslint src/",
|
|
31
|
+
"clean": "rm -rf dist"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
syntax = "proto3";
|
|
2
|
+
|
|
3
|
+
package cereworker.cerebellum;
|
|
4
|
+
|
|
5
|
+
service Cerebellum {
|
|
6
|
+
// Heartbeat: cerebellum evaluates what tasks need attention
|
|
7
|
+
rpc Heartbeat(HeartbeatRequest) returns (HeartbeatResponse);
|
|
8
|
+
|
|
9
|
+
// Register a task for heartbeat to manage
|
|
10
|
+
rpc RegisterTask(RegisterTaskRequest) returns (RegisterTaskResponse);
|
|
11
|
+
|
|
12
|
+
// Remove a registered task
|
|
13
|
+
rpc UnregisterTask(UnregisterTaskRequest) returns (UnregisterTaskResponse);
|
|
14
|
+
|
|
15
|
+
// List all registered tasks
|
|
16
|
+
rpc ListTasks(ListTasksRequest) returns (ListTasksResponse);
|
|
17
|
+
|
|
18
|
+
// Bulk-sync the durable managed task registry into Cerebellum's scheduler view.
|
|
19
|
+
rpc SyncManagedTasks(SyncManagedTasksRequest) returns (SyncManagedTasksResponse);
|
|
20
|
+
|
|
21
|
+
// Evaluate scheduler/system state on every heartbeat tick.
|
|
22
|
+
rpc ReportSupervisorState(SupervisorStateRequest) returns (SupervisorStateResponse);
|
|
23
|
+
|
|
24
|
+
// Health check
|
|
25
|
+
rpc GetStatus(StatusRequest) returns (StatusResponse);
|
|
26
|
+
|
|
27
|
+
// Stream heartbeat events to the TypeScript side
|
|
28
|
+
rpc SubscribeHeartbeat(SubscribeRequest) returns (stream HeartbeatEvent);
|
|
29
|
+
|
|
30
|
+
// Verify a tool execution result (Muscle+Skeleton)
|
|
31
|
+
rpc VerifyToolResult(VerifyRequest) returns (VerifyResponse);
|
|
32
|
+
|
|
33
|
+
// Report sub-agent states for health monitoring
|
|
34
|
+
rpc ReportAgentStates(AgentStatesRequest) returns (AgentStatesResponse);
|
|
35
|
+
|
|
36
|
+
// Query overall system status (main agent + sub-agents)
|
|
37
|
+
rpc GetSystemStatus(SystemStatusRequest) returns (SystemStatusResponse);
|
|
38
|
+
|
|
39
|
+
// Instinct: Fine-tuning
|
|
40
|
+
rpc IngestTrainingData(IngestRequest) returns (IngestResponse);
|
|
41
|
+
rpc StartFineTune(FineTuneRequest) returns (FineTuneResponse);
|
|
42
|
+
rpc GetFineTuneStatus(FineTuneStatusRequest) returns (FineTuneStatusResponse);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
message TaskState {
|
|
46
|
+
string task_id = 1;
|
|
47
|
+
string description = 2;
|
|
48
|
+
string status = 3; // "pending", "running", "waiting", "completed"
|
|
49
|
+
int64 last_run = 4;
|
|
50
|
+
string schedule_hint = 5; // natural language like "every 5 minutes" or "when idle"
|
|
51
|
+
map<string, string> metadata = 6;
|
|
52
|
+
TaskSchedule schedule = 7;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
message TaskAction {
|
|
56
|
+
string task_id = 1;
|
|
57
|
+
string action = 2; // "invoke", "skip", "defer", "cancel"
|
|
58
|
+
string reason = 3; // cerebellum's reasoning
|
|
59
|
+
string scheduled_for = 4;
|
|
60
|
+
string slot_key = 5;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
message HeartbeatRequest {
|
|
64
|
+
repeated TaskState tasks = 1;
|
|
65
|
+
string system_summary = 2;
|
|
66
|
+
int64 timestamp = 3;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
message HeartbeatResponse {
|
|
70
|
+
repeated TaskAction actions = 1;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
message HeartbeatEvent {
|
|
74
|
+
int64 timestamp = 1;
|
|
75
|
+
repeated TaskAction actions = 2;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
message RegisterTaskRequest {
|
|
79
|
+
string description = 1;
|
|
80
|
+
string schedule_hint = 2;
|
|
81
|
+
map<string, string> metadata = 3;
|
|
82
|
+
TaskSchedule schedule = 4;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
message RegisterTaskResponse {
|
|
86
|
+
string task_id = 1;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
message IntervalTaskSchedule {
|
|
90
|
+
int32 every = 1;
|
|
91
|
+
string unit = 2;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
message DailyAtTaskSchedule {
|
|
95
|
+
string time = 1;
|
|
96
|
+
string timezone = 2;
|
|
97
|
+
string catch_up_policy = 3;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
message OneShotTaskSchedule {
|
|
101
|
+
string due_at = 1;
|
|
102
|
+
string timezone = 2;
|
|
103
|
+
string catch_up_policy = 3;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
message TaskSchedule {
|
|
107
|
+
oneof kind {
|
|
108
|
+
IntervalTaskSchedule interval = 1;
|
|
109
|
+
DailyAtTaskSchedule daily_at = 2;
|
|
110
|
+
OneShotTaskSchedule one_shot = 3;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
message ManagedTaskDefinition {
|
|
115
|
+
string task_id = 1;
|
|
116
|
+
string description = 2;
|
|
117
|
+
bool enabled = 3;
|
|
118
|
+
string kind = 4;
|
|
119
|
+
string schedule_hint = 5;
|
|
120
|
+
TaskSchedule schedule = 6;
|
|
121
|
+
string status = 7;
|
|
122
|
+
string created_at = 8;
|
|
123
|
+
string last_run_at = 9;
|
|
124
|
+
string last_scheduled_slot = 10;
|
|
125
|
+
string scheduler_status = 11;
|
|
126
|
+
string last_summary = 12;
|
|
127
|
+
map<string, string> metadata = 13;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
message SyncManagedTasksRequest {
|
|
131
|
+
string timezone = 1;
|
|
132
|
+
repeated ManagedTaskDefinition tasks = 2;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
message SyncManagedTasksResponse {
|
|
136
|
+
int32 synced_count = 1;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
message SupervisorStateRequest {
|
|
140
|
+
int64 timestamp = 1;
|
|
141
|
+
string timezone = 2;
|
|
142
|
+
repeated ManagedTaskDefinition tasks = 3;
|
|
143
|
+
repeated string active_task_ids = 4;
|
|
144
|
+
bool browser_available = 5;
|
|
145
|
+
bool channels_available = 6;
|
|
146
|
+
bool cerebrum_busy = 7;
|
|
147
|
+
bool fine_tune_running = 8;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
message SupervisorStateResponse {
|
|
151
|
+
repeated TaskAction actions = 1;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
message UnregisterTaskRequest {
|
|
155
|
+
string task_id = 1;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
message UnregisterTaskResponse {}
|
|
159
|
+
|
|
160
|
+
message ListTasksRequest {}
|
|
161
|
+
|
|
162
|
+
message ListTasksResponse {
|
|
163
|
+
repeated TaskState tasks = 1;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
message StatusRequest {}
|
|
167
|
+
|
|
168
|
+
message StatusResponse {
|
|
169
|
+
bool healthy = 1;
|
|
170
|
+
string model_name = 2;
|
|
171
|
+
int64 uptime_seconds = 3;
|
|
172
|
+
int32 tasks_registered = 4;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
message SubscribeRequest {
|
|
176
|
+
int32 interval_seconds = 1; // how often to emit heartbeat events (default: 30)
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
message VerifyRequest {
|
|
180
|
+
string tool_name = 1; // "writeFile", "shell", "readFile", etc.
|
|
181
|
+
map<string, string> tool_args = 2; // arguments passed to the tool
|
|
182
|
+
string tool_output = 3; // output the tool returned
|
|
183
|
+
bool claimed_success = 4; // whether the tool reported success
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
message VerifyCheck {
|
|
187
|
+
string name = 1; // "file_exists", "recently_modified", etc.
|
|
188
|
+
bool passed = 2;
|
|
189
|
+
string description = 3;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
message VerifyResponse {
|
|
193
|
+
bool passed = 1; // overall verdict
|
|
194
|
+
repeated VerifyCheck checks = 2;
|
|
195
|
+
bool model_verdict = 3; // what the LLM specifically said
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// Sub-agent monitoring messages
|
|
199
|
+
|
|
200
|
+
message AgentState {
|
|
201
|
+
string id = 1;
|
|
202
|
+
string task = 2;
|
|
203
|
+
string status = 3; // pending, running, completed, failed, cancelled, timeout
|
|
204
|
+
int64 spawned_at = 4;
|
|
205
|
+
int64 last_activity_at = 5;
|
|
206
|
+
int64 timeout_ms = 6;
|
|
207
|
+
int32 messages_count = 7;
|
|
208
|
+
int32 tool_calls_count = 8;
|
|
209
|
+
int32 retry_count = 9;
|
|
210
|
+
string progress_note = 10; // latest progress description from agent
|
|
211
|
+
int32 progress_percent = 11; // 0-100, -1 if unset
|
|
212
|
+
int64 last_progress_at = 12; // timestamp of last progress report (ms)
|
|
213
|
+
int64 deadline_at = 13; // absolute deadline (ms since epoch), 0 = unlimited
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
message AgentHealthAction {
|
|
217
|
+
string agent_id = 1;
|
|
218
|
+
string action = 2; // "ok", "ping", "retry", "cancel", "timeout"
|
|
219
|
+
string reason = 3;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
message AgentStatesRequest {
|
|
223
|
+
repeated AgentState agents = 1;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
message AgentStatesResponse {
|
|
227
|
+
repeated AgentHealthAction actions = 1;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
message SystemStatusRequest {}
|
|
231
|
+
|
|
232
|
+
message SystemStatusResponse {
|
|
233
|
+
bool healthy = 1;
|
|
234
|
+
string model_name = 2;
|
|
235
|
+
int64 uptime_seconds = 3;
|
|
236
|
+
int32 tasks_registered = 4;
|
|
237
|
+
int32 agents_total = 5;
|
|
238
|
+
int32 agents_running = 6;
|
|
239
|
+
int32 agents_completed = 7;
|
|
240
|
+
int32 agents_failed = 8;
|
|
241
|
+
repeated AgentHealthAction pending_actions = 9;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
// Instinct: Fine-tuning messages
|
|
245
|
+
|
|
246
|
+
message TrainingPair {
|
|
247
|
+
string instruction = 1;
|
|
248
|
+
string response = 2;
|
|
249
|
+
string source = 3;
|
|
250
|
+
int64 created_at = 4;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
message IngestRequest {
|
|
254
|
+
repeated TrainingPair pairs = 1;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
message IngestResponse {
|
|
258
|
+
int32 total_pending = 1;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
message FineTuneRequest {
|
|
262
|
+
string method = 1; // "auto", "lora", "qlora", "full"
|
|
263
|
+
int32 epochs = 2; // default 3
|
|
264
|
+
float learning_rate = 3; // default 2e-4
|
|
265
|
+
int32 batch_size = 4; // default 4
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
message FineTuneResponse {
|
|
269
|
+
string job_id = 1;
|
|
270
|
+
bool started = 2;
|
|
271
|
+
string error = 3;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
message FineTuneStatusRequest {}
|
|
275
|
+
|
|
276
|
+
message FineTuneStatusResponse {
|
|
277
|
+
string status = 1; // "idle", "running", "completed", "failed"
|
|
278
|
+
string job_id = 2;
|
|
279
|
+
float progress = 3; // 0.0 - 1.0
|
|
280
|
+
int32 current_step = 4;
|
|
281
|
+
int32 total_steps = 5;
|
|
282
|
+
float current_loss = 6;
|
|
283
|
+
string error = 7;
|
|
284
|
+
string checkpoint_path = 8;
|
|
285
|
+
int64 started_at = 9;
|
|
286
|
+
int64 completed_at = 10;
|
|
287
|
+
}
|