@agent-relay/factory 0.1.64 → 0.1.66

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 (68) hide show
  1. package/README.md +9 -0
  2. package/dist/cli/diagnose.d.ts +92 -0
  3. package/dist/cli/diagnose.d.ts.map +1 -0
  4. package/dist/cli/diagnose.js +381 -0
  5. package/dist/cli/diagnose.js.map +1 -0
  6. package/dist/cli/fleet.d.ts +9 -1
  7. package/dist/cli/fleet.d.ts.map +1 -1
  8. package/dist/cli/fleet.js +97 -4
  9. package/dist/cli/fleet.js.map +1 -1
  10. package/dist/config/schema.d.ts +134 -2
  11. package/dist/config/schema.d.ts.map +1 -1
  12. package/dist/config/schema.js +60 -0
  13. package/dist/config/schema.js.map +1 -1
  14. package/dist/fleet/internal-fleet-client.d.ts +16 -0
  15. package/dist/fleet/internal-fleet-client.d.ts.map +1 -1
  16. package/dist/fleet/internal-fleet-client.js +228 -13
  17. package/dist/fleet/internal-fleet-client.js.map +1 -1
  18. package/dist/hosted/orchestrator.d.ts.map +1 -1
  19. package/dist/hosted/orchestrator.js +1 -4
  20. package/dist/hosted/orchestrator.js.map +1 -1
  21. package/dist/index.d.ts +1 -1
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +1 -1
  24. package/dist/index.js.map +1 -1
  25. package/dist/observability/error-class.d.ts +29 -0
  26. package/dist/observability/error-class.d.ts.map +1 -0
  27. package/dist/observability/error-class.js +36 -0
  28. package/dist/observability/error-class.js.map +1 -0
  29. package/dist/observability/index.d.ts +1 -0
  30. package/dist/observability/index.d.ts.map +1 -1
  31. package/dist/observability/index.js +1 -0
  32. package/dist/observability/index.js.map +1 -1
  33. package/dist/orchestrator/batch-tracker.d.ts +7 -0
  34. package/dist/orchestrator/batch-tracker.d.ts.map +1 -1
  35. package/dist/orchestrator/batch-tracker.js +1 -0
  36. package/dist/orchestrator/batch-tracker.js.map +1 -1
  37. package/dist/orchestrator/factory.d.ts +18 -0
  38. package/dist/orchestrator/factory.d.ts.map +1 -1
  39. package/dist/orchestrator/factory.js +1059 -82
  40. package/dist/orchestrator/factory.js.map +1 -1
  41. package/dist/orchestrator/index.d.ts +1 -0
  42. package/dist/orchestrator/index.d.ts.map +1 -1
  43. package/dist/orchestrator/index.js +1 -0
  44. package/dist/orchestrator/index.js.map +1 -1
  45. package/dist/orchestrator/public-health.d.ts +82 -0
  46. package/dist/orchestrator/public-health.d.ts.map +1 -0
  47. package/dist/orchestrator/public-health.js +491 -0
  48. package/dist/orchestrator/public-health.js.map +1 -0
  49. package/dist/ports/state.d.ts +25 -0
  50. package/dist/ports/state.d.ts.map +1 -1
  51. package/dist/state/dispatch-lifecycle-slot.d.ts +45 -0
  52. package/dist/state/dispatch-lifecycle-slot.d.ts.map +1 -0
  53. package/dist/state/dispatch-lifecycle-slot.js +67 -0
  54. package/dist/state/dispatch-lifecycle-slot.js.map +1 -0
  55. package/dist/state/file-state-store.d.ts +8 -0
  56. package/dist/state/file-state-store.d.ts.map +1 -1
  57. package/dist/state/file-state-store.js +19 -19
  58. package/dist/state/file-state-store.js.map +1 -1
  59. package/dist/state/in-memory-state-store.d.ts +8 -0
  60. package/dist/state/in-memory-state-store.d.ts.map +1 -1
  61. package/dist/state/in-memory-state-store.js +18 -19
  62. package/dist/state/in-memory-state-store.js.map +1 -1
  63. package/dist/state/watch-state-document.js +1 -0
  64. package/dist/state/watch-state-document.js.map +1 -1
  65. package/dist/triage/schema.d.ts +14 -14
  66. package/dist/types.d.ts +180 -1
  67. package/dist/types.d.ts.map +1 -1
  68. package/package.json +1 -1
package/README.md CHANGED
@@ -140,6 +140,7 @@ After init, add the `factory` label to an open issue and run a dry run below.
140
140
  | `factory triage <KEY\|path>` | Triage one issue and print the decision. |
141
141
  | `factory dispatch <KEY\|path>` | Triage + dispatch one issue. Honors `--dry-run`. |
142
142
  | `factory babysit <PR\|PR-URL>` | Spawn a one-shot babysitter for an existing open PR, even when it was not created by Factory. |
143
+ | `factory diagnose --deployed <url>` | Ask a **deployed** instance why it is or is not dispatching. Reads the unauthenticated `/healthz` diagnostics block — readiness failure count, error class, in-flight sweep age — with no credential; `--token` (or `FACTORY_EVIDENCE_TOKEN`) also reads the gated `/evidence` message. Exits non-zero when the instance is not dispatching. See [deployed diagnostics](docs/deployed-diagnostics.md). |
143
144
  | `factory canary <KEY\|path>` | Assert a known "Ready for Agent" issue is dispatch-ready by the real dry-run triage path. Prints `{ok,issue,status,reason}`; exits non-zero (with the skip reason) if it isn't. |
144
145
  | `factory reap-orphans [--include-held]` | Report stale factory processes and held agents. By default held agents are visible but retained; `--include-held` releases held agents whose configured deadline has elapsed. Kubernetes cleanup is reported as not applicable when no environment provider is configured. |
145
146
  | `factory featuremap check [--manifest <path>] [--base <ref>]` | Validate the repository feature/test manifest and optionally report advisory drift for unchanged entries whose locations changed. |
@@ -183,6 +184,14 @@ state advances from `retrying` to `degraded` after three consecutive periodic
183
184
  discovery failures and returns to `healthy` after a successful checkpoint.
184
185
  The same record includes the last error, attempt duration, and failure count.
185
186
 
187
+ Those counters only move when a sweep *settles*, so a sweep that hangs would
188
+ leave every field reading `healthy` forever. `readinessReconcile` therefore
189
+ also carries `intervalMs` and `inFlightMs`, and reports `stalled` when a pass
190
+ has been in flight for more than ten sweep intervals. The redacted subset of
191
+ this record is published on the deployed instance's `/healthz` and is what
192
+ `factory diagnose --deployed` reads — see
193
+ [deployed diagnostics](docs/deployed-diagnostics.md).
194
+
186
195
  Dispatch lifecycle writes are claim-critical. Factory applies the
187
196
  `factory:in-progress` label/state before the dispatch comment, confirms the
188
197
  GitHub label by provider read-back, and retries either write three times. An
@@ -0,0 +1,92 @@
1
+ import type { FactoryPublicHealth } from '../types.js';
2
+ /**
3
+ * `factory diagnose --deployed <url>` (#295).
4
+ *
5
+ * The command a lane brief can name. Every other route to a deployed
6
+ * Factory's health is local-only (`factory status`, `factory loop-status`),
7
+ * Worker-scope (`wrangler tail`), blocked by network shape (the container is
8
+ * private-networked with no sshd), or gated behind a per-deploy credential
9
+ * that no longer exists. This pulls the answer through the Worker, which is
10
+ * the only path that survives that shape.
11
+ *
12
+ * It works with no credential at all: `/healthz` is unauthenticated, and
13
+ * since #295 it carries the failure count, the error class and the in-flight
14
+ * age. A token, when the operator has one, adds `/evidence` — the free-text
15
+ * `lastError` that must not be on the public surface.
16
+ */
17
+ export interface DeployedEvidenceSummary {
18
+ fetched: boolean;
19
+ httpStatus?: number;
20
+ /** Why the evidence surface was not read. */
21
+ reason?: string;
22
+ phase?: string;
23
+ lastError?: string;
24
+ consecutiveFailures?: number;
25
+ }
26
+ export interface DeployedLegacyHealth {
27
+ phase?: string;
28
+ factoryProcess?: string;
29
+ heartbeatStatus?: string;
30
+ heartbeatUpdatedAt?: string;
31
+ readinessReconcile?: string;
32
+ eventListener?: string;
33
+ }
34
+ export interface DeployedFactoryDiagnosis {
35
+ url: string;
36
+ reachable: boolean;
37
+ httpStatus?: number;
38
+ /**
39
+ * The instance's own liveness verdict, computed against ITS clock.
40
+ *
41
+ * The daemon stamps the health block when it writes the heartbeat, so the
42
+ * block's `ageMs` is 0 and `stale` false *in the file*. If the daemon dies
43
+ * and the container keeps serving that file, the block stays green forever.
44
+ * The container recomputes liveness from `updatedAtMs` on every request, so
45
+ * its verdict is the fresh one and it wins (#300 review, P1).
46
+ *
47
+ * `false` only when the INSTANCE answered no — a 503 health body, or
48
+ * `ok: false`. A 404, 401 or 502 from a proxy in front of it is not the
49
+ * instance speaking at all, and leaves this `undefined` (#300 review,
50
+ * CodeRabbit).
51
+ */
52
+ live?: boolean;
53
+ /** The endpoint answered, but not with anything this command can read. */
54
+ unreadable?: boolean;
55
+ /** Allowlisted class of a transport failure; the message is not reported. */
56
+ errorClass?: string;
57
+ dispatching: boolean;
58
+ verdict: string;
59
+ health?: FactoryPublicHealth;
60
+ /**
61
+ * The Worker answered without probing the container.
62
+ *
63
+ * In event-driven short-sleep mode `/healthz` terminates at the Worker on
64
+ * purpose, so anonymous polling cannot wake the container and defeat
65
+ * scale-to-zero. That answer is Worker liveness and says nothing about
66
+ * Factory (factory-cloud#40 review).
67
+ */
68
+ workerOnly?: boolean;
69
+ /**
70
+ * The container's own bootstrap phase, when it reports one.
71
+ *
72
+ * `booting`/`rendering-config`/`preflight` answer `ok: false` exactly like a
73
+ * wedged instance does, and telling someone three minutes into a boot that
74
+ * their Factory process is gone sends them to the wrong problem.
75
+ */
76
+ phase?: string;
77
+ /** Present when the instance predates the `/healthz` diagnostics block. */
78
+ legacy?: DeployedLegacyHealth;
79
+ evidence?: DeployedEvidenceSummary;
80
+ }
81
+ export interface DiagnoseDeployedOptions {
82
+ url: string;
83
+ token?: string;
84
+ timeoutMs?: number;
85
+ fetch?: typeof fetch;
86
+ }
87
+ export declare function formatDuration(ms: number | undefined): string;
88
+ /** Read a deployed instance's public health, plus `/evidence` when a token is held. */
89
+ export declare function diagnoseDeployedFactory(options: DiagnoseDeployedOptions): Promise<DeployedFactoryDiagnosis>;
90
+ /** Human-readable rendering; `--json` prints the diagnosis object instead. */
91
+ export declare function renderDeployedDiagnosis(diagnosis: DeployedFactoryDiagnosis): string;
92
+ //# sourceMappingURL=diagnose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnose.d.ts","sourceRoot":"","sources":["../../src/cli/diagnose.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAEnD;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC7B;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,wBAAwB;IACvC,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;;;;;;;;;;OAaG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,0EAA0E;IAC1E,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,OAAO,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,mBAAmB,CAAA;IAC5B;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,2EAA2E;IAC3E,MAAM,CAAC,EAAE,oBAAoB,CAAA;IAC7B,QAAQ,CAAC,EAAE,uBAAuB,CAAA;CACnC;AAED,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;CACrB;AA2OD,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAQ7D;AAED,uFAAuF;AACvF,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,wBAAwB,CAAC,CA0CnC;AA8CD,8EAA8E;AAC9E,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,wBAAwB,GAAG,MAAM,CAsFnF"}
@@ -0,0 +1,381 @@
1
+ import { telemetryErrorClass } from '../observability/error-class.js';
2
+ import { normalizePublicHealth } from '../orchestrator/public-health.js';
3
+ const DEFAULT_TIMEOUT_MS = 10_000;
4
+ /** Container bootstrap phases: `ok: false` here means "not yet", not "wedged". */
5
+ const BOOT_PHASES = new Set(['booting', 'rendering-config', 'preflight']);
6
+ const MAX_EVIDENCE_TEXT = 2_000;
7
+ const endpoint = (base, path) => `${base.replace(/\/+$/u, '')}${path}`;
8
+ /**
9
+ * Strip control characters before anything remote reaches a terminal.
10
+ *
11
+ * `/evidence` is authenticated and returns the operator's own instance, but
12
+ * its `lastError` is still dependency-controlled text, and a terminal
13
+ * interprets escape sequences.
14
+ */
15
+ const forTerminal = (value) =>
16
+ // C0 and C1 alike (#300 review, P2, cubic): some terminals treat the C1
17
+ // range as escape introducers, so stripping only C0 is not enough.
18
+ value.replace(/[\u0000-\u001F\u007F-\u009F]+/gu, ' ').trim().slice(0, MAX_EVIDENCE_TEXT);
19
+ const asRecord = (value) => value !== null && typeof value === 'object' && !Array.isArray(value)
20
+ ? value
21
+ : {};
22
+ const asText = (value) => typeof value === 'string' && value.trim() ? forTerminal(value) : undefined;
23
+ const asCount = (value) => typeof value === 'number' && Number.isFinite(value) ? value : undefined;
24
+ async function getJson(fetchImpl, url, opts) {
25
+ const response = await fetchImpl(url, {
26
+ method: 'GET',
27
+ headers: {
28
+ accept: 'application/json',
29
+ ...(opts.token ? { authorization: `Bearer ${opts.token}` } : {}),
30
+ },
31
+ signal: AbortSignal.timeout(opts.timeoutMs),
32
+ });
33
+ let body;
34
+ try {
35
+ body = await response.json();
36
+ }
37
+ catch {
38
+ body = undefined;
39
+ }
40
+ return { status: response.status, body };
41
+ }
42
+ function legacyHealth(body) {
43
+ const heartbeat = asRecord(body.heartbeat);
44
+ return {
45
+ ...(asText(body.phase) ? { phase: asText(body.phase) } : {}),
46
+ ...(asText(body.factoryProcess) ? { factoryProcess: asText(body.factoryProcess) } : {}),
47
+ ...(asText(heartbeat.status) ? { heartbeatStatus: asText(heartbeat.status) } : {}),
48
+ ...(asText(heartbeat.updatedAt) ? { heartbeatUpdatedAt: asText(heartbeat.updatedAt) } : {}),
49
+ ...(asText(heartbeat.readinessReconcile)
50
+ ? { readinessReconcile: asText(heartbeat.readinessReconcile) }
51
+ : {}),
52
+ ...(asText(heartbeat.eventListener) ? { eventListener: asText(heartbeat.eventListener) } : {}),
53
+ };
54
+ }
55
+ function verdictFor(diagnosis) {
56
+ if (!diagnosis.reachable) {
57
+ return {
58
+ dispatching: false,
59
+ verdict: `unreachable: ${diagnosis.url} did not answer (${diagnosis.errorClass ?? 'no response'})`,
60
+ };
61
+ }
62
+ // Before any subsystem reading: a snapshot served by a container whose
63
+ // daemon has stopped updating it describes a process that is no longer
64
+ // there. The instance already said so.
65
+ if (diagnosis.live === false) {
66
+ if (diagnosis.phase !== undefined && BOOT_PHASES.has(diagnosis.phase)) {
67
+ return {
68
+ dispatching: false,
69
+ verdict: `not dispatching yet: the instance is still starting (phase ${diagnosis.phase}). ` +
70
+ 'A cold container hydrates its Relayfile mirror before the first pass, which #36 measured ' +
71
+ 'at up to 61 minutes; re-run this in a few minutes before treating it as wedged.',
72
+ };
73
+ }
74
+ return {
75
+ dispatching: false,
76
+ verdict: `not dispatching: the instance reports itself not live (HTTP ${diagnosis.httpStatus ?? '?'}` +
77
+ `${diagnosis.phase ? `, phase ${diagnosis.phase}` : ''}). ` +
78
+ 'Its loop heartbeat is stale or the Factory process is gone, so any health block it still ' +
79
+ 'serves describes the last write, not the present.',
80
+ };
81
+ }
82
+ if (diagnosis.unreadable) {
83
+ return {
84
+ dispatching: false,
85
+ verdict: `cannot tell: the endpoint answered HTTP ${diagnosis.httpStatus ?? '?'} and carried no Factory ` +
86
+ 'health. Something other than the instance may be answering this URL — a gateway, an auth ' +
87
+ 'proxy, or a load balancer. Check the URL, then pass --token to read /evidence.',
88
+ };
89
+ }
90
+ if (diagnosis.workerOnly) {
91
+ return {
92
+ dispatching: false,
93
+ verdict: 'cannot tell: this deployment answers /healthz at the Worker without probing the container ' +
94
+ '(event-driven short-sleep), so the response is Worker liveness and carries no Factory ' +
95
+ 'health. Pass --token to read /evidence, which does reach the container.',
96
+ };
97
+ }
98
+ const health = diagnosis.health;
99
+ if (!health) {
100
+ const legacy = diagnosis.legacy ?? {};
101
+ if (!legacy.readinessReconcile && !legacy.eventListener) {
102
+ return {
103
+ dispatching: false,
104
+ verdict: 'cannot tell: this response carried no Factory health at all — no diagnostics block and ' +
105
+ 'no subsystem state strings. Pass --token to read /evidence.',
106
+ };
107
+ }
108
+ return {
109
+ dispatching: false,
110
+ verdict: 'cannot tell: this instance predates the /healthz diagnostics block (#295), so it publishes ' +
111
+ `state strings only — readinessReconcile=${legacy.readinessReconcile ?? 'unknown'}, ` +
112
+ `eventListener=${legacy.eventListener ?? 'unknown'}. ` +
113
+ 'Upgrade the deployed Factory, or pass --token to read /evidence.',
114
+ };
115
+ }
116
+ if (health.stale || health.loopStatus === 'stopping') {
117
+ return {
118
+ dispatching: false,
119
+ verdict: `not dispatching: ${health.reason ?? 'the loop heartbeat is not current'}`,
120
+ };
121
+ }
122
+ const readiness = health.readinessReconcile;
123
+ if (readiness?.state === 'stalled') {
124
+ const missed = readiness.missedPasses ?? 0;
125
+ return {
126
+ dispatching: false,
127
+ verdict: `not dispatching: the readiness sweep is stalled — one pass has been in flight for ` +
128
+ `${formatDuration(readiness.inFlightMs)} (${missed} missed passes at ` +
129
+ `${formatDuration(readiness.intervalMs)} cadence). The loop only re-arms when a sweep ` +
130
+ 'settles, so a hung pass stops dispatch permanently.',
131
+ };
132
+ }
133
+ if (readiness && (readiness.state === 'degraded' || readiness.state === 'retrying')) {
134
+ return {
135
+ dispatching: false,
136
+ verdict: `not dispatching: readinessReconcile is ${readiness.state} after ` +
137
+ `${readiness.consecutiveFailures} consecutive failures ` +
138
+ `(threshold ${readiness.failureThreshold}), last failure class ` +
139
+ `${readiness.lastErrorClass ?? 'unknown'}. ` +
140
+ 'Pass --token to read the message at /evidence.',
141
+ };
142
+ }
143
+ if (health.eventListener?.state === 'not-listening') {
144
+ return {
145
+ dispatching: false,
146
+ verdict: 'not dispatching: the daemon is not listening for Relayfile events.',
147
+ };
148
+ }
149
+ // #303. A wedged batch is the one dispatch-gating condition that fails
150
+ // without failing: nothing throws, no counter moves, and every other line in
151
+ // this report reads green while no issue can be promoted out of `queued`.
152
+ const capacity = health.dispatchCapacity;
153
+ if (capacity?.state === 'stalled') {
154
+ const agentless = capacity.agentlessOccupants ?? 0;
155
+ return {
156
+ dispatching: false,
157
+ verdict:
158
+ // `longestWaitMs` is the oldest *queue* wait, not how long the slots
159
+ // have been held; saying otherwise sends an operator looking for an
160
+ // occupant that has been there that long (#303 review, cubic).
161
+ `not dispatching: ${capacity.waiting} issue(s) have been waiting for batch capacity for up ` +
162
+ `to ${formatDuration(capacity.longestWaitMs)}, with ${capacity.active}/${capacity.batchSize} ` +
163
+ 'slot(s) occupied' +
164
+ (agentless > 0
165
+ ? `. ${agentless} occupied slot(s) never placed an agent and are past the ` +
166
+ `${formatDuration(capacity.agentlessHoldTimeoutMs)} reap deadline, so they cannot finish ` +
167
+ 'on their own'
168
+ : '') +
169
+ '. Pass --token to read /evidence for the issues holding the slots.',
170
+ };
171
+ }
172
+ if (health.status === 'unknown') {
173
+ return {
174
+ dispatching: false,
175
+ verdict: 'cannot tell: the health block did not report a status this version understands. ' +
176
+ 'Pass --token to read /evidence.',
177
+ };
178
+ }
179
+ if (health.status !== 'ok') {
180
+ return { dispatching: false, verdict: `not dispatching: ${health.reason ?? 'a subsystem is degraded'}` };
181
+ }
182
+ // Review follow-up on #300 (P1, cubic). An empty `degradedSubsystems` on a
183
+ // block that never reported the readiness sweep is an absence of evidence,
184
+ // not evidence of health.
185
+ if (!readiness || readiness.state === 'unknown') {
186
+ return {
187
+ dispatching: false,
188
+ verdict: 'cannot tell: the health block carries no readiness-reconcile state, so nothing here says ' +
189
+ 'whether discovery is running. Pass --token to read /evidence.',
190
+ };
191
+ }
192
+ if (readiness.state === 'not-running') {
193
+ return {
194
+ dispatching: false,
195
+ verdict: 'not dispatching: the readiness loop is not running — this instance is not a live daemon.',
196
+ };
197
+ }
198
+ return {
199
+ dispatching: true,
200
+ verdict: 'dispatching: readinessReconcile is healthy' +
201
+ (readiness?.intervalMs ? ` on a ${formatDuration(readiness.intervalMs)} cadence` : '') +
202
+ `, and the event listener is ${health.eventListener?.state ?? 'unknown'}.`,
203
+ };
204
+ }
205
+ export function formatDuration(ms) {
206
+ if (ms === undefined)
207
+ return 'unknown';
208
+ if (ms < 1_000)
209
+ return `${ms}ms`;
210
+ const seconds = Math.floor(ms / 1_000);
211
+ if (seconds < 60)
212
+ return `${seconds}s`;
213
+ const minutes = Math.floor(seconds / 60);
214
+ if (minutes < 60)
215
+ return `${minutes}m ${seconds % 60}s`;
216
+ return `${Math.floor(minutes / 60)}h ${minutes % 60}m`;
217
+ }
218
+ /** Read a deployed instance's public health, plus `/evidence` when a token is held. */
219
+ export async function diagnoseDeployedFactory(options) {
220
+ const fetchImpl = options.fetch ?? fetch;
221
+ const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
222
+ const url = options.url.replace(/\/+$/u, '');
223
+ let base;
224
+ try {
225
+ const health = await getJson(fetchImpl, endpoint(url, '/healthz'), { timeoutMs });
226
+ const body = asRecord(health.body);
227
+ // The container serves the daemon's block inside its heartbeat projection;
228
+ // accept a top-level copy too, so a proxy that hoists it still works.
229
+ const published = normalizePublicHealth(body.health ?? asRecord(body.heartbeat).health);
230
+ const workerOnly = body.eventDrivenSleep === true || body.container === 'not-probed';
231
+ // A container answering its own health says `ok`; the 503 path is the
232
+ // service-level negative. Anything else that answers on this URL — a
233
+ // gateway 404, an auth proxy 401, a load balancer 502 — never asked the
234
+ // container, and cannot support a statement about Factory.
235
+ // The container's health response always carries a top-level `ok`. A
236
+ // status code alone is not enough: a gateway can answer 200 with an error
237
+ // page or 503 with its own, and neither asked the container (#300 review,
238
+ // cubic).
239
+ const instanceAnswered = typeof body.ok === 'boolean';
240
+ base = {
241
+ url,
242
+ reachable: true,
243
+ httpStatus: health.status,
244
+ ...(instanceAnswered
245
+ ? { live: health.status === 200 && body.ok !== false }
246
+ : { unreadable: true }),
247
+ ...(asText(body.phase) ? { phase: asText(body.phase) } : {}),
248
+ ...(workerOnly ? { workerOnly: true } : {}),
249
+ ...(published ? { health: published } : { legacy: legacyHealth(body) }),
250
+ };
251
+ }
252
+ catch (error) {
253
+ base = { url, reachable: false, errorClass: telemetryErrorClass(error) };
254
+ }
255
+ if (base.reachable) {
256
+ base = { ...base, evidence: await readEvidence(fetchImpl, url, options.token, timeoutMs) };
257
+ }
258
+ return { ...base, ...verdictFor(base) };
259
+ }
260
+ async function readEvidence(fetchImpl, url, token, timeoutMs) {
261
+ if (!token) {
262
+ return {
263
+ fetched: false,
264
+ reason: 'no operator token supplied — pass --token or set FACTORY_EVIDENCE_TOKEN to read the ' +
265
+ 'free-text lastError at /evidence',
266
+ };
267
+ }
268
+ try {
269
+ const evidence = await getJson(fetchImpl, endpoint(url, '/evidence'), { token, timeoutMs });
270
+ if (evidence.status !== 200) {
271
+ // Only 401/403 are statements about the credential. A 404 means this
272
+ // deployment exposes no /evidence route and a 5xx means the endpoint
273
+ // failed — sending someone to rotate a working token for either is the
274
+ // wrong-problem failure again (#300 review, CodeRabbit).
275
+ const reason = evidence.status === 401 || evidence.status === 403
276
+ ? `/evidence answered HTTP ${evidence.status}; the token was not accepted`
277
+ : evidence.status === 404
278
+ ? `/evidence answered HTTP 404; this deployment exposes no /evidence route (the token is not the problem)`
279
+ : `/evidence request failed with HTTP ${evidence.status}; the endpoint errored (the token is not the problem)`;
280
+ return { fetched: false, httpStatus: evidence.status, reason };
281
+ }
282
+ const body = asRecord(evidence.body);
283
+ const readiness = asRecord(body.readinessReconcile);
284
+ return {
285
+ fetched: true,
286
+ httpStatus: evidence.status,
287
+ ...(asText(body.phase) ? { phase: asText(body.phase) } : {}),
288
+ ...(asText(readiness.lastError) ? { lastError: asText(readiness.lastError) } : {}),
289
+ ...(asCount(readiness.consecutiveFailures) !== undefined
290
+ ? { consecutiveFailures: asCount(readiness.consecutiveFailures) }
291
+ : {}),
292
+ };
293
+ }
294
+ catch (error) {
295
+ return { fetched: false, reason: `/evidence request failed (${telemetryErrorClass(error)})` };
296
+ }
297
+ }
298
+ /** Human-readable rendering; `--json` prints the diagnosis object instead. */
299
+ export function renderDeployedDiagnosis(diagnosis) {
300
+ const lines = [`factory diagnose — ${diagnosis.url}`];
301
+ lines.push(` reachable : ${diagnosis.reachable ? `yes (HTTP ${diagnosis.httpStatus ?? '?'})` : `no (${diagnosis.errorClass ?? 'no response'})`}`);
302
+ if (diagnosis.phase !== undefined) {
303
+ lines.push(` phase : ${diagnosis.phase}`);
304
+ }
305
+ if (diagnosis.live === false) {
306
+ lines.push(' instance liveness : NOT LIVE (the instance\'s own verdict, on its own clock)');
307
+ }
308
+ const health = diagnosis.health;
309
+ if (health) {
310
+ lines.push(` liveness (ok) : ${health.ok} (as of the last heartbeat write)`);
311
+ lines.push(` status : ${health.status}`);
312
+ lines.push(` loop : ${health.loopStatus ?? 'unknown'}, heartbeat ${formatDuration(health.ageMs)} old${health.stale ? ' (STALE)' : ''}`);
313
+ if (health.degradedSubsystems.length > 0) {
314
+ lines.push(` degraded subsystems : ${health.degradedSubsystems.join(', ')}`);
315
+ }
316
+ const readiness = health.readinessReconcile;
317
+ if (readiness) {
318
+ lines.push(' readinessReconcile:');
319
+ lines.push(` state : ${readiness.state}`);
320
+ lines.push(` consecutiveFailures: ${readiness.consecutiveFailures} (threshold ${readiness.failureThreshold})`);
321
+ lines.push(` lastErrorClass : ${readiness.lastErrorClass ?? '—'}`);
322
+ lines.push(` cadence : ${formatDuration(readiness.intervalMs)}`);
323
+ if (readiness.inFlightMs !== undefined) {
324
+ lines.push(` pass in flight : ${formatDuration(readiness.inFlightMs)} (${readiness.missedPasses ?? 0} missed passes)`);
325
+ }
326
+ lines.push(` lastStartedAt : ${formatInstant(readiness.lastStartedAtMs)}`);
327
+ lines.push(` lastCompletedAt : ${formatInstant(readiness.lastCompletedAtMs)}`);
328
+ lines.push(` lastFailureAt : ${formatInstant(readiness.lastFailureAtMs)}`);
329
+ }
330
+ const capacity = health.dispatchCapacity;
331
+ if (capacity) {
332
+ lines.push(' dispatchCapacity:');
333
+ lines.push(` state : ${capacity.state}`);
334
+ lines.push(` slots : ${capacity.active}/${capacity.batchSize} occupied`);
335
+ lines.push(` waiting : ${capacity.waiting} issue(s)`);
336
+ lines.push(` longest queue wait : ${formatDuration(capacity.longestWaitMs)} (warn past ${formatDuration(capacity.waitWarnMs)})`);
337
+ if (capacity.agentlessOccupants !== undefined) {
338
+ lines.push(` unreaped wedges : ${capacity.agentlessOccupants} occupied slot(s) never placed an ` +
339
+ `agent and are past the ${formatDuration(capacity.agentlessHoldTimeoutMs)} reap deadline`);
340
+ }
341
+ }
342
+ lines.push(` eventListener : ${health.eventListener?.state ?? 'unknown'}`);
343
+ }
344
+ else if (diagnosis.unreadable) {
345
+ lines.push(' health block : none — this response carried no Factory health');
346
+ }
347
+ else if (diagnosis.workerOnly) {
348
+ // Not an old instance — an unprobed one. Saying "predates #295" here would
349
+ // send an operator to upgrade a Factory that is fine.
350
+ lines.push(' health block : not requested — the Worker answered without probing the container');
351
+ lines.push(' mode : event-driven short-sleep');
352
+ }
353
+ else if (diagnosis.legacy?.readinessReconcile || diagnosis.legacy?.eventListener) {
354
+ lines.push(' health block : absent — state strings only (instance predates #295)');
355
+ lines.push(` readinessReconcile : ${diagnosis.legacy.readinessReconcile ?? 'unknown'}`);
356
+ lines.push(` eventListener : ${diagnosis.legacy.eventListener ?? 'unknown'}`);
357
+ }
358
+ else {
359
+ // No block and no state strings: the response carried no Factory health at
360
+ // all. That is a statement about this response, not about the instance.
361
+ lines.push(' health block : absent, and no subsystem state strings in the response');
362
+ }
363
+ const evidence = diagnosis.evidence;
364
+ if (evidence) {
365
+ lines.push(` evidence : ${evidence.fetched ? `read (HTTP ${evidence.httpStatus ?? 200})` : `not read — ${evidence.reason ?? 'unavailable'}`}`);
366
+ if (evidence.lastError)
367
+ lines.push(` lastError : ${evidence.lastError}`);
368
+ }
369
+ lines.push('');
370
+ lines.push(`verdict: ${diagnosis.verdict}`);
371
+ return `${lines.join('\n')}\n`;
372
+ }
373
+ const formatInstant = (ms) => {
374
+ if (ms === undefined)
375
+ return '—';
376
+ // Belt and braces with `normalizePublicHealth`'s range check: a renderer
377
+ // asked to explain an outage must never be the thing that throws.
378
+ const instant = new Date(ms);
379
+ return Number.isNaN(instant.getTime()) ? 'unknown' : instant.toISOString();
380
+ };
381
+ //# sourceMappingURL=diagnose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnose.js","sourceRoot":"","sources":["../../src/cli/diagnose.ts"],"names":[],"mappings":"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"}
@@ -45,6 +45,8 @@ export interface FleetCliDeps {
45
45
  cloudAccessTokenFetch?: typeof fetch;
46
46
  /** Hermetic Cloud telemetry transport for CLI integration tests. */
47
47
  cloudReporterFetch?: typeof fetch;
48
+ /** Hermetic deployed-instance transport for `diagnose --deployed` tests. */
49
+ diagnoseFetch?: typeof fetch;
48
50
  isInteractive?: () => boolean;
49
51
  confirmIntegrationConnect?: (provider: FactoryIntegrationProvider) => Promise<boolean>;
50
52
  openIntegrationUrl?: (url: string) => void | Promise<void>;
@@ -121,6 +123,12 @@ type ParsedCommand = {
121
123
  kind: 'factory-init';
122
124
  repo?: string;
123
125
  workspaceId?: string;
126
+ } | {
127
+ kind: 'factory-diagnose';
128
+ url: string;
129
+ token?: string;
130
+ json: boolean;
131
+ timeoutMs?: number;
124
132
  } | {
125
133
  kind: 'notion-intake';
126
134
  manifestPath: string;
@@ -133,7 +141,7 @@ type ParsedCommand = {
133
141
  statePath?: string;
134
142
  };
135
143
  export declare function runFleetCli(argv: string[], deps?: FleetCliDeps): Promise<number>;
136
- export declare function parseFleetCommand(args: string[]): ParsedCommand;
144
+ export declare function parseFleetCommand(args: string[], env?: NodeJS.ProcessEnv): ParsedCommand;
137
145
  export declare function parseGlobalOptions(argv: string[]): {
138
146
  globals: GlobalOptions;
139
147
  args: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"fleet.d.ts","sourceRoot":"","sources":["../../src/cli/fleet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fleet.d.ts","sourceRoot":"","sources":["../../src/cli/fleet.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAG1E,OAAO,EAA6B,KAAK,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AAWnG,OAAO,EAKL,aAAa,EACb,WAAW,EAEX,iBAAiB,EAmBjB,2BAA2B,EAQ3B,KAAK,UAAU,EACf,KAAK,OAAO,EAEZ,KAAK,oBAAoB,EAGzB,KAAK,aAAa,EAElB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,sBAAsB,EAC3B,KAAK,MAAM,EAEX,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAGhB,KAAK,WAAW,EAChB,KAAK,+BAA+B,EACpC,KAAK,wBAAwB,EAC9B,MAAM,UAAU,CAAA;AAIjB,OAAO,EAAmB,KAAK,sBAAsB,EAAE,KAAK,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAQxG,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAA;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAShD,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC/B,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAQL,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAE7B,MAAM,WAAW,CAAA;AAElB,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG;IACvC,2EAA2E;IAC3E,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B,kEAAkE;IAClE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,CAAC,MAAM,EAAE,aAAa,KAAK,OAAO,CAAC,aAAa,CAAC,GAAG,aAAa,CAAA;AAEpG,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,qEAAqE;IACrE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,wFAAwF;IACxF,iBAAiB,CAAC,EAAE,oBAAoB,CAAA;IACxC,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,aAAa,CAAC,EAAE,OAAO,aAAa,CAAA;IACpC,WAAW,CAAC,EAAE,OAAO,WAAW,CAAA;IAChC,iBAAiB,CAAC,EAAE,OAAO,iBAAiB,CAAA;IAC5C,oBAAoB,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,+BAA+B,KAAK,OAAO,CAAC,WAAW,CAAC,CAAA;IACzF,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAC,wBAAwB,CAAC,CAAA;IAC1D,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAA;IAC9F,gBAAgB,CAAC,EAAE,CACjB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,iBAAiB,KACxB,OAAO,CAAC,IAAI,CAAC,CAAA;IAClB,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IAChD,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;IAC1C,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;IAC1C,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,eAAe,CAAC,EAAE,QAAQ,CAAA;IAC1B,iBAAiB,CAAC,EAAE,QAAQ,CAAA;IAC5B,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;IAClB,qBAAqB,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC,CAAA;IAC5D,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACvC,gEAAgE;IAChE,qBAAqB,CAAC,EAAE,qBAAqB,CAAA;IAC7C,QAAQ,CAAC,EAAE,oBAAoB,CAAA;IAC/B,oBAAoB,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;IACpG,kFAAkF;IAClF,qBAAqB,CAAC,EAAE,OAAO,KAAK,CAAA;IACpC,oEAAoE;IACpE,kBAAkB,CAAC,EAAE,OAAO,KAAK,CAAA;IACjC,4EAA4E;IAC5E,aAAa,CAAC,EAAE,OAAO,KAAK,CAAA;IAC5B,aAAa,CAAC,EAAE,MAAM,OAAO,CAAA;IAC7B,yBAAyB,CAAC,EAAE,CAAC,QAAQ,EAAE,0BAA0B,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACtF,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1D,eAAe,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,sBAAsB,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAA;IACtF,2FAA2F;IAC3F,eAAe,CAAC,EAAE,uBAAuB,CAAA;IACzC,qFAAqF;IACrF,YAAY,CAAC,EAAE,sBAAsB,CAAA;IACrC,0FAA0F;IAC1F,kBAAkB,CAAC,EAAE,wBAAwB,CAAA;IAC7C,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,OAAO,2BAA2B,CAAA;IACrD,+EAA+E;IAC/E,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,yBAAyB,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAClF,iEAAiE;IACjE,sBAAsB,CAAC,EAAE,MAAM,CAAA;CAChC;AAED,UAAU,aAAa;IACrB,OAAO,EAAE,YAAY,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,OAAO,CAAA;IACf,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B;AAQD,KAAK,aAAa,GACd;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE;QAAE,UAAU,EAAE,UAAU,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAChL;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,aAAa,GAAG,WAAW,GAAG,cAAc,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,GACjI;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1E;IAAE,IAAI,EAAE,qBAAqB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC9E;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GACrE;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7D;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5F;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAC/C;IACE,IAAI,EAAE,iBAAiB,CAAA;IACvB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,oBAAoB,CAAC,EAAE,OAAO,GAAG,eAAe,CAAA;IAChD,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAEL,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE,YAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CA6Z1F;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,aAAa,CAuBrG;AA6FD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;IAAE,OAAO,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CA8B7F;AA4mBD,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,YAAY,CAAC,aAAa,CAAC,EACrC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAUf;AA+aD,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAGrD;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,SAAgB,EACxB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,GAAG,SAAS,CA2BpB;AAED,wBAAgB,kCAAkC,CAChD,QAAQ,SAAgB,EACxB,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,sBAAsB,UAAQ,GAC7B,MAAM,GAAG,SAAS,CA2BpB;AA+fD,MAAM,MAAM,mBAAmB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAEnE,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,mBAAmB,CA6BhG;AA8ND,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,OAAO,EAChB,IAAI,GAAE;IACJ,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC7B,WAAW,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC,CAAA;CAC9C,GACL,MAAM,IAAI,CA4BZ;AA8ED,wBAAsB,IAAI,CAAC,IAAI,WAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAGtE"}