@pellux/goodvibes-daemon-sdk 0.18.3 → 0.30.0
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 +13 -7
- package/dist/api-router.d.ts +8 -1
- package/dist/api-router.d.ts.map +1 -1
- package/dist/api-router.js +12 -3
- package/dist/artifact-upload.d.ts +26 -0
- package/dist/artifact-upload.d.ts.map +1 -0
- package/dist/artifact-upload.js +535 -0
- package/dist/automation.d.ts +2 -2
- package/dist/automation.d.ts.map +1 -1
- package/dist/channel-route-types.d.ts.map +1 -1
- package/dist/channel-routes.d.ts +2 -2
- package/dist/channel-routes.d.ts.map +1 -1
- package/dist/channel-routes.js +28 -3
- package/dist/context.d.ts +151 -51
- package/dist/context.d.ts.map +1 -1
- package/dist/control-routes.d.ts +2 -2
- package/dist/control-routes.d.ts.map +1 -1
- package/dist/error-response.d.ts.map +1 -1
- package/dist/error-response.js +172 -12
- package/dist/http-policy.d.ts +1 -1
- package/dist/http-policy.d.ts.map +1 -1
- package/dist/http-policy.js +0 -1
- package/dist/index.d.ts +8 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/integration-route-types.d.ts +3 -1
- package/dist/integration-route-types.d.ts.map +1 -1
- package/dist/integration-routes.d.ts +2 -2
- package/dist/integration-routes.d.ts.map +1 -1
- package/dist/integration-routes.js +3 -0
- package/dist/knowledge-refinement-routes.d.ts +4 -0
- package/dist/knowledge-refinement-routes.d.ts.map +1 -0
- package/dist/knowledge-refinement-routes.js +58 -0
- package/dist/knowledge-route-types.d.ts +11 -1
- package/dist/knowledge-route-types.d.ts.map +1 -1
- package/dist/knowledge-routes.d.ts +2 -2
- package/dist/knowledge-routes.d.ts.map +1 -1
- package/dist/knowledge-routes.js +156 -13
- package/dist/media-route-types.d.ts +10 -0
- package/dist/media-route-types.d.ts.map +1 -1
- package/dist/media-routes.d.ts +2 -2
- package/dist/media-routes.d.ts.map +1 -1
- package/dist/media-routes.js +134 -15
- package/dist/operator.d.ts +2 -2
- package/dist/operator.d.ts.map +1 -1
- package/dist/operator.js +49 -15
- package/dist/otlp-protobuf.d.ts +3 -0
- package/dist/otlp-protobuf.d.ts.map +1 -0
- package/dist/otlp-protobuf.js +977 -0
- package/dist/remote-routes.d.ts +2 -2
- package/dist/remote-routes.d.ts.map +1 -1
- package/dist/remote-routes.js +146 -13
- package/dist/remote.d.ts +2 -2
- package/dist/remote.d.ts.map +1 -1
- package/dist/route-helpers.d.ts +8 -0
- package/dist/route-helpers.d.ts.map +1 -1
- package/dist/route-helpers.js +24 -0
- package/dist/runtime-automation-routes.d.ts +2 -2
- package/dist/runtime-automation-routes.d.ts.map +1 -1
- package/dist/runtime-automation-routes.js +4 -1
- package/dist/runtime-route-types.d.ts +46 -3
- package/dist/runtime-route-types.d.ts.map +1 -1
- package/dist/runtime-routes.d.ts +2 -2
- package/dist/runtime-routes.d.ts.map +1 -1
- package/dist/runtime-routes.js +1 -0
- package/dist/runtime-session-routes.d.ts +13 -3
- package/dist/runtime-session-routes.d.ts.map +1 -1
- package/dist/runtime-session-routes.js +102 -10
- package/dist/sessions.d.ts +2 -2
- package/dist/sessions.d.ts.map +1 -1
- package/dist/sessions.js +3 -0
- package/dist/system-route-types.d.ts +19 -0
- package/dist/system-route-types.d.ts.map +1 -1
- package/dist/system-routes.d.ts +2 -2
- package/dist/system-routes.d.ts.map +1 -1
- package/dist/system-routes.js +18 -0
- package/dist/tasks.d.ts +2 -2
- package/dist/tasks.d.ts.map +1 -1
- package/dist/telemetry-routes.d.ts +25 -2
- package/dist/telemetry-routes.d.ts.map +1 -1
- package/dist/telemetry-routes.js +131 -15
- package/package.json +128 -5
package/dist/remote-routes.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { DaemonRemoteManagementRouteHandlers } from './context.js';
|
|
2
2
|
type JsonBody = Record<string, unknown>;
|
|
3
3
|
type RemotePeerAuth = unknown;
|
|
4
4
|
interface DistributedRuntimeRouteService {
|
|
@@ -30,7 +30,7 @@ interface DaemonRemoteRouteContext {
|
|
|
30
30
|
readonly requireAuthenticatedSession: (req: Request) => SessionUserLike | null;
|
|
31
31
|
readonly distributedRuntime: DistributedRuntimeRouteService;
|
|
32
32
|
}
|
|
33
|
-
export declare function createDaemonRemoteRouteHandlers(context: DaemonRemoteRouteContext):
|
|
33
|
+
export declare function createDaemonRemoteRouteHandlers(context: DaemonRemoteRouteContext): DaemonRemoteManagementRouteHandlers;
|
|
34
34
|
export declare function handleRemotePairRequest(context: Pick<DaemonRemoteRouteContext, 'parseJsonBody' | 'distributedRuntime'>, req: Request): Promise<Response>;
|
|
35
35
|
export declare function handleRemotePairVerify(context: Pick<DaemonRemoteRouteContext, 'parseJsonBody' | 'distributedRuntime'>, req: Request): Promise<Response>;
|
|
36
36
|
export declare function handleRemotePeerHeartbeat(context: Pick<DaemonRemoteRouteContext, 'parseJsonBody' | 'requireRemotePeer' | 'distributedRuntime'>, req: Request): Promise<Response>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-routes.d.ts","sourceRoot":"","sources":["../src/remote-routes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"remote-routes.d.ts","sourceRoot":"","sources":["../src/remote-routes.ts"],"names":[],"mappings":"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"}
|
package/dist/remote-routes.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { jsonErrorResponse } from './error-response.js';
|
|
2
2
|
import { serializableJsonResponse } from './route-helpers.js';
|
|
3
|
+
const MAX_REMOTE_RESULT_BYTES = 1_000_000;
|
|
4
|
+
const MAX_REMOTE_PAYLOAD_BYTES = 1_000_000;
|
|
3
5
|
export function createDaemonRemoteRouteHandlers(context) {
|
|
4
6
|
return {
|
|
5
7
|
getRemotePairRequests: () => Response.json({ requests: context.distributedRuntime.listPairRequests() }),
|
|
@@ -34,10 +36,9 @@ export async function handleRemotePairRequest(context, req) {
|
|
|
34
36
|
clientMode: typeof body.clientMode === 'string' ? body.clientMode : undefined,
|
|
35
37
|
capabilities: Array.isArray(body.capabilities) ? body.capabilities.filter((value) => typeof value === 'string') : [],
|
|
36
38
|
commands: Array.isArray(body.commands) ? body.commands.filter((value) => typeof value === 'string') : [],
|
|
37
|
-
metadata:
|
|
39
|
+
metadata: readMetadataWithClientHintForwardedFor(req, body.metadata),
|
|
38
40
|
requestedBy: 'remote',
|
|
39
|
-
|
|
40
|
-
ttlMs: typeof body.ttlMs === 'number' ? body.ttlMs : undefined,
|
|
41
|
+
ttlMs: boundedPositiveNumber(body.ttlMs, 1_000, 86_400_000),
|
|
41
42
|
});
|
|
42
43
|
return Response.json(created, { status: 201 });
|
|
43
44
|
}
|
|
@@ -51,8 +52,7 @@ export async function handleRemotePairVerify(context, req) {
|
|
|
51
52
|
return Response.json({ error: 'Missing requestId or challenge' }, { status: 400 });
|
|
52
53
|
}
|
|
53
54
|
const verified = await context.distributedRuntime.verifyPairRequest(requestId, challenge, {
|
|
54
|
-
|
|
55
|
-
metadata: typeof body.metadata === 'object' && body.metadata !== null ? body.metadata : {},
|
|
55
|
+
metadata: readMetadataWithClientHintForwardedFor(req, body.metadata),
|
|
56
56
|
});
|
|
57
57
|
return verified
|
|
58
58
|
? Response.json(verified)
|
|
@@ -66,12 +66,11 @@ export async function handleRemotePeerHeartbeat(context, req) {
|
|
|
66
66
|
if (body instanceof Response)
|
|
67
67
|
return body;
|
|
68
68
|
const peer = await context.distributedRuntime.heartbeatPeer(auth, {
|
|
69
|
-
remoteAddress: req.headers.get('x-forwarded-for') ?? undefined,
|
|
70
69
|
capabilities: Array.isArray(body.capabilities) ? body.capabilities.filter((value) => typeof value === 'string') : undefined,
|
|
71
70
|
commands: Array.isArray(body.commands) ? body.commands.filter((value) => typeof value === 'string') : undefined,
|
|
72
71
|
version: typeof body.version === 'string' ? body.version : undefined,
|
|
73
72
|
clientMode: typeof body.clientMode === 'string' ? body.clientMode : undefined,
|
|
74
|
-
metadata:
|
|
73
|
+
metadata: readMetadataWithClientHintForwardedFor(req, body.metadata),
|
|
75
74
|
});
|
|
76
75
|
return Response.json({ peer });
|
|
77
76
|
}
|
|
@@ -83,8 +82,8 @@ export async function handleRemotePeerWorkPull(context, req) {
|
|
|
83
82
|
if (body instanceof Response)
|
|
84
83
|
return body;
|
|
85
84
|
const work = await context.distributedRuntime.claimWork(auth, {
|
|
86
|
-
maxItems:
|
|
87
|
-
leaseMs:
|
|
85
|
+
maxItems: boundedPositiveNumber(body.maxItems, 1, 100),
|
|
86
|
+
leaseMs: boundedPositiveNumber(body.leaseMs, 1_000, 3_600_000),
|
|
88
87
|
});
|
|
89
88
|
return Response.json({ work });
|
|
90
89
|
}
|
|
@@ -95,9 +94,12 @@ export async function handleRemotePeerWorkComplete(context, workId, req) {
|
|
|
95
94
|
const body = await context.parseJsonBody(req);
|
|
96
95
|
if (body instanceof Response)
|
|
97
96
|
return body;
|
|
97
|
+
const result = validateRemoteJsonPayload(body.result, MAX_REMOTE_RESULT_BYTES, 'result');
|
|
98
|
+
if (result instanceof Response)
|
|
99
|
+
return result;
|
|
98
100
|
const work = await context.distributedRuntime.completeWork(auth, workId, {
|
|
99
101
|
status: body.status === 'failed' || body.status === 'cancelled' ? body.status : body.status === 'completed' ? 'completed' : undefined,
|
|
100
|
-
result
|
|
102
|
+
result,
|
|
101
103
|
error: typeof body.error === 'string' ? body.error : undefined,
|
|
102
104
|
metadata: typeof body.metadata === 'object' && body.metadata !== null ? body.metadata : {},
|
|
103
105
|
});
|
|
@@ -105,6 +107,134 @@ export async function handleRemotePeerWorkComplete(context, workId, req) {
|
|
|
105
107
|
? Response.json({ work })
|
|
106
108
|
: Response.json({ error: 'Unknown or unclaimed remote work item' }, { status: 404 });
|
|
107
109
|
}
|
|
110
|
+
function boundedPositiveNumber(value, min, max) {
|
|
111
|
+
if (typeof value !== 'number' || !Number.isFinite(value))
|
|
112
|
+
return undefined;
|
|
113
|
+
return Math.max(min, Math.min(max, Math.trunc(value)));
|
|
114
|
+
}
|
|
115
|
+
function validateRemoteJsonPayload(value, maxBytes, field) {
|
|
116
|
+
const size = estimateJsonByteLengthWithinLimit(value ?? null, maxBytes);
|
|
117
|
+
if (size.kind === 'invalid') {
|
|
118
|
+
return Response.json({
|
|
119
|
+
error: `Remote ${field} must be JSON-serializable`,
|
|
120
|
+
}, { status: 400 });
|
|
121
|
+
}
|
|
122
|
+
if (size.byteLength <= maxBytes)
|
|
123
|
+
return value;
|
|
124
|
+
return Response.json({
|
|
125
|
+
error: `Remote ${field} exceeds ${maxBytes} byte limit`,
|
|
126
|
+
}, { status: 413 });
|
|
127
|
+
}
|
|
128
|
+
function estimateJsonByteLengthWithinLimit(value, maxBytes, seen = new Set()) {
|
|
129
|
+
const byteLength = measureJsonByteLength(value, maxBytes, seen);
|
|
130
|
+
return byteLength === undefined ? { kind: 'invalid' } : { kind: 'ok', byteLength };
|
|
131
|
+
}
|
|
132
|
+
function measureJsonByteLength(value, maxBytes, seen) {
|
|
133
|
+
const valueType = typeof value;
|
|
134
|
+
if (value === null)
|
|
135
|
+
return 4;
|
|
136
|
+
if (typeof value === 'string')
|
|
137
|
+
return jsonStringByteLength(value, maxBytes);
|
|
138
|
+
if (valueType === 'number')
|
|
139
|
+
return Number.isFinite(value) ? String(value).length : 4;
|
|
140
|
+
if (valueType === 'boolean')
|
|
141
|
+
return value ? 4 : 5;
|
|
142
|
+
if (valueType === 'undefined' || valueType === 'function' || valueType === 'symbol')
|
|
143
|
+
return 4;
|
|
144
|
+
if (valueType !== 'object')
|
|
145
|
+
return undefined;
|
|
146
|
+
const objectValue = value;
|
|
147
|
+
if (seen.has(objectValue))
|
|
148
|
+
return undefined;
|
|
149
|
+
seen.add(objectValue);
|
|
150
|
+
try {
|
|
151
|
+
let total = 2;
|
|
152
|
+
if (Array.isArray(value)) {
|
|
153
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
154
|
+
if (index > 0)
|
|
155
|
+
total += 1;
|
|
156
|
+
if (total > maxBytes)
|
|
157
|
+
return total;
|
|
158
|
+
const entrySize = measureJsonByteLength(value[index], maxBytes - total, seen);
|
|
159
|
+
if (entrySize === undefined)
|
|
160
|
+
return undefined;
|
|
161
|
+
total += entrySize;
|
|
162
|
+
if (total > maxBytes) {
|
|
163
|
+
return total;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return total;
|
|
167
|
+
}
|
|
168
|
+
let count = 0;
|
|
169
|
+
for (const [key, entryValue] of Object.entries(value)) {
|
|
170
|
+
const entryType = typeof entryValue;
|
|
171
|
+
if (entryType === 'undefined' || entryType === 'function' || entryType === 'symbol')
|
|
172
|
+
continue;
|
|
173
|
+
if (count > 0)
|
|
174
|
+
total += 1;
|
|
175
|
+
total += jsonStringByteLength(key, maxBytes - total) + 1;
|
|
176
|
+
if (total > maxBytes)
|
|
177
|
+
return total;
|
|
178
|
+
const entrySize = measureJsonByteLength(entryValue, maxBytes - total, seen);
|
|
179
|
+
if (entrySize === undefined)
|
|
180
|
+
return undefined;
|
|
181
|
+
total += entrySize;
|
|
182
|
+
count += 1;
|
|
183
|
+
if (total > maxBytes) {
|
|
184
|
+
return total;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return total;
|
|
188
|
+
}
|
|
189
|
+
finally {
|
|
190
|
+
seen.delete(objectValue);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
function jsonStringByteLength(value, maxBytes = Number.POSITIVE_INFINITY) {
|
|
194
|
+
let total = 2;
|
|
195
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
196
|
+
const code = value.charCodeAt(index);
|
|
197
|
+
if (code === 0x22 || code === 0x5c || code === 0x08 || code === 0x0c || code === 0x0a || code === 0x0d || code === 0x09) {
|
|
198
|
+
total += 2;
|
|
199
|
+
}
|
|
200
|
+
else if (code <= 0x1f) {
|
|
201
|
+
total += 6;
|
|
202
|
+
}
|
|
203
|
+
else if (code >= 0xd800 && code <= 0xdbff) {
|
|
204
|
+
const next = value.charCodeAt(index + 1);
|
|
205
|
+
if (next >= 0xdc00 && next <= 0xdfff) {
|
|
206
|
+
total += 4;
|
|
207
|
+
index += 1;
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
total += 6;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
else if (code >= 0xdc00 && code <= 0xdfff) {
|
|
214
|
+
total += 6;
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
total += code <= 0x7f ? 1 : code <= 0x7ff ? 2 : 3;
|
|
218
|
+
}
|
|
219
|
+
if (total > maxBytes)
|
|
220
|
+
return total;
|
|
221
|
+
}
|
|
222
|
+
return total;
|
|
223
|
+
}
|
|
224
|
+
function readMetadataWithClientHintForwardedFor(req, value) {
|
|
225
|
+
const metadata = typeof value === 'object' && value !== null && !Array.isArray(value)
|
|
226
|
+
? { ...value }
|
|
227
|
+
: {};
|
|
228
|
+
const clientHintForwardedFor = readClientHintForwardedFor(req);
|
|
229
|
+
return clientHintForwardedFor ? { ...metadata, clientHintForwardedFor } : metadata;
|
|
230
|
+
}
|
|
231
|
+
function readClientHintForwardedFor(req) {
|
|
232
|
+
// x-forwarded-for is caller-controlled unless the daemon is explicitly behind
|
|
233
|
+
// a trusted proxy. Preserve a small display/audit hint under an explicit
|
|
234
|
+
// client-hint key, but never use it for authorization decisions.
|
|
235
|
+
const value = req.headers.get('x-forwarded-for')?.split(',')[0]?.trim();
|
|
236
|
+
return value ? value : undefined;
|
|
237
|
+
}
|
|
108
238
|
function operatorActor(context, req) {
|
|
109
239
|
return context.authToken ? 'shared-token' : context.requireAuthenticatedSession(req)?.username ?? 'operator';
|
|
110
240
|
}
|
|
@@ -199,15 +329,18 @@ async function handleInvokeRemotePeer(context, peerId, req) {
|
|
|
199
329
|
if (!command) {
|
|
200
330
|
return Response.json({ error: 'Missing remote invoke command' }, { status: 400 });
|
|
201
331
|
}
|
|
332
|
+
const payload = validateRemoteJsonPayload(body.payload, MAX_REMOTE_PAYLOAD_BYTES, 'payload');
|
|
333
|
+
if (payload instanceof Response)
|
|
334
|
+
return payload;
|
|
202
335
|
try {
|
|
203
336
|
const invoked = await context.distributedRuntime.invokePeer({
|
|
204
337
|
peerId,
|
|
205
338
|
command,
|
|
206
|
-
payload
|
|
339
|
+
payload,
|
|
207
340
|
priority: body.priority === 'high' || body.priority === 'default' ? body.priority : 'normal',
|
|
208
341
|
actor: operatorActor(context, req),
|
|
209
|
-
waitMs:
|
|
210
|
-
timeoutMs:
|
|
342
|
+
waitMs: boundedPositiveNumber(body.waitMs, 0, 300_000),
|
|
343
|
+
timeoutMs: boundedPositiveNumber(body.timeoutMs, 1_000, 300_000),
|
|
211
344
|
sessionId: typeof body.sessionId === 'string' ? body.sessionId : undefined,
|
|
212
345
|
routeId: typeof body.routeId === 'string' ? body.routeId : undefined,
|
|
213
346
|
automationRunId: typeof body.automationRunId === 'string' ? body.automationRunId : undefined,
|
package/dist/remote.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare function dispatchRemoteRoutes(req: Request, handlers:
|
|
1
|
+
import type { DaemonRemoteDispatchRouteHandlers } from './context.js';
|
|
2
|
+
export declare function dispatchRemoteRoutes(req: Request, handlers: DaemonRemoteDispatchRouteHandlers): Promise<Response | null>;
|
|
3
3
|
//# sourceMappingURL=remote.d.ts.map
|
package/dist/remote.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../src/remote.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../src/remote.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,cAAc,CAAC;AAEtE,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,iCAAiC,GAC1C,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CA6B1B"}
|
package/dist/route-helpers.d.ts
CHANGED
|
@@ -2,6 +2,14 @@ export type JsonRecord = Record<string, unknown>;
|
|
|
2
2
|
export declare function isJsonRecord(value: unknown): value is JsonRecord;
|
|
3
3
|
export declare function toSerializableJson(value: unknown, stack?: Map<object, string>, path?: string): unknown;
|
|
4
4
|
export declare function serializableJsonResponse(body: unknown, init?: ResponseInit): Response;
|
|
5
|
+
export interface BoundedIntegerOptions {
|
|
6
|
+
readonly fallback: number;
|
|
7
|
+
readonly min?: number;
|
|
8
|
+
readonly max?: number;
|
|
9
|
+
}
|
|
10
|
+
export declare function readBoundedInteger(raw: string | null, options: BoundedIntegerOptions): number;
|
|
11
|
+
export declare function readBoundedPositiveInteger(raw: string | null, fallback: number, max?: number): number;
|
|
12
|
+
export declare function readOptionalBoundedInteger(raw: string | null, min: number, max: number): number | undefined;
|
|
5
13
|
export declare function scopeMatches(granted: string, required: string): boolean;
|
|
6
14
|
export declare function missingScopes(grantedScopes: readonly string[] | undefined, requiredScopes: readonly string[]): string[];
|
|
7
15
|
export type ChannelLifecycleAction = 'inspect' | 'setup' | 'retest' | 'connect' | 'disconnect' | 'start' | 'stop' | 'login' | 'logout' | 'wait_login';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-helpers.d.ts","sourceRoot":"","sources":["../src/route-helpers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"route-helpers.d.ts","sourceRoot":"","sources":["../src/route-helpers.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEjD,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAEhE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,sBAA4B,EAAE,IAAI,SAAM,GAAG,OAAO,CAiBzG;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,QAAQ,CAErF;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,EAAE,qBAAqB,GAAG,MAAM,CAO7F;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAQ,GAAG,MAAM,CAEpG;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK3G;AAMD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAMvE;AAED,wBAAgB,aAAa,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EAAE,cAAc,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAGvH;AAED,MAAM,MAAM,sBAAsB,GAC9B,SAAS,GACT,OAAO,GACP,QAAQ,GACR,SAAS,GACT,YAAY,GACZ,OAAO,GACP,MAAM,GACN,OAAO,GACP,QAAQ,GACR,YAAY,CAAC;AAEjB,MAAM,MAAM,uBAAuB,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE5F,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,sBAAsB,GAAG,IAAI,CAaxF;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG,uBAAuB,GAAG,IAAI,CAI1F"}
|
package/dist/route-helpers.js
CHANGED
|
@@ -21,6 +21,30 @@ export function toSerializableJson(value, stack = new Map(), path = '$') {
|
|
|
21
21
|
export function serializableJsonResponse(body, init) {
|
|
22
22
|
return Response.json(toSerializableJson(body), init);
|
|
23
23
|
}
|
|
24
|
+
export function readBoundedInteger(raw, options) {
|
|
25
|
+
const min = options.min ?? 1;
|
|
26
|
+
const max = options.max ?? 1_000;
|
|
27
|
+
if (raw === null || raw.trim() === '')
|
|
28
|
+
return clampInteger(options.fallback, min, max);
|
|
29
|
+
const value = Number(raw);
|
|
30
|
+
if (!Number.isFinite(value))
|
|
31
|
+
return clampInteger(options.fallback, min, max);
|
|
32
|
+
return clampInteger(value, min, max);
|
|
33
|
+
}
|
|
34
|
+
export function readBoundedPositiveInteger(raw, fallback, max = 1_000) {
|
|
35
|
+
return readBoundedInteger(raw, { fallback, min: 1, max });
|
|
36
|
+
}
|
|
37
|
+
export function readOptionalBoundedInteger(raw, min, max) {
|
|
38
|
+
if (raw === null || raw.trim() === '')
|
|
39
|
+
return undefined;
|
|
40
|
+
const value = Number(raw);
|
|
41
|
+
if (!Number.isFinite(value))
|
|
42
|
+
return undefined;
|
|
43
|
+
return clampInteger(value, min, max);
|
|
44
|
+
}
|
|
45
|
+
function clampInteger(value, min, max) {
|
|
46
|
+
return Math.min(max, Math.max(min, Math.trunc(value)));
|
|
47
|
+
}
|
|
24
48
|
export function scopeMatches(granted, required) {
|
|
25
49
|
if (granted === '*' || granted === required)
|
|
26
50
|
return true;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { DaemonRuntimeAutomationRouteHandlers } from './context.js';
|
|
2
2
|
import type { DaemonRuntimeRouteContext } from './runtime-route-types.js';
|
|
3
|
-
export declare function createDaemonRuntimeAutomationRouteHandlers(context: DaemonRuntimeRouteContext):
|
|
3
|
+
export declare function createDaemonRuntimeAutomationRouteHandlers(context: DaemonRuntimeRouteContext): DaemonRuntimeAutomationRouteHandlers;
|
|
4
4
|
//# sourceMappingURL=runtime-automation-routes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-automation-routes.d.ts","sourceRoot":"","sources":["../src/runtime-automation-routes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtime-automation-routes.d.ts","sourceRoot":"","sources":["../src/runtime-automation-routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAG1E,wBAAgB,0CAA0C,CACxD,OAAO,EAAE,yBAAyB,GACjC,oCAAoC,CAoBtC"}
|
|
@@ -17,6 +17,7 @@ export function createDaemonRuntimeAutomationRouteHandlers(context) {
|
|
|
17
17
|
deleteSchedule: async (scheduleId) => handleDeleteSchedule(context, scheduleId),
|
|
18
18
|
setScheduleEnabled: (scheduleId, enabled) => handleSetScheduleEnabled(context, scheduleId, enabled),
|
|
19
19
|
runScheduleNow: (scheduleId) => handleRunScheduleNow(context, scheduleId),
|
|
20
|
+
getSchedulerCapacity: () => Response.json(context.automationManager.getSchedulerCapacity()),
|
|
20
21
|
};
|
|
21
22
|
}
|
|
22
23
|
function handleGetSchedules(context) {
|
|
@@ -30,7 +31,9 @@ async function handlePostSchedule(context, req) {
|
|
|
30
31
|
return body;
|
|
31
32
|
const prompt = typeof body.prompt === 'string' ? body.prompt.trim() : undefined;
|
|
32
33
|
const kind = typeof body.kind === 'string' ? body.kind : 'cron';
|
|
33
|
-
const
|
|
34
|
+
const scheduleObj = typeof body.schedule === 'object' && body.schedule !== null ? body.schedule : null;
|
|
35
|
+
const cronExpression = typeof body.cron === 'string' ? body.cron : typeof scheduleObj?.expression === 'string' ? scheduleObj.expression : undefined;
|
|
36
|
+
const cron = cronExpression;
|
|
34
37
|
const every = typeof body.every === 'string' ? body.every : undefined;
|
|
35
38
|
const at = typeof body.at === 'string' || typeof body.at === 'number' ? body.at : undefined;
|
|
36
39
|
const timezone = typeof body.timezone === 'string' ? body.timezone : undefined;
|
|
@@ -1,4 +1,18 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { DaemonRuntimeRouteHandlers } from './context.js';
|
|
2
|
+
/**
|
|
3
|
+
* Stable envelope shape for conversation-message-related events published
|
|
4
|
+
* through the control-plane gateway. Used by companion follow-up routing
|
|
5
|
+
* (kind='message') to broadcast messages to TUI surface subscribers without
|
|
6
|
+
* spawning an agent.
|
|
7
|
+
*/
|
|
8
|
+
export interface ConversationMessageEnvelope {
|
|
9
|
+
readonly messageId: string;
|
|
10
|
+
readonly body: string;
|
|
11
|
+
readonly source: string;
|
|
12
|
+
readonly timestamp: number;
|
|
13
|
+
/** Optional metadata (tool info, model id, etc.) */
|
|
14
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
15
|
+
}
|
|
2
16
|
export type JsonBody = Record<string, unknown>;
|
|
3
17
|
export type AutomationSurfaceKind = string;
|
|
4
18
|
export interface SharedSessionRoutingIntent {
|
|
@@ -49,6 +63,7 @@ export interface DaemonRuntimeRouteContext {
|
|
|
49
63
|
readonly parseOptionalJsonBody: (req: Request) => Promise<JsonBody | null | Response>;
|
|
50
64
|
readonly recordApiResponse: (req: Request, path: string, response: Response) => Response;
|
|
51
65
|
readonly requireAdmin: (req: Request) => Response | null;
|
|
66
|
+
readonly snapshotMetrics: () => Record<string, unknown>;
|
|
52
67
|
readonly sessionBroker: {
|
|
53
68
|
start(): Promise<void>;
|
|
54
69
|
submitMessage(input: {
|
|
@@ -175,6 +190,12 @@ export interface DaemonRuntimeRouteContext {
|
|
|
175
190
|
status: string;
|
|
176
191
|
routeId?: string;
|
|
177
192
|
}): Promise<void>;
|
|
193
|
+
appendCompanionMessage(sessionId: string, input: {
|
|
194
|
+
readonly messageId: string;
|
|
195
|
+
readonly body: string;
|
|
196
|
+
readonly timestamp: number;
|
|
197
|
+
readonly source: string;
|
|
198
|
+
}): Promise<unknown>;
|
|
178
199
|
};
|
|
179
200
|
readonly agentManager: {
|
|
180
201
|
getStatus(agentId: string): AgentRecordLike | null;
|
|
@@ -198,6 +219,12 @@ export interface DaemonRuntimeRouteContext {
|
|
|
198
219
|
agentId?: string;
|
|
199
220
|
status: string;
|
|
200
221
|
}>;
|
|
222
|
+
getSchedulerCapacity(): {
|
|
223
|
+
slotsTotal: number;
|
|
224
|
+
slotsInUse: number;
|
|
225
|
+
queueDepth: number;
|
|
226
|
+
oldestQueuedAgeMs: number | null;
|
|
227
|
+
};
|
|
201
228
|
};
|
|
202
229
|
readonly normalizeAtSchedule: (at: number) => unknown;
|
|
203
230
|
readonly normalizeEverySchedule: (interval: string | number, anchorAt?: number) => unknown;
|
|
@@ -214,13 +241,17 @@ export interface DaemonRuntimeRouteContext {
|
|
|
214
241
|
provider?: string;
|
|
215
242
|
context?: string;
|
|
216
243
|
executionIntent?: ExecutionIntent;
|
|
244
|
+
executionProtocol?: 'direct' | 'gather-plan-apply';
|
|
245
|
+
reviewMode?: 'none' | 'wrfc';
|
|
246
|
+
communicationLane?: 'parent-only' | 'parent-and-children' | 'cohort' | 'direct';
|
|
247
|
+
dangerously_disable_wrfc?: boolean;
|
|
217
248
|
}, logLabel: string, sessionId?: string) => AgentRecordLike | Response;
|
|
218
249
|
readonly queueSurfaceReplyFromBinding: (binding: AutomationRouteBinding | undefined, input: {
|
|
219
250
|
readonly agentId: string;
|
|
220
251
|
readonly task: string;
|
|
221
252
|
readonly sessionId?: string;
|
|
222
253
|
}) => void;
|
|
223
|
-
readonly surfaceDeliveryEnabled: (surface: 'slack' | 'discord' | 'ntfy' | 'webhook' | 'telegram' | 'google-chat' | 'signal' | 'whatsapp' | 'imessage' | 'msteams' | 'bluebubbles' | 'mattermost' | 'matrix') => boolean;
|
|
254
|
+
readonly surfaceDeliveryEnabled: (surface: 'slack' | 'discord' | 'ntfy' | 'webhook' | 'homeassistant' | 'telegram' | 'google-chat' | 'signal' | 'whatsapp' | 'imessage' | 'msteams' | 'bluebubbles' | 'mattermost' | 'matrix') => boolean;
|
|
224
255
|
readonly syncSpawnedAgentTask: (record: AgentRecordLike, sessionId?: string) => void;
|
|
225
256
|
readonly syncFinishedAgentTask: (record: AgentRecordLike) => void;
|
|
226
257
|
readonly configManager: {
|
|
@@ -234,7 +265,19 @@ export interface DaemonRuntimeRouteContext {
|
|
|
234
265
|
readonly runtimeDispatch: {
|
|
235
266
|
transitionRuntimeTask(taskId: string, status: string, patch: Record<string, unknown>, source: string): void;
|
|
236
267
|
} | null;
|
|
268
|
+
/**
|
|
269
|
+
* Publish a conversation follow-up event scoped to a specific session.
|
|
270
|
+
* Used by kind='message' routing to broadcast a ConversationMessageEnvelope
|
|
271
|
+
* to TUI surface subscribers so the operator can see the companion message.
|
|
272
|
+
*/
|
|
273
|
+
readonly publishConversationFollowup: (sessionId: string, envelope: Omit<ConversationMessageEnvelope, 'sessionId'>) => void;
|
|
274
|
+
/**
|
|
275
|
+
* Open a session-scoped SSE event stream for the companion app.
|
|
276
|
+
* Streams turn events (STREAM_DELTA, TURN_COMPLETED, etc.) and agent events
|
|
277
|
+
* for the given shared session back to the caller over SSE.
|
|
278
|
+
*/
|
|
279
|
+
readonly openSessionEventStream: (req: Request, sessionId: string) => Response;
|
|
237
280
|
}
|
|
238
|
-
export type DaemonRuntimeRouteHandlerMap =
|
|
281
|
+
export type DaemonRuntimeRouteHandlerMap = DaemonRuntimeRouteHandlers;
|
|
239
282
|
export {};
|
|
240
283
|
//# sourceMappingURL=runtime-route-types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-route-types.d.ts","sourceRoot":"","sources":["../src/runtime-route-types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtime-route-types.d.ts","sourceRoot":"","sources":["../src/runtime-route-types.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime-routes.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { DaemonRuntimeRouteHandlers } from './context.js';
|
|
2
2
|
import type { DaemonRuntimeRouteContext } from './runtime-route-types.js';
|
|
3
3
|
export type { DaemonRuntimeRouteContext } from './runtime-route-types.js';
|
|
4
|
-
export declare function createDaemonRuntimeRouteHandlers(context: DaemonRuntimeRouteContext):
|
|
4
|
+
export declare function createDaemonRuntimeRouteHandlers(context: DaemonRuntimeRouteContext): DaemonRuntimeRouteHandlers;
|
|
5
5
|
//# sourceMappingURL=runtime-routes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-routes.d.ts","sourceRoot":"","sources":["../src/runtime-routes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtime-routes.d.ts","sourceRoot":"","sources":["../src/runtime-routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAG/D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAE1E,YAAY,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAE1E,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,yBAAyB,GACjC,0BAA0B,CAM5B"}
|
package/dist/runtime-routes.js
CHANGED
|
@@ -1,4 +1,14 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { DaemonRuntimeRouteContext } from './runtime-route-types.js';
|
|
3
|
-
export declare function createDaemonRuntimeSessionRouteHandlers(context: DaemonRuntimeRouteContext):
|
|
1
|
+
import type { DaemonRuntimeSessionRouteHandlers, DaemonRuntimeTaskRouteHandlers } from './context.js';
|
|
2
|
+
import type { DaemonRuntimeRouteContext, JsonBody } from './runtime-route-types.js';
|
|
3
|
+
export declare function createDaemonRuntimeSessionRouteHandlers(context: DaemonRuntimeRouteContext): DaemonRuntimeSessionRouteHandlers & DaemonRuntimeTaskRouteHandlers;
|
|
4
|
+
/**
|
|
5
|
+
* Extract the message body from an incoming POST body.
|
|
6
|
+
*
|
|
7
|
+
* F13 normalization: accepts the canonical 'body' field.
|
|
8
|
+
* The caller must check for an empty result and return 400.
|
|
9
|
+
*
|
|
10
|
+
* @param body - Parsed JSON body from the request.
|
|
11
|
+
* @returns Trimmed message string, or '' if none of the accepted fields are present.
|
|
12
|
+
*/
|
|
13
|
+
export declare function readSharedSessionMessageBody(body: JsonBody): string;
|
|
4
14
|
//# sourceMappingURL=runtime-session-routes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-session-routes.d.ts","sourceRoot":"","sources":["../src/runtime-session-routes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtime-session-routes.d.ts","sourceRoot":"","sources":["../src/runtime-session-routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iCAAiC,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAEtG,OAAO,KAAK,EAEV,yBAAyB,EAEzB,QAAQ,EAET,MAAM,0BAA0B,CAAC;AAelC,wBAAgB,uCAAuC,CACrD,OAAO,EAAE,yBAAyB,GACjC,iCAAiC,GAAG,8BAA8B,CAkBpE;AA+VD;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAEnE"}
|