wunderland 0.89.1 → 0.91.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/dist/channels/api/types.d.ts +18 -0
- package/dist/channels/api/types.d.ts.map +1 -1
- package/dist/cli/commands/start/agent-turn.d.ts.map +1 -1
- package/dist/cli/commands/start/agent-turn.js +12 -0
- package/dist/cli/commands/start/agent-turn.js.map +1 -1
- package/dist/cli/commands/start/channel-handler.d.ts +3 -0
- package/dist/cli/commands/start/channel-handler.d.ts.map +1 -1
- package/dist/cli/commands/start/channel-handler.js +18 -0
- package/dist/cli/commands/start/channel-handler.js.map +1 -1
- package/dist/cli/commands/start/extension-loader.d.ts.map +1 -1
- package/dist/cli/commands/start/extension-loader.js +41 -5
- package/dist/cli/commands/start/extension-loader.js.map +1 -1
- package/dist/cli/commands/start/hosted-events.d.ts +118 -0
- package/dist/cli/commands/start/hosted-events.d.ts.map +1 -0
- package/dist/cli/commands/start/hosted-events.js +285 -0
- package/dist/cli/commands/start/hosted-events.js.map +1 -0
- package/dist/cli/commands/start/http-server.d.ts.map +1 -1
- package/dist/cli/commands/start/http-server.js +1 -0
- package/dist/cli/commands/start/http-server.js.map +1 -1
- package/dist/cli/commands/start/index.d.ts.map +1 -1
- package/dist/cli/commands/start/index.js +4 -0
- package/dist/cli/commands/start/index.js.map +1 -1
- package/dist/cli/commands/start/routes/chat.d.ts.map +1 -1
- package/dist/cli/commands/start/routes/chat.js +12 -1
- package/dist/cli/commands/start/routes/chat.js.map +1 -1
- package/dist/cli/commands/start/routes/types.d.ts +3 -0
- package/dist/cli/commands/start/routes/types.d.ts.map +1 -1
- package/dist/cli/commands/start/startup-display.d.ts.map +1 -1
- package/dist/cli/commands/start/startup-display.js +2 -0
- package/dist/cli/commands/start/startup-display.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +1 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/runtime/execution/schema-on-demand.d.ts +8 -0
- package/dist/runtime/execution/schema-on-demand.d.ts.map +1 -1
- package/dist/runtime/execution/schema-on-demand.js +14 -0
- package/dist/runtime/execution/schema-on-demand.js.map +1 -1
- package/dist/runtime/tools/tool-allow-list.d.ts +52 -0
- package/dist/runtime/tools/tool-allow-list.d.ts.map +1 -0
- package/dist/runtime/tools/tool-allow-list.js +96 -0
- package/dist/runtime/tools/tool-allow-list.js.map +1 -0
- package/dist/runtime/tools/tool-calling.d.ts +16 -0
- package/dist/runtime/tools/tool-calling.d.ts.map +1 -1
- package/dist/runtime/tools/tool-calling.js +128 -12
- package/dist/runtime/tools/tool-calling.js.map +1 -1
- package/dist/runtime/tools/tool-helpers.d.ts +24 -0
- package/dist/runtime/tools/tool-helpers.d.ts.map +1 -1
- package/dist/runtime/tools/tool-helpers.js +64 -4
- package/dist/runtime/tools/tool-helpers.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/** The environment variable that names the control plane's agent API root. */
|
|
2
|
+
export declare const EVENTS_URL_ENV = "WUNDERLAND_EVENTS_URL";
|
|
3
|
+
/** The environment variable that holds the agent's bearer token for that API. */
|
|
4
|
+
export declare const EVENTS_TOKEN_ENV = "WUNDERLAND_EVENTS_TOKEN";
|
|
5
|
+
/** How often the reporter posts what waits. */
|
|
6
|
+
export declare const EVENTS_FLUSH_INTERVAL_MS = 5000;
|
|
7
|
+
/** The most events the reporter holds; past this it drops the oldest. */
|
|
8
|
+
export declare const EVENTS_QUEUE_LIMIT = 1000;
|
|
9
|
+
/** The most events one post carries; the events route refuses a larger batch. */
|
|
10
|
+
export declare const EVENTS_BATCH_LIMIT = 200;
|
|
11
|
+
/** The kinds of event the reporter sends. */
|
|
12
|
+
export declare const HOSTED_EVENT_KINDS: readonly ["turn_started", "turn_finished", "tool_called", "approval_requested", "provider_error", "channel_auth_failed", "referral_sent"];
|
|
13
|
+
/** One of {@link HOSTED_EVENT_KINDS}. */
|
|
14
|
+
export type HostedEventKind = (typeof HOSTED_EVENT_KINDS)[number];
|
|
15
|
+
/** The fields a caller may set on an event. */
|
|
16
|
+
export interface HostedEventFields {
|
|
17
|
+
/** A status code or a platform name. */
|
|
18
|
+
code?: string | number;
|
|
19
|
+
/** How many times this happened; the server counts one when absent. */
|
|
20
|
+
count?: number;
|
|
21
|
+
/** Prompt tokens of a finished turn. */
|
|
22
|
+
promptTokens?: number;
|
|
23
|
+
/** Completion tokens of a finished turn. */
|
|
24
|
+
completionTokens?: number;
|
|
25
|
+
/** The name of the tool a `tool_called` event reports. */
|
|
26
|
+
toolName?: string;
|
|
27
|
+
}
|
|
28
|
+
/** An event as it goes out. */
|
|
29
|
+
export interface HostedEvent {
|
|
30
|
+
kind: HostedEventKind;
|
|
31
|
+
/** When it happened, in milliseconds since the epoch. */
|
|
32
|
+
at: number;
|
|
33
|
+
code?: string;
|
|
34
|
+
count?: number;
|
|
35
|
+
promptTokens?: number;
|
|
36
|
+
completionTokens?: number;
|
|
37
|
+
toolName?: string;
|
|
38
|
+
}
|
|
39
|
+
/** Posts events to the control plane in the background. */
|
|
40
|
+
export interface EventsReporter {
|
|
41
|
+
/**
|
|
42
|
+
* Queues one event for the next post. Never throws, never waits. After
|
|
43
|
+
* {@link EventsReporter.stop} it does nothing.
|
|
44
|
+
*
|
|
45
|
+
* @param kind - The event's kind; any other value is ignored.
|
|
46
|
+
* @param fields - Its fields; a field that does not hold what it should is left out.
|
|
47
|
+
* @param operationId - The turn it belongs to, sent in the header
|
|
48
|
+
* `AGENTOS_OPERATION_ID_HEADER` names. Events of different turns go in
|
|
49
|
+
* different posts.
|
|
50
|
+
*/
|
|
51
|
+
report(kind: HostedEventKind, fields?: HostedEventFields, operationId?: string): void;
|
|
52
|
+
/** Posts what waits now. Never rejects; a batch the server could not take stays queued. */
|
|
53
|
+
flush(): Promise<void>;
|
|
54
|
+
/** Ends the interval and posts what waits, waiting briefly for the answer. */
|
|
55
|
+
stop(): Promise<void>;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Creates a reporter that posts `{ events: [...] }` to `<url>/events` every
|
|
59
|
+
* {@link EVENTS_FLUSH_INTERVAL_MS}, with `Authorization: Bearer <token>`.
|
|
60
|
+
*
|
|
61
|
+
* A post that gets no answer, a 429 or a 5xx leaves its batch queued for the
|
|
62
|
+
* next try; any other refusal drops the batch. Either way the reason goes to
|
|
63
|
+
* `console.warn`, one line a minute at most and never the token.
|
|
64
|
+
*
|
|
65
|
+
* @param options.url - The API root, without `/events`.
|
|
66
|
+
* @param options.token - The bearer token.
|
|
67
|
+
* @returns The reporter. Its interval does not keep the process alive.
|
|
68
|
+
*/
|
|
69
|
+
export declare function createEventsReporter(options: {
|
|
70
|
+
url: string;
|
|
71
|
+
token: string;
|
|
72
|
+
}): EventsReporter;
|
|
73
|
+
/**
|
|
74
|
+
* The reporter the environment asks for: one when `WUNDERLAND_EVENTS_URL` and
|
|
75
|
+
* `WUNDERLAND_EVENTS_TOKEN` both hold a value, none otherwise. A URL that does
|
|
76
|
+
* not parse makes none, with one warning line.
|
|
77
|
+
*
|
|
78
|
+
* @param env - The environment to read; `process.env` by default.
|
|
79
|
+
* @returns The reporter, or `undefined`.
|
|
80
|
+
*/
|
|
81
|
+
export declare function createEventsReporterFromEnv(env?: Record<string, string | undefined>): EventsReporter | undefined;
|
|
82
|
+
/** One turn's events, with its counts and its operation id kept in one place. */
|
|
83
|
+
export interface ReportedTurn {
|
|
84
|
+
/** The model called a tool the agent has; this comes before the call's approval. */
|
|
85
|
+
toolCalled(toolName: unknown): void;
|
|
86
|
+
/** One provider response's usage; the turn adds them up. */
|
|
87
|
+
usage(usage: {
|
|
88
|
+
prompt_tokens?: number;
|
|
89
|
+
completion_tokens?: number;
|
|
90
|
+
}): void;
|
|
91
|
+
/** A provider request failed; its status code goes out, never its message. */
|
|
92
|
+
providerError(error: unknown): void;
|
|
93
|
+
/** The turn is waiting on a person: a tool's approval or a checkpoint. */
|
|
94
|
+
approvalRequested(): void;
|
|
95
|
+
/** The turn ended, however it ended. Later calls do nothing. */
|
|
96
|
+
finished(): void;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Starts one turn's reporting: posts `turn_started`, and returns the calls the
|
|
100
|
+
* turn makes as it goes.
|
|
101
|
+
*
|
|
102
|
+
* @param reporter - The reporter, or `undefined`, which makes every call do nothing.
|
|
103
|
+
* @returns The turn's reporting calls, safe to pass as bare callbacks.
|
|
104
|
+
*/
|
|
105
|
+
export declare function startReportedTurn(reporter?: EventsReporter): ReportedTurn;
|
|
106
|
+
/** The `code` a channel pack's `error` event carries when the platform rejected its token. */
|
|
107
|
+
export declare const CHANNEL_AUTH_FAILED_CODE = "auth_failed";
|
|
108
|
+
/**
|
|
109
|
+
* Whether a channel event says the platform rejected the channel's token: an
|
|
110
|
+
* `error` event whose data carries `code: 'auth_failed'`.
|
|
111
|
+
*
|
|
112
|
+
* @param event - The channel event.
|
|
113
|
+
*/
|
|
114
|
+
export declare function isChannelAuthFailure(event: {
|
|
115
|
+
type?: unknown;
|
|
116
|
+
data?: unknown;
|
|
117
|
+
} | null | undefined): boolean;
|
|
118
|
+
//# sourceMappingURL=hosted-events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hosted-events.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/start/hosted-events.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview The hosted events reporter of `wunderland start`.
|
|
3
|
+
*
|
|
4
|
+
* With `WUNDERLAND_EVENTS_URL` and `WUNDERLAND_EVENTS_TOKEN` set, `start` posts
|
|
5
|
+
* the coarse events of what the agent does to `<url>/events`, so the control
|
|
6
|
+
* plane that runs the agent can see it working: names, counts, codes and times.
|
|
7
|
+
* Without them no reporter exists and nothing is posted.
|
|
8
|
+
*
|
|
9
|
+
* Message text never reaches this module's output. {@link createEventsReporter}
|
|
10
|
+
* sends only the known kinds and the known fields, and takes `code`, `toolName`
|
|
11
|
+
* and the operation id only as a single word, so a caller that passes text by
|
|
12
|
+
* mistake loses the field rather than posting the text.
|
|
13
|
+
*
|
|
14
|
+
* @module wunderland/cli/commands/start/hosted-events
|
|
15
|
+
*/
|
|
16
|
+
import { randomUUID } from 'node:crypto';
|
|
17
|
+
import { resolveOperationIdHeader } from '../../../platform/config/operation-id.js';
|
|
18
|
+
/** The environment variable that names the control plane's agent API root. */
|
|
19
|
+
export const EVENTS_URL_ENV = 'WUNDERLAND_EVENTS_URL';
|
|
20
|
+
/** The environment variable that holds the agent's bearer token for that API. */
|
|
21
|
+
export const EVENTS_TOKEN_ENV = 'WUNDERLAND_EVENTS_TOKEN';
|
|
22
|
+
/** How often the reporter posts what waits. */
|
|
23
|
+
export const EVENTS_FLUSH_INTERVAL_MS = 5_000;
|
|
24
|
+
/** The most events the reporter holds; past this it drops the oldest. */
|
|
25
|
+
export const EVENTS_QUEUE_LIMIT = 1_000;
|
|
26
|
+
/** The most events one post carries; the events route refuses a larger batch. */
|
|
27
|
+
export const EVENTS_BATCH_LIMIT = 200;
|
|
28
|
+
/** How long one post may take before its batch waits for the next try. */
|
|
29
|
+
const POST_TIMEOUT_MS = 10_000;
|
|
30
|
+
/** How long `stop` waits for the last post. A container's stop grace is short. */
|
|
31
|
+
const STOP_WAIT_MS = 2_000;
|
|
32
|
+
/** At most one warning line per this many milliseconds. */
|
|
33
|
+
const WARN_INTERVAL_MS = 60_000;
|
|
34
|
+
const CODE_MAX_LENGTH = 64;
|
|
35
|
+
const NAME_MAX_LENGTH = 128;
|
|
36
|
+
/** A single word: a status code, a platform, a tool's name, an operation id. */
|
|
37
|
+
const WORD = /^[A-Za-z0-9_.:-]+$/;
|
|
38
|
+
/** The kinds of event the reporter sends. */
|
|
39
|
+
export const HOSTED_EVENT_KINDS = [
|
|
40
|
+
'turn_started',
|
|
41
|
+
'turn_finished',
|
|
42
|
+
'tool_called',
|
|
43
|
+
'approval_requested',
|
|
44
|
+
'provider_error',
|
|
45
|
+
'channel_auth_failed',
|
|
46
|
+
'referral_sent',
|
|
47
|
+
];
|
|
48
|
+
const KNOWN_KINDS = new Set(HOSTED_EVENT_KINDS);
|
|
49
|
+
function asWord(value, maxLength) {
|
|
50
|
+
const text = typeof value === 'number' ? String(value) : value;
|
|
51
|
+
return typeof text === 'string' && text.length <= maxLength && WORD.test(text) ? text : undefined;
|
|
52
|
+
}
|
|
53
|
+
function asCount(value) {
|
|
54
|
+
return typeof value === 'number' && Number.isSafeInteger(value) && value >= 0 ? value : undefined;
|
|
55
|
+
}
|
|
56
|
+
/** Builds the outgoing event from the known fields, each only if it holds what it should. */
|
|
57
|
+
function buildEvent(kind, fields = {}) {
|
|
58
|
+
const event = { kind, at: Date.now() };
|
|
59
|
+
const code = asWord(fields.code, CODE_MAX_LENGTH);
|
|
60
|
+
if (code !== undefined)
|
|
61
|
+
event.code = code;
|
|
62
|
+
const toolName = asWord(fields.toolName, NAME_MAX_LENGTH);
|
|
63
|
+
if (toolName !== undefined)
|
|
64
|
+
event.toolName = toolName;
|
|
65
|
+
const count = asCount(fields.count);
|
|
66
|
+
if (count !== undefined)
|
|
67
|
+
event.count = count;
|
|
68
|
+
const promptTokens = asCount(fields.promptTokens);
|
|
69
|
+
if (promptTokens !== undefined)
|
|
70
|
+
event.promptTokens = promptTokens;
|
|
71
|
+
const completionTokens = asCount(fields.completionTokens);
|
|
72
|
+
if (completionTokens !== undefined)
|
|
73
|
+
event.completionTokens = completionTokens;
|
|
74
|
+
return event;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Creates a reporter that posts `{ events: [...] }` to `<url>/events` every
|
|
78
|
+
* {@link EVENTS_FLUSH_INTERVAL_MS}, with `Authorization: Bearer <token>`.
|
|
79
|
+
*
|
|
80
|
+
* A post that gets no answer, a 429 or a 5xx leaves its batch queued for the
|
|
81
|
+
* next try; any other refusal drops the batch. Either way the reason goes to
|
|
82
|
+
* `console.warn`, one line a minute at most and never the token.
|
|
83
|
+
*
|
|
84
|
+
* @param options.url - The API root, without `/events`.
|
|
85
|
+
* @param options.token - The bearer token.
|
|
86
|
+
* @returns The reporter. Its interval does not keep the process alive.
|
|
87
|
+
*/
|
|
88
|
+
export function createEventsReporter(options) {
|
|
89
|
+
const endpoint = `${options.url.trim().replace(/\/+$/, '')}/events`;
|
|
90
|
+
const token = options.token.trim();
|
|
91
|
+
let lastWarnAt;
|
|
92
|
+
const warn = (line) => {
|
|
93
|
+
const now = Date.now();
|
|
94
|
+
if (lastWarnAt !== undefined && now - lastWarnAt < WARN_INTERVAL_MS)
|
|
95
|
+
return;
|
|
96
|
+
lastWarnAt = now;
|
|
97
|
+
console.warn(`[hosted-events] ${line}`);
|
|
98
|
+
};
|
|
99
|
+
let operationHeader;
|
|
100
|
+
try {
|
|
101
|
+
operationHeader = resolveOperationIdHeader();
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
warn(`${err instanceof Error ? err.message : String(err)} Posting events without an operation id.`);
|
|
105
|
+
}
|
|
106
|
+
let queue = [];
|
|
107
|
+
let dropped = 0;
|
|
108
|
+
let stopped = false;
|
|
109
|
+
let running = null;
|
|
110
|
+
/** Posts one batch. Returns whether the batch has left the queue's care. */
|
|
111
|
+
const post = async (batch, operationId) => {
|
|
112
|
+
const headers = {
|
|
113
|
+
'Content-Type': 'application/json',
|
|
114
|
+
Authorization: `Bearer ${token}`,
|
|
115
|
+
};
|
|
116
|
+
if (operationHeader && operationId)
|
|
117
|
+
headers[operationHeader] = operationId;
|
|
118
|
+
let status;
|
|
119
|
+
try {
|
|
120
|
+
const res = await fetch(endpoint, {
|
|
121
|
+
method: 'POST',
|
|
122
|
+
headers,
|
|
123
|
+
body: JSON.stringify({ events: batch.map((item) => item.event) }),
|
|
124
|
+
signal: AbortSignal.timeout(POST_TIMEOUT_MS),
|
|
125
|
+
});
|
|
126
|
+
status = res.status;
|
|
127
|
+
await res.text();
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
const reason = err instanceof Error ? err.name : 'error';
|
|
131
|
+
warn(`The events server did not answer (${reason}); keeping ${batch.length} events for the next try.`);
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
if (status >= 200 && status < 300)
|
|
135
|
+
return true;
|
|
136
|
+
if (status === 429 || status >= 500) {
|
|
137
|
+
warn(`The events server answered ${status}; keeping ${batch.length} events for the next try.`);
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
warn(`The events server refused ${batch.length} events (${status}); dropping them.`);
|
|
141
|
+
return true;
|
|
142
|
+
};
|
|
143
|
+
const drain = async () => {
|
|
144
|
+
while (queue.length > 0) {
|
|
145
|
+
// The next post: the oldest waiting turn's events, up to the batch limit.
|
|
146
|
+
const operationId = queue[0].operationId;
|
|
147
|
+
const batch = [];
|
|
148
|
+
for (const item of queue) {
|
|
149
|
+
if (item.operationId !== operationId)
|
|
150
|
+
continue;
|
|
151
|
+
batch.push(item);
|
|
152
|
+
if (batch.length === EVENTS_BATCH_LIMIT)
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
if (!(await post(batch, operationId)))
|
|
156
|
+
break;
|
|
157
|
+
const sent = new Set(batch);
|
|
158
|
+
queue = queue.filter((item) => !sent.has(item));
|
|
159
|
+
}
|
|
160
|
+
if (dropped > 0) {
|
|
161
|
+
warn(`Dropped ${dropped} events: more than ${EVENTS_QUEUE_LIMIT} were waiting.`);
|
|
162
|
+
dropped = 0;
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
const flush = () => {
|
|
166
|
+
if (!running) {
|
|
167
|
+
running = drain().finally(() => {
|
|
168
|
+
running = null;
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
return running;
|
|
172
|
+
};
|
|
173
|
+
const timer = setInterval(() => {
|
|
174
|
+
void flush();
|
|
175
|
+
}, EVENTS_FLUSH_INTERVAL_MS);
|
|
176
|
+
timer.unref?.();
|
|
177
|
+
return {
|
|
178
|
+
report(kind, fields, operationId) {
|
|
179
|
+
if (stopped || !KNOWN_KINDS.has(kind))
|
|
180
|
+
return;
|
|
181
|
+
if (queue.length >= EVENTS_QUEUE_LIMIT) {
|
|
182
|
+
queue.shift();
|
|
183
|
+
dropped += 1;
|
|
184
|
+
}
|
|
185
|
+
queue.push({ event: buildEvent(kind, fields), operationId: asWord(operationId, NAME_MAX_LENGTH) });
|
|
186
|
+
},
|
|
187
|
+
flush,
|
|
188
|
+
async stop() {
|
|
189
|
+
if (stopped)
|
|
190
|
+
return;
|
|
191
|
+
stopped = true;
|
|
192
|
+
clearInterval(timer);
|
|
193
|
+
let waited;
|
|
194
|
+
await Promise.race([
|
|
195
|
+
flush(),
|
|
196
|
+
new Promise((resolve) => {
|
|
197
|
+
waited = setTimeout(resolve, STOP_WAIT_MS);
|
|
198
|
+
waited.unref?.();
|
|
199
|
+
}),
|
|
200
|
+
]);
|
|
201
|
+
if (waited)
|
|
202
|
+
clearTimeout(waited);
|
|
203
|
+
},
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* The reporter the environment asks for: one when `WUNDERLAND_EVENTS_URL` and
|
|
208
|
+
* `WUNDERLAND_EVENTS_TOKEN` both hold a value, none otherwise. A URL that does
|
|
209
|
+
* not parse makes none, with one warning line.
|
|
210
|
+
*
|
|
211
|
+
* @param env - The environment to read; `process.env` by default.
|
|
212
|
+
* @returns The reporter, or `undefined`.
|
|
213
|
+
*/
|
|
214
|
+
export function createEventsReporterFromEnv(env = process.env) {
|
|
215
|
+
const url = env[EVENTS_URL_ENV]?.trim();
|
|
216
|
+
const token = env[EVENTS_TOKEN_ENV]?.trim();
|
|
217
|
+
if (!url || !token)
|
|
218
|
+
return undefined;
|
|
219
|
+
try {
|
|
220
|
+
new URL(url);
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
console.warn(`[hosted-events] ${EVENTS_URL_ENV} is not a URL; no events are posted.`);
|
|
224
|
+
return undefined;
|
|
225
|
+
}
|
|
226
|
+
return createEventsReporter({ url, token });
|
|
227
|
+
}
|
|
228
|
+
const UNREPORTED_TURN = Object.freeze({
|
|
229
|
+
toolCalled() { },
|
|
230
|
+
usage() { },
|
|
231
|
+
providerError() { },
|
|
232
|
+
approvalRequested() { },
|
|
233
|
+
finished() { },
|
|
234
|
+
});
|
|
235
|
+
/**
|
|
236
|
+
* Starts one turn's reporting: posts `turn_started`, and returns the calls the
|
|
237
|
+
* turn makes as it goes.
|
|
238
|
+
*
|
|
239
|
+
* @param reporter - The reporter, or `undefined`, which makes every call do nothing.
|
|
240
|
+
* @returns The turn's reporting calls, safe to pass as bare callbacks.
|
|
241
|
+
*/
|
|
242
|
+
export function startReportedTurn(reporter) {
|
|
243
|
+
if (!reporter)
|
|
244
|
+
return UNREPORTED_TURN;
|
|
245
|
+
const operationId = randomUUID();
|
|
246
|
+
let promptTokens = 0;
|
|
247
|
+
let completionTokens = 0;
|
|
248
|
+
let done = false;
|
|
249
|
+
reporter.report('turn_started', undefined, operationId);
|
|
250
|
+
return {
|
|
251
|
+
toolCalled(toolName) {
|
|
252
|
+
reporter.report('tool_called', { toolName: toolName }, operationId);
|
|
253
|
+
},
|
|
254
|
+
usage(usage) {
|
|
255
|
+
promptTokens += asCount(usage?.prompt_tokens) ?? 0;
|
|
256
|
+
completionTokens += asCount(usage?.completion_tokens) ?? 0;
|
|
257
|
+
},
|
|
258
|
+
providerError(error) {
|
|
259
|
+
const status = error?.status;
|
|
260
|
+
reporter.report('provider_error', typeof status === 'number' ? { code: status } : undefined, operationId);
|
|
261
|
+
},
|
|
262
|
+
approvalRequested() {
|
|
263
|
+
reporter.report('approval_requested', undefined, operationId);
|
|
264
|
+
},
|
|
265
|
+
finished() {
|
|
266
|
+
if (done)
|
|
267
|
+
return;
|
|
268
|
+
done = true;
|
|
269
|
+
reporter.report('turn_finished', { promptTokens, completionTokens }, operationId);
|
|
270
|
+
},
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
/** The `code` a channel pack's `error` event carries when the platform rejected its token. */
|
|
274
|
+
export const CHANNEL_AUTH_FAILED_CODE = 'auth_failed';
|
|
275
|
+
/**
|
|
276
|
+
* Whether a channel event says the platform rejected the channel's token: an
|
|
277
|
+
* `error` event whose data carries `code: 'auth_failed'`.
|
|
278
|
+
*
|
|
279
|
+
* @param event - The channel event.
|
|
280
|
+
*/
|
|
281
|
+
export function isChannelAuthFailure(event) {
|
|
282
|
+
return event?.type === 'error'
|
|
283
|
+
&& event.data?.code === CHANNEL_AUTH_FAILED_CODE;
|
|
284
|
+
}
|
|
285
|
+
//# sourceMappingURL=hosted-events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hosted-events.js","sourceRoot":"","sources":["../../../../src/cli/commands/start/hosted-events.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/start/http-server.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAWH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/start/http-server.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAWH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,WAAW,EAAE,MAAM,CA6K1E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-server.js","sourceRoot":"","sources":["../../../../src/cli/commands/start/http-server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"http-server.js","sourceRoot":"","sources":["../../../../src/cli/commands/start/http-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/start/index.ts"],"names":[],"mappings":"AACA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/start/index.ts"],"names":[],"mappings":"AACA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAiBlD,wBAA8B,QAAQ,CACpC,KAAK,EAAE,MAAM,EAAE,EACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EACvC,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CA2Gf"}
|
|
@@ -18,6 +18,7 @@ import { createAgentHttpServer } from './http-server.js';
|
|
|
18
18
|
import { startServerAndDisplay } from './startup-display.js';
|
|
19
19
|
import { bootstrapRagKnowledge } from './rag-bootstrap.js';
|
|
20
20
|
import { resolveListenHost } from '../../../channels/api/listen-host.js';
|
|
21
|
+
import { createEventsReporterFromEnv } from './hosted-events.js';
|
|
21
22
|
export default async function cmdStart(_args, flags, globals) {
|
|
22
23
|
// POST /chat answers without a secret unless one is configured, so the
|
|
23
24
|
// server listens on 127.0.0.1 unless --host names another address. A bad
|
|
@@ -89,6 +90,9 @@ export default async function cmdStart(_args, flags, globals) {
|
|
|
89
90
|
await phase('runtime', () => initAdaptiveRuntime(ctx));
|
|
90
91
|
// Phase 7: Pairing manager
|
|
91
92
|
phase('pairing', () => initPairing(ctx));
|
|
93
|
+
// Phase 7.5: The hosted events reporter, when both of its variables are set.
|
|
94
|
+
// Channels, the HTTP routes and the shutdown path all read it from ctx.
|
|
95
|
+
ctx.eventsReporter = createEventsReporterFromEnv();
|
|
92
96
|
// Phase 8: Channel runtime (adapter map, Discord extensions, subscriptions)
|
|
93
97
|
await phase('channels', async () => {
|
|
94
98
|
initChannelRuntime(ctx);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/commands/start/index.ts"],"names":[],"mappings":"AAAA,cAAc;AACd;;;;GAIG;AAGH,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAC3G,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/commands/start/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/start/routes/chat.ts"],"names":[],"mappings":"AACA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/start/routes/chat.ts"],"names":[],"mappings":"AACA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAiCjE,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAkBpE;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,kBAAkB,CAAC,CAke7B"}
|
|
@@ -15,6 +15,8 @@ import { buildToolDefs, runToolCallingTurn, safeJsonStringify, } from '../../../
|
|
|
15
15
|
import { classifyResearchDepth, buildResearchPrefix, createResearchClassifierLlmCall, shouldInjectResearch, } from '../../../../runtime/agentos-bridge/research-classifier.js';
|
|
16
16
|
import { buildPersonaSessionKey, createRequestScopedToolMap, extractRequestedPersonaId, resolveRequestScopedPersonaRuntime, } from '../../../../runtime/execution/request-persona.js';
|
|
17
17
|
import { buildOllamaRuntimeOptions } from '../../../../runtime/tools/ollama-options.js';
|
|
18
|
+
import { allowedToolNamesFor } from '../../../../runtime/tools/tool-allow-list.js';
|
|
19
|
+
import { startReportedTurn } from '../hosted-events.js';
|
|
18
20
|
import { readBody, sendJson, getHeaderString, isChatAuthorized, isLoopbackRequest, } from './helpers.js';
|
|
19
21
|
function toAgentosApprovalCategory(tool) {
|
|
20
22
|
const name = String(tool?.name || '').toLowerCase();
|
|
@@ -43,7 +45,7 @@ function toAgentosApprovalCategory(tool) {
|
|
|
43
45
|
export async function handleChatRoutes(req, res, url, deps) {
|
|
44
46
|
if (req.method !== 'POST' || url.pathname !== '/chat')
|
|
45
47
|
return false;
|
|
46
|
-
const { seedId, displayName, activePersonaId, availablePersonas, seed, providerId, model, llmApiKey, llmBaseUrl, canUseLLM, openrouterFallback, oauthGetApiKey, cfg, rawAgentConfig, globalConfig, configDir, policy, toolMap, sessions, systemPrompt, adaptiveRuntime, discoveryManager, strictToolNames, autoApproveToolCalls, llmJudgeHandler, dangerouslySkipPermissions, turnApprovalMode, defaultTenantId, workspaceAgentId, workspaceBaseDir, lazyTools, skillsPrompt, chatSecret, hitlManager, sessionTextLogger, } = deps;
|
|
48
|
+
const { seedId, displayName, activePersonaId, availablePersonas, seed, providerId, model, llmApiKey, llmBaseUrl, canUseLLM, openrouterFallback, oauthGetApiKey, cfg, rawAgentConfig, globalConfig, configDir, policy, toolMap, sessions, systemPrompt, adaptiveRuntime, discoveryManager, strictToolNames, autoApproveToolCalls, llmJudgeHandler, dangerouslySkipPermissions, turnApprovalMode, defaultTenantId, workspaceAgentId, workspaceBaseDir, lazyTools, skillsPrompt, chatSecret, hitlManager, sessionTextLogger, eventsReporter, } = deps;
|
|
47
49
|
if (!isChatAuthorized(req, url, chatSecret)) {
|
|
48
50
|
sendJson(res, 401, { error: 'Unauthorized' });
|
|
49
51
|
return true;
|
|
@@ -169,6 +171,7 @@ export async function handleChatRoutes(req, res, url, deps) {
|
|
|
169
171
|
* tool_calls entries.
|
|
170
172
|
*/
|
|
171
173
|
const workingMessages = [...messages];
|
|
174
|
+
const reportedTurn = startReportedTurn(eventsReporter);
|
|
172
175
|
try {
|
|
173
176
|
if (canUseLLM) {
|
|
174
177
|
/* ── Capability discovery — inject tiered context AND build filtered tool set ── */
|
|
@@ -258,6 +261,8 @@ export async function handleChatRoutes(req, res, url, deps) {
|
|
|
258
261
|
model,
|
|
259
262
|
messages: workingMessages,
|
|
260
263
|
toolMap: requestToolMap,
|
|
264
|
+
// tools.allow holds for every persona the request selects.
|
|
265
|
+
allowedToolNames: allowedToolNamesFor(cfg),
|
|
261
266
|
...(apiFilteredGetToolDefs && { getToolDefs: apiFilteredGetToolDefs }),
|
|
262
267
|
toolContext,
|
|
263
268
|
maxRounds: 8,
|
|
@@ -265,8 +270,11 @@ export async function handleChatRoutes(req, res, url, deps) {
|
|
|
265
270
|
strictToolNames,
|
|
266
271
|
toolFailureMode: adaptiveDecision.toolFailureMode,
|
|
267
272
|
ollamaOptions: buildOllamaRuntimeOptions(cfg?.ollama),
|
|
273
|
+
onUsage: reportedTurn.usage,
|
|
274
|
+
onProviderError: reportedTurn.providerError,
|
|
268
275
|
onToolCall: (tool, args) => {
|
|
269
276
|
toolCallCount += 1;
|
|
277
|
+
reportedTurn.toolCalled(tool?.name);
|
|
270
278
|
deps.broadcastAgentEvent?.({
|
|
271
279
|
type: 'tool_call',
|
|
272
280
|
toolName: tool?.name ?? 'unknown',
|
|
@@ -295,6 +303,7 @@ export async function handleChatRoutes(req, res, url, deps) {
|
|
|
295
303
|
(isLoopbackRequest(req) || (!!chatSecret && isChatAuthorized(req, url, chatSecret)))) {
|
|
296
304
|
return true;
|
|
297
305
|
}
|
|
306
|
+
reportedTurn.approvalRequested();
|
|
298
307
|
const preview = safeJsonStringify(args, 1800);
|
|
299
308
|
const effectLabel = tool.hasSideEffects === true ? 'side effects' : 'read-only';
|
|
300
309
|
const actionId = `tool-${seedId}-${randomUUID()}`;
|
|
@@ -314,6 +323,7 @@ export async function handleChatRoutes(req, res, url, deps) {
|
|
|
314
323
|
askCheckpoint: turnApprovalMode === 'off' ? undefined : async ({ round, toolCalls }) => {
|
|
315
324
|
if (autoApproveToolCalls)
|
|
316
325
|
return true;
|
|
326
|
+
reportedTurn.approvalRequested();
|
|
317
327
|
const checkpointId = `checkpoint-${seedId}-${internalSessionId}-${round}-${randomUUID()}`;
|
|
318
328
|
const completedWork = toolCalls.map((c) => {
|
|
319
329
|
const effect = c.hasSideEffects ? 'side effects' : 'read-only';
|
|
@@ -397,6 +407,7 @@ export async function handleChatRoutes(req, res, url, deps) {
|
|
|
397
407
|
}
|
|
398
408
|
}
|
|
399
409
|
finally {
|
|
410
|
+
reportedTurn.finished();
|
|
400
411
|
try {
|
|
401
412
|
await adaptiveRuntime.recordTurnOutcome({
|
|
402
413
|
scope: {
|