@uptimizr/collector-server 2.0.1 → 2.2.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/AGENTS.md +187 -11
- package/README.md +91 -7
- package/dist/__tests__/support/registryRequests.d.ts +2 -1
- package/dist/__tests__/support/registryRequests.d.ts.map +1 -1
- package/dist/__tests__/support/registryRequests.js +17 -1
- package/dist/__tests__/support/registryRequests.js.map +1 -1
- package/dist/__tests__/support/subscriptionFixtures.d.ts +63 -0
- package/dist/__tests__/support/subscriptionFixtures.d.ts.map +1 -0
- package/dist/__tests__/support/subscriptionFixtures.js +17 -0
- package/dist/__tests__/support/subscriptionFixtures.js.map +1 -0
- package/dist/agentReport.d.ts +256 -0
- package/dist/agentReport.d.ts.map +1 -0
- package/dist/agentReport.js +861 -0
- package/dist/agentReport.js.map +1 -0
- package/dist/app.d.ts +13 -0
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +112 -5
- package/dist/app.js.map +1 -1
- package/dist/audit.d.ts +5 -1
- package/dist/audit.d.ts.map +1 -1
- package/dist/audit.js +24 -4
- package/dist/audit.js.map +1 -1
- package/dist/auth.d.ts +41 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +47 -0
- package/dist/auth.js.map +1 -1
- package/dist/cli.js +133 -13
- package/dist/cli.js.map +1 -1
- package/dist/cliStore.d.ts +31 -2
- package/dist/cliStore.d.ts.map +1 -1
- package/dist/cliStore.js +34 -0
- package/dist/cliStore.js.map +1 -1
- package/dist/clickhouseStore.d.ts.map +1 -1
- package/dist/clickhouseStore.js +44 -2
- package/dist/clickhouseStore.js.map +1 -1
- package/dist/config.d.ts +49 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +21 -0
- package/dist/config.js.map +1 -1
- package/dist/connectionLimiter.d.ts +23 -0
- package/dist/connectionLimiter.d.ts.map +1 -0
- package/dist/connectionLimiter.js +24 -0
- package/dist/connectionLimiter.js.map +1 -0
- package/dist/duckdbStore.d.ts.map +1 -1
- package/dist/duckdbStore.js +44 -1
- package/dist/duckdbStore.js.map +1 -1
- package/dist/internalDispatch.d.ts +36 -0
- package/dist/internalDispatch.d.ts.map +1 -0
- package/dist/internalDispatch.js +50 -0
- package/dist/internalDispatch.js.map +1 -0
- package/dist/memoryStore.d.ts.map +1 -1
- package/dist/memoryStore.js +314 -1
- package/dist/memoryStore.js.map +1 -1
- package/dist/mssqlStore.d.ts.map +1 -1
- package/dist/mssqlStore.js +44 -2
- package/dist/mssqlStore.js.map +1 -1
- package/dist/postgresStore.d.ts.map +1 -1
- package/dist/postgresStore.js +44 -2
- package/dist/postgresStore.js.map +1 -1
- package/dist/projectMetadata.d.ts +82 -0
- package/dist/projectMetadata.d.ts.map +1 -0
- package/dist/projectMetadata.js +50 -0
- package/dist/projectMetadata.js.map +1 -0
- package/dist/routes/context.d.ts +135 -0
- package/dist/routes/context.d.ts.map +1 -0
- package/dist/routes/context.js +306 -0
- package/dist/routes/context.js.map +1 -0
- package/dist/routes/insights.d.ts +36 -0
- package/dist/routes/insights.d.ts.map +1 -0
- package/dist/routes/insights.js +810 -0
- package/dist/routes/insights.js.map +1 -0
- package/dist/routes/live.d.ts +8 -0
- package/dist/routes/live.d.ts.map +1 -1
- package/dist/routes/live.js +8 -7
- package/dist/routes/live.js.map +1 -1
- package/dist/routes/mcp.d.ts +36 -0
- package/dist/routes/mcp.d.ts.map +1 -0
- package/dist/routes/mcp.js +262 -0
- package/dist/routes/mcp.js.map +1 -0
- package/dist/routes/meta.d.ts +16 -2
- package/dist/routes/meta.d.ts.map +1 -1
- package/dist/routes/meta.js +699 -10
- package/dist/routes/meta.js.map +1 -1
- package/dist/routes/metadata.d.ts +31 -0
- package/dist/routes/metadata.d.ts.map +1 -0
- package/dist/routes/metadata.js +163 -0
- package/dist/routes/metadata.js.map +1 -0
- package/dist/routes/narrative.d.ts +36 -0
- package/dist/routes/narrative.d.ts.map +1 -0
- package/dist/routes/narrative.js +95 -0
- package/dist/routes/narrative.js.map +1 -0
- package/dist/routes/panels.d.ts +44 -0
- package/dist/routes/panels.d.ts.map +1 -0
- package/dist/routes/panels.js +108 -0
- package/dist/routes/panels.js.map +1 -0
- package/dist/routes/query-dsl.d.ts +50 -0
- package/dist/routes/query-dsl.d.ts.map +1 -0
- package/dist/routes/query-dsl.js +359 -0
- package/dist/routes/query-dsl.js.map +1 -0
- package/dist/routes/query.d.ts +36 -0
- package/dist/routes/query.d.ts.map +1 -1
- package/dist/routes/query.js +101 -13
- package/dist/routes/query.js.map +1 -1
- package/dist/routes/subscriptions.d.ts +52 -0
- package/dist/routes/subscriptions.d.ts.map +1 -0
- package/dist/routes/subscriptions.js +290 -0
- package/dist/routes/subscriptions.js.map +1 -0
- package/dist/store.d.ts +113 -2
- package/dist/store.d.ts.map +1 -1
- package/dist/subscriptions/cli.d.ts +36 -0
- package/dist/subscriptions/cli.d.ts.map +1 -0
- package/dist/subscriptions/cli.js +143 -0
- package/dist/subscriptions/cli.js.map +1 -0
- package/dist/subscriptions/delivery.d.ts +101 -0
- package/dist/subscriptions/delivery.d.ts.map +1 -0
- package/dist/subscriptions/delivery.js +165 -0
- package/dist/subscriptions/delivery.js.map +1 -0
- package/dist/subscriptions/evaluate.d.ts +119 -0
- package/dist/subscriptions/evaluate.d.ts.map +1 -0
- package/dist/subscriptions/evaluate.js +326 -0
- package/dist/subscriptions/evaluate.js.map +1 -0
- package/dist/subscriptions/scheduler.d.ts +97 -0
- package/dist/subscriptions/scheduler.d.ts.map +1 -0
- package/dist/subscriptions/scheduler.js +332 -0
- package/dist/subscriptions/scheduler.js.map +1 -0
- package/dist/subscriptions/stream.d.ts +40 -0
- package/dist/subscriptions/stream.d.ts.map +1 -0
- package/dist/subscriptions/stream.js +38 -0
- package/dist/subscriptions/stream.js.map +1 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +25 -0
- package/dist/version.js.map +1 -0
- package/dist/webhookSignature.d.ts +64 -0
- package/dist/webhookSignature.d.ts.map +1 -0
- package/dist/webhookSignature.js +91 -0
- package/dist/webhookSignature.js.map +1 -0
- package/llms.txt +39 -2
- package/package.json +17 -14
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `uptimizr agent report` — headless, scheduled analytics reports (ADR 0051 §6,
|
|
3
|
+
* design sketch §F.4).
|
|
4
|
+
*
|
|
5
|
+
* A weekly scene-health digest should not need a human to open a chat. This
|
|
6
|
+
* subcommand runs the **same** headless loop the browser assistant and the MCP
|
|
7
|
+
* server run — `runAgent` from `@uptimizr/agent-core` over the generated
|
|
8
|
+
* read-only tool catalog — once, from a shell, and writes Markdown to a file,
|
|
9
|
+
* to stdout, or to a signed webhook.
|
|
10
|
+
*
|
|
11
|
+
* Three boundaries are deliberate and load-bearing:
|
|
12
|
+
*
|
|
13
|
+
* 1. **The collector gains no in-process LLM loop.** This is a separate process
|
|
14
|
+
* that talks to the collector over its ordinary HTTP query API with an
|
|
15
|
+
* ordinary project API key, exactly as any other agent client would. Nothing
|
|
16
|
+
* here is importable by the server (keep backends thin, ADR 0005).
|
|
17
|
+
* 2. **Scheduling is the operator's.** cron, a systemd timer, a GitHub Action —
|
|
18
|
+
* the CLI runs once and exits with a meaningful code. Uptimizr operates
|
|
19
|
+
* nothing (ADR 0017).
|
|
20
|
+
* 3. **Provider configuration comes from the environment only and is never
|
|
21
|
+
* persisted.** The provider key is read once into the adapter; it is never
|
|
22
|
+
* logged, echoed, written to a report or included in an error message. The
|
|
23
|
+
* collector key is likewise never printed.
|
|
24
|
+
*
|
|
25
|
+
* The report is **read-only**: the catalog it exposes performs `GET`s against
|
|
26
|
+
* the query API and nothing else, so a `query`-capability key is all it needs
|
|
27
|
+
* (and all it should be given — #309 / ADR 0051 §7).
|
|
28
|
+
*/
|
|
29
|
+
import { type AgentMessage, type AgentSkill, type LlmProvider, type ProviderUsage, type ReadTool } from "@uptimizr/agent-core";
|
|
30
|
+
/**
|
|
31
|
+
* A problem the operator can fix, reported as one clear line rather than a
|
|
32
|
+
* stack trace. Everything user-facing this module rejects — a missing variable,
|
|
33
|
+
* an unknown skill, an unreachable provider — is one of these.
|
|
34
|
+
*/
|
|
35
|
+
export declare class AgentReportError extends Error {
|
|
36
|
+
/** Process exit code to use (see {@link EXIT}). */
|
|
37
|
+
readonly exitCode: number;
|
|
38
|
+
constructor(message: string,
|
|
39
|
+
/** Process exit code to use (see {@link EXIT}). */
|
|
40
|
+
exitCode?: number);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Exit codes, documented because a scheduled job branches on them.
|
|
44
|
+
*
|
|
45
|
+
* `incomplete` is deliberately non-zero: a digest whose tool calls partly failed
|
|
46
|
+
* is still written (and says so), but a cron wrapper must be able to notice.
|
|
47
|
+
*/
|
|
48
|
+
export declare const EXIT: {
|
|
49
|
+
/** The report was produced and every tool call succeeded. */
|
|
50
|
+
readonly ok: 0;
|
|
51
|
+
/** Usage or configuration error — nothing ran. */
|
|
52
|
+
readonly usage: 1;
|
|
53
|
+
/** The provider call, or the webhook delivery, failed. */
|
|
54
|
+
readonly provider: 2;
|
|
55
|
+
/** A report was produced but is incomplete: a tool call failed, or no answer. */
|
|
56
|
+
readonly incomplete: 3;
|
|
57
|
+
};
|
|
58
|
+
/** Wire formats the hosted adapter speaks, plus the model-free CI provider. */
|
|
59
|
+
export type ReportProviderKind = "anthropic" | "openai" | "scripted";
|
|
60
|
+
/** Version tag on the JSON report, so a consumer can branch on the shape. */
|
|
61
|
+
export declare const REPORT_SCHEMA = "uptimizr.agent-report/1";
|
|
62
|
+
/** Injectable process surface, so the whole command is testable in-process. */
|
|
63
|
+
export interface AgentReportDeps {
|
|
64
|
+
env: NodeJS.ProcessEnv;
|
|
65
|
+
/** Current time in epoch ms (pinned by tests). */
|
|
66
|
+
now: () => number;
|
|
67
|
+
fetchImpl: typeof fetch;
|
|
68
|
+
/** Report output (stdout): written verbatim, no trailing newline added. */
|
|
69
|
+
stdout: (text: string) => void;
|
|
70
|
+
/** Progress and diagnostics (stderr): one line at a time. */
|
|
71
|
+
stderr: (line: string) => void;
|
|
72
|
+
/** File writer, so tests need no temp directory. */
|
|
73
|
+
writeFile: (path: string, content: string) => void;
|
|
74
|
+
/**
|
|
75
|
+
* Build the LLM backend. Defaults to the hosted adapter (or the scripted
|
|
76
|
+
* provider); tests inject a deterministic one.
|
|
77
|
+
*/
|
|
78
|
+
createProvider: (config: ResolvedProvider, context: ProviderContext) => LlmProvider;
|
|
79
|
+
}
|
|
80
|
+
/** What `createProvider` needs beyond the resolved configuration. */
|
|
81
|
+
export interface ProviderContext {
|
|
82
|
+
skill: AgentSkill;
|
|
83
|
+
tools: readonly ReadTool[];
|
|
84
|
+
window: ReportWindow;
|
|
85
|
+
scene?: string;
|
|
86
|
+
}
|
|
87
|
+
/** The provider configuration, minus the key, which is never surfaced. */
|
|
88
|
+
export interface ResolvedProvider {
|
|
89
|
+
kind: ReportProviderKind;
|
|
90
|
+
model: string;
|
|
91
|
+
endpoint: string;
|
|
92
|
+
/** Present only for a hosted run; never logged, reported or serialised. */
|
|
93
|
+
apiKey?: string;
|
|
94
|
+
}
|
|
95
|
+
/** The analysis window in epoch milliseconds. */
|
|
96
|
+
export interface ReportWindow {
|
|
97
|
+
since: number;
|
|
98
|
+
until: number;
|
|
99
|
+
/** How it was expressed (`7d`, or `explicit` for `--since/--until`). */
|
|
100
|
+
label: string;
|
|
101
|
+
}
|
|
102
|
+
/** One tool call the agent made, as the report records it. */
|
|
103
|
+
export interface ReportToolCall {
|
|
104
|
+
name: string;
|
|
105
|
+
arguments: Record<string, unknown>;
|
|
106
|
+
/** Wall-clock milliseconds of the collector request, when one was made. */
|
|
107
|
+
durationMs: number | null;
|
|
108
|
+
ok: boolean;
|
|
109
|
+
/** The error text the loop fed back to the model, when the call failed. */
|
|
110
|
+
error: string | null;
|
|
111
|
+
/** Characters of the result handed back to the model. */
|
|
112
|
+
resultChars: number;
|
|
113
|
+
}
|
|
114
|
+
/** The structured report written by `--json` and posted to `--webhook`. */
|
|
115
|
+
export interface AgentReportJson {
|
|
116
|
+
schema: typeof REPORT_SCHEMA;
|
|
117
|
+
skill: string;
|
|
118
|
+
title: string;
|
|
119
|
+
scene: string | null;
|
|
120
|
+
window: ReportWindow;
|
|
121
|
+
collectorUrl: string;
|
|
122
|
+
provider: {
|
|
123
|
+
kind: ReportProviderKind;
|
|
124
|
+
model: string;
|
|
125
|
+
};
|
|
126
|
+
startedAt: string;
|
|
127
|
+
finishedAt: string;
|
|
128
|
+
durationMs: number;
|
|
129
|
+
steps: number;
|
|
130
|
+
maxSteps: number;
|
|
131
|
+
stoppedOnMaxSteps: boolean;
|
|
132
|
+
/** Token accounting summed over the run, when the provider reported any. */
|
|
133
|
+
usage: ProviderUsage | null;
|
|
134
|
+
/** Whether `GET /api/v1/context` answered, and how much prompt it contributed. */
|
|
135
|
+
context: {
|
|
136
|
+
available: boolean;
|
|
137
|
+
chars: number;
|
|
138
|
+
};
|
|
139
|
+
toolCalls: ReportToolCall[];
|
|
140
|
+
answer: string;
|
|
141
|
+
}
|
|
142
|
+
interface ParsedArgs {
|
|
143
|
+
flags: Record<string, string>;
|
|
144
|
+
switches: Set<string>;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Parse `--flag value` / `--flag=value` / `--switch`. Deliberately tiny and
|
|
148
|
+
* dependency-free, matching the rest of the CLI, and strict: an unknown flag is
|
|
149
|
+
* an error rather than being silently ignored, because a typo'd `--scene` in a
|
|
150
|
+
* cron line would otherwise produce a confidently project-wide report.
|
|
151
|
+
*/
|
|
152
|
+
export declare function parseAgentReportArgs(argv: readonly string[]): ParsedArgs;
|
|
153
|
+
/**
|
|
154
|
+
* Resolve the analysis window: explicit `--since`/`--until` epoch milliseconds
|
|
155
|
+
* win, otherwise `--window <N><h|d|w>` counts back from now.
|
|
156
|
+
*
|
|
157
|
+
* Parsed by hand (digits then a unit letter) rather than with a regular
|
|
158
|
+
* expression — the value is operator input and plain scanning has no ReDoS
|
|
159
|
+
* surface at all.
|
|
160
|
+
*/
|
|
161
|
+
export declare function resolveWindow(flags: Record<string, string>, nowMs: number, defaultWindow?: string): ReportWindow;
|
|
162
|
+
/**
|
|
163
|
+
* The window in the words a skill's text expects (`{{range}}`): "the last 7d",
|
|
164
|
+
* or the two dates when the window was given explicitly.
|
|
165
|
+
*
|
|
166
|
+
* The system prompt already states the window in epoch milliseconds, but the
|
|
167
|
+
* user turn a skill renders opens with a range of its own, and a report run with
|
|
168
|
+
* `--window 24h` must not ask for "the last 7 days" (#316).
|
|
169
|
+
*/
|
|
170
|
+
export declare function describeWindow(window: ReportWindow): string;
|
|
171
|
+
/**
|
|
172
|
+
* Compose the system prompt: role, shared guidelines, the clock, the window the
|
|
173
|
+
* operator asked for, the project context document, and the output rules.
|
|
174
|
+
*
|
|
175
|
+
* `projectContext` is the compact rendering of `GET /api/v1/context` (ADR 0051
|
|
176
|
+
* §5) — the project's real scene ids, region ids and custom-event names. It is
|
|
177
|
+
* injected here exactly as `useAssistant` and the eval harness inject it, and is
|
|
178
|
+
* simply absent on a collector too old to serve the endpoint.
|
|
179
|
+
*/
|
|
180
|
+
export declare function buildReportSystemPrompt(options: {
|
|
181
|
+
nowMs: number;
|
|
182
|
+
window: ReportWindow;
|
|
183
|
+
scene?: string;
|
|
184
|
+
projectContext?: string;
|
|
185
|
+
}): string;
|
|
186
|
+
/** One collector request the run made, timed. */
|
|
187
|
+
interface RecordedRead {
|
|
188
|
+
path: string;
|
|
189
|
+
durationMs: number;
|
|
190
|
+
ok: boolean;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Pair the transcript's tool calls with the timed reads, in order.
|
|
194
|
+
*
|
|
195
|
+
* A tool result that starts with one of {@link NO_REQUEST_PREFIXES} was rejected
|
|
196
|
+
* by the loop before it built a request, so it consumes no recorded read; every
|
|
197
|
+
* other result — including a collector error, which *did* make a request —
|
|
198
|
+
* consumes the next one.
|
|
199
|
+
*/
|
|
200
|
+
export declare function collectToolCalls(messages: readonly AgentMessage[], reads: readonly RecordedRead[]): ReportToolCall[];
|
|
201
|
+
/**
|
|
202
|
+
* Render the Markdown report: the model's findings, then a **Method** section
|
|
203
|
+
* that lists every tool call with its arguments and outcome.
|
|
204
|
+
*
|
|
205
|
+
* The Method section is not decoration — it is what makes an unattended,
|
|
206
|
+
* model-written document auditable: a reader can see exactly which aggregates
|
|
207
|
+
* the figures came from, re-run them, and spot a call that silently failed.
|
|
208
|
+
*/
|
|
209
|
+
export declare function renderReportMarkdown(report: AgentReportJson): string;
|
|
210
|
+
/**
|
|
211
|
+
* The deterministic, key-free provider (`UPTIMIZR_AGENT_PROVIDER=scripted`).
|
|
212
|
+
*
|
|
213
|
+
* It is a real {@link LlmProvider} driven through the real loop against the real
|
|
214
|
+
* collector — only the "model" is replaced by a rule: on its first turn it calls
|
|
215
|
+
* exactly the tools the chosen skill names, scoped to the run's window and
|
|
216
|
+
* scene; on its second it renders what the collector returned.
|
|
217
|
+
*
|
|
218
|
+
* It performs **no analysis** and is documented as such. What it is good for is
|
|
219
|
+
* everything around the analysis: proving the collector URL, the API key, the
|
|
220
|
+
* skill name, the output paths and the webhook signature all work, in CI or on a
|
|
221
|
+
* new host, with no provider account and no egress.
|
|
222
|
+
*/
|
|
223
|
+
export declare function createScriptedReportProvider(context: ProviderContext): LlmProvider;
|
|
224
|
+
/**
|
|
225
|
+
* Resolve the provider from the environment — and only from the environment
|
|
226
|
+
* (ADR 0051 §6): nothing about a provider is ever written to disk by this CLI.
|
|
227
|
+
*
|
|
228
|
+
* The key is read from `UPTIMIZR_AGENT_API_KEY`, falling back to the provider's
|
|
229
|
+
* own conventional variable so an operator who already exports `ANTHROPIC_API_KEY`
|
|
230
|
+
* needs no second export. It is returned for the adapter's constructor and is
|
|
231
|
+
* never placed in any other value this module produces.
|
|
232
|
+
*/
|
|
233
|
+
export declare function resolveProvider(env: NodeJS.ProcessEnv): ResolvedProvider;
|
|
234
|
+
/** `uptimizr agent report --help`. */
|
|
235
|
+
export declare function reportUsage(): string;
|
|
236
|
+
/**
|
|
237
|
+
* `uptimizr agent report --list-skills`.
|
|
238
|
+
*
|
|
239
|
+
* A skill declares its own arguments, but this command does not expose one flag
|
|
240
|
+
* per argument: `scene` comes from `--scene` and `range` is filled in from the
|
|
241
|
+
* resolved window (`--window`, or `--since`/`--until`). Printing `[--range]`
|
|
242
|
+
* would advertise a flag that does not exist, so arguments are named the way an
|
|
243
|
+
* operator actually supplies them.
|
|
244
|
+
*/
|
|
245
|
+
export declare function listSkills(): string;
|
|
246
|
+
/**
|
|
247
|
+
* Run `uptimizr agent report`.
|
|
248
|
+
*
|
|
249
|
+
* Returns the process exit code rather than calling `process.exit`, so the whole
|
|
250
|
+
* command is exercisable in-process by the test suite. Every failure the
|
|
251
|
+
* operator can act on surfaces as one stderr line, never a stack trace, and
|
|
252
|
+
* never containing a key.
|
|
253
|
+
*/
|
|
254
|
+
export declare function runAgentReport(argv: readonly string[], overrides?: Partial<AgentReportDeps>): Promise<number>;
|
|
255
|
+
export {};
|
|
256
|
+
//# sourceMappingURL=agentReport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentReport.d.ts","sourceRoot":"","sources":["../src/agentReport.ts"],"names":[],"mappings":"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"}
|