@agent-relay/factory 0.1.62 → 0.1.64

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 (166) hide show
  1. package/README.md +117 -15
  2. package/dist/cli/exit-codes.d.ts +81 -0
  3. package/dist/cli/exit-codes.d.ts.map +1 -0
  4. package/dist/cli/exit-codes.js +122 -0
  5. package/dist/cli/exit-codes.js.map +1 -0
  6. package/dist/cli/fleet.d.ts +26 -2
  7. package/dist/cli/fleet.d.ts.map +1 -1
  8. package/dist/cli/fleet.js +183 -40
  9. package/dist/cli/fleet.js.map +1 -1
  10. package/dist/cli/index.d.ts +3 -0
  11. package/dist/cli/index.d.ts.map +1 -0
  12. package/dist/cli/index.js +2 -0
  13. package/dist/cli/index.js.map +1 -0
  14. package/dist/config/schema.d.ts +156 -52
  15. package/dist/config/schema.d.ts.map +1 -1
  16. package/dist/config/schema.js +17 -5
  17. package/dist/config/schema.js.map +1 -1
  18. package/dist/dispatch/templates.d.ts +7 -0
  19. package/dist/dispatch/templates.d.ts.map +1 -1
  20. package/dist/dispatch/templates.js +64 -12
  21. package/dist/dispatch/templates.js.map +1 -1
  22. package/dist/dispatch/work-unit-identity.d.ts +19 -0
  23. package/dist/dispatch/work-unit-identity.d.ts.map +1 -0
  24. package/dist/dispatch/work-unit-identity.js +40 -0
  25. package/dist/dispatch/work-unit-identity.js.map +1 -0
  26. package/dist/environments/stack-descriptor.d.ts +3 -3
  27. package/dist/fleet/control-plane-circuit.d.ts +57 -0
  28. package/dist/fleet/control-plane-circuit.d.ts.map +1 -0
  29. package/dist/fleet/control-plane-circuit.js +231 -0
  30. package/dist/fleet/control-plane-circuit.js.map +1 -0
  31. package/dist/fleet/internal-fleet-client.d.ts +2 -1
  32. package/dist/fleet/internal-fleet-client.d.ts.map +1 -1
  33. package/dist/fleet/internal-fleet-client.js +11 -7
  34. package/dist/fleet/internal-fleet-client.js.map +1 -1
  35. package/dist/fleet/relay-fleet-client.d.ts +3 -0
  36. package/dist/fleet/relay-fleet-client.d.ts.map +1 -1
  37. package/dist/fleet/relay-fleet-client.js +97 -18
  38. package/dist/fleet/relay-fleet-client.js.map +1 -1
  39. package/dist/github/writeback-paths.d.ts +7 -0
  40. package/dist/github/writeback-paths.d.ts.map +1 -0
  41. package/dist/github/writeback-paths.js +28 -0
  42. package/dist/github/writeback-paths.js.map +1 -0
  43. package/dist/hosted/orchestrator.d.ts.map +1 -1
  44. package/dist/hosted/orchestrator.js +2 -0
  45. package/dist/hosted/orchestrator.js.map +1 -1
  46. package/dist/index.d.ts +10 -4
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +6 -3
  49. package/dist/index.js.map +1 -1
  50. package/dist/intake/index.d.ts +2 -1
  51. package/dist/intake/index.d.ts.map +1 -1
  52. package/dist/intake/index.js +2 -1
  53. package/dist/intake/index.js.map +1 -1
  54. package/dist/intake/notion-manifest.d.ts +48 -0
  55. package/dist/intake/notion-manifest.d.ts.map +1 -0
  56. package/dist/intake/notion-manifest.js +258 -0
  57. package/dist/intake/notion-manifest.js.map +1 -0
  58. package/dist/intake/notion-relay-claim.d.ts +5 -4
  59. package/dist/intake/notion-relay-claim.d.ts.map +1 -1
  60. package/dist/intake/notion-relay-claim.js +48 -7
  61. package/dist/intake/notion-relay-claim.js.map +1 -1
  62. package/dist/intake/notion.d.ts +6 -3
  63. package/dist/intake/notion.d.ts.map +1 -1
  64. package/dist/intake/notion.js +63 -13
  65. package/dist/intake/notion.js.map +1 -1
  66. package/dist/issue-key-match.d.ts +6 -0
  67. package/dist/issue-key-match.d.ts.map +1 -1
  68. package/dist/issue-key-match.js +6 -1
  69. package/dist/issue-key-match.js.map +1 -1
  70. package/dist/mount/local-mount-preflight.d.ts.map +1 -1
  71. package/dist/mount/local-mount-preflight.js +6 -2
  72. package/dist/mount/local-mount-preflight.js.map +1 -1
  73. package/dist/mount/mount-auth-error.d.ts +16 -3
  74. package/dist/mount/mount-auth-error.d.ts.map +1 -1
  75. package/dist/mount/mount-auth-error.js +34 -7
  76. package/dist/mount/mount-auth-error.js.map +1 -1
  77. package/dist/mount/relayfile-cloud-mount-client.d.ts +36 -1
  78. package/dist/mount/relayfile-cloud-mount-client.d.ts.map +1 -1
  79. package/dist/mount/relayfile-cloud-mount-client.js +136 -6
  80. package/dist/mount/relayfile-cloud-mount-client.js.map +1 -1
  81. package/dist/mount/relayfile-github-connection-write.d.ts +24 -2
  82. package/dist/mount/relayfile-github-connection-write.d.ts.map +1 -1
  83. package/dist/mount/relayfile-github-connection-write.js +90 -1
  84. package/dist/mount/relayfile-github-connection-write.js.map +1 -1
  85. package/dist/node/factory-node.d.ts.map +1 -1
  86. package/dist/node/factory-node.js +18 -4
  87. package/dist/node/factory-node.js.map +1 -1
  88. package/dist/observability/cloud-reporter.d.ts +1 -0
  89. package/dist/observability/cloud-reporter.d.ts.map +1 -1
  90. package/dist/observability/cloud-reporter.js +182 -50
  91. package/dist/observability/cloud-reporter.js.map +1 -1
  92. package/dist/observability/events.d.ts +52 -52
  93. package/dist/orchestrator/batch-tracker.d.ts +25 -0
  94. package/dist/orchestrator/batch-tracker.d.ts.map +1 -1
  95. package/dist/orchestrator/batch-tracker.js +48 -2
  96. package/dist/orchestrator/batch-tracker.js.map +1 -1
  97. package/dist/orchestrator/factory.d.ts +36 -2
  98. package/dist/orchestrator/factory.d.ts.map +1 -1
  99. package/dist/orchestrator/factory.js +1208 -82
  100. package/dist/orchestrator/factory.js.map +1 -1
  101. package/dist/orchestrator/index.d.ts +1 -1
  102. package/dist/orchestrator/index.d.ts.map +1 -1
  103. package/dist/orchestrator/index.js +1 -1
  104. package/dist/orchestrator/index.js.map +1 -1
  105. package/dist/ports/fleet.d.ts +6 -0
  106. package/dist/ports/fleet.d.ts.map +1 -1
  107. package/dist/ports/index.d.ts +1 -1
  108. package/dist/ports/index.d.ts.map +1 -1
  109. package/dist/ports/mount.d.ts +39 -0
  110. package/dist/ports/mount.d.ts.map +1 -1
  111. package/dist/ports/state.d.ts +75 -4
  112. package/dist/ports/state.d.ts.map +1 -1
  113. package/dist/state/document-store.d.ts +33 -0
  114. package/dist/state/document-store.d.ts.map +1 -0
  115. package/dist/state/document-store.js +7 -0
  116. package/dist/state/document-store.js.map +1 -0
  117. package/dist/state/file-state-store.d.ts +32 -7
  118. package/dist/state/file-state-store.d.ts.map +1 -1
  119. package/dist/state/file-state-store.js +169 -250
  120. package/dist/state/file-state-store.js.map +1 -1
  121. package/dist/state/in-memory-state-store.d.ts +13 -2
  122. package/dist/state/in-memory-state-store.d.ts.map +1 -1
  123. package/dist/state/in-memory-state-store.js +87 -4
  124. package/dist/state/in-memory-state-store.js.map +1 -1
  125. package/dist/state/watch-state-document.d.ts +5 -0
  126. package/dist/state/watch-state-document.d.ts.map +1 -0
  127. package/dist/state/watch-state-document.js +486 -0
  128. package/dist/state/watch-state-document.js.map +1 -0
  129. package/dist/testing/deadline.d.ts +11 -0
  130. package/dist/testing/deadline.d.ts.map +1 -0
  131. package/dist/testing/deadline.js +23 -0
  132. package/dist/testing/deadline.js.map +1 -0
  133. package/dist/testing/fakes.d.ts +2 -0
  134. package/dist/testing/fakes.d.ts.map +1 -1
  135. package/dist/testing/fakes.js.map +1 -1
  136. package/dist/testing/index.d.ts +1 -0
  137. package/dist/testing/index.d.ts.map +1 -1
  138. package/dist/testing/index.js +1 -0
  139. package/dist/testing/index.js.map +1 -1
  140. package/dist/trajectory.d.ts +25 -0
  141. package/dist/trajectory.d.ts.map +1 -0
  142. package/dist/trajectory.js +51 -0
  143. package/dist/trajectory.js.map +1 -0
  144. package/dist/triage/heuristic.d.ts +5 -0
  145. package/dist/triage/heuristic.d.ts.map +1 -1
  146. package/dist/triage/heuristic.js +42 -3
  147. package/dist/triage/heuristic.js.map +1 -1
  148. package/dist/triage/index.d.ts +1 -1
  149. package/dist/triage/index.d.ts.map +1 -1
  150. package/dist/triage/index.js +1 -1
  151. package/dist/triage/index.js.map +1 -1
  152. package/dist/triage/schema.d.ts +73 -55
  153. package/dist/triage/schema.d.ts.map +1 -1
  154. package/dist/triage/schema.js +2 -1
  155. package/dist/triage/schema.js.map +1 -1
  156. package/dist/types.d.ts +19 -3
  157. package/dist/types.d.ts.map +1 -1
  158. package/dist/writeback/github.d.ts +22 -7
  159. package/dist/writeback/github.d.ts.map +1 -1
  160. package/dist/writeback/github.js +86 -16
  161. package/dist/writeback/github.js.map +1 -1
  162. package/dist/writeback/index.d.ts +1 -1
  163. package/dist/writeback/index.d.ts.map +1 -1
  164. package/dist/writeback/index.js +1 -1
  165. package/dist/writeback/index.js.map +1 -1
  166. package/package.json +13 -8
package/README.md CHANGED
@@ -73,8 +73,9 @@ After init, add the `factory` label to an open issue and run a dry run below.
73
73
  1. **Connect GitHub to your relay workspace** with push access for the target
74
74
  repositories. Factory uses that workspace connection to publish branches and
75
75
  open pull requests by default. A local `gh` installation and `gh auth login`
76
- are required only when `github.identity` selects the user path (or for the
77
- existing GitHub issue lifecycle writeback described below). If a required
76
+ are required when `github.identity` is `"user"`, or when the default
77
+ `"auto"` mode uses the compatibility GitHub issue lifecycle path. Exact
78
+ `"app"` mode needs no local GitHub credential. If a required
78
79
  connection is missing, an interactive Factory command offers to open the
79
80
  Relayfile connection flow and waits for it to finish. Linear-backed operations
80
81
  require both Linear and GitHub; GitHub-native operations require GitHub.
@@ -149,6 +150,34 @@ names and the provider-claim state (`pending`, `verified`, or `degraded`). This
149
150
  view is read from Factory's local in-flight registry, so it remains available
150
151
  when GitHub lifecycle writeback is the degraded subsystem.
151
152
 
153
+ It also reports `fleetControlPlane`. Factory bounds its read-only roster probe,
154
+ pauses a live dispatch immediately when that probe fails, and opens a circuit
155
+ after repeated failures. While the circuit is open, new spawn and resume calls
156
+ fail fast. After `fleetHealth.resetTimeoutMs`, one half-open roster probe may
157
+ close the circuit. Configure `fleetHealth.rosterTimeoutMs`,
158
+ `fleetHealth.failureThreshold`, and `fleetHealth.resetTimeoutMs` when the fleet
159
+ has intentionally higher control-plane latency. Mutating calls are never
160
+ abandoned behind a local timeout because an accepted-but-late spawn would be
161
+ ambiguous.
162
+
163
+ A paused `run-once` or `loop` exits non-zero and logs `dispatch paused by the
164
+ circuit`; `factory status` reads the daemon heartbeat and reports the circuit's
165
+ `state`, `lastError`, and `retryAtMs`. If the broker is healthy but slower than
166
+ the configured bound, raise `fleetHealth.rosterTimeoutMs` (maximum 60 seconds)
167
+ to match measured control-plane latency. If the control path is unavailable,
168
+ repair the isolated broker and wait until `retryAtMs`; the next successful
169
+ half-open roster probe closes the circuit automatically. Do not treat an open
170
+ circuit as an empty queue or successful no-work iteration.
171
+
172
+ For production, set `fleetHealth.requireDedicatedBroker` to `true` and point
173
+ `AGENT_RELAY_STATE_DIR` at a state directory that is distinct from the
174
+ project's `.agentworkforce/relay`. Factory then refuses startup if it would
175
+ silently reuse the interactive project broker.
176
+
177
+ Factory now defaults `batchSize` to `1`. Operators may explicitly raise it to
178
+ at most `5` after isolating Factory workers from an interactive broker and
179
+ measuring control-plane latency under the intended recipe mix.
180
+
152
181
  For a live daemon, `factory status` also includes `readinessReconcile`. Its
153
182
  state advances from `retrying` to `degraded` after three consecutive periodic
154
183
  discovery failures and returns to `healthy` after a successful checkpoint.
@@ -221,6 +250,31 @@ pages can be admitted only with a bootstrap entry containing the exact
221
250
  `authorizedPageId`, destination, safe summary, and operator reason. That escape
222
251
  hatch is deliberately page-specific; there is no title or content heuristic.
223
252
 
253
+ Factory can generate that manifest directly from the **Factory Tasks** Notion
254
+ data source. The generator uses `NOTION_API_KEY` for read-only data-source and
255
+ page-markdown requests, selects only rows whose `Status` is `Ready for Agent`,
256
+ and never updates a row or its status. `Labels` and `Route` values are combined
257
+ for repository issue labels. A repository row can supply a separately reviewed
258
+ `Public Summary`; Factory uses that text for a public lifecycle issue and never
259
+ copies the private page body. The output order is stable by page ID, so the same
260
+ database state produces the same manifest on every run.
261
+
262
+ ```bash
263
+ factory intake notion generate \
264
+ --mount-root ../.integrations/notion \
265
+ --worker-mount-root .integrations/notion \
266
+ --worker-mount-transport relay-channel \
267
+ --state-path ../.factory/notion-intake-state.json \
268
+ > ./ops/notion-intake.json
269
+ ```
270
+
271
+ `--data-source` can override the built-in Factory Tasks data source ID. Paths in
272
+ the generated manifest retain the existing intake semantics: `mountRoot` and
273
+ `statePath` are resolved relative to the saved manifest, while
274
+ `workerMountRoot` is the path workers receive. Generation fails closed if there
275
+ are no ready rows, a required property is missing, a row sets both (or neither)
276
+ of `Repo` and `Project Path`, or Notion returns a truncated page body.
277
+
224
278
  ```json
225
279
  {
226
280
  "version": 1,
@@ -555,13 +609,21 @@ as local processes.
555
609
 
556
610
  The supported topology for the **CLI control plane** is one Factory host per
557
611
  workspace, with any number of relay execution nodes. Multiple Factory processes
558
- on that host are fenced through the shared `FileStateStore` lock/lease.
612
+ that open the same state file do not mutate it concurrently: `FileStateStore`
613
+ holds a cross-process filesystem lock around the complete read/modify/write,
614
+ so a second process waits, reloads after it acquires the lock, and then publishes
615
+ through fsync plus atomic rename. The in-process operation queue alone is not
616
+ the cross-process fence.
559
617
  Active/active CLI control planes on different hosts remain intentionally
560
618
  unsupported: separate local state files cannot provide a truthful cross-host
561
619
  fence.
562
620
 
563
621
  ### Hosting the control plane in Cloud
564
622
 
623
+ Embedded CLI hosts can inject durable coordination storage through the
624
+ host-neutral [`WatchStateDocumentStore` port](docs/document-state-store.md)
625
+ via `stateStoreFactory`.
626
+
565
627
  `@agent-relay/factory/hosted` is the worker-safe control-plane entrypoint. It
566
628
  contains no Node filesystem/process dependency and runs the complete sweep:
567
629
 
@@ -645,13 +707,45 @@ abandoned so a restart cannot respawn it:
645
707
  }
646
708
  ```
647
709
 
710
+ ### Recover names created before dispatch identity proofs
711
+
712
+ Factory stamps every dispatched agent with a stable broker identity derived from
713
+ the provider-native issue identity and role. For example, the reviewer for
714
+ `AgentWorkforce/factory#244` uses
715
+ `factory:dispatch:v1:github:agentworkforce/factory#244:reviewer`. A retry of that
716
+ work unit can reclaim its deterministic agent name after a crash, while another
717
+ repository's issue 244 cannot.
718
+
719
+ Agent records created before this behavior have no identity stamp and cannot be
720
+ reclaimed automatically. This includes the burned `ar-244-review-factory` seat
721
+ and any `ar-244-impl-factory` / `ar-244-babysit-factory` siblings created by the
722
+ same pre-fix dispatch. After verifying the named process is no longer live, run
723
+ the broker's guarded, one-time legacy recovery for each affected name. The
724
+ workspace key and Relaycast base URL use their normal environment variables;
725
+ the raw proof is supplied only through the environment and is never placed on
726
+ the command line:
727
+
728
+ ```bash
729
+ BROKER_BIN="$(node --input-type=module -e \
730
+ "import { getBrokerBinaryPath } from '@agent-relay/harness-driver/broker-path'; const p = getBrokerBinaryPath(); if (!p) process.exit(1); process.stdout.write(p)")"
731
+
732
+ RELAY_AGENT_IDENTITY_KEY='factory:dispatch:v1:github:agentworkforce/factory#244:reviewer' \
733
+ "$BROKER_BIN" reclaim-legacy-identity ar-244-review-factory
734
+ ```
735
+
736
+ Use the matching role suffix (`implementer`, `reviewer`, or `babysitter`) for
737
+ each sibling. Recovery refuses a live record, a record that already has an
738
+ identity stamp, or a concurrent competing claim; it does not weaken ordinary
739
+ collision checks. Once stamped, the next Factory retry presents the same proof
740
+ and reclaims normally.
741
+
648
742
  The full schema — every field and default — is validated by Zod at load time, so
649
743
  an invalid config fails fast with a field-level error. See
650
744
  [`src/config/schema.ts`](src/config/schema.ts) for the authoritative reference,
651
745
  and [`test/fixtures/factory.config.json`](test/fixtures/factory.config.json) for a
652
746
  worked example (including offline fixture mode).
653
747
 
654
- Factory PR authorship is controlled explicitly with `github.identity`:
748
+ Factory GitHub write attribution is controlled explicitly with `github.identity`:
655
749
 
656
750
  ```jsonc
657
751
  {
@@ -661,19 +755,27 @@ Factory PR authorship is controlled explicitly with `github.identity`:
661
755
  }
662
756
  ```
663
757
 
664
- - `"app"` always publishes through the connected workspace GitHub App. If that
665
- write path is unavailable, Factory fails loudly and never falls back to a
666
- personal account.
667
- - `"user"` always publishes with the account authenticated by the local `gh`
668
- CLI, even when the app path is available.
669
- - `"auto"` is the default and preserves compatibility: prefer the app path,
670
- then fall back to the local `gh` user when the app writer is unavailable.
758
+ - `"app"` publishes pull requests and performs GitHub issue lifecycle writes
759
+ through the connected workspace GitHub App. Status transitions provision the
760
+ target Factory label, add only that label, and remove only the prior Factory
761
+ label, so labels applied by people are never replaced from a stale mount
762
+ projection. If any required write capability is unavailable, Factory fails
763
+ loudly and never falls back to a personal account.
764
+ - `"user"` publishes pull requests and performs issue lifecycle writes with the
765
+ account authenticated by the local `gh` CLI, even when the app path is
766
+ available.
767
+ - `"auto"` is the default and preserves compatibility: pull requests prefer the
768
+ App path and fall back to the local `gh` user, while issue comments, status
769
+ labels, and issue closure retain the local `gh` path.
671
770
 
672
771
  Each successful publication log includes `identity` (`app` or `user`) and the
673
- confirmed `author`. This setting currently controls PR creation only. GitHub
674
- issue comments and lifecycle status labels still use the existing local `gh`
675
- writeback; extending the identity policy to those operations requires a
676
- connected-app issue writeback surface.
772
+ confirmed `author`. App writes are not reported complete until the connected
773
+ mount acknowledges the provider mutation. Provider-authoritative issue reads
774
+ remain optional on the writeback interface; when unavailable, their existing
775
+ call sites keep their conservative fallback behavior.
776
+
777
+ This identity setting does not change Notion intake's separate GitHub issue
778
+ publisher, which still requires local `gh` authentication when enabled.
677
779
 
678
780
  Authenticated Factory progress reporting is enabled by default for real CLI
679
781
  sessions. Factory sends privacy-bounded lifecycle events, worker ownership,
@@ -0,0 +1,81 @@
1
+ import type { TerminalDispatchLifecyclePhase } from '../ports/state.js';
2
+ import type { DispatchResult, IterationReport } from '../types.js';
3
+ /**
4
+ * Process exit codes for the `factory` CLI.
5
+ *
6
+ * The contract is deliberately narrow: `OK` means *the requested action was
7
+ * performed*. Every other value means it was not. A supervising loop, cron
8
+ * entry, or CI step that only reads `$?` must be able to tell a refusal from a
9
+ * completed run — printing a good diagnostic to stderr does not help a caller
10
+ * that never reads stderr.
11
+ *
12
+ * `REFUSED` and `RETRYABLE` split the refusals along the one axis a caller can
13
+ * act on: whether repeating the identical command could ever succeed.
14
+ */
15
+ export declare const FACTORY_EXIT: {
16
+ /** The requested action was performed. */
17
+ readonly OK: 0;
18
+ /** The command failed. The default for a thrown error with no finer classification. */
19
+ readonly FAILED: 1;
20
+ /**
21
+ * Deliberately refused. Repeating the identical command will refuse again
22
+ * until an input, a config value, or a credential changes.
23
+ */
24
+ readonly REFUSED: 2;
25
+ /**
26
+ * Not performed this time, but the same command may succeed later — a lost
27
+ * writeback race, or a capacity/dependency hold that clears on its own.
28
+ */
29
+ readonly RETRYABLE: 3;
30
+ };
31
+ export type FactoryExitCode = (typeof FACTORY_EXIT)[keyof typeof FACTORY_EXIT];
32
+ /**
33
+ * Classify a thrown command failure.
34
+ *
35
+ * A mount scope shortfall is terminal until the operator re-authenticates with
36
+ * a session that can mint the filesystem scopes, so it is `REFUSED`. A live
37
+ * dispatch state change means another writer won the race for the same issue;
38
+ * the work unit is still there and the next attempt may win, so it is
39
+ * `RETRYABLE`. Everything else is an unclassified failure.
40
+ */
41
+ export declare function exitCodeForError(error: unknown): FactoryExitCode;
42
+ /**
43
+ * Classify the outcome of a single-issue `factory dispatch`.
44
+ *
45
+ * A dry run's requested action is the dry run itself, so it is always `OK`. For
46
+ * a real dispatch the only success is at least one spawned agent: a hold, a
47
+ * queue, or an escalation all leave the issue exactly where it was.
48
+ */
49
+ export declare function exitCodeForDispatchResult(result: DispatchResult): FactoryExitCode;
50
+ /**
51
+ * Classify a relay-backend dispatch, which stays attached from placement
52
+ * through takeover, publication, writeback and release.
53
+ *
54
+ * The pre-wait result cannot classify such a run. A dispatch that hits capacity
55
+ * returns an empty capacity-hold result *and* schedules a durable retry, and
56
+ * the wait then runs on until that retry reaches terminal. Classifying the
57
+ * stale result would report failure for a run that ultimately did dispatch —
58
+ * the same false signal as exiting 0 on a refusal, pointed the other way. The
59
+ * terminal phase is the outcome.
60
+ */
61
+ export declare function exitCodeForRelayDispatch(result: DispatchResult, terminalPhase: TerminalDispatchLifecyclePhase | undefined): FactoryExitCode;
62
+ /**
63
+ * Classify the outcome of a `factory run-once` / `factory loop` iteration.
64
+ *
65
+ * `skipped` entries are ordinary: a sweep that examines issues and dispatches
66
+ * none of them still did what it was asked. A recorded `error` is a failed
67
+ * cycle, and a deferred discovery means the sweep never ran at all.
68
+ */
69
+ export declare function exitCodeForIterationReport(report: IterationReport): FactoryExitCode;
70
+ /**
71
+ * Collapse a bounded loop's iteration reports into one exit code.
72
+ *
73
+ * A failed iteration means the loop did not complete cleanly and a caller
74
+ * reading only `$?` has to see that. A *deferred* iteration does not: the loop
75
+ * was asked to run several sweeps, and another owner holding the sweep for one
76
+ * of them is ordinary contention, not a refusal. Escalating that would make a
77
+ * healthy loop exit non-zero — the same defect as exiting 0 on a refusal, just
78
+ * pointed the other way.
79
+ */
80
+ export declare function exitCodeForLoopReports(reports: readonly IterationReport[]): FactoryExitCode;
81
+ //# sourceMappingURL=exit-codes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exit-codes.d.ts","sourceRoot":"","sources":["../../src/cli/exit-codes.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAA;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAE/D;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,YAAY;IACvB,0CAA0C;;IAE1C,uFAAuF;;IAEvF;;;OAGG;;IAEH;;;OAGG;;CAEK,CAAA;AAEV,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAA;AAE9E;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAIhE;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,cAAc,GAAG,eAAe,CAOjF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,cAAc,EACtB,aAAa,EAAE,8BAA8B,GAAG,SAAS,GACxD,eAAe,CAOjB;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,CAInF;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,GAAG,eAAe,CAU3F"}
@@ -0,0 +1,122 @@
1
+ import { MountAuthScopeError } from '../mount/mount-auth-error.js';
2
+ import { isLiveDispatchStateChangedError } from '../orchestrator/index.js';
3
+ /**
4
+ * Process exit codes for the `factory` CLI.
5
+ *
6
+ * The contract is deliberately narrow: `OK` means *the requested action was
7
+ * performed*. Every other value means it was not. A supervising loop, cron
8
+ * entry, or CI step that only reads `$?` must be able to tell a refusal from a
9
+ * completed run — printing a good diagnostic to stderr does not help a caller
10
+ * that never reads stderr.
11
+ *
12
+ * `REFUSED` and `RETRYABLE` split the refusals along the one axis a caller can
13
+ * act on: whether repeating the identical command could ever succeed.
14
+ */
15
+ export const FACTORY_EXIT = {
16
+ /** The requested action was performed. */
17
+ OK: 0,
18
+ /** The command failed. The default for a thrown error with no finer classification. */
19
+ FAILED: 1,
20
+ /**
21
+ * Deliberately refused. Repeating the identical command will refuse again
22
+ * until an input, a config value, or a credential changes.
23
+ */
24
+ REFUSED: 2,
25
+ /**
26
+ * Not performed this time, but the same command may succeed later — a lost
27
+ * writeback race, or a capacity/dependency hold that clears on its own.
28
+ */
29
+ RETRYABLE: 3,
30
+ };
31
+ /**
32
+ * Classify a thrown command failure.
33
+ *
34
+ * A mount scope shortfall is terminal until the operator re-authenticates with
35
+ * a session that can mint the filesystem scopes, so it is `REFUSED`. A live
36
+ * dispatch state change means another writer won the race for the same issue;
37
+ * the work unit is still there and the next attempt may win, so it is
38
+ * `RETRYABLE`. Everything else is an unclassified failure.
39
+ */
40
+ export function exitCodeForError(error) {
41
+ if (error instanceof MountAuthScopeError)
42
+ return FACTORY_EXIT.REFUSED;
43
+ if (isLiveDispatchStateChangedError(error))
44
+ return FACTORY_EXIT.RETRYABLE;
45
+ return FACTORY_EXIT.FAILED;
46
+ }
47
+ /**
48
+ * Classify the outcome of a single-issue `factory dispatch`.
49
+ *
50
+ * A dry run's requested action is the dry run itself, so it is always `OK`. For
51
+ * a real dispatch the only success is at least one spawned agent: a hold, a
52
+ * queue, or an escalation all leave the issue exactly where it was.
53
+ */
54
+ export function exitCodeForDispatchResult(result) {
55
+ if (result.dryRun)
56
+ return FACTORY_EXIT.OK;
57
+ if (result.agents.length > 0)
58
+ return FACTORY_EXIT.OK;
59
+ // A capacity or dependency hold clears without anyone changing the request.
60
+ // A dependency *cycle* does not — it needs a human to break the cycle.
61
+ if (result.hold?.kind === 'capacity' || result.hold?.kind === 'dependency')
62
+ return FACTORY_EXIT.RETRYABLE;
63
+ return FACTORY_EXIT.REFUSED;
64
+ }
65
+ /**
66
+ * Classify a relay-backend dispatch, which stays attached from placement
67
+ * through takeover, publication, writeback and release.
68
+ *
69
+ * The pre-wait result cannot classify such a run. A dispatch that hits capacity
70
+ * returns an empty capacity-hold result *and* schedules a durable retry, and
71
+ * the wait then runs on until that retry reaches terminal. Classifying the
72
+ * stale result would report failure for a run that ultimately did dispatch —
73
+ * the same false signal as exiting 0 on a refusal, pointed the other way. The
74
+ * terminal phase is the outcome.
75
+ */
76
+ export function exitCodeForRelayDispatch(result, terminalPhase) {
77
+ if (terminalPhase === 'complete')
78
+ return FACTORY_EXIT.OK;
79
+ if (terminalPhase === 'abandoned')
80
+ return FACTORY_EXIT.FAILED;
81
+ // No terminal phase was observed: either this dispatch never created a
82
+ // lifecycle row, or the wait ended because Factory is stopping. Nothing
83
+ // better is known than what the dispatch itself reported.
84
+ return exitCodeForDispatchResult(result);
85
+ }
86
+ /**
87
+ * Classify the outcome of a `factory run-once` / `factory loop` iteration.
88
+ *
89
+ * `skipped` entries are ordinary: a sweep that examines issues and dispatches
90
+ * none of them still did what it was asked. A recorded `error` is a failed
91
+ * cycle, and a deferred discovery means the sweep never ran at all.
92
+ */
93
+ export function exitCodeForIterationReport(report) {
94
+ if (report.error)
95
+ return FACTORY_EXIT.FAILED;
96
+ if (report.discoveryDeferred)
97
+ return FACTORY_EXIT.RETRYABLE;
98
+ return FACTORY_EXIT.OK;
99
+ }
100
+ /**
101
+ * Collapse a bounded loop's iteration reports into one exit code.
102
+ *
103
+ * A failed iteration means the loop did not complete cleanly and a caller
104
+ * reading only `$?` has to see that. A *deferred* iteration does not: the loop
105
+ * was asked to run several sweeps, and another owner holding the sweep for one
106
+ * of them is ordinary contention, not a refusal. Escalating that would make a
107
+ * healthy loop exit non-zero — the same defect as exiting 0 on a refusal, just
108
+ * pointed the other way.
109
+ */
110
+ export function exitCodeForLoopReports(reports) {
111
+ if (reports.some((report) => report.error))
112
+ return FACTORY_EXIT.FAILED;
113
+ // Losing ONE sweep to another owner is ordinary contention. Losing EVERY
114
+ // sweep means the loop performed nothing at all — a shared daemon can hold
115
+ // the workspace sweep lease for the loop's whole duration — and reporting
116
+ // that as success is the exact false signal this contract exists to remove.
117
+ if (reports.length > 0 && reports.every((report) => report.discoveryDeferred)) {
118
+ return FACTORY_EXIT.RETRYABLE;
119
+ }
120
+ return FACTORY_EXIT.OK;
121
+ }
122
+ //# sourceMappingURL=exit-codes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exit-codes.js","sourceRoot":"","sources":["../../src/cli/exit-codes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,EAAE,+BAA+B,EAAE,MAAM,iBAAiB,CAAA;AAIjE;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,0CAA0C;IAC1C,EAAE,EAAE,CAAC;IACL,uFAAuF;IACvF,MAAM,EAAE,CAAC;IACT;;;OAGG;IACH,OAAO,EAAE,CAAC;IACV;;;OAGG;IACH,SAAS,EAAE,CAAC;CACJ,CAAA;AAIV;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,IAAI,KAAK,YAAY,mBAAmB;QAAE,OAAO,YAAY,CAAC,OAAO,CAAA;IACrE,IAAI,+BAA+B,CAAC,KAAK,CAAC;QAAE,OAAO,YAAY,CAAC,SAAS,CAAA;IACzE,OAAO,YAAY,CAAC,MAAM,CAAA;AAC5B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAsB;IAC9D,IAAI,MAAM,CAAC,MAAM;QAAE,OAAO,YAAY,CAAC,EAAE,CAAA;IACzC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,YAAY,CAAC,EAAE,CAAA;IACpD,4EAA4E;IAC5E,uEAAuE;IACvE,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,KAAK,UAAU,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,KAAK,YAAY;QAAE,OAAO,YAAY,CAAC,SAAS,CAAA;IACzG,OAAO,YAAY,CAAC,OAAO,CAAA;AAC7B,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAAsB,EACtB,aAAyD;IAEzD,IAAI,aAAa,KAAK,UAAU;QAAE,OAAO,YAAY,CAAC,EAAE,CAAA;IACxD,IAAI,aAAa,KAAK,WAAW;QAAE,OAAO,YAAY,CAAC,MAAM,CAAA;IAC7D,uEAAuE;IACvE,wEAAwE;IACxE,0DAA0D;IAC1D,OAAO,yBAAyB,CAAC,MAAM,CAAC,CAAA;AAC1C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,0BAA0B,CAAC,MAAuB;IAChE,IAAI,MAAM,CAAC,KAAK;QAAE,OAAO,YAAY,CAAC,MAAM,CAAA;IAC5C,IAAI,MAAM,CAAC,iBAAiB;QAAE,OAAO,YAAY,CAAC,SAAS,CAAA;IAC3D,OAAO,YAAY,CAAC,EAAE,CAAA;AACxB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAmC;IACxE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,OAAO,YAAY,CAAC,MAAM,CAAA;IACtE,yEAAyE;IACzE,2EAA2E;IAC3E,0EAA0E;IAC1E,4EAA4E;IAC5E,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC9E,OAAO,YAAY,CAAC,SAAS,CAAA;IAC/B,CAAC;IACD,OAAO,YAAY,CAAC,EAAE,CAAA;AACxB,CAAC"}
@@ -3,12 +3,22 @@ import { type LocalClonePathOptions } from '../config/local-clone-paths.js';
3
3
  import { createFactory, createFleet, ensureRelayBroker, reapFactoryEnvironmentsOnce, type Capability, type Factory, type FactoryEventReporter, type FactoryConfig, type FleetBackend, type FleetClient, type GhRunner, type FactoryStateResolution, type Logger, type LocalMountOptions, type MountClient, type ProbeCloser, type RelayfileCloudMountClientConfig, type ResolvedFactoryWorkspace } from '../index.js';
4
4
  import { type CheckFeatureMapOptions, type FeatureMapCheckReport } from '../featuremap/index.js';
5
5
  import type { FactoryIntegrationProvider } from '../ports/index.js';
6
+ import type { StateStore } from '../ports/state.js';
6
7
  import { type FactoryVersionInfo, type FactoryVersionInfoOptions } from '../version-info.js';
7
- import { type NotionIntakeClaimStore, type NotionContractPublisher } from '../intake/index.js';
8
- interface FleetCliDeps {
8
+ import { type FactoryTasksNotionClient, type NotionIntakeClaimStore, type NotionContractPublisher } from '../intake/index.js';
9
+ export type CliStateStore = StateStore & {
10
+ /** Host readiness gate. The CLI invokes it before constructing Factory. */
11
+ assertReady(): Promise<void>;
12
+ /** Optional host-defined identifier included in status output. */
13
+ readonly backend?: string;
14
+ };
15
+ export type CliStateStoreFactory = (config: FactoryConfig) => Promise<CliStateStore> | CliStateStore;
16
+ export interface FleetCliDeps {
9
17
  fleet?: FleetClient;
10
18
  /** Hermetic credential environment for the relay backend (tests). */
11
19
  env?: NodeJS.ProcessEnv;
20
+ /** Host-supplied durable state adapter; the file implementation remains the default. */
21
+ stateStoreFactory?: CliStateStoreFactory;
12
22
  mount?: MountClient;
13
23
  createFactory?: typeof createFactory;
14
24
  createFleet?: typeof createFleet;
@@ -31,6 +41,10 @@ interface FleetCliDeps {
31
41
  localClonePathOptions?: LocalClonePathOptions;
32
42
  reporter?: FactoryEventReporter;
33
43
  cloudSessionProvider?: (options?: Parameters<typeof ensureCloudSession>[0]) => Promise<CloudSession>;
44
+ /** Hermetic private hosted-token endpoint transport for CLI integration tests. */
45
+ cloudAccessTokenFetch?: typeof fetch;
46
+ /** Hermetic Cloud telemetry transport for CLI integration tests. */
47
+ cloudReporterFetch?: typeof fetch;
34
48
  isInteractive?: () => boolean;
35
49
  confirmIntegrationConnect?: (provider: FactoryIntegrationProvider) => Promise<boolean>;
36
50
  openIntegrationUrl?: (url: string) => void | Promise<void>;
@@ -39,6 +53,8 @@ interface FleetCliDeps {
39
53
  notionContracts?: NotionContractPublisher;
40
54
  /** Hermetic workspace-global Notion claim store for tests and alternate runtimes. */
41
55
  notionClaims?: NotionIntakeClaimStore;
56
+ /** Hermetic Factory Tasks reader for manifest-generation tests and alternate runtimes. */
57
+ notionFactoryTasks?: FactoryTasksNotionClient;
42
58
  /** Hermetic verification-environment sweep for CLI tests and alternate runtimes. */
43
59
  reapEnvironments?: typeof reapFactoryEnvironmentsOnce;
44
60
  /** Hermetic package/registry metadata for CLI tests and alternate runtimes. */
@@ -108,6 +124,13 @@ type ParsedCommand = {
108
124
  } | {
109
125
  kind: 'notion-intake';
110
126
  manifestPath: string;
127
+ } | {
128
+ kind: 'notion-manifest';
129
+ dataSourceId?: string;
130
+ mountRoot?: string;
131
+ workerMountRoot?: string;
132
+ workerMountTransport?: 'local' | 'relay-channel';
133
+ statePath?: string;
111
134
  };
112
135
  export declare function runFleetCli(argv: string[], deps?: FleetCliDeps): Promise<number>;
113
136
  export declare function parseFleetCommand(args: string[]): ParsedCommand;
@@ -118,6 +141,7 @@ export declare function parseGlobalOptions(argv: string[]): {
118
141
  export declare function reportFactoryVersionDrift(provider: FleetCliDeps['versionInfo'], logger: Logger): Promise<void>;
119
142
  export declare function formatLogArgs(args: unknown[]): string;
120
143
  export declare function resolveBrokerConnectionPath(startCwd?: string, env?: NodeJS.ProcessEnv): string | undefined;
144
+ export declare function resolveFactoryBrokerConnectionPath(startCwd?: string, env?: NodeJS.ProcessEnv, requireDedicatedBroker?: boolean): string | undefined;
121
145
  export type GithubIssueSelector = {
122
146
  number: number;
123
147
  repo?: 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;AAUnG,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,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,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,CAyY1F;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,aAAa,CAuB/D;AA6FD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;IAAE,OAAO,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CA8B7F;AAkmBD,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,YAAY,CAAC,aAAa,CAAC,EACrC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAUf;AA8WD,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;AA6ND,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;AA2ED,wBAAsB,IAAI,CAAC,IAAI,WAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAGtE"}