@shardworks/nexus-arbor 0.1.269 → 0.1.271

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -29,21 +29,31 @@ Plugin authors import from `@shardworks/nexus-core`. The arbor is an internal co
29
29
 
30
30
  ### `createGuild(root?)`
31
31
 
32
- The single entry point. Creates and starts a guild, returning the `Guild` object.
32
+ The single entry point. Creates and starts a guild, returning a `StartedGuild` — a `Guild` plus a `shutdown()` method.
33
33
 
34
34
  ```typescript
35
35
  import { createGuild } from '@shardworks/nexus-arbor';
36
36
 
37
37
  const guild = await createGuild('/path/to/guild');
38
+ // ... do work ...
39
+ await guild.shutdown();
38
40
  ```
39
41
 
40
42
  If `root` is omitted, auto-detects by walking up from cwd until `guild.json` is found.
41
43
 
42
- `createGuild()` also sets the `guild()` singleton from `@shardworks/nexus-core`, so apparatus code can call `guild()` immediately after startup.
44
+ `createGuild()` also sets the `guild()` singleton from `@shardworks/nexus-core`, so apparatus code can call `guild()` immediately after startup. Plugin code only ever sees the narrower `Guild` interface — `shutdown()` is intentionally absent there because plugins should never tear down the guild they are running inside. The bootstrap caller (the CLI, a daemon entry point, a one-shot helper) carries the `StartedGuild` reference and is responsible for calling `shutdown()` before exit.
45
+
46
+ ### `StartedGuild`
47
+
48
+ `StartedGuild extends Guild` and adds:
49
+
50
+ | Method | Returns | Description |
51
+ |---|---|---|
52
+ | `shutdown()` | `Promise<void>` | Fire `guild:shutdown`, then call each started apparatus's optional `stop()` in reverse topological order (dependents before dependencies), then clear the `guild()` singleton. Idempotent — second and subsequent calls return immediately. Continues iterating even when one `stop()` throws; if any throw, an aggregate `Error` is thrown after every apparatus has been attempted, with per-apparatus failures attached as `.failures`. |
43
53
 
44
54
  ### `Guild`
45
55
 
46
- The object returned by `createGuild()` — also accessible via `guild()` from `@shardworks/nexus-core`.
56
+ The narrow contract plugin code sees through `guild()` — also returned (via the `StartedGuild` extension) from `createGuild()`.
47
57
 
48
58
  | Method | Returns | Description |
49
59
  |---|---|---|
@@ -95,6 +105,10 @@ Type guards: `isLoadedKit(p)` and `isLoadedApparatus(p)` from `@shardworks/nexus
95
105
 
96
106
  Apparatus start order is determined by topological sort on `apparatus.requires`. Circular dependencies throw with a descriptive error. Kit `requires` validate that the named apparatus is installed but do not affect start order (kits have no lifecycle).
97
107
 
108
+ `StartedGuild.shutdown()` is the symmetric teardown path:
109
+
110
+ 6. **Shutdown** — fires `guild:shutdown` once, then walks the started-apparatus list in reverse topological order (dependents before dependencies — e.g. Oculus closes its HTTP server before Stacks closes the sqlite handle that route handlers might query) and calls each apparatus's optional `stop()`. Errors from individual `stop()` calls are collected, not raised eagerly, so every apparatus gets a chance to release its handles; the aggregate is re-thrown after iteration completes. The call is idempotent (a second invocation is a no-op via an internal flag), and clears the `guild()` singleton as its last act so post-shutdown access fails loudly with the existing "Guild not initialized" error.
111
+
98
112
  ---
99
113
 
100
114
  ## Guild Lifecycle Internals
@@ -110,6 +124,8 @@ Pure validation and ordering logic lives in `guild-lifecycle.ts`, separated from
110
124
  | `collectStartupWarnings(kits, apparatuses)` | Advisory warnings for unconsumed contributions and missing recommends |
111
125
  | `buildStartupContext(eventHandlers, kitEntries)` | Creates the `StartupContext` passed to `apparatus.start()` |
112
126
  | `fireEvent(eventHandlers, event, ...args)` | Fires lifecycle events to registered handlers |
127
+ | `shutdownStartedApparatuses(startedApparatuses, eventHandlers)` | Fires `guild:shutdown`, walks the started-apparatus list in reverse and calls each `stop()`, returning the per-apparatus failures as an array (the caller wraps with idempotency, `clearGuild()`, and aggregate-throw) |
128
+ | `formatShutdownFailures(failures)` | Render the aggregate-error message thrown when one or more `stop()` calls failed |
113
129
 
114
130
  These are exported for testing but are not part of the consumer-facing API.
115
131
 
package/dist/arbor.d.ts CHANGED
@@ -3,31 +3,45 @@
3
3
  *
4
4
  * `createGuild()` is the single entry point. It reads guild.json, loads all
5
5
  * declared plugins, validates dependencies, starts apparatus in order, wires
6
- * the guild() singleton, and returns the Guild object.
6
+ * the guild() singleton, and returns the StartedGuild object.
7
7
  *
8
8
  * The full plugin lifecycle:
9
9
  * 1. Load — imports all declared plugin packages, discriminates kit vs apparatus
10
10
  * 2. Validate — checks `requires` declarations, detects circular dependencies
11
- * 3. Warn — advisory warnings foyou r mismatched kit contributions / recommends
11
+ * 3. Warn — advisory warnings for mismatched kit contributions / recommends
12
12
  * 4. Wire — collects all kit contributions (kits + supportKits) into KitEntry[]
13
13
  * 5. Start — calls start(ctx) on each apparatus in dependency-resolved order;
14
14
  * ctx.kits(type) returns Wire-phase entries; fires `apparatus:started`
15
15
  * after each apparatus; fires `phase:started` when all are done
16
16
  *
17
- * Pure logic (validation, ordering, events) lives in guild-lifecycle.ts.
18
- * This file handles I/O and orchestration.
17
+ * Symmetric teardown is exposed on the returned `StartedGuild`:
18
+ * - shutdown() fires `guild:shutdown`, walks `startedApparatuses` in
19
+ * reverse, calls each apparatus's optional `stop()` (collecting
20
+ * errors so every apparatus gets a chance to release its handles),
21
+ * then clears the guild() singleton. Idempotent.
22
+ *
23
+ * Pure logic (validation, ordering, events, teardown) lives in
24
+ * guild-lifecycle.ts. This file handles I/O and orchestration.
19
25
  */
20
- import type { Guild } from "@shardworks/nexus-core";
26
+ import type { StartedGuild } from "@shardworks/nexus-core";
21
27
  /**
22
28
  * Create and start a guild.
23
29
  *
24
30
  * Reads guild.json, loads all declared plugins, validates dependencies,
25
- * starts apparatus in dependency order, and returns the Guild object.
31
+ * starts apparatus in dependency order, and returns the StartedGuild object.
26
32
  * Also sets the guild() singleton so apparatus code can access it.
27
33
  *
34
+ * The returned `StartedGuild` extends `Guild` with `shutdown()` — call
35
+ * it before exit to fire `guild:shutdown`, run each started
36
+ * apparatus's optional `stop()` in reverse topological order, and
37
+ * clear the singleton. Plugin code never sees this method (it queries
38
+ * the narrower `Guild` via `guild()`); only the bootstrap caller
39
+ * (CLI, daemon, or one-shot helper) carries the reference.
40
+ *
28
41
  * @param root - Absolute path to the guild root. Defaults to auto-detection
29
42
  * by walking up from cwd until guild.json is found.
30
- * @returns The initialized Guildthe same object guild() returns.
43
+ * @returns The initialized StartedGuild`guild()` returns the same
44
+ * object cast to `Guild` (without `shutdown()`).
31
45
  */
32
- export declare function createGuild(root?: string): Promise<Guild>;
46
+ export declare function createGuild(root?: string): Promise<StartedGuild>;
33
47
  //# sourceMappingURL=arbor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"arbor.d.ts","sourceRoot":"","sources":["../src/arbor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAcH,OAAO,KAAK,EACV,KAAK,EAIN,MAAM,wBAAwB,CAAC;AAehC;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CA8K/D"}
1
+ {"version":3,"file":"arbor.d.ts","sourceRoot":"","sources":["../src/arbor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAeH,OAAO,KAAK,EACV,YAAY,EAIb,MAAM,wBAAwB,CAAC;AAiBhC;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAiNtE"}
package/dist/arbor.js CHANGED
@@ -3,19 +3,25 @@
3
3
  *
4
4
  * `createGuild()` is the single entry point. It reads guild.json, loads all
5
5
  * declared plugins, validates dependencies, starts apparatus in order, wires
6
- * the guild() singleton, and returns the Guild object.
6
+ * the guild() singleton, and returns the StartedGuild object.
7
7
  *
8
8
  * The full plugin lifecycle:
9
9
  * 1. Load — imports all declared plugin packages, discriminates kit vs apparatus
10
10
  * 2. Validate — checks `requires` declarations, detects circular dependencies
11
- * 3. Warn — advisory warnings foyou r mismatched kit contributions / recommends
11
+ * 3. Warn — advisory warnings for mismatched kit contributions / recommends
12
12
  * 4. Wire — collects all kit contributions (kits + supportKits) into KitEntry[]
13
13
  * 5. Start — calls start(ctx) on each apparatus in dependency-resolved order;
14
14
  * ctx.kits(type) returns Wire-phase entries; fires `apparatus:started`
15
15
  * after each apparatus; fires `phase:started` when all are done
16
16
  *
17
- * Pure logic (validation, ordering, events) lives in guild-lifecycle.ts.
18
- * This file handles I/O and orchestration.
17
+ * Symmetric teardown is exposed on the returned `StartedGuild`:
18
+ * - shutdown() fires `guild:shutdown`, walks `startedApparatuses` in
19
+ * reverse, calls each apparatus's optional `stop()` (collecting
20
+ * errors so every apparatus gets a chance to release its handles),
21
+ * then clears the guild() singleton. Idempotent.
22
+ *
23
+ * Pure logic (validation, ordering, events, teardown) lives in
24
+ * guild-lifecycle.ts. This file handles I/O and orchestration.
19
25
  */
20
26
  var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
21
27
  if (typeof path === "string" && /^\.\.?\//.test(path)) {
@@ -26,19 +32,27 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
26
32
  return path;
27
33
  };
28
34
  import { pathToFileURL } from "node:url";
29
- import { readGuildConfig, writeGuildConfig, findGuildRoot, isKit, isApparatus, setGuild, resolveGuildPackageEntry, resolvePackageNameForPluginId, readGuildPackageJson, } from "@shardworks/nexus-core";
30
- import { validateRequires, filterFailedPlugins, topoSort, collectStartupWarnings, buildStartupContext, fireEvent, wireKitEntries, } from "./guild-lifecycle.js";
35
+ import { readGuildConfig, writeGuildConfig, findGuildRoot, isKit, isApparatus, setGuild, clearGuild, resolveGuildPackageEntry, resolvePackageNameForPluginId, readGuildPackageJson, } from "@shardworks/nexus-core";
36
+ import { validateRequires, filterFailedPlugins, topoSort, collectStartupWarnings, buildStartupContext, fireEvent, wireKitEntries, shutdownStartedApparatuses, formatShutdownFailures, } from "./guild-lifecycle.js";
31
37
  // ── Public API ────────────────────────────────────────────────────────
32
38
  /**
33
39
  * Create and start a guild.
34
40
  *
35
41
  * Reads guild.json, loads all declared plugins, validates dependencies,
36
- * starts apparatus in dependency order, and returns the Guild object.
42
+ * starts apparatus in dependency order, and returns the StartedGuild object.
37
43
  * Also sets the guild() singleton so apparatus code can access it.
38
44
  *
45
+ * The returned `StartedGuild` extends `Guild` with `shutdown()` — call
46
+ * it before exit to fire `guild:shutdown`, run each started
47
+ * apparatus's optional `stop()` in reverse topological order, and
48
+ * clear the singleton. Plugin code never sees this method (it queries
49
+ * the narrower `Guild` via `guild()`); only the bootstrap caller
50
+ * (CLI, daemon, or one-shot helper) carries the reference.
51
+ *
39
52
  * @param root - Absolute path to the guild root. Defaults to auto-detection
40
53
  * by walking up from cwd until guild.json is found.
41
- * @returns The initialized Guildthe same object guild() returns.
54
+ * @returns The initialized StartedGuild`guild()` returns the same
55
+ * object cast to `Guild` (without `shutdown()`).
42
56
  */
43
57
  export async function createGuild(root) {
44
58
  const guildRoot = root ?? findGuildRoot();
@@ -113,6 +127,11 @@ export async function createGuild(root) {
113
127
  // apparatus starts; dependency ordering guarantees declared deps are
114
128
  // available.
115
129
  const startupCtx = buildStartupContext(eventHandlers, kitEntries);
130
+ // Idempotency guard for shutdown(). The flag lives in this closure so
131
+ // a second call short-circuits without iterating the started list
132
+ // again or re-firing `guild:shutdown`. Mirrors the
133
+ // Oculus.stopServer / Clockworks triggerShutdown shape.
134
+ let shuttingDown = false;
116
135
  const guildInstance = {
117
136
  home: guildRoot,
118
137
  apparatus(name) {
@@ -155,6 +174,29 @@ export async function createGuild(root) {
155
174
  startupWarnings() {
156
175
  return [...allWarnings];
157
176
  },
177
+ async shutdown() {
178
+ // D4: idempotent — second and subsequent calls are no-ops. The
179
+ // guard is checked first so a re-entrant caller (e.g. a SIGINT
180
+ // arriving while a SIGTERM-driven shutdown is in flight) does
181
+ // not double-fire `guild:shutdown` or double-invoke `stop()`.
182
+ if (shuttingDown)
183
+ return;
184
+ shuttingDown = true;
185
+ const failures = await shutdownStartedApparatuses(startedApparatuses, eventHandlers);
186
+ // D6: clear the singleton as the last act regardless of whether
187
+ // any stop() threw. Subsequent guild() calls fail loudly with
188
+ // the existing "Guild not initialized" error rather than handing
189
+ // out stale references.
190
+ clearGuild();
191
+ // D3: re-throw a single aggregate error if any stop() threw,
192
+ // matching the codebase's "collect failures, then act" pattern.
193
+ if (failures.length > 0) {
194
+ const aggregate = new Error(formatShutdownFailures(failures));
195
+ // Attach the per-apparatus failures so callers can introspect.
196
+ aggregate.failures = failures;
197
+ throw aggregate;
198
+ }
199
+ },
158
200
  };
159
201
  setGuild(guildInstance);
160
202
  // Start each apparatus in dependency order
package/dist/arbor.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"arbor.js","sourceRoot":"","sources":["../src/arbor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"arbor.js","sourceRoot":"","sources":["../src/arbor.ts"],"names":[],"mappings":"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"}
@@ -64,4 +64,45 @@ export declare function buildStartupContext(eventHandlers: EventHandlerMap, kitE
64
64
  * Fire a lifecycle event, awaiting each handler sequentially.
65
65
  */
66
66
  export declare function fireEvent(eventHandlers: EventHandlerMap, event: string, ...args: unknown[]): Promise<void>;
67
+ /**
68
+ * Per-apparatus failure produced by `shutdownStartedApparatuses` when one
69
+ * or more `stop()` invocations throw. Each entry pairs the apparatus
70
+ * plugin id with the underlying error so the aggregate caller can
71
+ * surface every failed teardown.
72
+ */
73
+ export interface ShutdownFailure {
74
+ readonly id: string;
75
+ readonly error: Error;
76
+ }
77
+ /**
78
+ * Walk the started-apparatus list in reverse topological order, fire
79
+ * the `guild:shutdown` event before any `stop()` runs, then call each
80
+ * apparatus's optional `stop()` collecting per-apparatus errors instead
81
+ * of aborting on the first throw.
82
+ *
83
+ * Pure orchestration — receives the started list and event handler map
84
+ * by reference and does not touch any singleton. The caller (Arbor's
85
+ * `StartedGuild.shutdown()`) wraps this in idempotency-guard +
86
+ * `clearGuild()` housekeeping.
87
+ *
88
+ * Returns the list of per-apparatus failures (empty when every `stop()`
89
+ * resolved cleanly). The caller is responsible for re-throwing an
90
+ * aggregate when the list is non-empty — keeping the helper a pure
91
+ * "collect failures" function mirrors the codebase's existing
92
+ * `validateRequires` shape.
93
+ *
94
+ * Apparatus that omit `stop()` are skipped silently.
95
+ *
96
+ * Iterates `startedApparatuses` only — apparatus whose `start()` never
97
+ * resolved are not present in the list (Arbor pushes after start
98
+ * completes), so the symmetric "stop only what started" invariant is
99
+ * preserved without an extra check here.
100
+ */
101
+ export declare function shutdownStartedApparatuses(startedApparatuses: readonly LoadedApparatus[], eventHandlers: EventHandlerMap): Promise<ShutdownFailure[]>;
102
+ /**
103
+ * Build the aggregate-error message thrown after a shutdown pass that
104
+ * recorded one or more failures. Public so tests can assert message
105
+ * shape without re-implementing the formatter.
106
+ */
107
+ export declare function formatShutdownFailures(failures: readonly ShutdownFailure[]): string;
67
108
  //# sourceMappingURL=guild-lifecycle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"guild-lifecycle.d.ts","sourceRoot":"","sources":["../src/guild-lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,QAAQ,EACR,SAAS,EACT,eAAe,EACf,YAAY,EACb,MAAM,wBAAwB,CAAC;AAIhC,MAAM,MAAM,eAAe,GAAG,GAAG,CAC/B,MAAM,EACN,KAAK,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CACpD,CAAC;AAIF;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,SAAS,EAAE,EACjB,WAAW,EAAE,eAAe,EAAE,GAC7B,YAAY,EAAE,CA0FhB;AAID;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,SAAS,EAAE,EACjB,WAAW,EAAE,eAAe,EAAE,EAC9B,YAAY,EAAE,YAAY,EAAE,GAC3B;IAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAAC,WAAW,EAAE,eAAe,EAAE,CAAC;IAAC,QAAQ,EAAE,YAAY,EAAE,CAAA;CAAE,CA4CjF;AAID;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,WAAW,EAAE,eAAe,EAAE,GAAG,eAAe,EAAE,CAoB1E;AAOD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,SAAS,EAAE,EACjB,kBAAkB,EAAE,eAAe,EAAE,GACpC,QAAQ,EAAE,CAoBZ;AAID;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAS,SAAS,EAAE,EACxB,WAAW,EAAE,eAAe,EAAE,GAC7B,MAAM,EAAE,CAyDV;AAID;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,eAAe,EAC9B,UAAU,EAAE,QAAQ,EAAE,GACrB,cAAc,CAoBhB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,aAAa,EAAE,eAAe,EAC9B,KAAK,EAAU,MAAM,EACrB,GAAG,IAAI,EAAE,OAAO,EAAE,GACjB,OAAO,CAAC,IAAI,CAAC,CAKf"}
1
+ {"version":3,"file":"guild-lifecycle.d.ts","sourceRoot":"","sources":["../src/guild-lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,QAAQ,EACR,SAAS,EACT,eAAe,EACf,YAAY,EACb,MAAM,wBAAwB,CAAC;AAIhC,MAAM,MAAM,eAAe,GAAG,GAAG,CAC/B,MAAM,EACN,KAAK,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CACpD,CAAC;AAIF;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,SAAS,EAAE,EACjB,WAAW,EAAE,eAAe,EAAE,GAC7B,YAAY,EAAE,CA0FhB;AAID;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,SAAS,EAAE,EACjB,WAAW,EAAE,eAAe,EAAE,EAC9B,YAAY,EAAE,YAAY,EAAE,GAC3B;IAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAAC,WAAW,EAAE,eAAe,EAAE,CAAC;IAAC,QAAQ,EAAE,YAAY,EAAE,CAAA;CAAE,CA4CjF;AAID;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,WAAW,EAAE,eAAe,EAAE,GAAG,eAAe,EAAE,CAoB1E;AAOD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,SAAS,EAAE,EACjB,kBAAkB,EAAE,eAAe,EAAE,GACpC,QAAQ,EAAE,CAoBZ;AAID;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAS,SAAS,EAAE,EACxB,WAAW,EAAE,eAAe,EAAE,GAC7B,MAAM,EAAE,CAyDV;AAID;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,eAAe,EAC9B,UAAU,EAAE,QAAQ,EAAE,GACrB,cAAc,CAoBhB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,aAAa,EAAE,eAAe,EAC9B,KAAK,EAAU,MAAM,EACrB,GAAG,IAAI,EAAE,OAAO,EAAE,GACjB,OAAO,CAAC,IAAI,CAAC,CAKf;AAID;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,0BAA0B,CAC9C,kBAAkB,EAAE,SAAS,eAAe,EAAE,EAC9C,aAAa,EAAO,eAAe,GAClC,OAAO,CAAC,eAAe,EAAE,CAAC,CA0B5B;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,GAAG,MAAM,CAGnF"}
@@ -301,4 +301,62 @@ export async function fireEvent(eventHandlers, event, ...args) {
301
301
  await h(...args);
302
302
  }
303
303
  }
304
+ /**
305
+ * Walk the started-apparatus list in reverse topological order, fire
306
+ * the `guild:shutdown` event before any `stop()` runs, then call each
307
+ * apparatus's optional `stop()` collecting per-apparatus errors instead
308
+ * of aborting on the first throw.
309
+ *
310
+ * Pure orchestration — receives the started list and event handler map
311
+ * by reference and does not touch any singleton. The caller (Arbor's
312
+ * `StartedGuild.shutdown()`) wraps this in idempotency-guard +
313
+ * `clearGuild()` housekeeping.
314
+ *
315
+ * Returns the list of per-apparatus failures (empty when every `stop()`
316
+ * resolved cleanly). The caller is responsible for re-throwing an
317
+ * aggregate when the list is non-empty — keeping the helper a pure
318
+ * "collect failures" function mirrors the codebase's existing
319
+ * `validateRequires` shape.
320
+ *
321
+ * Apparatus that omit `stop()` are skipped silently.
322
+ *
323
+ * Iterates `startedApparatuses` only — apparatus whose `start()` never
324
+ * resolved are not present in the list (Arbor pushes after start
325
+ * completes), so the symmetric "stop only what started" invariant is
326
+ * preserved without an extra check here.
327
+ */
328
+ export async function shutdownStartedApparatuses(startedApparatuses, eventHandlers) {
329
+ // Fire `guild:shutdown` before any `stop()` runs so subscribers see
330
+ // a consistent snapshot of running apparatus and have a chance to
331
+ // act before teardown begins.
332
+ await fireEvent(eventHandlers, 'guild:shutdown');
333
+ const failures = [];
334
+ // Reverse iteration: dependents stop before dependencies. The
335
+ // started list is populated in dependency-resolved order during
336
+ // start, so walking it in reverse gives us reverse-topo order
337
+ // without re-running topoSort.
338
+ for (let i = startedApparatuses.length - 1; i >= 0; i--) {
339
+ const app = startedApparatuses[i];
340
+ const stop = app.apparatus.stop;
341
+ if (typeof stop !== 'function')
342
+ continue;
343
+ try {
344
+ await stop();
345
+ }
346
+ catch (err) {
347
+ const error = err instanceof Error ? err : new Error(String(err));
348
+ failures.push({ id: app.id, error });
349
+ }
350
+ }
351
+ return failures;
352
+ }
353
+ /**
354
+ * Build the aggregate-error message thrown after a shutdown pass that
355
+ * recorded one or more failures. Public so tests can assert message
356
+ * shape without re-implementing the formatter.
357
+ */
358
+ export function formatShutdownFailures(failures) {
359
+ const lines = failures.map((f) => ` - "${f.id}": ${f.error.message}`);
360
+ return `[arbor] ${failures.length} apparatus stop() call${failures.length === 1 ? '' : 's'} failed during shutdown:\n${lines.join('\n')}`;
361
+ }
304
362
  //# sourceMappingURL=guild-lifecycle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"guild-lifecycle.js","sourceRoot":"","sources":["../src/guild-lifecycle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"guild-lifecycle.js","sourceRoot":"","sources":["../src/guild-lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAiBH,wEAAwE;AAExE;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAC9B,IAAiB,EACjB,WAA8B;IAE9B,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IAEpC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC;QACrB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxB,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChC,CAAC,CAAC;IAEH,2BAA2B;IAC3B,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;YAC/C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;oBAC3B,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACtB,QAAQ,CAAC,IAAI,CAAC;wBACZ,EAAE,EAAM,GAAG,CAAC,EAAE;wBACd,MAAM,EAAE,IAAI,GAAG,CAAC,EAAE,eAAe,GAAG,4BAA4B;qBACjE,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,2EAA2E;IAC3E,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;YACzC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;oBAC3B,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACtB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;wBACrB,QAAQ,CAAC,IAAI,CAAC;4BACZ,EAAE,EAAM,GAAG,CAAC,EAAE;4BACd,MAAM,EAAE,QAAQ,GAAG,CAAC,EAAE,eAAe,GAAG,4BAA4B;yBACrE,CAAC,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACN,QAAQ,CAAC,IAAI,CAAC;4BACZ,EAAE,EAAM,GAAG,CAAC,EAAE;4BACd,MAAM,EAAE,QAAQ,GAAG,CAAC,EAAE,eAAe,GAAG,0FAA0F;yBACnI,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,iDAAiD;IACjD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;IAE5C,SAAS,KAAK,CAAC,EAAU,EAAE,KAAe;QACxC,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,OAAO;QAC5B,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACrB,6DAA6D;YAC7D,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACrC,MAAM,UAAU,GAAG,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;YAC1E,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpB,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;gBAC9B,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC;YACD,OAAO;QACT,CAAC;QACD,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjB,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACjD,IAAI,GAAG,EAAE,CAAC;YACR,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;gBAC/C,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACpB,CAAC;IAED,KAAK,MAAM,EAAE,IAAI,iBAAiB,EAAE,CAAC;QACnC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACvB,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,QAAQ,CAAC,IAAI,CAAC;gBACZ,EAAE;gBACF,MAAM,EAAE,IAAI,EAAE,2CAA2C;aAC1D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,yEAAyE;AAEzE;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAiB,EACjB,WAA8B,EAC9B,YAA4B;IAE5B,MAAM,SAAS,GAAG,IAAI,GAAG,CAAS,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAmB,EAAE,CAAC;IAEpC,mDAAmD;IACnD,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,OAAO,OAAO,EAAE,CAAC;QACf,OAAO,GAAG,KAAK,CAAC;QAChB,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,SAAS;YACpC,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;gBAC/C,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBACvB,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACtB,QAAQ,CAAC,IAAI,CAAC;wBACZ,EAAE,EAAM,GAAG,CAAC,EAAE;wBACd,MAAM,EAAE,IAAI,GAAG,CAAC,EAAE,+BAA+B,GAAG,IAAI;qBACzD,CAAC,CAAC;oBACH,OAAO,GAAG,IAAI,CAAC;oBACf,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,6DAA6D;IAC7D,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,SAAS;QACpC,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;YACzC,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACtB,QAAQ,CAAC,IAAI,CAAC;oBACZ,EAAE,EAAM,GAAG,CAAC,EAAE;oBACd,MAAM,EAAE,IAAI,GAAG,CAAC,EAAE,+BAA+B,GAAG,IAAI;iBACzD,CAAC,CAAC;gBACH,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,EAAS,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrD,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC5D,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,wEAAwE;AAExE;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,WAA8B;IACrD,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,SAAS,KAAK,CAAC,EAAU;QACvB,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,OAAO;QAC5B,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;YAC/C,KAAK,CAAC,GAAG,CAAC,CAAC;QACb,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,wEAAwE;AAExE,oEAAoE;AACpE,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;AAEjE;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAC5B,IAAiB,EACjB,kBAAqC;IAErC,MAAM,OAAO,GAAe,EAAE,CAAC;IAE/B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACpD,IAAI,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAS;YAC7C,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,SAAS;QAC9C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAChD,IAAI,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAS;YAC7C,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,wEAAwE;AAExE;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAwB,EACxB,WAA8B;IAE9B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IACxC,MAAM,YAAY,GAAI,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5D,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;YACjD,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC;YACjD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B,QAAQ,CAAC,IAAI,CACX,kBAAkB,GAAG,CAAC,EAAE,iBAAiB,GAAG,4BAA4B,CACzE,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,uBAAuB;QACvB,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC;YAC3C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B,QAAQ,CAAC,IAAI,CACX,kBAAkB,GAAG,CAAC,EAAE,iBAAiB,GAAG,4BAA4B,CACzE,CAAC;YACJ,CAAC;QACH,CAAC;QAED,4CAA4C;QAC5C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACvC,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,YAAY;gBAAE,SAAS;YACzD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5B,QAAQ,CAAC,IAAI,CACX,kBAAkB,GAAG,CAAC,EAAE,kBAAkB,GAAG,qDAAqD,GAAG,IAAI,CAC1G,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,iEAAiE;IACjE,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU;YAAE,SAAS;QACxC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;YACxD,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,YAAY;gBAAE,SAAS;YACzD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5B,QAAQ,CAAC,IAAI,CACX,kBAAkB,GAAG,CAAC,EAAE,6BAA6B,GAAG,qDAAqD,GAAG,IAAI,CACrH,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,wEAAwE;AAExE;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,aAA8B,EAC9B,UAAsB;IAEtB,yCAAyC;IACzC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC5C,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO;QACL,EAAE,CAAC,KAAa,EAAE,OAAqD;YACrE,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnB,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACjC,CAAC;QAED,IAAI,CAAC,IAAY;YACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACtC,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,aAA8B,EAC9B,KAAqB,EACrB,GAAG,IAAe;IAElB,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAChD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACnB,CAAC;AACH,CAAC;AAeD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,kBAA8C,EAC9C,aAAmC;IAEnC,oEAAoE;IACpE,kEAAkE;IAClE,8BAA8B;IAC9B,MAAM,SAAS,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;IAEjD,MAAM,QAAQ,GAAsB,EAAE,CAAC;IAEvC,8DAA8D;IAC9D,gEAAgE;IAChE,8DAA8D;IAC9D,+BAA+B;IAC/B,KAAK,IAAI,CAAC,GAAG,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACxD,MAAM,GAAG,GAAI,kBAAkB,CAAC,CAAC,CAAE,CAAC;QACpC,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;QAChC,IAAI,OAAO,IAAI,KAAK,UAAU;YAAE,SAAS;QAEzC,IAAI,CAAC;YACH,MAAM,IAAI,EAAE,CAAC;QACf,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAClE,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAAoC;IACzE,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACvE,OAAO,WAAW,QAAQ,CAAC,MAAM,yBAAyB,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,6BAA6B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC5I,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shardworks/nexus-arbor",
3
- "version": "0.1.269",
3
+ "version": "0.1.271",
4
4
  "license": "ISC",
5
5
  "repository": {
6
6
  "type": "git",
@@ -16,7 +16,7 @@
16
16
  }
17
17
  },
18
18
  "dependencies": {
19
- "@shardworks/nexus-core": "0.1.269"
19
+ "@shardworks/nexus-core": "0.1.271"
20
20
  },
21
21
  "devDependencies": {
22
22
  "@types/node": "25.5.0"