@uptimizr/collector-server 2.1.0 → 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.
Files changed (135) hide show
  1. package/AGENTS.md +179 -6
  2. package/README.md +69 -0
  3. package/dist/__tests__/support/registryRequests.d.ts +2 -1
  4. package/dist/__tests__/support/registryRequests.d.ts.map +1 -1
  5. package/dist/__tests__/support/registryRequests.js +17 -1
  6. package/dist/__tests__/support/registryRequests.js.map +1 -1
  7. package/dist/__tests__/support/subscriptionFixtures.d.ts +63 -0
  8. package/dist/__tests__/support/subscriptionFixtures.d.ts.map +1 -0
  9. package/dist/__tests__/support/subscriptionFixtures.js +17 -0
  10. package/dist/__tests__/support/subscriptionFixtures.js.map +1 -0
  11. package/dist/agentReport.d.ts +256 -0
  12. package/dist/agentReport.d.ts.map +1 -0
  13. package/dist/agentReport.js +861 -0
  14. package/dist/agentReport.js.map +1 -0
  15. package/dist/app.d.ts +13 -0
  16. package/dist/app.d.ts.map +1 -1
  17. package/dist/app.js +112 -5
  18. package/dist/app.js.map +1 -1
  19. package/dist/audit.d.ts +5 -1
  20. package/dist/audit.d.ts.map +1 -1
  21. package/dist/audit.js +24 -4
  22. package/dist/audit.js.map +1 -1
  23. package/dist/auth.d.ts +41 -1
  24. package/dist/auth.d.ts.map +1 -1
  25. package/dist/auth.js +47 -0
  26. package/dist/auth.js.map +1 -1
  27. package/dist/cli.js +99 -2
  28. package/dist/cli.js.map +1 -1
  29. package/dist/clickhouseStore.d.ts.map +1 -1
  30. package/dist/clickhouseStore.js +44 -2
  31. package/dist/clickhouseStore.js.map +1 -1
  32. package/dist/config.d.ts +49 -0
  33. package/dist/config.d.ts.map +1 -1
  34. package/dist/config.js +21 -0
  35. package/dist/config.js.map +1 -1
  36. package/dist/connectionLimiter.d.ts +23 -0
  37. package/dist/connectionLimiter.d.ts.map +1 -0
  38. package/dist/connectionLimiter.js +24 -0
  39. package/dist/connectionLimiter.js.map +1 -0
  40. package/dist/duckdbStore.d.ts.map +1 -1
  41. package/dist/duckdbStore.js +44 -1
  42. package/dist/duckdbStore.js.map +1 -1
  43. package/dist/internalDispatch.d.ts +36 -0
  44. package/dist/internalDispatch.d.ts.map +1 -0
  45. package/dist/internalDispatch.js +50 -0
  46. package/dist/internalDispatch.js.map +1 -0
  47. package/dist/memoryStore.d.ts.map +1 -1
  48. package/dist/memoryStore.js +314 -1
  49. package/dist/memoryStore.js.map +1 -1
  50. package/dist/mssqlStore.d.ts.map +1 -1
  51. package/dist/mssqlStore.js +44 -2
  52. package/dist/mssqlStore.js.map +1 -1
  53. package/dist/postgresStore.d.ts.map +1 -1
  54. package/dist/postgresStore.js +44 -2
  55. package/dist/postgresStore.js.map +1 -1
  56. package/dist/projectMetadata.d.ts +82 -0
  57. package/dist/projectMetadata.d.ts.map +1 -0
  58. package/dist/projectMetadata.js +50 -0
  59. package/dist/projectMetadata.js.map +1 -0
  60. package/dist/routes/context.d.ts +135 -0
  61. package/dist/routes/context.d.ts.map +1 -0
  62. package/dist/routes/context.js +306 -0
  63. package/dist/routes/context.js.map +1 -0
  64. package/dist/routes/insights.d.ts +36 -0
  65. package/dist/routes/insights.d.ts.map +1 -0
  66. package/dist/routes/insights.js +810 -0
  67. package/dist/routes/insights.js.map +1 -0
  68. package/dist/routes/live.d.ts +8 -0
  69. package/dist/routes/live.d.ts.map +1 -1
  70. package/dist/routes/live.js +8 -7
  71. package/dist/routes/live.js.map +1 -1
  72. package/dist/routes/mcp.d.ts +36 -0
  73. package/dist/routes/mcp.d.ts.map +1 -0
  74. package/dist/routes/mcp.js +262 -0
  75. package/dist/routes/mcp.js.map +1 -0
  76. package/dist/routes/meta.d.ts +16 -2
  77. package/dist/routes/meta.d.ts.map +1 -1
  78. package/dist/routes/meta.js +699 -10
  79. package/dist/routes/meta.js.map +1 -1
  80. package/dist/routes/metadata.d.ts +31 -0
  81. package/dist/routes/metadata.d.ts.map +1 -0
  82. package/dist/routes/metadata.js +163 -0
  83. package/dist/routes/metadata.js.map +1 -0
  84. package/dist/routes/narrative.d.ts +36 -0
  85. package/dist/routes/narrative.d.ts.map +1 -0
  86. package/dist/routes/narrative.js +95 -0
  87. package/dist/routes/narrative.js.map +1 -0
  88. package/dist/routes/panels.d.ts +44 -0
  89. package/dist/routes/panels.d.ts.map +1 -0
  90. package/dist/routes/panels.js +108 -0
  91. package/dist/routes/panels.js.map +1 -0
  92. package/dist/routes/query-dsl.d.ts +50 -0
  93. package/dist/routes/query-dsl.d.ts.map +1 -0
  94. package/dist/routes/query-dsl.js +359 -0
  95. package/dist/routes/query-dsl.js.map +1 -0
  96. package/dist/routes/query.d.ts +36 -0
  97. package/dist/routes/query.d.ts.map +1 -1
  98. package/dist/routes/query.js +101 -13
  99. package/dist/routes/query.js.map +1 -1
  100. package/dist/routes/subscriptions.d.ts +52 -0
  101. package/dist/routes/subscriptions.d.ts.map +1 -0
  102. package/dist/routes/subscriptions.js +290 -0
  103. package/dist/routes/subscriptions.js.map +1 -0
  104. package/dist/store.d.ts +113 -2
  105. package/dist/store.d.ts.map +1 -1
  106. package/dist/subscriptions/cli.d.ts +36 -0
  107. package/dist/subscriptions/cli.d.ts.map +1 -0
  108. package/dist/subscriptions/cli.js +143 -0
  109. package/dist/subscriptions/cli.js.map +1 -0
  110. package/dist/subscriptions/delivery.d.ts +101 -0
  111. package/dist/subscriptions/delivery.d.ts.map +1 -0
  112. package/dist/subscriptions/delivery.js +165 -0
  113. package/dist/subscriptions/delivery.js.map +1 -0
  114. package/dist/subscriptions/evaluate.d.ts +119 -0
  115. package/dist/subscriptions/evaluate.d.ts.map +1 -0
  116. package/dist/subscriptions/evaluate.js +326 -0
  117. package/dist/subscriptions/evaluate.js.map +1 -0
  118. package/dist/subscriptions/scheduler.d.ts +97 -0
  119. package/dist/subscriptions/scheduler.d.ts.map +1 -0
  120. package/dist/subscriptions/scheduler.js +332 -0
  121. package/dist/subscriptions/scheduler.js.map +1 -0
  122. package/dist/subscriptions/stream.d.ts +40 -0
  123. package/dist/subscriptions/stream.d.ts.map +1 -0
  124. package/dist/subscriptions/stream.js +38 -0
  125. package/dist/subscriptions/stream.js.map +1 -0
  126. package/dist/version.d.ts +3 -0
  127. package/dist/version.d.ts.map +1 -0
  128. package/dist/version.js +25 -0
  129. package/dist/version.js.map +1 -0
  130. package/dist/webhookSignature.d.ts +64 -0
  131. package/dist/webhookSignature.d.ts.map +1 -0
  132. package/dist/webhookSignature.js +91 -0
  133. package/dist/webhookSignature.js.map +1 -0
  134. package/llms.txt +38 -1
  135. 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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"}