@cat-factory/server 0.202.0 → 0.204.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/agents/modelProviderResolver.d.ts +11 -9
- package/dist/agents/modelProviderResolver.d.ts.map +1 -1
- package/dist/agents/modelProviderResolver.js +8 -8
- package/dist/agents/modelProviderResolver.js.map +1 -1
- package/dist/auth/machineGate.d.ts +21 -0
- package/dist/auth/machineGate.d.ts.map +1 -0
- package/dist/auth/machineGate.js +32 -0
- package/dist/auth/machineGate.js.map +1 -0
- package/dist/config/platformAlerts.d.ts +8 -3
- package/dist/config/platformAlerts.d.ts.map +1 -1
- package/dist/config/platformAlerts.js +6 -1
- package/dist/config/platformAlerts.js.map +1 -1
- package/dist/config/types.d.ts +43 -3
- package/dist/config/types.d.ts.map +1 -1
- package/dist/events/machineSubscribe.d.ts +17 -1
- package/dist/events/machineSubscribe.d.ts.map +1 -1
- package/dist/events/machineSubscribe.js +30 -0
- package/dist/events/machineSubscribe.js.map +1 -1
- package/dist/http/clientAddress.d.ts +40 -0
- package/dist/http/clientAddress.d.ts.map +1 -0
- package/dist/http/clientAddress.js +140 -0
- package/dist/http/clientAddress.js.map +1 -0
- package/dist/http/env.d.ts +26 -1
- package/dist/http/env.d.ts.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/modules/auth/AuthController.d.ts.map +1 -1
- package/dist/modules/auth/AuthController.js +87 -41
- package/dist/modules/auth/AuthController.js.map +1 -1
- package/dist/modules/auth/authThrottle.d.ts +18 -0
- package/dist/modules/auth/authThrottle.d.ts.map +1 -0
- package/dist/modules/auth/authThrottle.js +118 -0
- package/dist/modules/auth/authThrottle.js.map +1 -0
- package/dist/modules/binaryGenerators/BinaryGeneratorsController.d.ts.map +1 -1
- package/dist/modules/binaryGenerators/BinaryGeneratorsController.js +2 -8
- package/dist/modules/binaryGenerators/BinaryGeneratorsController.js.map +1 -1
- package/dist/modules/bugHunt/BugHuntController.d.ts.map +1 -1
- package/dist/modules/bugHunt/BugHuntController.js +6 -2
- package/dist/modules/bugHunt/BugHuntController.js.map +1 -1
- package/dist/modules/events/EventsRelayController.d.ts.map +1 -1
- package/dist/modules/events/EventsRelayController.js +10 -11
- package/dist/modules/events/EventsRelayController.js.map +1 -1
- package/dist/modules/foundationalServices/FoundationalBuiltinsController.d.ts.map +1 -1
- package/dist/modules/foundationalServices/FoundationalBuiltinsController.js +2 -8
- package/dist/modules/foundationalServices/FoundationalBuiltinsController.js.map +1 -1
- package/dist/modules/llmProxy/LlmProxyController.d.ts.map +1 -1
- package/dist/modules/llmProxy/LlmProxyController.js +38 -17
- package/dist/modules/llmProxy/LlmProxyController.js.map +1 -1
- package/dist/modules/notifications/NotificationRelayController.d.ts.map +1 -1
- package/dist/modules/notifications/NotificationRelayController.js +2 -6
- package/dist/modules/notifications/NotificationRelayController.js.map +1 -1
- package/dist/modules/persistence/GitHubDelegationController.d.ts.map +1 -1
- package/dist/modules/persistence/GitHubDelegationController.js +2 -6
- package/dist/modules/persistence/GitHubDelegationController.js.map +1 -1
- package/dist/modules/persistence/PersistenceController.d.ts.map +1 -1
- package/dist/modules/persistence/PersistenceController.js +3 -6
- package/dist/modules/persistence/PersistenceController.js.map +1 -1
- package/dist/modules/tasks/TaskSourceController.d.ts.map +1 -1
- package/dist/modules/tasks/TaskSourceController.js +11 -3
- package/dist/modules/tasks/TaskSourceController.js.map +1 -1
- package/dist/modules/tasks/TaskWebhookController.d.ts +1 -1
- package/dist/modules/tasks/TaskWebhookController.js +1 -1
- package/dist/modules/telemetry/TelemetryIngestController.d.ts.map +1 -1
- package/dist/modules/telemetry/TelemetryIngestController.js +2 -6
- package/dist/modules/telemetry/TelemetryIngestController.js.map +1 -1
- package/dist/modules/telemetry/TelemetryReadController.d.ts.map +1 -1
- package/dist/modules/telemetry/TelemetryReadController.js +2 -6
- package/dist/modules/telemetry/TelemetryReadController.js.map +1 -1
- package/dist/persistence/rpc-allowlist.d.ts.map +1 -1
- package/dist/persistence/rpc-allowlist.js +18 -0
- package/dist/persistence/rpc-allowlist.js.map +1 -1
- package/dist/runtime/platformHealth.d.ts.map +1 -1
- package/dist/runtime/platformHealth.js +130 -19
- package/dist/runtime/platformHealth.js.map +1 -1
- package/package.json +8 -8
|
@@ -1,20 +1,45 @@
|
|
|
1
|
-
import { distinctAccountIds, evaluatePlatformHealth, platformAlertReasons, platformHealthCardContent, } from '@cat-factory/orchestration';
|
|
1
|
+
import { alertsHaveRunEvidence, distinctAccountIds, evaluatePlatformHealth, platformAlertReasons, platformHealthCardContent, resolveAccountAlertConfig, } from '@cat-factory/orchestration';
|
|
2
|
+
import { describeError } from '@cat-factory/kernel';
|
|
2
3
|
import { sweepHealth } from '../observability/sweepHealth.js';
|
|
3
4
|
// Runtime-neutral platform-health ALERT sweep — the push counterpart to the operator dashboard
|
|
4
5
|
// read, shared by both facades' periodic sweeps (the Worker's cron `scheduled` handler and the
|
|
5
6
|
// Node `setInterval` sweeper), exactly like `escalateStaleNotifications`. It evaluates each
|
|
6
7
|
// account's aggregate run-health projection (the SAME `PlatformObservabilityService.summarize`
|
|
7
|
-
// the dashboard reads
|
|
8
|
+
// the dashboard reads, no new SQL) against that account's thresholds and, per account:
|
|
8
9
|
// - raises ONE `platform_health` notification per workspace when a ceiling is crossed, or
|
|
9
10
|
// - clears the open card when the account has recovered.
|
|
10
|
-
// The card
|
|
11
|
-
//
|
|
12
|
-
//
|
|
11
|
+
// The card's identity is the FIRING REASON SET, and the sweep raises only when that set CHANGES
|
|
12
|
+
// (the "state-change dedup, not every sweep" requirement), so a persistently-unhealthy
|
|
13
|
+
// deployment neither re-toasts the inbox nor rewrites the row on every pass.
|
|
13
14
|
//
|
|
14
15
|
// A no-op unless alerting is opted in AND both the notifications module and the platform-
|
|
15
16
|
// observability read are wired (tests / no telemetry DB / mothership local nodes). Best-effort
|
|
16
17
|
// per account: a failed summarize/raise for one account is logged and skipped, never aborting
|
|
17
18
|
// the others — this sweep must not become the silent background failure it exists to catch.
|
|
19
|
+
/**
|
|
20
|
+
* How many failing runs a card links to per workspace. Small on purpose: the card is a pointer
|
|
21
|
+
* at the evidence, not a report, and the dashboard behind it is the complete, live view. The
|
|
22
|
+
* count of what was left out rides the payload beside the sample.
|
|
23
|
+
*/
|
|
24
|
+
const FAILING_RUN_SAMPLE = 5;
|
|
25
|
+
/** Whether an open card's stored reason set already matches the one now firing. */
|
|
26
|
+
function sameReasonSet(card, reasons) {
|
|
27
|
+
const stored = card?.payload?.platformAlerts;
|
|
28
|
+
return (Array.isArray(stored) &&
|
|
29
|
+
stored.length === reasons.length &&
|
|
30
|
+
stored.every((r, i) => r === reasons[i]));
|
|
31
|
+
}
|
|
32
|
+
/** The workspace's slice of the account's failing-run sample, in payload shape. */
|
|
33
|
+
function failingRunsFor(refs, workspaceId) {
|
|
34
|
+
return refs
|
|
35
|
+
.filter((r) => r.workspaceId === workspaceId)
|
|
36
|
+
.map((r) => ({
|
|
37
|
+
executionId: r.executionId,
|
|
38
|
+
blockId: r.blockId,
|
|
39
|
+
failureKind: r.failureKind,
|
|
40
|
+
createdAt: r.createdAt,
|
|
41
|
+
}));
|
|
42
|
+
}
|
|
18
43
|
/**
|
|
19
44
|
* Run one platform-health alert pass across every account. Returns the number of workspaces a
|
|
20
45
|
* card was raised on and the number cleared. Enumerates accounts from the workspace projection
|
|
@@ -32,9 +57,9 @@ export async function sweepPlatformHealth(container, logger) {
|
|
|
32
57
|
if (!cfg.enabled || !notifications || !observability)
|
|
33
58
|
return { raised: 0, cleared: 0 };
|
|
34
59
|
const workspaces = await container.workspaceService.list(null);
|
|
35
|
-
// Group workspaces by account so each account is summarized ONCE (
|
|
36
|
-
// then the verdict is fanned to every workspace in the account. Legacy null-account
|
|
37
|
-
// are skipped: the platform-metrics read is account-scoped (matches `distinctAccountIds`).
|
|
60
|
+
// Group workspaces by account so each account is summarized ONCE (a handful of GROUP BY
|
|
61
|
+
// queries), then the verdict is fanned to every workspace in the account. Legacy null-account
|
|
62
|
+
// boards are skipped: the platform-metrics read is account-scoped (matches `distinctAccountIds`).
|
|
38
63
|
const byAccount = new Map();
|
|
39
64
|
for (const ws of workspaces) {
|
|
40
65
|
if (!ws.accountId)
|
|
@@ -47,36 +72,72 @@ export async function sweepPlatformHealth(container, logger) {
|
|
|
47
72
|
}
|
|
48
73
|
// Which workspaces already hold an open `platform_health` card, learned in ONE batched read
|
|
49
74
|
// up front rather than a `findOpenByType` point-read per workspace inside the loop (that N+1
|
|
50
|
-
// would run across the whole deployment every sweep
|
|
51
|
-
//
|
|
52
|
-
//
|
|
53
|
-
const
|
|
75
|
+
// would run across the whole deployment every sweep, every couple of minutes). The CARDS,
|
|
76
|
+
// not just their ids: the stored reason set on each is what makes the raise below
|
|
77
|
+
// state-change-driven rather than every-pass.
|
|
78
|
+
const openCards = await notifications.service.listOpenByType(workspaces.map((ws) => ws.id), 'platform_health');
|
|
54
79
|
const worstSweep = sweepHealth.worst();
|
|
55
80
|
let raised = 0;
|
|
56
81
|
let cleared = 0;
|
|
57
82
|
for (const accountId of distinctAccountIds(workspaces)) {
|
|
58
83
|
const workspaceIds = byAccount.get(accountId) ?? [];
|
|
59
84
|
try {
|
|
60
|
-
|
|
85
|
+
// The account's own thresholds: the deployment env defaults with this account's stored
|
|
86
|
+
// settings layered over them (slice 6's settings surface writes those). Read per account
|
|
87
|
+
// rather than per workspace, matching the scope the projection is computed at, and
|
|
88
|
+
// necessarily BEFORE the change check below, since the thresholds are what decide which
|
|
89
|
+
// reasons fire. It is not the per-pass cost that reads like: `AccountSettingsService.resolve`
|
|
90
|
+
// goes through the app cache seam (invalidated on every settings write), so the steady state
|
|
91
|
+
// is a cache hit per account, not a row read and a decrypt.
|
|
92
|
+
const account = resolveAccountAlertConfig(cfg, await readAccountAlertSettings(container, accountId, logger));
|
|
93
|
+
if (!account.enabled)
|
|
94
|
+
continue;
|
|
95
|
+
const snapshot = await observability.summarize(accountId, account.window);
|
|
61
96
|
// The sweeper streak is deployment-wide, not per account, so it is read once outside
|
|
62
97
|
// the per-account loop and applies to every account's card: a wedged retention sweep is
|
|
63
98
|
// everyone's problem, not the tenant's whose turn it happened to be.
|
|
64
|
-
const reasons = platformAlertReasons(evaluatePlatformHealth(snapshot,
|
|
65
|
-
|
|
99
|
+
const reasons = platformAlertReasons(evaluatePlatformHealth(snapshot, account.thresholds, worstSweep));
|
|
100
|
+
// The workspaces whose card would actually change state this pass. A healthy workspace
|
|
101
|
+
// with no card, and an unhealthy one whose firing set is unchanged, are both no-ops.
|
|
102
|
+
const changing = workspaceIds.filter((id) => reasons.length > 0 ? !sameReasonSet(openCards.get(id), reasons) : openCards.has(id));
|
|
103
|
+
if (changing.length === 0)
|
|
104
|
+
continue;
|
|
105
|
+
// The failing runs the card deep-links to, fetched ONCE for the account and only when
|
|
106
|
+
// something is actually being raised on a run-evidenced condition, so the steady state
|
|
107
|
+
// (nothing changing, or a backlog/stall alert with no failures behind it) costs nothing.
|
|
108
|
+
const evidence = reasons.length > 0 && alertsHaveRunEvidence(reasons)
|
|
109
|
+
? await readFailingRuns(observability, accountId, snapshot.since, logger)
|
|
110
|
+
: undefined;
|
|
111
|
+
for (const workspaceId of changing) {
|
|
66
112
|
if (reasons.length > 0) {
|
|
67
|
-
const { title, body } = platformHealthCardContent(reasons,
|
|
113
|
+
const { title, body } = platformHealthCardContent(reasons, account.window);
|
|
114
|
+
const failingRuns = evidence ? failingRunsFor(evidence, workspaceId) : [];
|
|
68
115
|
await notifications.service.raise(workspaceId, {
|
|
69
116
|
type: 'platform_health',
|
|
70
117
|
blockId: null,
|
|
71
118
|
executionId: null,
|
|
72
119
|
title,
|
|
73
120
|
body,
|
|
74
|
-
payload: {
|
|
121
|
+
payload: {
|
|
122
|
+
platformWindow: account.window,
|
|
123
|
+
platformAlerts: reasons,
|
|
124
|
+
// Both omitted when there is nothing to link: an empty list and an absent one
|
|
125
|
+
// would render the same, and only the absence is honest about a condition that
|
|
126
|
+
// has no failing run behind it in the first place.
|
|
127
|
+
...(failingRuns.length > 0
|
|
128
|
+
? {
|
|
129
|
+
platformFailingRuns: failingRuns,
|
|
130
|
+
// Every row of a workspace's partition carries that workspace's full
|
|
131
|
+
// failed count, so the cap can say "5 of 23" without a second query.
|
|
132
|
+
platformFailedTotal: evidence?.find((r) => r.workspaceId === workspaceId)?.workspaceFailedTotal ??
|
|
133
|
+
failingRuns.length,
|
|
134
|
+
}
|
|
135
|
+
: {}),
|
|
136
|
+
},
|
|
75
137
|
});
|
|
76
138
|
raised += 1;
|
|
77
139
|
}
|
|
78
|
-
else if (
|
|
79
|
-
(await notifications.service.clearByType(workspaceId, 'platform_health'))) {
|
|
140
|
+
else if (await notifications.service.clearByType(workspaceId, 'platform_health')) {
|
|
80
141
|
cleared += 1;
|
|
81
142
|
}
|
|
82
143
|
}
|
|
@@ -91,4 +152,54 @@ export async function sweepPlatformHealth(container, logger) {
|
|
|
91
152
|
}
|
|
92
153
|
return { raised, cleared };
|
|
93
154
|
}
|
|
155
|
+
/**
|
|
156
|
+
* The failing-run sample, or undefined when it could not be read.
|
|
157
|
+
*
|
|
158
|
+
* Its own try/catch, INSIDE the per-account one, because the deep link is an enhancement to
|
|
159
|
+
* the alert and the alert is the thing that matters: letting this failure reach the handler
|
|
160
|
+
* above would suppress the card entirely, so a bad evidence query would mean an unhealthy
|
|
161
|
+
* deployment stopped telling anyone it was unhealthy. The card still fires, without links, and
|
|
162
|
+
* the drop is named rather than silent.
|
|
163
|
+
*/
|
|
164
|
+
async function readFailingRuns(observability, accountId, since, logger) {
|
|
165
|
+
try {
|
|
166
|
+
return await observability.failingRuns(accountId, since, FAILING_RUN_SAMPLE);
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
logger?.warn('platform-health: could not read the failing runs behind the alert', {
|
|
170
|
+
scope: 'platform-health',
|
|
171
|
+
accountId,
|
|
172
|
+
...describeError(error),
|
|
173
|
+
});
|
|
174
|
+
return undefined;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* The account's stored alert overrides, or undefined when nothing is stored, the settings
|
|
179
|
+
* module is not wired, or the row cannot be read.
|
|
180
|
+
*
|
|
181
|
+
* The failure is caught HERE rather than left to the per-account handler above, and that
|
|
182
|
+
* placement is the point: an unreadable settings row must cost the account its OVERRIDES, not
|
|
183
|
+
* its alerting. Letting it propagate would mean a sealed-blob problem (a rotated encryption
|
|
184
|
+
* key, say) silently switched off the very watcher that is supposed to notice things going
|
|
185
|
+
* wrong, and it would do so on exactly the deployment where something already has. Falling
|
|
186
|
+
* back to the deployment defaults matches how `parseStoredAccountSettingsConfig` treats a
|
|
187
|
+
* malformed blob: unreadable is not a policy.
|
|
188
|
+
*/
|
|
189
|
+
async function readAccountAlertSettings(container, accountId, logger) {
|
|
190
|
+
const settings = container.accountSettings;
|
|
191
|
+
if (!settings)
|
|
192
|
+
return undefined;
|
|
193
|
+
try {
|
|
194
|
+
return (await settings.service.resolve(accountId)).config.platformAlerts;
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
logger?.warn('platform-health: account alert settings unreadable; using deployment defaults', {
|
|
198
|
+
scope: 'platform-health',
|
|
199
|
+
accountId,
|
|
200
|
+
...describeError(error),
|
|
201
|
+
});
|
|
202
|
+
return undefined;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
94
205
|
//# sourceMappingURL=platformHealth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platformHealth.js","sourceRoot":"","sources":["../../src/runtime/platformHealth.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"platformHealth.js","sourceRoot":"","sources":["../../src/runtime/platformHealth.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cat-factory/server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.204.0",
|
|
4
4
|
"description": "Runtime-neutral HTTP layer for the Agent Architecture Board: the Hono controllers, middleware (auth/authz/CORS/error), request helpers and the gateway seams shared by every deployment facade (Cloudflare Worker, Node service).",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -30,13 +30,13 @@
|
|
|
30
30
|
"hono": "^4.12.33",
|
|
31
31
|
"pino": "^10.3.1",
|
|
32
32
|
"valibot": "^1.4.2",
|
|
33
|
-
"@cat-factory/agents": "0.106.
|
|
34
|
-
"@cat-factory/contracts": "0.
|
|
35
|
-
"@cat-factory/integrations": "0.
|
|
36
|
-
"@cat-factory/
|
|
37
|
-
"@cat-factory/
|
|
38
|
-
"@cat-factory/
|
|
39
|
-
"@cat-factory/spend": "0.13.
|
|
33
|
+
"@cat-factory/agents": "0.106.8",
|
|
34
|
+
"@cat-factory/contracts": "0.221.0",
|
|
35
|
+
"@cat-factory/integrations": "0.121.1",
|
|
36
|
+
"@cat-factory/kernel": "0.223.0",
|
|
37
|
+
"@cat-factory/orchestration": "0.192.0",
|
|
38
|
+
"@cat-factory/prompt-fragments": "0.15.46",
|
|
39
|
+
"@cat-factory/spend": "0.13.11"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@types/node": "^26.1.2",
|