@cat-factory/server 0.211.0 → 0.212.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.
@@ -1 +1 @@
1
- {"version":3,"file":"numeric.d.ts","sourceRoot":"","sources":["../../src/config/numeric.ts"],"names":[],"mappings":"AAwBA;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAK9E;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAU3F;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,aAAgB,CAAA;AAE/C;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAA;AAEnF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,aAAa,CAiB9F"}
1
+ {"version":3,"file":"numeric.d.ts","sourceRoot":"","sources":["../../src/config/numeric.ts"],"names":[],"mappings":"AA0BA;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAK9E;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAY3F;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,aAAgB,CAAA;AAE/C;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAA;AAEnF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,aAAa,CAiB9F"}
@@ -11,15 +11,17 @@
11
11
  // no noise (falling back to the default is the intended behaviour there), but a PRESENT
12
12
  // value that is not a finite number emits one structured warning naming the var and the
13
13
  // rejected value before returning `undefined`. The caller keeps its own `?? default`, so
14
- // this only reports the rejection — it never changes the resolved value.
14
+ // this only reports the rejection — it never changes the resolved value. "One warning"
15
+ // is per PROCESS rather than per call (`warnOnce.ts`), because the Worker re-derives the
16
+ // config on every invocation and a standing typo would otherwise log on each one.
15
17
  //
16
18
  // Both facades share the same footgun (Node `config.ts` `num()` + the Worker's
17
19
  // `infrastructure/config/utils.ts` `num()`), so the message lives here in the shared
18
20
  // server layer and each facade's `num` delegates to it — the warning reads identically
19
21
  // across runtimes, per "keep the runtimes symmetric".
20
22
  // ---------------------------------------------------------------------------
21
- import { logger } from '../observability/logger.js';
22
23
  import { DOCS } from './docs.js';
24
+ import { configWarnings } from './warnOnce.js';
23
25
  /**
24
26
  * The single-line operator warning for a numeric env var set to a non-numeric value.
25
27
  * Pure (no logging) so it can be unit-tested and so the log fields + message stay in one
@@ -41,7 +43,9 @@ export function parseNumericEnv(name, value) {
41
43
  const n = Number(value);
42
44
  if (Number.isFinite(n))
43
45
  return n;
44
- logger.warn(describeRejectedNumericEnv(name, value), {
46
+ // Once per process, not once per read: the Worker re-derives the whole config on every
47
+ // invocation, so an unconditional warn here is one line per request (see `warnOnce.ts`).
48
+ configWarnings.warnOnce(describeRejectedNumericEnv(name, value), {
45
49
  var: name,
46
50
  value,
47
51
  docsUrl: DOCS.envVars(),
@@ -1 +1 @@
1
- {"version":3,"file":"numeric.js","sourceRoot":"","sources":["../../src/config/numeric.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,4EAA4E;AAC5E,EAAE;AACF,oFAAoF;AACpF,kFAAkF;AAClF,mFAAmF;AACnF,uFAAuF;AACvF,oDAAoD;AACpD,EAAE;AACF,uFAAuF;AACvF,wFAAwF;AACxF,wFAAwF;AACxF,yFAAyF;AACzF,yEAAyE;AACzE,EAAE;AACF,+EAA+E;AAC/E,qFAAqF;AACrF,uFAAuF;AACvF,sDAAsD;AACtD,8EAA8E;AAE9E,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,IAAY,EAAE,KAAa;IACpE,OAAO,CACL,GAAG,IAAI,eAAe,KAAK,uDAAuD;QAClF,yBAAyB,IAAI,wCAAwC,IAAI,CAAC,OAAO,EAAE,GAAG,CACvF,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,KAAyB;IACrE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,SAAS,CAAA;IAChE,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IACvB,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAA;IAChC,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;QACnD,GAAG,EAAE,IAAI;QACT,KAAK;QACL,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;KACxB,CAAC,CAAA;IACF,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,aAAa,CAAA;AAW/C;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,KAAa,EAAE,UAAkB;IAC7E,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;IAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;IACzB,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,kBAAkB;QAAE,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,CAAA;IAC7E,8FAA8F;IAC9F,gEAAgE;IAChE,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC,IAAI,CAAC;YACN,CAAC,CAAC,wEAAwE;YAC1E,CAAC,CAAC,eAAe,kBAAkB,sDAAsD;gBACvF,sBAAsB;QAC1B,CAAC,CAAC,uCAAuC,CAAA;IAC3C,OAAO;QACL,QAAQ,EACN,GAAG,IAAI,KAAK,KAAK,KAAK,KAAK,wBAAwB,UAAU,MAAM;YACnE,OAAO,IAAI,CAAC,OAAO,EAAE,GAAG;KAC3B,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"numeric.js","sourceRoot":"","sources":["../../src/config/numeric.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,4EAA4E;AAC5E,EAAE;AACF,oFAAoF;AACpF,kFAAkF;AAClF,mFAAmF;AACnF,uFAAuF;AACvF,oDAAoD;AACpD,EAAE;AACF,uFAAuF;AACvF,wFAAwF;AACxF,wFAAwF;AACxF,yFAAyF;AACzF,uFAAuF;AACvF,yFAAyF;AACzF,kFAAkF;AAClF,EAAE;AACF,+EAA+E;AAC/E,qFAAqF;AACrF,uFAAuF;AACvF,sDAAsD;AACtD,8EAA8E;AAE9E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAE9C;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,IAAY,EAAE,KAAa;IACpE,OAAO,CACL,GAAG,IAAI,eAAe,KAAK,uDAAuD;QAClF,yBAAyB,IAAI,wCAAwC,IAAI,CAAC,OAAO,EAAE,GAAG,CACvF,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,KAAyB;IACrE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,SAAS,CAAA;IAChE,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IACvB,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAA;IAChC,uFAAuF;IACvF,yFAAyF;IACzF,cAAc,CAAC,QAAQ,CAAC,0BAA0B,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;QAC/D,GAAG,EAAE,IAAI;QACT,KAAK;QACL,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;KACxB,CAAC,CAAA;IACF,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,aAAa,CAAA;AAW/C;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,KAAa,EAAE,UAAkB;IAC7E,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;IAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;IACzB,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,kBAAkB;QAAE,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,CAAA;IAC7E,8FAA8F;IAC9F,gEAAgE;IAChE,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC,IAAI,CAAC;YACN,CAAC,CAAC,wEAAwE;YAC1E,CAAC,CAAC,eAAe,kBAAkB,sDAAsD;gBACvF,sBAAsB;QAC1B,CAAC,CAAC,uCAAuC,CAAA;IAC3C,OAAO;QACL,QAAQ,EACN,GAAG,IAAI,KAAK,KAAK,KAAK,KAAK,wBAAwB,UAAU,MAAM;YACnE,OAAO,IAAI,CAAC,OAAO,EAAE,GAAG;KAC3B,CAAA;AACH,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { PlatformAlertWindow } from '@cat-factory/contracts';
1
+ import type { PlatformAlertWindow, PlatformFailureKindRule } from '@cat-factory/contracts';
2
2
  import type { PlatformAlertConfig } from './types.js';
3
3
  /**
4
4
  * Parse the `1h`/`24h`/`7d` alert window, defaulting to the most operationally useful `1h`.
@@ -21,7 +21,31 @@ export interface PlatformAlertEnvInput {
21
21
  minStalledPriorRuns?: string;
22
22
  maxFailureKindShare?: string;
23
23
  maxSweepFailures?: string;
24
+ /** `PLATFORM_ALERTS_FAILURE_KIND_RATES`, e.g. `evicted=0.05:3,timeout=0.2`. */
25
+ failureKindRates?: string;
24
26
  }
27
+ /**
28
+ * Parse the per-kind alert rules from one env string: a comma-separated list of
29
+ * `kind=share[:minCount]` entries, e.g. `evicted=0.05:3,timeout=0.2`.
30
+ *
31
+ * Every rejection is REPORTED and only the offending entry is dropped, rather than the value
32
+ * being taken as a whole or discarded as a whole. Both alternatives are worse in the same
33
+ * direction: an operator who typed one rule wrongly is told which, and keeps the rules they
34
+ * typed correctly, instead of finding out on the night the alert did not page. A rule that
35
+ * cannot be read is not a rule, so it is never guessed at (a `share` outside (0, 1] is not
36
+ * clamped into range here, unlike a scalar ceiling: clamping `evicted=50` to 1.0 would invent
37
+ * "when EVERY failure is an eviction" out of somebody meaning 50%).
38
+ *
39
+ * An UNRECOGNISED kind is the one problem reported without dropping the rule, because dropping
40
+ * it and keeping it silently are both wrong for different halves of the same case. A kind this
41
+ * build does not produce is either a typo or a kind a later release retired, and nothing here
42
+ * can tell those apart — so the rule is kept (a retired kind is data an operator should get to
43
+ * decide about, exactly as in the settings editor) and the fact that it can never fire is
44
+ * STATED. Left silent it is the worst outcome the whole var has: a pager somebody deliberately
45
+ * armed, indistinguishable from a kind that simply never occurred, discovered on the night it
46
+ * did not go off.
47
+ */
48
+ export declare function parseFailureKindRules(raw: string | undefined): PlatformFailureKindRule[];
25
49
  /**
26
50
  * Resolve the platform-health alert config from raw env strings. Unset/blank/garbage values
27
51
  * fall back to {@link DEFAULT_PLATFORM_ALERT_THRESHOLDS} (a non-numeric value emits the shared
@@ -1 +1 @@
1
- {"version":3,"file":"platformAlerts.d.ts","sourceRoot":"","sources":["../../src/config/platformAlerts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAEjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAcrD;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,mBAAmB,CAG7F;AAED,gGAAgG;AAChG,MAAM,WAAW,qBAAqB;IACpC,oDAAoD;IACpD,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,qBAAqB,GAAG,mBAAmB,CA8D1F"}
1
+ {"version":3,"file":"platformAlerts.d.ts","sourceRoot":"","sources":["../../src/config/platformAlerts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAO1F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAgBrD;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,mBAAmB,CAG7F;AAED,gGAAgG;AAChG,MAAM,WAAW,qBAAqB;IACpC,oDAAoD;IACpD,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,+EAA+E;IAC/E,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAKD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,uBAAuB,EAAE,CA+ExF;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,qBAAqB,GAAG,mBAAmB,CAmE1F"}
@@ -1,5 +1,8 @@
1
+ import { isAgentFailureKind, MAX_FAILURE_KIND_LENGTH, MAX_FAILURE_KIND_RULES, } from '@cat-factory/contracts';
1
2
  import { DEFAULT_PLATFORM_ALERT_THRESHOLDS } from '@cat-factory/orchestration';
2
3
  import { parseNumericEnv } from './numeric.js';
4
+ import { DOCS } from './docs.js';
5
+ import { configWarnings } from './warnOnce.js';
3
6
  // Shared, runtime-neutral parser for the platform-health alerting env, so the Worker's
4
7
  // `loadConfig` and the Node/local `loadNodeConfig` derive an IDENTICAL `PlatformAlertConfig`
5
8
  // from the same vars + defaults + clamps ("keep the runtimes symmetric"). Each facade reads
@@ -19,6 +22,105 @@ export function parsePlatformObservabilityWindow(raw) {
19
22
  const v = raw?.trim();
20
23
  return v === '24h' || v === '7d' ? v : '1h';
21
24
  }
25
+ /** The env var the per-kind rules come from, named once so the warnings below agree. */
26
+ const FAILURE_KIND_RATES_VAR = 'PLATFORM_ALERTS_FAILURE_KIND_RATES';
27
+ /**
28
+ * Parse the per-kind alert rules from one env string: a comma-separated list of
29
+ * `kind=share[:minCount]` entries, e.g. `evicted=0.05:3,timeout=0.2`.
30
+ *
31
+ * Every rejection is REPORTED and only the offending entry is dropped, rather than the value
32
+ * being taken as a whole or discarded as a whole. Both alternatives are worse in the same
33
+ * direction: an operator who typed one rule wrongly is told which, and keeps the rules they
34
+ * typed correctly, instead of finding out on the night the alert did not page. A rule that
35
+ * cannot be read is not a rule, so it is never guessed at (a `share` outside (0, 1] is not
36
+ * clamped into range here, unlike a scalar ceiling: clamping `evicted=50` to 1.0 would invent
37
+ * "when EVERY failure is an eviction" out of somebody meaning 50%).
38
+ *
39
+ * An UNRECOGNISED kind is the one problem reported without dropping the rule, because dropping
40
+ * it and keeping it silently are both wrong for different halves of the same case. A kind this
41
+ * build does not produce is either a typo or a kind a later release retired, and nothing here
42
+ * can tell those apart — so the rule is kept (a retired kind is data an operator should get to
43
+ * decide about, exactly as in the settings editor) and the fact that it can never fire is
44
+ * STATED. Left silent it is the worst outcome the whole var has: a pager somebody deliberately
45
+ * armed, indistinguishable from a kind that simply never occurred, discovered on the night it
46
+ * did not go off.
47
+ */
48
+ export function parseFailureKindRules(raw) {
49
+ if (raw === undefined || raw.trim() === '')
50
+ return [];
51
+ const rules = [];
52
+ const seen = new Set();
53
+ const warn = (entry, what) => {
54
+ configWarnings.warnOnce(`${FAILURE_KIND_RATES_VAR} entry "${entry}" ${what} ` +
55
+ `Expected \`kind=share[:minCount]\` with share in (0, 1], e.g. \`evicted=0.05:3\`. ` +
56
+ `See ${DOCS.envVars()}.`, { var: FAILURE_KIND_RATES_VAR, entry, docsUrl: DOCS.envVars() });
57
+ };
58
+ const reject = (entry, why) => warn(entry, `${why}, so this rule is ignored.`);
59
+ for (const entry of raw.split(',')) {
60
+ const text = entry.trim();
61
+ if (text === '')
62
+ continue;
63
+ const eq = text.indexOf('=');
64
+ if (eq <= 0) {
65
+ reject(text, 'is not `kind=share`');
66
+ continue;
67
+ }
68
+ const kind = text.slice(0, eq).trim();
69
+ const [shareText, countText, ...extra] = text
70
+ .slice(eq + 1)
71
+ .split(':')
72
+ .map((part) => part.trim());
73
+ if (kind === '' || extra.length > 0) {
74
+ reject(text, 'is not `kind=share[:minCount]`');
75
+ continue;
76
+ }
77
+ // Held to the SAME bound as a settings-authored rule (`platformFailureKindRuleSchema`),
78
+ // though an env-derived rule never passes through that schema: one of the two paths quietly
79
+ // accepting what the other refuses is how the deployment default and the account override
80
+ // stop meaning the same thing.
81
+ if (kind.length > MAX_FAILURE_KIND_LENGTH) {
82
+ reject(text, `names a kind longer than ${MAX_FAILURE_KIND_LENGTH} characters`);
83
+ continue;
84
+ }
85
+ const share = Number(shareText);
86
+ if (!Number.isFinite(share) || share <= 0 || share > 1) {
87
+ reject(text, 'does not name a share greater than 0 and at most 1');
88
+ continue;
89
+ }
90
+ // Absent means the schema default (1), and is left ABSENT rather than written as 1: the rule
91
+ // is stored and rendered alongside settings-authored ones, where an unset minimum reads as
92
+ // inherited. `0` is refused rather than treated as unset, since a rule that fires on zero
93
+ // occurrences of its kind is not something an operator can have meant.
94
+ let minCount;
95
+ if (countText !== undefined && countText !== '') {
96
+ const parsed = Number(countText);
97
+ if (!Number.isInteger(parsed) || parsed < 1) {
98
+ reject(text, 'does not name a whole minimum count of 1 or more');
99
+ continue;
100
+ }
101
+ minCount = parsed;
102
+ }
103
+ if (seen.has(kind)) {
104
+ reject(text, `repeats the kind "${kind}", which an earlier entry already covers`);
105
+ continue;
106
+ }
107
+ if (rules.length >= MAX_FAILURE_KIND_RULES) {
108
+ reject(text, `is past the limit of ${MAX_FAILURE_KIND_RULES} per-kind rules`);
109
+ continue;
110
+ }
111
+ // Kept, not dropped: see the note above on why a kind this build does not produce is
112
+ // reported rather than refused. The rule is inert until something produces that kind, and
113
+ // saying so is the whole point — a rule that can never fire and a kind that never occurred
114
+ // are otherwise the same silence.
115
+ if (!isAgentFailureKind(kind)) {
116
+ warn(text, `names "${kind}", which is not a failure kind this build produces, so the rule is kept ` +
117
+ `but can never fire. Check the spelling, or drop the rule if the kind was retired.`);
118
+ }
119
+ seen.add(kind);
120
+ rules.push({ kind, maxShare: share, ...(minCount === undefined ? {} : { minCount }) });
121
+ }
122
+ return rules;
123
+ }
22
124
  /**
23
125
  * Resolve the platform-health alert config from raw env strings. Unset/blank/garbage values
24
126
  * fall back to {@link DEFAULT_PLATFORM_ALERT_THRESHOLDS} (a non-numeric value emits the shared
@@ -54,6 +156,11 @@ export function resolvePlatformAlertConfig(env) {
54
156
  // cleared `minRuns` and had a single failure, which is not a threshold anyone means to set.
55
157
  maxFailureKindShare: Math.min(1, Math.max(Number.EPSILON, nonNeg('PLATFORM_ALERTS_MAX_FAILURE_KIND_SHARE', env.maxFailureKindShare, d.maxFailureKindShare))),
56
158
  maxSweepFailures: Math.max(1, nonNeg('PLATFORM_ALERTS_MAX_SWEEP_FAILURES', env.maxSweepFailures, d.maxSweepFailures)),
159
+ // No fallback to the built-in default, unlike every scalar above, because there is nothing
160
+ // to fall back to: the shipped default is an empty list, so an unset var and a var whose
161
+ // every entry was rejected both resolve to "no per-kind rules" — and the rejected one has
162
+ // already said so, once per entry, rather than resolving quietly.
163
+ failureKindRules: parseFailureKindRules(env.failureKindRates),
57
164
  },
58
165
  };
59
166
  }
@@ -1 +1 @@
1
- {"version":3,"file":"platformAlerts.js","sourceRoot":"","sources":["../../src/config/platformAlerts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iCAAiC,EAAE,MAAM,4BAA4B,CAAA;AAE9E,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE9C,uFAAuF;AACvF,6FAA6F;AAC7F,4FAA4F;AAC5F,2FAA2F;AAC3F,gEAAgE;AAEhE,6FAA6F;AAC7F,MAAM,kCAAkC,GAAG,CAAC,GAAG,MAAM,CAAA;AACrD,uFAAuF;AACvF,MAAM,8BAA8B,GAAG,MAAM,CAAA;AAE7C;;;;;GAKG;AACH,MAAM,UAAU,gCAAgC,CAAC,GAAuB;IACtE,MAAM,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,CAAA;IACrB,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AAC7C,CAAC;AAkBD;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,GAA0B;IACnE,MAAM,CAAC,GAAG,iCAAiC,CAAA;IAC3C,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,GAAuB,EAAE,QAAgB,EAAU,EAAE;QACjF,MAAM,CAAC,GAAG,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QACpC,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;IACjD,CAAC,CAAA;IACD,MAAM,aAAa,GAAG,MAAM,CAC1B,iCAAiC,EACjC,GAAG,CAAC,aAAa,EACjB,CAAC,CAAC,gBAAgB,GAAG,MAAM,CAC5B,CAAA;IACD,MAAM,WAAW,GAAG,MAAM,CACxB,kCAAkC,EAClC,GAAG,CAAC,cAAc,EAClB,CAAC,CAAC,cAAc,CACjB,CAAA;IACD,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,MAAM,EAAE,gCAAgC,CAAC,GAAG,CAAC,MAAM,CAAC;QACpD,UAAU,EAAE,IAAI,CAAC,GAAG,CAClB,8BAA8B,EAC9B,MAAM,CAAC,6BAA6B,EAAE,GAAG,CAAC,UAAU,EAAE,kCAAkC,CAAC,CAC1F;QACD,UAAU,EAAE;YACV,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,0BAA0B,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAChF,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC;YACxC,gBAAgB,EAAE,aAAa,GAAG,MAAM;YACxC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,6BAA6B,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;YAC5F,wFAAwF;YACxF,+CAA+C;YAC/C,cAAc,EAAE,IAAI,CAAC,GAAG,CACtB,CAAC,EACD,MAAM,CAAC,iCAAiC,EAAE,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC,cAAc,CAAC,CAChF;YACD,qFAAqF;YACrF,uFAAuF;YACvF,mBAAmB,EAAE,MAAM,CACzB,wCAAwC,EACxC,GAAG,CAAC,mBAAmB,EACvB,CAAC,CAAC,mBAAmB,CACtB;YACD,yFAAyF;YACzF,yFAAyF;YACzF,0FAA0F;YAC1F,4FAA4F;YAC5F,mBAAmB,EAAE,IAAI,CAAC,GAAG,CAC3B,CAAC,EACD,IAAI,CAAC,GAAG,CACN,MAAM,CAAC,OAAO,EACd,MAAM,CACJ,wCAAwC,EACxC,GAAG,CAAC,mBAAmB,EACvB,CAAC,CAAC,mBAAmB,CACtB,CACF,CACF;YACD,gBAAgB,EAAE,IAAI,CAAC,GAAG,CACxB,CAAC,EACD,MAAM,CAAC,oCAAoC,EAAE,GAAG,CAAC,gBAAgB,EAAE,CAAC,CAAC,gBAAgB,CAAC,CACvF;SACF;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"platformAlerts.js","sourceRoot":"","sources":["../../src/config/platformAlerts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { LogFields, Logger } from '@cat-factory/kernel';
2
+ /**
3
+ * A process's record of the config warnings it has already emitted.
4
+ *
5
+ * A class with an injected {@link Logger} rather than a bare module-level `Set`, so a test can
6
+ * hold its own instance and assert the suppression against `createRecordingLogger()` instead of
7
+ * needing a reset hook that only tests would call.
8
+ */
9
+ export declare class ConfigWarningLog {
10
+ #private;
11
+ constructor(log: Logger);
12
+ /**
13
+ * Warn about a bad config value unless this exact message has already been emitted.
14
+ *
15
+ * The MESSAGE is the identity, which is what makes the dedup safe to apply blindly: every
16
+ * message in this folder names its variable and quotes the offending value, so two genuinely
17
+ * different problems cannot collide, and re-reading the same bad var is the only thing that
18
+ * can. Returns whether the line was emitted, so a caller (or a test) can tell "said it" from
19
+ * "already said it" without inspecting the sink.
20
+ */
21
+ warnOnce(message: string, fields: LogFields): boolean;
22
+ }
23
+ /** The process-wide instance the config parsers report through. */
24
+ export declare const configWarnings: ConfigWarningLog;
25
+ //# sourceMappingURL=warnOnce.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warnOnce.d.ts","sourceRoot":"","sources":["../../src/config/warnOnce.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAG5D;;;;;;GAMG;AACH,qBAAa,gBAAgB;;IAI3B,YAAY,GAAG,EAAE,MAAM,EAEtB;IAED;;;;;;;;OAQG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAKpD;CACF;AAED,mEAAmE;AACnE,eAAO,MAAM,cAAc,kBAA+B,CAAA"}
@@ -0,0 +1,56 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Emit each distinct config-parse warning ONCE per process, rather than once per read.
3
+ //
4
+ // The env parsers in this folder report a bad value the moment they meet it, which is right:
5
+ // silently falling back to a default is the gap they exist to close. What makes the emission
6
+ // site the wrong place to log unconditionally is WHERE they run. `loadConfig(env)` is not a
7
+ // boot-time call on every facade — the Worker re-derives the whole config on each invocation
8
+ // (`buildContainer`, the cron and queue entry points), so a single mistyped var is not one
9
+ // warning, it is one warning per request for as long as it stays mistyped. A list-valued knob
10
+ // like `PLATFORM_ALERTS_FAILURE_KIND_RATES` multiplies that again, once per malformed entry.
11
+ //
12
+ // A flood is not a louder signal, it is a quieter one: it buries the lines around it and it is
13
+ // the reason operators filter a level out. So the message is emitted the first time a process
14
+ // sees it and suppressed after, which on the Worker means once per isolate — often enough that
15
+ // a recycled isolate re-states a standing problem, rare enough that it never drowns anything.
16
+ //
17
+ // This is deliberately NOT the `AppCaches` seam, which the caching rule points at. Nothing here
18
+ // is cached state: there is no value to read back, nothing to invalidate, and nothing another
19
+ // node has to agree about. It is one process's record of what it has already said, and it must
20
+ // work at a point where the container (and therefore `container.caches`) does not exist yet,
21
+ // because parsing the config is what BUILDS the container.
22
+ // ---------------------------------------------------------------------------
23
+ import { logger } from '../observability/logger.js';
24
+ /**
25
+ * A process's record of the config warnings it has already emitted.
26
+ *
27
+ * A class with an injected {@link Logger} rather than a bare module-level `Set`, so a test can
28
+ * hold its own instance and assert the suppression against `createRecordingLogger()` instead of
29
+ * needing a reset hook that only tests would call.
30
+ */
31
+ export class ConfigWarningLog {
32
+ #seen = new Set();
33
+ #logger;
34
+ constructor(log) {
35
+ this.#logger = log;
36
+ }
37
+ /**
38
+ * Warn about a bad config value unless this exact message has already been emitted.
39
+ *
40
+ * The MESSAGE is the identity, which is what makes the dedup safe to apply blindly: every
41
+ * message in this folder names its variable and quotes the offending value, so two genuinely
42
+ * different problems cannot collide, and re-reading the same bad var is the only thing that
43
+ * can. Returns whether the line was emitted, so a caller (or a test) can tell "said it" from
44
+ * "already said it" without inspecting the sink.
45
+ */
46
+ warnOnce(message, fields) {
47
+ if (this.#seen.has(message))
48
+ return false;
49
+ this.#seen.add(message);
50
+ this.#logger.warn(message, fields);
51
+ return true;
52
+ }
53
+ }
54
+ /** The process-wide instance the config parsers report through. */
55
+ export const configWarnings = new ConfigWarningLog(logger);
56
+ //# sourceMappingURL=warnOnce.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warnOnce.js","sourceRoot":"","sources":["../../src/config/warnOnce.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,uFAAuF;AACvF,EAAE;AACF,6FAA6F;AAC7F,6FAA6F;AAC7F,4FAA4F;AAC5F,6FAA6F;AAC7F,2FAA2F;AAC3F,8FAA8F;AAC9F,6FAA6F;AAC7F,EAAE;AACF,+FAA+F;AAC/F,8FAA8F;AAC9F,+FAA+F;AAC/F,8FAA8F;AAC9F,EAAE;AACF,gGAAgG;AAChG,8FAA8F;AAC9F,+FAA+F;AAC/F,6FAA6F;AAC7F,2DAA2D;AAC3D,8EAA8E;AAG9E,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAEnD;;;;;;GAMG;AACH,MAAM,OAAO,gBAAgB;IAClB,KAAK,GAAG,IAAI,GAAG,EAAU,CAAA;IACzB,OAAO,CAAQ;IAExB,YAAY,GAAW;QACrB,IAAI,CAAC,OAAO,GAAG,GAAG,CAAA;IACpB,CAAC;IAED;;;;;;;;OAQG;IACH,QAAQ,CAAC,OAAe,EAAE,MAAiB;QACzC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAO,KAAK,CAAA;QACzC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QAClC,OAAO,IAAI,CAAA;IACb,CAAC;CACF;AAED,mEAAmE;AACnE,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"platformHealth.d.ts","sourceRoot":"","sources":["../../src/runtime/platformHealth.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,KAAK,EACV,MAAM,EAKP,MAAM,qBAAqB,CAAA;AAyE5B;;;;;;;;;;;;;GAaG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,eAAe,EAC1B,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAgG9C"}
1
+ {"version":3,"file":"platformHealth.d.ts","sourceRoot":"","sources":["../../src/runtime/platformHealth.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,KAAK,EACV,MAAM,EAKP,MAAM,qBAAqB,CAAA;AA6F5B;;;;;;;;;;;;;GAaG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,eAAe,EAC1B,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAsG9C"}
@@ -1,4 +1,4 @@
1
- import { alertsHaveRunEvidence, distinctAccountIds, evaluatePlatformHealth, platformAlertReasons, platformHealthCardContent, resolveAccountAlertConfig, } from '@cat-factory/orchestration';
1
+ import { alertsHaveRunEvidence, distinctAccountIds, evaluatePlatformHealth, platformAlertFailureKinds, platformAlertReasons, platformHealthCardContent, resolveAccountAlertConfig, } from '@cat-factory/orchestration';
2
2
  import { describeError, noopLogger, runBestEffort } from '@cat-factory/kernel';
3
3
  import { sweepHealth } from '../observability/sweepHealth.js';
4
4
  // Runtime-neutral platform-health ALERT sweep — the push counterpart to the operator dashboard
@@ -45,12 +45,25 @@ function nextTransition(card) {
45
45
  const stored = card?.payload?.platformAlertTransition;
46
46
  return typeof stored === 'number' && Number.isFinite(stored) && stored > 0 ? stored + 1 : 1;
47
47
  }
48
- /** Whether an open card's stored reason set already matches the one now firing. */
49
- function sameReasonSet(card, reasons) {
50
- const stored = card?.payload?.platformAlerts;
51
- return (Array.isArray(stored) &&
52
- stored.length === reasons.length &&
53
- stored.every((r, i) => r === reasons[i]));
48
+ /** Whether two sorted identity lists are element-for-element the same. */
49
+ function sameList(stored, next) {
50
+ if (next.length === 0)
51
+ return stored === undefined || (Array.isArray(stored) && stored.length === 0);
52
+ return (Array.isArray(stored) && stored.length === next.length && stored.every((v, i) => v === next[i]));
53
+ }
54
+ /**
55
+ * Whether an open card already shows exactly what is firing now — the check that makes the raise
56
+ * state-change-driven rather than every-pass.
57
+ *
58
+ * BOTH halves of the identity are compared, because the reason set alone stopped being able to
59
+ * see a change once one reason code could stand for several conditions: every per-kind rule fires
60
+ * as `failure_kind_rate_high`, so evictions subsiding while timeouts crossed their own rule is
61
+ * the same reason set before and after, and a card compared on reasons alone would keep naming
62
+ * the kind that had recovered for the length of the new incident.
63
+ */
64
+ function sameFiringSet(card, reasons, failureKinds) {
65
+ return (sameList(card?.payload?.platformAlerts, reasons) &&
66
+ sameList(card?.payload?.platformAlertFailureKinds, failureKinds));
54
67
  }
55
68
  /** The workspace's slice of the account's failing-run sample, in payload shape. */
56
69
  function failingRunsFor(refs, workspaceId) {
@@ -130,9 +143,14 @@ export async function sweepPlatformHealth(container, now, logger) {
130
143
  // numbers that tripped are exactly what an on-call receiver routes on.
131
144
  const alerts = evaluatePlatformHealth(snapshot, account.thresholds, worstSweep);
132
145
  const reasons = platformAlertReasons(alerts);
146
+ // The other half of the card's identity: which KINDS' own rules are firing. Empty unless a
147
+ // per-kind rule is among them.
148
+ const failureKinds = platformAlertFailureKinds(alerts);
133
149
  // The workspaces whose card would actually change state this pass. A healthy workspace
134
150
  // with no card, and an unhealthy one whose firing set is unchanged, are both no-ops.
135
- const changing = workspaceIds.filter((id) => reasons.length > 0 ? !sameReasonSet(openCards.get(id), reasons) : openCards.has(id));
151
+ const changing = workspaceIds.filter((id) => reasons.length > 0
152
+ ? !sameFiringSet(openCards.get(id), reasons, failureKinds)
153
+ : openCards.has(id));
136
154
  if (changing.length === 0)
137
155
  continue;
138
156
  // The failing runs the card deep-links to, fetched ONCE for the account and only when
@@ -148,6 +166,7 @@ export async function sweepPlatformHealth(container, now, logger) {
148
166
  window: account.window,
149
167
  alerts,
150
168
  reasons,
169
+ failureKinds,
151
170
  evidence,
152
171
  observedAt: now,
153
172
  openCard: openCards.get(workspaceId),
@@ -184,10 +203,11 @@ export async function sweepPlatformHealth(container, now, logger) {
184
203
  * here".
185
204
  */
186
205
  async function settleWorkspace(deps, input) {
187
- const { workspaceId, accountId, window, alerts, reasons, evidence, observedAt, openCard } = input;
206
+ const { workspaceId, accountId, window, alerts, reasons, failureKinds } = input;
207
+ const { evidence, observedAt, openCard } = input;
188
208
  if (reasons.length > 0) {
189
209
  const transition = nextTransition(openCard);
190
- const { title, body } = platformHealthCardContent(reasons, window);
210
+ const { title, body } = platformHealthCardContent(reasons, window, failureKinds);
191
211
  const failingRuns = evidence ? failingRunsFor(evidence, workspaceId) : [];
192
212
  const workspaceFailedTotal = evidence?.find((r) => r.workspaceId === workspaceId)?.workspaceFailedTotal;
193
213
  const card = await deps.notifications.raise(workspaceId, {
@@ -199,6 +219,10 @@ async function settleWorkspace(deps, input) {
199
219
  payload: {
200
220
  platformWindow: window,
201
221
  platformAlerts: reasons,
222
+ // Omitted rather than sent empty when no per-kind rule fired, so the absence of the
223
+ // field and "no kind is over its rule" stay the same statement, and a card raised
224
+ // before this shipped keeps comparing equal to one raised after it.
225
+ ...(failureKinds.length > 0 ? { platformAlertFailureKinds: failureKinds } : {}),
202
226
  // Bookkeeping the card renders nothing of: the row is the sweep's only alert store, and
203
227
  // the outbound edge needs a transition identity neither the (incident-long) card id nor
204
228
  // the (recurring) reason set can give it. Writing it costs no extra inbox delivery,
@@ -227,13 +251,15 @@ async function settleWorkspace(deps, input) {
227
251
  // `evaluatePlatformHealth`'s emission order these would be deterministic but INCIDENTALLY
228
252
  // so: reordering its checks is a refactor with no behavioural intent, and it would silently
229
253
  // re-key every in-flight incident's deliveries. Sorting here is what makes the id a
230
- // function of WHICH conditions fired rather than of the order they were tested in.
254
+ // function of WHICH conditions fired rather than of the order they were tested in. The KIND
255
+ // breaks the tie the reason no longer can, since per-kind rules all fire under one code.
231
256
  conditions: [...alerts]
232
- .sort((a, b) => a.reason.localeCompare(b.reason))
257
+ .sort((a, b) => a.reason.localeCompare(b.reason) || (a.kind ?? '').localeCompare(b.kind ?? ''))
233
258
  .map((alert) => ({
234
259
  reason: alert.reason,
235
260
  value: alert.value,
236
261
  threshold: alert.threshold,
262
+ ...(alert.kind === undefined ? {} : { kind: alert.kind }),
237
263
  })),
238
264
  occurredAt: observedAt,
239
265
  failingRuns,
@@ -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.211.0",
3
+ "version": "0.212.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/integrations": "0.123.6",
34
- "@cat-factory/kernel": "0.233.0",
35
- "@cat-factory/orchestration": "0.200.0",
36
- "@cat-factory/contracts": "0.231.0",
37
- "@cat-factory/agents": "0.110.1",
38
- "@cat-factory/spend": "0.14.8",
39
- "@cat-factory/prompt-fragments": "0.15.57"
33
+ "@cat-factory/agents": "0.110.2",
34
+ "@cat-factory/kernel": "0.234.0",
35
+ "@cat-factory/contracts": "0.232.0",
36
+ "@cat-factory/orchestration": "0.201.0",
37
+ "@cat-factory/integrations": "0.124.0",
38
+ "@cat-factory/prompt-fragments": "0.15.58",
39
+ "@cat-factory/spend": "0.14.9"
40
40
  },
41
41
  "devDependencies": {
42
42
  "@types/node": "^26.1.2",