@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.
Files changed (77) hide show
  1. package/dist/agents/modelProviderResolver.d.ts +11 -9
  2. package/dist/agents/modelProviderResolver.d.ts.map +1 -1
  3. package/dist/agents/modelProviderResolver.js +8 -8
  4. package/dist/agents/modelProviderResolver.js.map +1 -1
  5. package/dist/auth/machineGate.d.ts +21 -0
  6. package/dist/auth/machineGate.d.ts.map +1 -0
  7. package/dist/auth/machineGate.js +32 -0
  8. package/dist/auth/machineGate.js.map +1 -0
  9. package/dist/config/platformAlerts.d.ts +8 -3
  10. package/dist/config/platformAlerts.d.ts.map +1 -1
  11. package/dist/config/platformAlerts.js +6 -1
  12. package/dist/config/platformAlerts.js.map +1 -1
  13. package/dist/config/types.d.ts +43 -3
  14. package/dist/config/types.d.ts.map +1 -1
  15. package/dist/events/machineSubscribe.d.ts +17 -1
  16. package/dist/events/machineSubscribe.d.ts.map +1 -1
  17. package/dist/events/machineSubscribe.js +30 -0
  18. package/dist/events/machineSubscribe.js.map +1 -1
  19. package/dist/http/clientAddress.d.ts +40 -0
  20. package/dist/http/clientAddress.d.ts.map +1 -0
  21. package/dist/http/clientAddress.js +140 -0
  22. package/dist/http/clientAddress.js.map +1 -0
  23. package/dist/http/env.d.ts +26 -1
  24. package/dist/http/env.d.ts.map +1 -1
  25. package/dist/index.d.ts +2 -1
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +4 -1
  28. package/dist/index.js.map +1 -1
  29. package/dist/modules/auth/AuthController.d.ts.map +1 -1
  30. package/dist/modules/auth/AuthController.js +87 -41
  31. package/dist/modules/auth/AuthController.js.map +1 -1
  32. package/dist/modules/auth/authThrottle.d.ts +18 -0
  33. package/dist/modules/auth/authThrottle.d.ts.map +1 -0
  34. package/dist/modules/auth/authThrottle.js +118 -0
  35. package/dist/modules/auth/authThrottle.js.map +1 -0
  36. package/dist/modules/binaryGenerators/BinaryGeneratorsController.d.ts.map +1 -1
  37. package/dist/modules/binaryGenerators/BinaryGeneratorsController.js +2 -8
  38. package/dist/modules/binaryGenerators/BinaryGeneratorsController.js.map +1 -1
  39. package/dist/modules/bugHunt/BugHuntController.d.ts.map +1 -1
  40. package/dist/modules/bugHunt/BugHuntController.js +6 -2
  41. package/dist/modules/bugHunt/BugHuntController.js.map +1 -1
  42. package/dist/modules/events/EventsRelayController.d.ts.map +1 -1
  43. package/dist/modules/events/EventsRelayController.js +10 -11
  44. package/dist/modules/events/EventsRelayController.js.map +1 -1
  45. package/dist/modules/foundationalServices/FoundationalBuiltinsController.d.ts.map +1 -1
  46. package/dist/modules/foundationalServices/FoundationalBuiltinsController.js +2 -8
  47. package/dist/modules/foundationalServices/FoundationalBuiltinsController.js.map +1 -1
  48. package/dist/modules/llmProxy/LlmProxyController.d.ts.map +1 -1
  49. package/dist/modules/llmProxy/LlmProxyController.js +38 -17
  50. package/dist/modules/llmProxy/LlmProxyController.js.map +1 -1
  51. package/dist/modules/notifications/NotificationRelayController.d.ts.map +1 -1
  52. package/dist/modules/notifications/NotificationRelayController.js +2 -6
  53. package/dist/modules/notifications/NotificationRelayController.js.map +1 -1
  54. package/dist/modules/persistence/GitHubDelegationController.d.ts.map +1 -1
  55. package/dist/modules/persistence/GitHubDelegationController.js +2 -6
  56. package/dist/modules/persistence/GitHubDelegationController.js.map +1 -1
  57. package/dist/modules/persistence/PersistenceController.d.ts.map +1 -1
  58. package/dist/modules/persistence/PersistenceController.js +3 -6
  59. package/dist/modules/persistence/PersistenceController.js.map +1 -1
  60. package/dist/modules/tasks/TaskSourceController.d.ts.map +1 -1
  61. package/dist/modules/tasks/TaskSourceController.js +11 -3
  62. package/dist/modules/tasks/TaskSourceController.js.map +1 -1
  63. package/dist/modules/tasks/TaskWebhookController.d.ts +1 -1
  64. package/dist/modules/tasks/TaskWebhookController.js +1 -1
  65. package/dist/modules/telemetry/TelemetryIngestController.d.ts.map +1 -1
  66. package/dist/modules/telemetry/TelemetryIngestController.js +2 -6
  67. package/dist/modules/telemetry/TelemetryIngestController.js.map +1 -1
  68. package/dist/modules/telemetry/TelemetryReadController.d.ts.map +1 -1
  69. package/dist/modules/telemetry/TelemetryReadController.js +2 -6
  70. package/dist/modules/telemetry/TelemetryReadController.js.map +1 -1
  71. package/dist/persistence/rpc-allowlist.d.ts.map +1 -1
  72. package/dist/persistence/rpc-allowlist.js +18 -0
  73. package/dist/persistence/rpc-allowlist.js.map +1 -1
  74. package/dist/runtime/platformHealth.d.ts.map +1 -1
  75. package/dist/runtime/platformHealth.js +130 -19
  76. package/dist/runtime/platformHealth.js.map +1 -1
  77. 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 no new SQL) against the deployment thresholds and, per account:
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 de-dupes on (workspace, type) and its content is a pure function of the FIRING
11
- // reason set, so a persistently-unhealthy deployment re-notifies only when the set changes
12
- // (the "state-change dedup, not every sweep" requirement), not on every pass.
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 (five GROUP BY queries),
36
- // then the verdict is fanned to every workspace in the account. Legacy null-account boards
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 every couple of minutes). A healthy
51
- // workspace with no card is the steady-state common case, and it is now skipped entirely: we
52
- // only touch `clearByType` for a workspace that actually has a card to clear.
53
- const withOpenCard = new Set((await notifications.service.listOpenByType(workspaces.map((ws) => ws.id), 'platform_health')).keys());
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
- const snapshot = await observability.summarize(accountId, cfg.window);
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, cfg.thresholds, worstSweep));
65
- for (const workspaceId of workspaceIds) {
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, cfg.window);
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: { platformWindow: cfg.window, platformAlerts: reasons },
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 (withOpenCard.has(workspaceId) &&
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":"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"}
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.202.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.6",
34
- "@cat-factory/contracts": "0.219.0",
35
- "@cat-factory/integrations": "0.120.1",
36
- "@cat-factory/orchestration": "0.190.0",
37
- "@cat-factory/prompt-fragments": "0.15.44",
38
- "@cat-factory/kernel": "0.221.1",
39
- "@cat-factory/spend": "0.13.9"
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",