@bastani/atomic 0.9.41 → 0.9.42-alpha.1

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 (270) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/dist/builtin/intercom/CHANGELOG.md +13 -0
  3. package/dist/builtin/intercom/README.md +7 -3
  4. package/dist/builtin/intercom/broker/broker-status.ts +48 -0
  5. package/dist/builtin/intercom/broker/broker.ts +90 -9
  6. package/dist/builtin/intercom/broker/client.ts +112 -12
  7. package/dist/builtin/intercom/broker/control.ts +225 -0
  8. package/dist/builtin/intercom/broker/multinode-router.ts +32 -39
  9. package/dist/builtin/intercom/broker/paths.ts +4 -0
  10. package/dist/builtin/intercom/broker/pending-send-registry.ts +27 -5
  11. package/dist/builtin/intercom/broker/shared-storage-setting.ts +60 -0
  12. package/dist/builtin/intercom/broker/spawn.ts +13 -4
  13. package/dist/builtin/intercom/broker/sql-lease-store.ts +23 -0
  14. package/dist/builtin/intercom/broker/watchdog.ts +105 -0
  15. package/dist/builtin/intercom/index.bundle.mjs +200 -22
  16. package/dist/builtin/intercom/package.json +1 -1
  17. package/dist/builtin/intercom/types.ts +34 -2
  18. package/dist/builtin/mcp/package.json +1 -1
  19. package/dist/builtin/subagents/package.json +1 -1
  20. package/dist/builtin/subagents/src/extension/index.bundle.mjs +1 -0
  21. package/dist/builtin/web-access/package.json +1 -1
  22. package/dist/builtin/workflows/CHANGELOG.md +12 -0
  23. package/dist/builtin/workflows/README.md +10 -0
  24. package/dist/builtin/workflows/builtin/{chunk-txbc93t6.js → chunk-3s95f7ry.js} +1 -1
  25. package/dist/builtin/workflows/builtin/{chunk-n2gkzkty.js → chunk-edhf30ef.js} +1 -1
  26. package/dist/builtin/workflows/builtin/{chunk-8x61e0s7.js → chunk-frqxd4d1.js} +18 -9
  27. package/dist/builtin/workflows/builtin/goal.js +2 -2
  28. package/dist/builtin/workflows/builtin/index.js +3 -3
  29. package/dist/builtin/workflows/builtin/ralph.js +2 -2
  30. package/dist/builtin/workflows/package.json +6 -1
  31. package/dist/builtin/workflows/src/authoring.d.ts +3 -1
  32. package/dist/builtin/workflows/src/durable/journal/internal.d.ts +13 -0
  33. package/dist/builtin/workflows/src/durable/journal/resolution.d.ts +2 -0
  34. package/dist/builtin/workflows/src/durable/journal/sql-run-journal.d.ts +1 -0
  35. package/dist/builtin/workflows/src/extension/index.bundle.mjs +88554 -82820
  36. package/dist/builtin/workflows/src/extension/local-worker-entry.mjs +72635 -0
  37. package/dist/builtin/workflows/src/index.js +53824 -5907
  38. package/dist/builtin/workflows/src/local-worker-entry.mjs +72635 -0
  39. package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +7 -0
  40. package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +2 -0
  41. package/dist/builtin/workflows/src/workers/public-options.d.ts +31 -0
  42. package/dist/bun/app-host-modules.d.ts +9 -0
  43. package/dist/bun/app-host-modules.d.ts.map +1 -0
  44. package/dist/bun/app-host-modules.js +10 -0
  45. package/dist/bun/app-host-modules.js.map +1 -0
  46. package/dist/bun/cli.d.ts +3 -1
  47. package/dist/bun/cli.d.ts.map +1 -1
  48. package/dist/bun/cli.js +15 -1
  49. package/dist/bun/cli.js.map +1 -1
  50. package/dist/bun/internal-intercom-broker.d.ts +17 -0
  51. package/dist/bun/internal-intercom-broker.d.ts.map +1 -1
  52. package/dist/bun/internal-intercom-broker.js +29 -0
  53. package/dist/bun/internal-intercom-broker.js.map +1 -1
  54. package/dist/bun/internal-workflow-worker.d.ts +4 -0
  55. package/dist/bun/internal-workflow-worker.d.ts.map +1 -0
  56. package/dist/bun/internal-workflow-worker.js +37 -0
  57. package/dist/bun/internal-workflow-worker.js.map +1 -0
  58. package/dist/bun/split-loader.js +10 -2
  59. package/dist/bun/split-loader.js.map +1 -1
  60. package/dist/cli/args.d.ts.map +1 -1
  61. package/dist/cli/args.js +3 -1
  62. package/dist/cli/args.js.map +1 -1
  63. package/dist/cli/intercom-command.d.ts +15 -0
  64. package/dist/cli/intercom-command.d.ts.map +1 -0
  65. package/dist/cli/intercom-command.js +87 -0
  66. package/dist/cli/intercom-command.js.map +1 -0
  67. package/dist/cli/storage-command.d.ts +39 -0
  68. package/dist/cli/storage-command.d.ts.map +1 -0
  69. package/dist/cli/storage-command.js +367 -0
  70. package/dist/cli/storage-command.js.map +1 -0
  71. package/dist/core/agent-session-events.d.ts.map +1 -1
  72. package/dist/core/agent-session-events.js +5 -1
  73. package/dist/core/agent-session-events.js.map +1 -1
  74. package/dist/core/agent-session-methods.d.ts +1 -0
  75. package/dist/core/agent-session-methods.d.ts.map +1 -1
  76. package/dist/core/agent-session-methods.js.map +1 -1
  77. package/dist/core/agent-session-tasks.d.ts.map +1 -1
  78. package/dist/core/agent-session-tasks.js +1 -0
  79. package/dist/core/agent-session-tasks.js.map +1 -1
  80. package/dist/core/agent-session-types.d.ts +1 -0
  81. package/dist/core/agent-session-types.d.ts.map +1 -1
  82. package/dist/core/agent-session-types.js.map +1 -1
  83. package/dist/core/agent-session.d.ts +1 -0
  84. package/dist/core/agent-session.d.ts.map +1 -1
  85. package/dist/core/agent-session.js +2 -0
  86. package/dist/core/agent-session.js.map +1 -1
  87. package/dist/core/builtin-install-layout.d.ts +6 -0
  88. package/dist/core/builtin-install-layout.d.ts.map +1 -1
  89. package/dist/core/builtin-install-layout.js +9 -0
  90. package/dist/core/builtin-install-layout.js.map +1 -1
  91. package/dist/core/child-session-options.d.ts.map +1 -1
  92. package/dist/core/child-session-options.js +3 -0
  93. package/dist/core/child-session-options.js.map +1 -1
  94. package/dist/core/exec.js +2 -2
  95. package/dist/core/exec.js.map +1 -1
  96. package/dist/core/export-html/template.css +9 -0
  97. package/dist/core/export-html/template.js +165 -45
  98. package/dist/core/extensions/loader-host-modules.d.ts +6 -0
  99. package/dist/core/extensions/loader-host-modules.d.ts.map +1 -1
  100. package/dist/core/extensions/loader-host-modules.js +12 -1
  101. package/dist/core/extensions/loader-host-modules.js.map +1 -1
  102. package/dist/core/extensions/loader-virtual-modules.d.ts +6 -0
  103. package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
  104. package/dist/core/extensions/loader-virtual-modules.js +18 -0
  105. package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
  106. package/dist/core/extensions/message-types.d.ts +4 -0
  107. package/dist/core/extensions/message-types.d.ts.map +1 -1
  108. package/dist/core/extensions/message-types.js.map +1 -1
  109. package/dist/core/fast-model-routing-transport.d.ts.map +1 -1
  110. package/dist/core/fast-model-routing-transport.js +5 -1
  111. package/dist/core/fast-model-routing-transport.js.map +1 -1
  112. package/dist/core/intercom-broker-control.d.ts +67 -0
  113. package/dist/core/intercom-broker-control.d.ts.map +1 -0
  114. package/dist/core/intercom-broker-control.js +17 -0
  115. package/dist/core/intercom-broker-control.js.map +1 -0
  116. package/dist/core/model-runtime-streaming.d.ts.map +1 -1
  117. package/dist/core/model-runtime-streaming.js +38 -1
  118. package/dist/core/model-runtime-streaming.js.map +1 -1
  119. package/dist/core/package-manager-git.d.ts +2 -2
  120. package/dist/core/package-manager-git.d.ts.map +1 -1
  121. package/dist/core/package-manager-git.js.map +1 -1
  122. package/dist/core/package-manager-manifest.d.ts.map +1 -1
  123. package/dist/core/package-manager-manifest.js +9 -1
  124. package/dist/core/package-manager-manifest.js.map +1 -1
  125. package/dist/core/package-manager-npm.d.ts +2 -2
  126. package/dist/core/package-manager-npm.d.ts.map +1 -1
  127. package/dist/core/package-manager-npm.js.map +1 -1
  128. package/dist/core/package-manager-paths.d.ts +7 -7
  129. package/dist/core/package-manager-paths.d.ts.map +1 -1
  130. package/dist/core/package-manager-paths.js.map +1 -1
  131. package/dist/core/package-manager-storage-adapters.d.ts +7 -0
  132. package/dist/core/package-manager-storage-adapters.d.ts.map +1 -0
  133. package/dist/core/package-manager-storage-adapters.js +76 -0
  134. package/dist/core/package-manager-storage-adapters.js.map +1 -0
  135. package/dist/core/package-manager-types.d.ts +4 -0
  136. package/dist/core/package-manager-types.d.ts.map +1 -1
  137. package/dist/core/package-manager-types.js.map +1 -1
  138. package/dist/core/provider-rate-limits.d.ts +23 -0
  139. package/dist/core/provider-rate-limits.d.ts.map +1 -0
  140. package/dist/core/provider-rate-limits.js +113 -0
  141. package/dist/core/provider-rate-limits.js.map +1 -0
  142. package/dist/core/provider-request-admission.d.ts +7 -0
  143. package/dist/core/provider-request-admission.d.ts.map +1 -0
  144. package/dist/core/provider-request-admission.js +91 -0
  145. package/dist/core/provider-request-admission.js.map +1 -0
  146. package/dist/core/resource-admission-scope.d.ts +4 -0
  147. package/dist/core/resource-admission-scope.d.ts.map +1 -0
  148. package/dist/core/resource-admission-scope.js +9 -0
  149. package/dist/core/resource-admission-scope.js.map +1 -0
  150. package/dist/core/sdk-types.d.ts +16 -0
  151. package/dist/core/sdk-types.d.ts.map +1 -1
  152. package/dist/core/sdk-types.js.map +1 -1
  153. package/dist/core/sdk.d.ts +2 -1
  154. package/dist/core/sdk.d.ts.map +1 -1
  155. package/dist/core/sdk.js +18 -2
  156. package/dist/core/sdk.js.map +1 -1
  157. package/dist/core/session-lifecycle-work.d.ts +1 -0
  158. package/dist/core/session-lifecycle-work.d.ts.map +1 -1
  159. package/dist/core/session-lifecycle-work.js +1 -0
  160. package/dist/core/session-lifecycle-work.js.map +1 -1
  161. package/dist/core/settings-manager-basic-accessors.d.ts +3 -0
  162. package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
  163. package/dist/core/settings-manager-basic-accessors.js +6 -0
  164. package/dist/core/settings-manager-basic-accessors.js.map +1 -1
  165. package/dist/core/settings-schema.d.ts +22 -0
  166. package/dist/core/settings-schema.d.ts.map +1 -1
  167. package/dist/core/settings-schema.js +18 -1
  168. package/dist/core/settings-schema.js.map +1 -1
  169. package/dist/core/storage/index.d.ts +1 -0
  170. package/dist/core/storage/index.d.ts.map +1 -1
  171. package/dist/core/storage/index.js +1 -0
  172. package/dist/core/storage/index.js.map +1 -1
  173. package/dist/core/storage/node-sqlite.d.ts +2 -1
  174. package/dist/core/storage/node-sqlite.d.ts.map +1 -1
  175. package/dist/core/storage/node-sqlite.js +5 -4
  176. package/dist/core/storage/node-sqlite.js.map +1 -1
  177. package/dist/core/storage/provider.d.ts +6 -0
  178. package/dist/core/storage/provider.d.ts.map +1 -1
  179. package/dist/core/storage/provider.js +27 -7
  180. package/dist/core/storage/provider.js.map +1 -1
  181. package/dist/core/storage/sqlite-facade.d.ts +49 -0
  182. package/dist/core/storage/sqlite-facade.d.ts.map +1 -0
  183. package/dist/core/storage/sqlite-facade.js +180 -0
  184. package/dist/core/storage/sqlite-facade.js.map +1 -0
  185. package/dist/core/storage/storage-status.d.ts +81 -0
  186. package/dist/core/storage/storage-status.d.ts.map +1 -0
  187. package/dist/core/storage/storage-status.js +409 -0
  188. package/dist/core/storage/storage-status.js.map +1 -0
  189. package/dist/core/tasks/supervisor.d.ts +2 -1
  190. package/dist/core/tasks/supervisor.d.ts.map +1 -1
  191. package/dist/core/tasks/supervisor.js +105 -4
  192. package/dist/core/tasks/supervisor.js.map +1 -1
  193. package/dist/core/tools/bash-pty-native.d.ts.map +1 -1
  194. package/dist/core/tools/bash-pty-native.js +1 -1
  195. package/dist/core/tools/bash-pty-native.js.map +1 -1
  196. package/dist/index.d.ts +2 -1
  197. package/dist/index.d.ts.map +1 -1
  198. package/dist/index.js +2 -1
  199. package/dist/index.js.map +1 -1
  200. package/dist/main.d.ts.map +1 -1
  201. package/dist/main.js +28 -2
  202. package/dist/main.js.map +1 -1
  203. package/dist/modes/interactive/components/assistant-message.d.ts +3 -1
  204. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  205. package/dist/modes/interactive/components/assistant-message.js +7 -3
  206. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  207. package/dist/modes/interactive/components/chat-message-renderer.d.ts +9 -1
  208. package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -1
  209. package/dist/modes/interactive/components/chat-message-renderer.js +16 -8
  210. package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
  211. package/dist/modes/interactive/components/login-dialog.d.ts +5 -0
  212. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  213. package/dist/modes/interactive/components/login-dialog.js +69 -2
  214. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  215. package/dist/modes/interactive/components/markdown-transform.d.ts +1 -1
  216. package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -1
  217. package/dist/modes/interactive/components/markdown-transform.js +2 -2
  218. package/dist/modes/interactive/components/markdown-transform.js.map +1 -1
  219. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  220. package/dist/modes/interactive/components/session-selector-search.js +80 -22
  221. package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  222. package/dist/modes/interactive/components/user-message.d.ts +3 -1
  223. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  224. package/dist/modes/interactive/components/user-message.js +6 -2
  225. package/dist/modes/interactive/components/user-message.js.map +1 -1
  226. package/dist/modes/interactive/interactive-mode-deps.d.ts +1 -1
  227. package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
  228. package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
  229. package/dist/modes/interactive/interactive-render-chat.js +6 -2
  230. package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
  231. package/dist/modes/interactive-engine/engine-health.d.ts +8 -4
  232. package/dist/modes/interactive-engine/engine-health.d.ts.map +1 -1
  233. package/dist/modes/interactive-engine/engine-health.js +41 -6
  234. package/dist/modes/interactive-engine/engine-health.js.map +1 -1
  235. package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
  236. package/dist/modes/interactive-engine/isolated-runtime.js +19 -17
  237. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  238. package/dist/modes/interactive-engine/remote-queue-pause.js +1 -1
  239. package/dist/modes/interactive-engine/remote-queue-pause.js.map +1 -1
  240. package/dist/modes/rpc/rpc-input-scheduler.d.ts +1 -0
  241. package/dist/modes/rpc/rpc-input-scheduler.d.ts.map +1 -1
  242. package/dist/modes/rpc/rpc-input-scheduler.js +4 -1
  243. package/dist/modes/rpc/rpc-input-scheduler.js.map +1 -1
  244. package/dist/modes/rpc/rpc-input.d.ts.map +1 -1
  245. package/dist/modes/rpc/rpc-input.js +29 -7
  246. package/dist/modes/rpc/rpc-input.js.map +1 -1
  247. package/dist/utils/shell.d.ts.map +1 -1
  248. package/dist/utils/shell.js +14 -0
  249. package/dist/utils/shell.js.map +1 -1
  250. package/docs/custom-provider/oauth.md +8 -1
  251. package/docs/extensions/api-reference.md +2 -0
  252. package/docs/intercom/operations.md +17 -8
  253. package/docs/intercom/reference.md +1 -1
  254. package/docs/keybindings.md +1 -1
  255. package/docs/packages/authoring.md +15 -0
  256. package/docs/packages.md +3 -2
  257. package/docs/providers.md +2 -0
  258. package/docs/reference/cli.md +17 -0
  259. package/docs/sdk.md +37 -0
  260. package/docs/settings.md +33 -2
  261. package/docs/storage.md +191 -219
  262. package/docs/usage.md +1 -1
  263. package/docs/workflows/api-reference.md +50 -0
  264. package/docs/workflows/operations.md +44 -1
  265. package/docs/workflows.md +25 -0
  266. package/examples/extensions/gondolin/package-lock.json +14 -24
  267. package/examples/extensions/gondolin/package.json +1 -1
  268. package/npm-shrinkwrap.json +35 -35
  269. package/package.json +4 -4
  270. package/schemas/settings.schema.json +87 -1
@@ -0,0 +1,81 @@
1
+ import type { BrokerMultiNodeStatus, IntercomBrokerControl } from "../intercom-broker-control.js";
2
+ import { type StorageSelection } from "./provider.js";
3
+ import { type StorageSettingsSelection } from "./selection.js";
4
+ export type StorageStatusDomain = "sessions" | "journal" | "intercom";
5
+ /** How long one connectivity check may take, from loading the adapter to the answer of its `SELECT 1`. */
6
+ export declare const STORAGE_PROBE_TIMEOUT_MS = 15000;
7
+ export interface StorageProbe {
8
+ readonly adapter?: {
9
+ readonly module: string;
10
+ readonly loaded: boolean;
11
+ readonly detail?: string;
12
+ };
13
+ readonly connection: {
14
+ readonly status: "ok" | "failed" | "skipped";
15
+ readonly detail: string;
16
+ };
17
+ /** The adapter loaded but has no `openDatabase` hook, so nothing was opened. */
18
+ readonly noDatabaseHook?: true;
19
+ /** The domain whose identical selection was already checked. */
20
+ readonly sameAs?: StorageStatusDomain;
21
+ }
22
+ export interface DomainStatus {
23
+ readonly domain: StorageStatusDomain;
24
+ /** The effective selection, for example `adapter @x/y (prefix t_)`; `off` for Intercom without a shared one. */
25
+ readonly selection: string;
26
+ /** Where the selection comes from, for example `ATOMIC_STORAGE`, `global settings: storage`, or `default`. */
27
+ readonly source: string;
28
+ /** Lower-precedence selections that are set but overridden by `source`. */
29
+ readonly overridden: readonly string[];
30
+ /** An invalid selection; Atomic stops rather than choosing another store. */
31
+ readonly error?: string;
32
+ readonly probe?: StorageProbe;
33
+ /** Intercom: whether a broker started now would route across machines, and why not. */
34
+ readonly multiNode?: string;
35
+ /** Intercom: host names of the brokers live in the shared database, when it could be read. */
36
+ readonly liveBrokers?: readonly string[];
37
+ }
38
+ export interface BrokerStatusSection {
39
+ readonly state: "stopped" | "running" | "legacy" | "unknown";
40
+ readonly pid?: number;
41
+ readonly sessions?: number;
42
+ /** Whether the running broker reads the selection a broker started now would read. */
43
+ readonly matchesCurrent?: boolean;
44
+ readonly source?: "env" | "settings";
45
+ readonly multiNode?: BrokerMultiNodeStatus;
46
+ readonly multiNodeLine?: string;
47
+ /** Why the broker could not be asked. */
48
+ readonly error?: string;
49
+ }
50
+ export interface StorageStatus {
51
+ readonly agentDir: string;
52
+ readonly cwd: string;
53
+ readonly projectTrusted: boolean;
54
+ readonly domains: readonly DomainStatus[];
55
+ readonly notes: readonly string[];
56
+ readonly broker?: BrokerStatusSection;
57
+ }
58
+ export interface StorageStatusOptions {
59
+ readonly cwd: string;
60
+ readonly agentDir: string;
61
+ /** Load adapters and run a `SELECT 1` on each selected database. */
62
+ readonly probe: boolean;
63
+ /** Ask the running Intercom broker about itself; needs `probe`-independent access to the bundled Intercom package. */
64
+ readonly control?: IntercomBrokerControl;
65
+ }
66
+ /** An error and its direct cause on one line, for status output (a module-resolution "Require stack" is dropped). */
67
+ export declare function describeStorageError(error: Error | object | string | undefined): string;
68
+ export declare function describeStorageSelection(selection: StorageSelection): string;
69
+ /**
70
+ * Which storage each domain selects and where that selection comes from, following the same precedence as
71
+ * sessions, the workflows extension and the Intercom broker; with `probe`, whether each adapter loads and each
72
+ * database answers, and what the running broker uses.
73
+ */
74
+ export declare function collectStorageStatus(options: StorageStatusOptions): Promise<StorageStatus>;
75
+ /**
76
+ * The launch warning for a shared storage adapter this executable cannot load: the Intercom broker would leave
77
+ * multi-node routing off with only a `broker.log` line. Load-only: no database is opened. `undefined` when the
78
+ * shared selection names no adapter or it loads.
79
+ */
80
+ export declare function checkSharedStorageAdapter(agentDir: string, globalStorage: StorageSettingsSelection | undefined): Promise<string | undefined>;
81
+ //# sourceMappingURL=storage-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-status.d.ts","sourceRoot":"","sources":["../../../src/core/storage/storage-status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,409 @@
1
+ import { existsSync } from "node:fs";
2
+ import { dirname, isAbsolute, join } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { ENV_SESSION_DIR, isBunBinary } from "../../config.js";
5
+ import { resolvePath } from "../../utils/paths.js";
6
+ import { selectSessionStorage } from "../session-storage.js";
7
+ import { SettingsManager } from "../settings-manager.js";
8
+ import { hasProjectTrustInputs, ProjectTrustStore } from "../trust-manager.js";
9
+ import { StorageAdapterLoadError } from "./errors.js";
10
+ import { processSharedStorageSelection, SESSIONS_STORAGE_ENV, STORAGE_ENV, selectProcessStorage, WORKFLOW_JOURNAL_PATH_ENV, WORKFLOWS_JOURNAL_ENV, } from "./process-selection.js";
11
+ import { loadStorageAdapter, resolveAdapterOptions, storageSelectionKey, } from "./provider.js";
12
+ import { selectStorage } from "./selection.js";
13
+ /** How long one connectivity check may take, from loading the adapter to the answer of its `SELECT 1`. */
14
+ export const STORAGE_PROBE_TIMEOUT_MS = 15_000;
15
+ /** An error and its direct cause on one line, for status output (a module-resolution "Require stack" is dropped). */
16
+ export function describeStorageError(error) {
17
+ const firstLine = (text) => text.split("\n", 1)[0].trim();
18
+ if (!(error instanceof Error))
19
+ return firstLine(String(error));
20
+ const message = firstLine(error.message);
21
+ const cause = error.cause instanceof Error ? firstLine(error.cause.message) : undefined;
22
+ return cause === undefined || message.includes(cause) ? message : `${message}: ${cause}`;
23
+ }
24
+ const errorText = describeStorageError;
25
+ function envSet(name) {
26
+ const value = process.env[name];
27
+ return value !== undefined && value.length > 0;
28
+ }
29
+ function prefixSuffix(prefix) {
30
+ return prefix ? ` (prefix ${prefix})` : "";
31
+ }
32
+ export function describeStorageSelection(selection) {
33
+ switch (selection.kind) {
34
+ case "memory":
35
+ return "memory";
36
+ case "jsonl":
37
+ return `JSONL directory ${selection.dir}`;
38
+ case "sqlite":
39
+ return `SQLite ${selection.path}${prefixSuffix(selection.prefix)}`;
40
+ case "database":
41
+ return `database ${selection.database.descriptor.adapter}${prefixSuffix(selection.prefix)}`;
42
+ case "adapter":
43
+ return `adapter ${selection.module}${prefixSuffix(selection.prefix)}`;
44
+ }
45
+ }
46
+ function withTimeout(operation, label) {
47
+ let timer;
48
+ return Promise.race([
49
+ operation,
50
+ new Promise((_, reject) => {
51
+ timer = setTimeout(() => reject(new Error(`${label} did not answer within ${STORAGE_PROBE_TIMEOUT_MS / 1000} s`)), STORAGE_PROBE_TIMEOUT_MS);
52
+ timer.unref?.();
53
+ }),
54
+ ]).finally(() => clearTimeout(timer));
55
+ }
56
+ /**
57
+ * Load the selection's adapter and run `SELECT 1` on its database; `inspect` reads it before it closes. Nothing is
58
+ * created: a SQLite file that does not exist yet is not opened, and no Atomic table is touched.
59
+ */
60
+ async function probeSelection(selection, context, inspect) {
61
+ if (selection.kind === "memory")
62
+ return { connection: { status: "skipped", detail: "in memory; nothing to open" } };
63
+ if (selection.kind === "jsonl") {
64
+ return {
65
+ connection: {
66
+ status: "skipped",
67
+ detail: existsSync(selection.dir) ? "directory exists" : "directory not created yet",
68
+ },
69
+ };
70
+ }
71
+ if (selection.kind === "database")
72
+ return { connection: { status: "skipped", detail: "caller-owned database" } };
73
+ if (selection.kind === "sqlite") {
74
+ if (selection.path === "" || selection.path === ":memory:") {
75
+ return { connection: { status: "skipped", detail: "in memory; nothing to open" } };
76
+ }
77
+ if (!existsSync(selection.path)) {
78
+ return { connection: { status: "skipped", detail: "file not created yet; Atomic creates it on first use" } };
79
+ }
80
+ const { openNodeSqliteDatabase } = await import("./node-sqlite.js");
81
+ return {
82
+ connection: await roundTrip(() => openNodeSqliteDatabase(selection.path, { readOnly: true }), "SQLite file", inspect),
83
+ };
84
+ }
85
+ const module = selection.module;
86
+ let adapter;
87
+ try {
88
+ adapter = await withTimeout(loadStorageAdapter(module, context), "Loading the adapter");
89
+ }
90
+ catch (error) {
91
+ return {
92
+ adapter: { module, loaded: false, detail: errorText(error) },
93
+ connection: { status: "skipped", detail: "adapter not loaded" },
94
+ };
95
+ }
96
+ const { resolvePackageStorageAdapter } = await import("../package-manager-storage-adapters.js");
97
+ const resolved = await resolvePackageStorageAdapter(module, context.agentDir);
98
+ const loaded = { module, loaded: true, ...(resolved === undefined ? {} : { detail: `from ${resolved}` }) };
99
+ if (adapter.openDatabase === undefined) {
100
+ return {
101
+ adapter: loaded,
102
+ noDatabaseHook: true,
103
+ connection: { status: "skipped", detail: "the adapter has no openDatabase hook; its stores were not opened" },
104
+ };
105
+ }
106
+ const hook = adapter.openDatabase.bind(adapter);
107
+ let options;
108
+ try {
109
+ options = await resolveAdapterOptions(selection, context);
110
+ }
111
+ catch (error) {
112
+ return { adapter: loaded, connection: { status: "failed", detail: errorText(error) } };
113
+ }
114
+ if (typeof options.url === "string" && options.url.startsWith("file:")) {
115
+ // Normal adapter hooks may create files. Probe local SQLite through the read-only opener instead.
116
+ if (!options.url.startsWith("file:/")) {
117
+ return {
118
+ adapter: loaded,
119
+ connection: { status: "skipped", detail: "relative file: URL cannot be safely probed" },
120
+ };
121
+ }
122
+ try {
123
+ const path = fileURLToPath(options.url);
124
+ if (!existsSync(path)) {
125
+ return {
126
+ adapter: loaded,
127
+ connection: { status: "skipped", detail: "file not found; Atomic creates it on first use" },
128
+ };
129
+ }
130
+ const local = await probeSelection({ kind: "sqlite", path }, context, inspect);
131
+ return { adapter: loaded, connection: local.connection };
132
+ }
133
+ catch (error) {
134
+ return { adapter: loaded, connection: { status: "failed", detail: errorText(error) } };
135
+ }
136
+ }
137
+ return { adapter: loaded, connection: await roundTrip(() => hook(options, context), "The database", inspect) };
138
+ }
139
+ async function roundTrip(open, label, inspect) {
140
+ const started = Date.now();
141
+ let database;
142
+ try {
143
+ database = await withTimeout(open(), label);
144
+ const opened = database;
145
+ await withTimeout(opened.get("SELECT 1 AS ok"), label);
146
+ const elapsed = Date.now() - started;
147
+ // What `inspect` reads is extra detail; the database already answered.
148
+ if (inspect)
149
+ await withTimeout(inspect(opened), "Inspecting the database").catch(() => { });
150
+ return {
151
+ status: "ok",
152
+ detail: `${opened.descriptor.adapter} ${opened.descriptor.location} answered in ${elapsed} ms`,
153
+ };
154
+ }
155
+ catch (error) {
156
+ return { status: "failed", detail: errorText(error) };
157
+ }
158
+ finally {
159
+ if (database)
160
+ await withTimeout(database.close(), "Closing the database").catch(() => { });
161
+ }
162
+ }
163
+ function settingLayers(global, project, projectTrusted, read, field) {
164
+ return [
165
+ { label: `project settings: ${field}`, present: projectTrusted && read(project) !== undefined },
166
+ { label: `global settings: ${field}`, present: read(global) !== undefined },
167
+ ];
168
+ }
169
+ function journalSetting(settings) {
170
+ return Array.isArray(settings.workflows) ? undefined : settings.workflows?.journal;
171
+ }
172
+ function sourceOf(layers) {
173
+ const present = layers.filter((layer) => layer.present).map((layer) => layer.label);
174
+ return { source: present[0] ?? "default", overridden: present.slice(1) };
175
+ }
176
+ /** The journal selection exactly as the workflows extension makes it from these settings. */
177
+ function selectJournal(agentDir, settings) {
178
+ const processChoice = selectProcessStorage("journal", agentDir);
179
+ if (processChoice !== undefined)
180
+ return processChoice.selection;
181
+ const defaultPath = join(dirname(agentDir), "workflows", "journal.sqlite");
182
+ const journal = journalSetting(settings);
183
+ const value = journal ?? settings.storage;
184
+ if (value === undefined)
185
+ return { kind: "sqlite", path: defaultPath };
186
+ const selection = selectStorage(value, "settings", journal !== undefined ? "workflows.journal" : "storage", journal !== undefined ? defaultPath : join(dirname(agentDir), "storage.sqlite"));
187
+ return selection.kind === "sqlite" && !isAbsolute(selection.path)
188
+ ? { ...selection, path: join(dirname(agentDir), selection.path) }
189
+ : selection;
190
+ }
191
+ /** The raw shared selection a broker started from this process would read: `ATOMIC_STORAGE`, else global `storage`. */
192
+ function sharedSelection(globalStorage) {
193
+ const processSelection = processSharedStorageSelection();
194
+ if (processSelection === undefined)
195
+ return globalStorage;
196
+ const parsed = JSON.parse(processSelection);
197
+ return parsed === null || typeof parsed !== "object" || Array.isArray(parsed) ? undefined : parsed;
198
+ }
199
+ function projectTrust(cwd, agentDir) {
200
+ if (!hasProjectTrustInputs(cwd))
201
+ return true;
202
+ return (new ProjectTrustStore(agentDir).get(cwd) ??
203
+ SettingsManager.create(cwd, agentDir, { projectTrusted: false }).getDefaultProjectTrust() === "always");
204
+ }
205
+ /**
206
+ * Which storage each domain selects and where that selection comes from, following the same precedence as
207
+ * sessions, the workflows extension and the Intercom broker; with `probe`, whether each adapter loads and each
208
+ * database answers, and what the running broker uses.
209
+ */
210
+ export async function collectStorageStatus(options) {
211
+ const { cwd, agentDir } = options;
212
+ const projectTrusted = projectTrust(cwd, agentDir);
213
+ const manager = SettingsManager.create(cwd, agentDir, { projectTrusted });
214
+ const settingsErrors = manager.drainErrors();
215
+ if (settingsErrors.length > 0) {
216
+ throw new Error(`Cannot load settings: ${settingsErrors.map(({ scope, error }) => `${scope} settings: ${error.message}`).join("; ")}`);
217
+ }
218
+ const global = manager.getGlobalSettings();
219
+ const project = manager.getProjectSettings();
220
+ const merged = manager.getSettings();
221
+ const notes = [];
222
+ const unappliedProject = projectTrusted
223
+ ? {}
224
+ : SettingsManager.create(cwd, agentDir, { projectTrusted: true }).getProjectSettings();
225
+ if (unappliedProject.storage !== undefined ||
226
+ unappliedProject.sessions?.storage !== undefined ||
227
+ journalSetting(unappliedProject) !== undefined) {
228
+ notes.push("Project settings select storage, but the project is not trusted, so they are not applied.");
229
+ }
230
+ if (projectTrusted && project.storage !== undefined) {
231
+ notes.push("Project settings set `storage`, which Intercom ignores: multi-node routing reads only global settings or ATOMIC_STORAGE.");
232
+ }
233
+ const env = (name) => ({ label: name, present: envSet(name) });
234
+ const sessionsSetting = (settings) => settings.sessions?.storage;
235
+ const storageSetting = (settings) => settings.storage;
236
+ const layers = {
237
+ sessions: [
238
+ env(SESSIONS_STORAGE_ENV),
239
+ env(ENV_SESSION_DIR),
240
+ env(STORAGE_ENV),
241
+ ...settingLayers(global, project, projectTrusted, sessionsSetting, "sessions.storage"),
242
+ ...settingLayers(global, project, projectTrusted, storageSetting, "storage"),
243
+ ],
244
+ journal: [
245
+ env(WORKFLOWS_JOURNAL_ENV),
246
+ env(WORKFLOW_JOURNAL_PATH_ENV),
247
+ env(STORAGE_ENV),
248
+ ...settingLayers(global, project, projectTrusted, journalSetting, "workflows.journal"),
249
+ ...settingLayers(global, project, projectTrusted, storageSetting, "storage"),
250
+ ],
251
+ intercom: [env(STORAGE_ENV), { label: "global settings: storage", present: global.storage !== undefined }],
252
+ };
253
+ const checked = new Map();
254
+ const probeOnce = async (domain, selection, inspect) => {
255
+ if (!options.probe)
256
+ return undefined;
257
+ const key = storageSelectionKey(selection, agentDir);
258
+ const earlier = checked.get(key);
259
+ if (earlier !== undefined && inspect === undefined)
260
+ return { ...earlier.probe, sameAs: earlier.domain };
261
+ const probe = await probeSelection(selection, { agentDir, domain }, inspect);
262
+ if (earlier === undefined)
263
+ checked.set(key, { domain, probe });
264
+ return probe;
265
+ };
266
+ const domains = [];
267
+ for (const domain of ["sessions", "journal"]) {
268
+ const { source, overridden } = sourceOf(layers[domain]);
269
+ try {
270
+ const chosen = domain === "sessions"
271
+ ? selectSessionStorage(cwd, { agentDir, settings: merged })
272
+ : selectJournal(agentDir, merged);
273
+ const selection = chosen;
274
+ const probe = await probeOnce(domain, selection);
275
+ domains.push({
276
+ domain,
277
+ selection: describeStorageSelection(selection),
278
+ source,
279
+ overridden,
280
+ ...(probe === undefined ? {} : { probe }),
281
+ });
282
+ }
283
+ catch (error) {
284
+ domains.push({ domain, selection: "invalid", source, overridden, error: errorText(error) });
285
+ }
286
+ }
287
+ const intercom = sourceOf(layers.intercom);
288
+ try {
289
+ const value = sharedSelection(global.storage);
290
+ const selection = value === undefined
291
+ ? undefined
292
+ : selectStorage(value, intercom.source === STORAGE_ENV ? "env" : "settings", "storage", join(dirname(agentDir), "storage.sqlite"));
293
+ if (selection === undefined ||
294
+ selection.kind === "memory" ||
295
+ (selection.kind === "sqlite" && selection.path === ":memory:")) {
296
+ domains.push({
297
+ domain: "intercom",
298
+ selection: "off",
299
+ source: intercom.source,
300
+ overridden: intercom.overridden,
301
+ multiNode: selection === undefined
302
+ ? "off: no shared storage selection (top-level `storage` in global settings, or ATOMIC_STORAGE)"
303
+ : "off: the shared storage selection is in memory",
304
+ });
305
+ }
306
+ else {
307
+ const resolved = selection.kind === "sqlite" && !isAbsolute(selection.path)
308
+ ? { ...selection, path: resolvePath(selection.path, dirname(agentDir)) }
309
+ : selection;
310
+ let liveBrokers;
311
+ const control = options.control;
312
+ const probe = await probeOnce("intercom", resolved, control === undefined
313
+ ? undefined
314
+ : async (database) => {
315
+ // No Intercom tables yet: no broker has used this database.
316
+ liveBrokers =
317
+ (await control.readLiveBrokers(database, resolved.kind === "adapter" || resolved.kind === "sqlite" ? resolved.prefix : undefined)) ?? [];
318
+ });
319
+ const multiNode = probe === undefined
320
+ ? undefined
321
+ : probe.adapter?.loaded === false
322
+ ? "off: the adapter cannot be loaded"
323
+ : probe.noDatabaseHook
324
+ ? "off: the adapter has no openDatabase hook"
325
+ : probe.connection.status === "failed"
326
+ ? "unavailable: the database did not answer"
327
+ : resolved.kind === "sqlite"
328
+ ? "on (a local SQLite file: only brokers on this machine share it)"
329
+ : "on";
330
+ domains.push({
331
+ domain: "intercom",
332
+ selection: describeStorageSelection(resolved),
333
+ source: intercom.source,
334
+ overridden: intercom.overridden,
335
+ ...(probe === undefined ? {} : { probe }),
336
+ ...(multiNode === undefined ? {} : { multiNode }),
337
+ ...(liveBrokers === undefined ? {} : { liveBrokers }),
338
+ });
339
+ }
340
+ }
341
+ catch (error) {
342
+ domains.push({
343
+ domain: "intercom",
344
+ selection: "invalid",
345
+ source: intercom.source,
346
+ overridden: intercom.overridden,
347
+ error: errorText(error),
348
+ });
349
+ }
350
+ return {
351
+ agentDir,
352
+ cwd,
353
+ projectTrusted,
354
+ domains,
355
+ notes,
356
+ ...(options.control === undefined ? {} : { broker: await brokerSection(options.control, agentDir) }),
357
+ };
358
+ }
359
+ async function brokerSection(control, agentDir) {
360
+ try {
361
+ const query = await control.queryIntercomBroker(agentDir);
362
+ if (query.state === "stopped")
363
+ return { state: "stopped" };
364
+ if (query.state === "legacy")
365
+ return query.pid === undefined ? { state: "legacy" } : { state: "legacy", pid: query.pid };
366
+ const { report } = query;
367
+ const expected = control.expectedBrokerStorage(agentDir, process.env);
368
+ return {
369
+ state: "running",
370
+ pid: report.pid,
371
+ sessions: report.sessions,
372
+ matchesCurrent: report.storage?.digest === expected?.digest,
373
+ ...(report.storage === undefined ? {} : { source: report.storage.source }),
374
+ multiNode: report.multiNode,
375
+ multiNodeLine: control.describeMultiNodeStatus(report.multiNode),
376
+ };
377
+ }
378
+ catch (error) {
379
+ return { state: "unknown", error: errorText(error) };
380
+ }
381
+ }
382
+ /**
383
+ * The launch warning for a shared storage adapter this executable cannot load: the Intercom broker would leave
384
+ * multi-node routing off with only a `broker.log` line. Load-only: no database is opened. `undefined` when the
385
+ * shared selection names no adapter or it loads.
386
+ */
387
+ export async function checkSharedStorageAdapter(agentDir, globalStorage) {
388
+ let value;
389
+ try {
390
+ value = sharedSelection(globalStorage);
391
+ }
392
+ catch {
393
+ // An invalid ATOMIC_STORAGE is reported by its own validation.
394
+ return undefined;
395
+ }
396
+ const module = value?.adapter;
397
+ if (typeof module !== "string" || module.length === 0)
398
+ return undefined;
399
+ try {
400
+ await loadStorageAdapter(module, { agentDir, domain: "intercom" });
401
+ return undefined;
402
+ }
403
+ catch (error) {
404
+ const executable = isBunBinary ? process.execPath : (process.argv[1] ?? process.execPath);
405
+ const cause = error instanceof StorageAdapterLoadError && error.cause instanceof Error ? error.cause : error;
406
+ return `Storage adapter "${module}" cannot be loaded by this Atomic (${executable}): ${errorText(cause)}. Intercom multi-node routing stays off, and sessions or workflow runs that select this adapter fail to open. Run "atomic storage status" for details.`;
407
+ }
408
+ }
409
+ //# sourceMappingURL=storage-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-status.js","sourceRoot":"","sources":["../../../src/core/storage/storage-status.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from \"node:fs\";\nimport { dirname, isAbsolute, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { ENV_SESSION_DIR, isBunBinary } from \"../../config.js\";\nimport { resolvePath } from \"../../utils/paths.ts\";\nimport type { BrokerMultiNodeStatus, IntercomBrokerControl } from \"../intercom-broker-control.js\";\nimport { selectSessionStorage } from \"../session-storage.js\";\nimport { SettingsManager } from \"../settings-manager.ts\";\nimport type { Settings } from \"../settings-schema.ts\";\nimport { hasProjectTrustInputs, ProjectTrustStore } from \"../trust-manager.ts\";\nimport type { SqliteDatabase } from \"./database.js\";\nimport { StorageAdapterLoadError } from \"./errors.js\";\nimport {\n\tprocessSharedStorageSelection,\n\tSESSIONS_STORAGE_ENV,\n\tSTORAGE_ENV,\n\tselectProcessStorage,\n\tWORKFLOW_JOURNAL_PATH_ENV,\n\tWORKFLOWS_JOURNAL_ENV,\n} from \"./process-selection.js\";\nimport {\n\tloadStorageAdapter,\n\tresolveAdapterOptions,\n\ttype StorageOpenContext,\n\ttype StorageSelection,\n\tstorageSelectionKey,\n} from \"./provider.js\";\nimport { type StorageSettingsSelection, selectStorage } from \"./selection.js\";\n\nexport type StorageStatusDomain = \"sessions\" | \"journal\" | \"intercom\";\n\n/** How long one connectivity check may take, from loading the adapter to the answer of its `SELECT 1`. */\nexport const STORAGE_PROBE_TIMEOUT_MS = 15_000;\n\nexport interface StorageProbe {\n\treadonly adapter?: { readonly module: string; readonly loaded: boolean; readonly detail?: string };\n\treadonly connection: { readonly status: \"ok\" | \"failed\" | \"skipped\"; readonly detail: string };\n\t/** The adapter loaded but has no `openDatabase` hook, so nothing was opened. */\n\treadonly noDatabaseHook?: true;\n\t/** The domain whose identical selection was already checked. */\n\treadonly sameAs?: StorageStatusDomain;\n}\n\nexport interface DomainStatus {\n\treadonly domain: StorageStatusDomain;\n\t/** The effective selection, for example `adapter @x/y (prefix t_)`; `off` for Intercom without a shared one. */\n\treadonly selection: string;\n\t/** Where the selection comes from, for example `ATOMIC_STORAGE`, `global settings: storage`, or `default`. */\n\treadonly source: string;\n\t/** Lower-precedence selections that are set but overridden by `source`. */\n\treadonly overridden: readonly string[];\n\t/** An invalid selection; Atomic stops rather than choosing another store. */\n\treadonly error?: string;\n\treadonly probe?: StorageProbe;\n\t/** Intercom: whether a broker started now would route across machines, and why not. */\n\treadonly multiNode?: string;\n\t/** Intercom: host names of the brokers live in the shared database, when it could be read. */\n\treadonly liveBrokers?: readonly string[];\n}\n\nexport interface BrokerStatusSection {\n\treadonly state: \"stopped\" | \"running\" | \"legacy\" | \"unknown\";\n\treadonly pid?: number;\n\treadonly sessions?: number;\n\t/** Whether the running broker reads the selection a broker started now would read. */\n\treadonly matchesCurrent?: boolean;\n\treadonly source?: \"env\" | \"settings\";\n\treadonly multiNode?: BrokerMultiNodeStatus;\n\treadonly multiNodeLine?: string;\n\t/** Why the broker could not be asked. */\n\treadonly error?: string;\n}\n\nexport interface StorageStatus {\n\treadonly agentDir: string;\n\treadonly cwd: string;\n\treadonly projectTrusted: boolean;\n\treadonly domains: readonly DomainStatus[];\n\treadonly notes: readonly string[];\n\treadonly broker?: BrokerStatusSection;\n}\n\nexport interface StorageStatusOptions {\n\treadonly cwd: string;\n\treadonly agentDir: string;\n\t/** Load adapters and run a `SELECT 1` on each selected database. */\n\treadonly probe: boolean;\n\t/** Ask the running Intercom broker about itself; needs `probe`-independent access to the bundled Intercom package. */\n\treadonly control?: IntercomBrokerControl;\n}\n\ninterface Layer {\n\treadonly label: string;\n\treadonly present: boolean;\n}\n\n/** An error and its direct cause on one line, for status output (a module-resolution \"Require stack\" is dropped). */\nexport function describeStorageError(error: Error | object | string | undefined): string {\n\tconst firstLine = (text: string): string => text.split(\"\\n\", 1)[0]!.trim();\n\tif (!(error instanceof Error)) return firstLine(String(error));\n\tconst message = firstLine(error.message);\n\tconst cause = error.cause instanceof Error ? firstLine(error.cause.message) : undefined;\n\treturn cause === undefined || message.includes(cause) ? message : `${message}: ${cause}`;\n}\n\nconst errorText = describeStorageError;\n\nfunction envSet(name: string): boolean {\n\tconst value = process.env[name];\n\treturn value !== undefined && value.length > 0;\n}\n\nfunction prefixSuffix(prefix: string | undefined): string {\n\treturn prefix ? ` (prefix ${prefix})` : \"\";\n}\n\nexport function describeStorageSelection(selection: StorageSelection): string {\n\tswitch (selection.kind) {\n\t\tcase \"memory\":\n\t\t\treturn \"memory\";\n\t\tcase \"jsonl\":\n\t\t\treturn `JSONL directory ${selection.dir}`;\n\t\tcase \"sqlite\":\n\t\t\treturn `SQLite ${selection.path}${prefixSuffix(selection.prefix)}`;\n\t\tcase \"database\":\n\t\t\treturn `database ${selection.database.descriptor.adapter}${prefixSuffix(selection.prefix)}`;\n\t\tcase \"adapter\":\n\t\t\treturn `adapter ${selection.module}${prefixSuffix(selection.prefix)}`;\n\t}\n}\n\nfunction withTimeout<T>(operation: Promise<T>, label: string): Promise<T> {\n\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\treturn Promise.race([\n\t\toperation,\n\t\tnew Promise<never>((_, reject) => {\n\t\t\ttimer = setTimeout(\n\t\t\t\t() => reject(new Error(`${label} did not answer within ${STORAGE_PROBE_TIMEOUT_MS / 1000} s`)),\n\t\t\t\tSTORAGE_PROBE_TIMEOUT_MS,\n\t\t\t);\n\t\t\ttimer.unref?.();\n\t\t}),\n\t]).finally(() => clearTimeout(timer));\n}\n\n/**\n * Load the selection's adapter and run `SELECT 1` on its database; `inspect` reads it before it closes. Nothing is\n * created: a SQLite file that does not exist yet is not opened, and no Atomic table is touched.\n */\nasync function probeSelection(\n\tselection: StorageSelection,\n\tcontext: StorageOpenContext,\n\tinspect?: (database: SqliteDatabase) => Promise<void>,\n): Promise<StorageProbe> {\n\tif (selection.kind === \"memory\") return { connection: { status: \"skipped\", detail: \"in memory; nothing to open\" } };\n\tif (selection.kind === \"jsonl\") {\n\t\treturn {\n\t\t\tconnection: {\n\t\t\t\tstatus: \"skipped\",\n\t\t\t\tdetail: existsSync(selection.dir) ? \"directory exists\" : \"directory not created yet\",\n\t\t\t},\n\t\t};\n\t}\n\tif (selection.kind === \"database\") return { connection: { status: \"skipped\", detail: \"caller-owned database\" } };\n\tif (selection.kind === \"sqlite\") {\n\t\tif (selection.path === \"\" || selection.path === \":memory:\") {\n\t\t\treturn { connection: { status: \"skipped\", detail: \"in memory; nothing to open\" } };\n\t\t}\n\t\tif (!existsSync(selection.path)) {\n\t\t\treturn { connection: { status: \"skipped\", detail: \"file not created yet; Atomic creates it on first use\" } };\n\t\t}\n\t\tconst { openNodeSqliteDatabase } = await import(\"./node-sqlite.js\");\n\t\treturn {\n\t\t\tconnection: await roundTrip(\n\t\t\t\t() => openNodeSqliteDatabase(selection.path, { readOnly: true }),\n\t\t\t\t\"SQLite file\",\n\t\t\t\tinspect,\n\t\t\t),\n\t\t};\n\t}\n\tconst module = selection.module;\n\tlet adapter: Awaited<ReturnType<typeof loadStorageAdapter>>;\n\ttry {\n\t\tadapter = await withTimeout(loadStorageAdapter(module, context), \"Loading the adapter\");\n\t} catch (error) {\n\t\treturn {\n\t\t\tadapter: { module, loaded: false, detail: errorText(error as Error) },\n\t\t\tconnection: { status: \"skipped\", detail: \"adapter not loaded\" },\n\t\t};\n\t}\n\tconst { resolvePackageStorageAdapter } = await import(\"../package-manager-storage-adapters.js\");\n\tconst resolved = await resolvePackageStorageAdapter(module, context.agentDir);\n\tconst loaded = { module, loaded: true, ...(resolved === undefined ? {} : { detail: `from ${resolved}` }) };\n\tif (adapter.openDatabase === undefined) {\n\t\treturn {\n\t\t\tadapter: loaded,\n\t\t\tnoDatabaseHook: true,\n\t\t\tconnection: { status: \"skipped\", detail: \"the adapter has no openDatabase hook; its stores were not opened\" },\n\t\t};\n\t}\n\tconst hook = adapter.openDatabase.bind(adapter);\n\tlet options: Awaited<ReturnType<typeof resolveAdapterOptions>>;\n\ttry {\n\t\toptions = await resolveAdapterOptions(selection, context);\n\t} catch (error) {\n\t\treturn { adapter: loaded, connection: { status: \"failed\", detail: errorText(error as Error) } };\n\t}\n\tif (typeof options.url === \"string\" && options.url.startsWith(\"file:\")) {\n\t\t// Normal adapter hooks may create files. Probe local SQLite through the read-only opener instead.\n\t\tif (!options.url.startsWith(\"file:/\")) {\n\t\t\treturn {\n\t\t\t\tadapter: loaded,\n\t\t\t\tconnection: { status: \"skipped\", detail: \"relative file: URL cannot be safely probed\" },\n\t\t\t};\n\t\t}\n\t\ttry {\n\t\t\tconst path = fileURLToPath(options.url);\n\t\t\tif (!existsSync(path)) {\n\t\t\t\treturn {\n\t\t\t\t\tadapter: loaded,\n\t\t\t\t\tconnection: { status: \"skipped\", detail: \"file not found; Atomic creates it on first use\" },\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst local = await probeSelection({ kind: \"sqlite\", path }, context, inspect);\n\t\t\treturn { adapter: loaded, connection: local.connection };\n\t\t} catch (error) {\n\t\t\treturn { adapter: loaded, connection: { status: \"failed\", detail: errorText(error as Error) } };\n\t\t}\n\t}\n\treturn { adapter: loaded, connection: await roundTrip(() => hook(options, context), \"The database\", inspect) };\n}\n\nasync function roundTrip(\n\topen: () => Promise<SqliteDatabase>,\n\tlabel: string,\n\tinspect?: (database: SqliteDatabase) => Promise<void>,\n): Promise<StorageProbe[\"connection\"]> {\n\tconst started = Date.now();\n\tlet database: SqliteDatabase | undefined;\n\ttry {\n\t\tdatabase = await withTimeout(open(), label);\n\t\tconst opened = database;\n\t\tawait withTimeout(opened.get(\"SELECT 1 AS ok\"), label);\n\t\tconst elapsed = Date.now() - started;\n\t\t// What `inspect` reads is extra detail; the database already answered.\n\t\tif (inspect) await withTimeout(inspect(opened), \"Inspecting the database\").catch(() => {});\n\t\treturn {\n\t\t\tstatus: \"ok\",\n\t\t\tdetail: `${opened.descriptor.adapter} ${opened.descriptor.location} answered in ${elapsed} ms`,\n\t\t};\n\t} catch (error) {\n\t\treturn { status: \"failed\", detail: errorText(error as Error) };\n\t} finally {\n\t\tif (database) await withTimeout(database.close(), \"Closing the database\").catch(() => {});\n\t}\n}\n\nfunction settingLayers(\n\tglobal: Settings,\n\tproject: Settings,\n\tprojectTrusted: boolean,\n\tread: (settings: Settings) => object | undefined,\n\tfield: string,\n): Layer[] {\n\treturn [\n\t\t{ label: `project settings: ${field}`, present: projectTrusted && read(project) !== undefined },\n\t\t{ label: `global settings: ${field}`, present: read(global) !== undefined },\n\t];\n}\n\nfunction journalSetting(settings: Settings): StorageSettingsSelection | undefined {\n\treturn Array.isArray(settings.workflows) ? undefined : settings.workflows?.journal;\n}\n\nfunction sourceOf(layers: readonly Layer[]): { source: string; overridden: string[] } {\n\tconst present = layers.filter((layer) => layer.present).map((layer) => layer.label);\n\treturn { source: present[0] ?? \"default\", overridden: present.slice(1) };\n}\n\n/** The journal selection exactly as the workflows extension makes it from these settings. */\nfunction selectJournal(agentDir: string, settings: Settings): StorageSelection {\n\tconst processChoice = selectProcessStorage(\"journal\", agentDir);\n\tif (processChoice !== undefined) return processChoice.selection;\n\tconst defaultPath = join(dirname(agentDir), \"workflows\", \"journal.sqlite\");\n\tconst journal = journalSetting(settings);\n\tconst value = journal ?? settings.storage;\n\tif (value === undefined) return { kind: \"sqlite\", path: defaultPath };\n\tconst selection = selectStorage(\n\t\tvalue,\n\t\t\"settings\",\n\t\tjournal !== undefined ? \"workflows.journal\" : \"storage\",\n\t\tjournal !== undefined ? defaultPath : join(dirname(agentDir), \"storage.sqlite\"),\n\t);\n\treturn selection.kind === \"sqlite\" && !isAbsolute(selection.path)\n\t\t? { ...selection, path: join(dirname(agentDir), selection.path) }\n\t\t: selection;\n}\n\n/** The raw shared selection a broker started from this process would read: `ATOMIC_STORAGE`, else global `storage`. */\nfunction sharedSelection(globalStorage: StorageSettingsSelection | undefined): StorageSettingsSelection | undefined {\n\tconst processSelection = processSharedStorageSelection();\n\tif (processSelection === undefined) return globalStorage;\n\tconst parsed: StorageSettingsSelection | null = JSON.parse(processSelection);\n\treturn parsed === null || typeof parsed !== \"object\" || Array.isArray(parsed) ? undefined : parsed;\n}\n\nfunction projectTrust(cwd: string, agentDir: string): boolean {\n\tif (!hasProjectTrustInputs(cwd)) return true;\n\treturn (\n\t\tnew ProjectTrustStore(agentDir).get(cwd) ??\n\t\tSettingsManager.create(cwd, agentDir, { projectTrusted: false }).getDefaultProjectTrust() === \"always\"\n\t);\n}\n\n/**\n * Which storage each domain selects and where that selection comes from, following the same precedence as\n * sessions, the workflows extension and the Intercom broker; with `probe`, whether each adapter loads and each\n * database answers, and what the running broker uses.\n */\nexport async function collectStorageStatus(options: StorageStatusOptions): Promise<StorageStatus> {\n\tconst { cwd, agentDir } = options;\n\tconst projectTrusted = projectTrust(cwd, agentDir);\n\tconst manager = SettingsManager.create(cwd, agentDir, { projectTrusted });\n\tconst settingsErrors = manager.drainErrors();\n\tif (settingsErrors.length > 0) {\n\t\tthrow new Error(\n\t\t\t`Cannot load settings: ${settingsErrors.map(({ scope, error }) => `${scope} settings: ${error.message}`).join(\"; \")}`,\n\t\t);\n\t}\n\tconst global = manager.getGlobalSettings();\n\tconst project = manager.getProjectSettings();\n\tconst merged = manager.getSettings();\n\tconst notes: string[] = [];\n\tconst unappliedProject = projectTrusted\n\t\t? {}\n\t\t: SettingsManager.create(cwd, agentDir, { projectTrusted: true }).getProjectSettings();\n\tif (\n\t\tunappliedProject.storage !== undefined ||\n\t\tunappliedProject.sessions?.storage !== undefined ||\n\t\tjournalSetting(unappliedProject) !== undefined\n\t) {\n\t\tnotes.push(\"Project settings select storage, but the project is not trusted, so they are not applied.\");\n\t}\n\tif (projectTrusted && project.storage !== undefined) {\n\t\tnotes.push(\n\t\t\t\"Project settings set `storage`, which Intercom ignores: multi-node routing reads only global settings or ATOMIC_STORAGE.\",\n\t\t);\n\t}\n\tconst env = (name: string): Layer => ({ label: name, present: envSet(name) });\n\tconst sessionsSetting = (settings: Settings) => settings.sessions?.storage;\n\tconst storageSetting = (settings: Settings) => settings.storage;\n\tconst layers: Record<StorageStatusDomain, Layer[]> = {\n\t\tsessions: [\n\t\t\tenv(SESSIONS_STORAGE_ENV),\n\t\t\tenv(ENV_SESSION_DIR),\n\t\t\tenv(STORAGE_ENV),\n\t\t\t...settingLayers(global, project, projectTrusted, sessionsSetting, \"sessions.storage\"),\n\t\t\t...settingLayers(global, project, projectTrusted, storageSetting, \"storage\"),\n\t\t],\n\t\tjournal: [\n\t\t\tenv(WORKFLOWS_JOURNAL_ENV),\n\t\t\tenv(WORKFLOW_JOURNAL_PATH_ENV),\n\t\t\tenv(STORAGE_ENV),\n\t\t\t...settingLayers(global, project, projectTrusted, journalSetting, \"workflows.journal\"),\n\t\t\t...settingLayers(global, project, projectTrusted, storageSetting, \"storage\"),\n\t\t],\n\t\tintercom: [env(STORAGE_ENV), { label: \"global settings: storage\", present: global.storage !== undefined }],\n\t};\n\n\tconst checked = new Map<string, { domain: StorageStatusDomain; probe: StorageProbe }>();\n\tconst probeOnce = async (\n\t\tdomain: StorageStatusDomain,\n\t\tselection: StorageSelection,\n\t\tinspect?: (database: SqliteDatabase) => Promise<void>,\n\t): Promise<StorageProbe | undefined> => {\n\t\tif (!options.probe) return undefined;\n\t\tconst key = storageSelectionKey(selection, agentDir);\n\t\tconst earlier = checked.get(key);\n\t\tif (earlier !== undefined && inspect === undefined) return { ...earlier.probe, sameAs: earlier.domain };\n\t\tconst probe = await probeSelection(selection, { agentDir, domain }, inspect);\n\t\tif (earlier === undefined) checked.set(key, { domain, probe });\n\t\treturn probe;\n\t};\n\n\tconst domains: DomainStatus[] = [];\n\tfor (const domain of [\"sessions\", \"journal\"] as const) {\n\t\tconst { source, overridden } = sourceOf(layers[domain]);\n\t\ttry {\n\t\t\tconst chosen =\n\t\t\t\tdomain === \"sessions\"\n\t\t\t\t\t? selectSessionStorage(cwd, { agentDir, settings: merged })\n\t\t\t\t\t: selectJournal(agentDir, merged);\n\t\t\tconst selection = chosen as StorageSelection;\n\t\t\tconst probe = await probeOnce(domain, selection);\n\t\t\tdomains.push({\n\t\t\t\tdomain,\n\t\t\t\tselection: describeStorageSelection(selection),\n\t\t\t\tsource,\n\t\t\t\toverridden,\n\t\t\t\t...(probe === undefined ? {} : { probe }),\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tdomains.push({ domain, selection: \"invalid\", source, overridden, error: errorText(error as Error) });\n\t\t}\n\t}\n\n\tconst intercom = sourceOf(layers.intercom);\n\ttry {\n\t\tconst value = sharedSelection(global.storage);\n\t\tconst selection =\n\t\t\tvalue === undefined\n\t\t\t\t? undefined\n\t\t\t\t: selectStorage(\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\tintercom.source === STORAGE_ENV ? \"env\" : \"settings\",\n\t\t\t\t\t\t\"storage\",\n\t\t\t\t\t\tjoin(dirname(agentDir), \"storage.sqlite\"),\n\t\t\t\t\t);\n\t\tif (\n\t\t\tselection === undefined ||\n\t\t\tselection.kind === \"memory\" ||\n\t\t\t(selection.kind === \"sqlite\" && selection.path === \":memory:\")\n\t\t) {\n\t\t\tdomains.push({\n\t\t\t\tdomain: \"intercom\",\n\t\t\t\tselection: \"off\",\n\t\t\t\tsource: intercom.source,\n\t\t\t\toverridden: intercom.overridden,\n\t\t\t\tmultiNode:\n\t\t\t\t\tselection === undefined\n\t\t\t\t\t\t? \"off: no shared storage selection (top-level `storage` in global settings, or ATOMIC_STORAGE)\"\n\t\t\t\t\t\t: \"off: the shared storage selection is in memory\",\n\t\t\t});\n\t\t} else {\n\t\t\tconst resolved =\n\t\t\t\tselection.kind === \"sqlite\" && !isAbsolute(selection.path)\n\t\t\t\t\t? { ...selection, path: resolvePath(selection.path, dirname(agentDir)) }\n\t\t\t\t\t: selection;\n\t\t\tlet liveBrokers: string[] | undefined;\n\t\t\tconst control = options.control;\n\t\t\tconst probe = await probeOnce(\n\t\t\t\t\"intercom\",\n\t\t\t\tresolved,\n\t\t\t\tcontrol === undefined\n\t\t\t\t\t? undefined\n\t\t\t\t\t: async (database) => {\n\t\t\t\t\t\t\t// No Intercom tables yet: no broker has used this database.\n\t\t\t\t\t\t\tliveBrokers =\n\t\t\t\t\t\t\t\t(await control.readLiveBrokers(\n\t\t\t\t\t\t\t\t\tdatabase,\n\t\t\t\t\t\t\t\t\tresolved.kind === \"adapter\" || resolved.kind === \"sqlite\" ? resolved.prefix : undefined,\n\t\t\t\t\t\t\t\t)) ?? [];\n\t\t\t\t\t\t},\n\t\t\t);\n\t\t\tconst multiNode =\n\t\t\t\tprobe === undefined\n\t\t\t\t\t? undefined\n\t\t\t\t\t: probe.adapter?.loaded === false\n\t\t\t\t\t\t? \"off: the adapter cannot be loaded\"\n\t\t\t\t\t\t: probe.noDatabaseHook\n\t\t\t\t\t\t\t? \"off: the adapter has no openDatabase hook\"\n\t\t\t\t\t\t\t: probe.connection.status === \"failed\"\n\t\t\t\t\t\t\t\t? \"unavailable: the database did not answer\"\n\t\t\t\t\t\t\t\t: resolved.kind === \"sqlite\"\n\t\t\t\t\t\t\t\t\t? \"on (a local SQLite file: only brokers on this machine share it)\"\n\t\t\t\t\t\t\t\t\t: \"on\";\n\t\t\tdomains.push({\n\t\t\t\tdomain: \"intercom\",\n\t\t\t\tselection: describeStorageSelection(resolved),\n\t\t\t\tsource: intercom.source,\n\t\t\t\toverridden: intercom.overridden,\n\t\t\t\t...(probe === undefined ? {} : { probe }),\n\t\t\t\t...(multiNode === undefined ? {} : { multiNode }),\n\t\t\t\t...(liveBrokers === undefined ? {} : { liveBrokers }),\n\t\t\t});\n\t\t}\n\t} catch (error) {\n\t\tdomains.push({\n\t\t\tdomain: \"intercom\",\n\t\t\tselection: \"invalid\",\n\t\t\tsource: intercom.source,\n\t\t\toverridden: intercom.overridden,\n\t\t\terror: errorText(error as Error),\n\t\t});\n\t}\n\n\treturn {\n\t\tagentDir,\n\t\tcwd,\n\t\tprojectTrusted,\n\t\tdomains,\n\t\tnotes,\n\t\t...(options.control === undefined ? {} : { broker: await brokerSection(options.control, agentDir) }),\n\t};\n}\n\nasync function brokerSection(control: IntercomBrokerControl, agentDir: string): Promise<BrokerStatusSection> {\n\ttry {\n\t\tconst query = await control.queryIntercomBroker(agentDir);\n\t\tif (query.state === \"stopped\") return { state: \"stopped\" };\n\t\tif (query.state === \"legacy\")\n\t\t\treturn query.pid === undefined ? { state: \"legacy\" } : { state: \"legacy\", pid: query.pid };\n\t\tconst { report } = query;\n\t\tconst expected = control.expectedBrokerStorage(agentDir, process.env);\n\t\treturn {\n\t\t\tstate: \"running\",\n\t\t\tpid: report.pid,\n\t\t\tsessions: report.sessions,\n\t\t\tmatchesCurrent: report.storage?.digest === expected?.digest,\n\t\t\t...(report.storage === undefined ? {} : { source: report.storage.source }),\n\t\t\tmultiNode: report.multiNode,\n\t\t\tmultiNodeLine: control.describeMultiNodeStatus(report.multiNode),\n\t\t};\n\t} catch (error) {\n\t\treturn { state: \"unknown\", error: errorText(error as Error) };\n\t}\n}\n\n/**\n * The launch warning for a shared storage adapter this executable cannot load: the Intercom broker would leave\n * multi-node routing off with only a `broker.log` line. Load-only: no database is opened. `undefined` when the\n * shared selection names no adapter or it loads.\n */\nexport async function checkSharedStorageAdapter(\n\tagentDir: string,\n\tglobalStorage: StorageSettingsSelection | undefined,\n): Promise<string | undefined> {\n\tlet value: StorageSettingsSelection | undefined;\n\ttry {\n\t\tvalue = sharedSelection(globalStorage);\n\t} catch {\n\t\t// An invalid ATOMIC_STORAGE is reported by its own validation.\n\t\treturn undefined;\n\t}\n\tconst module = value?.adapter;\n\tif (typeof module !== \"string\" || module.length === 0) return undefined;\n\ttry {\n\t\tawait loadStorageAdapter(module, { agentDir, domain: \"intercom\" });\n\t\treturn undefined;\n\t} catch (error) {\n\t\tconst executable = isBunBinary ? process.execPath : (process.argv[1] ?? process.execPath);\n\t\tconst cause = error instanceof StorageAdapterLoadError && error.cause instanceof Error ? error.cause : error;\n\t\treturn `Storage adapter \"${module}\" cannot be loaded by this Atomic (${executable}): ${errorText(cause as Error)}. Intercom multi-node routing stays off, and sessions or workflow runs that select this adapter fail to open. Run \"atomic storage status\" for details.`;\n\t}\n}\n"]}
@@ -61,6 +61,7 @@ export type TrustedTaskHost = {
61
61
  /** The existing host/tool refusal throws here, before native admission. */
62
62
  authorizeCommandLaunch?(intent: C.CommandIntent): void;
63
63
  authorizeLaunch(intent: C.AgentIntent): void;
64
+ resourceAdmission?: import("../sdk-types.ts").ResourceAdmission;
64
65
  onTaskSettled?(ref: C.NativeTaskRef, receipt: C.SettlementReceipt): void;
65
66
  createRunner(context: FakeRunnerContext, intent: C.AgentIntent): FakeExecution;
66
67
  };
@@ -91,7 +92,7 @@ export declare class TaskSupervisor {
91
92
  #private;
92
93
  bindHostSession(binding: TrustedTaskHost): HostSession;
93
94
  openTaskOwner(host: HostSession, scope: C.OwnerScope): C.Result<OwnerLease, C.OwnerError>;
94
- startCommandTask(owner: OwnerLease, intent: C.CommandIntent, operation: C.OperationId): Promise<C.Result<TaskLease, C.StartFailure>>;
95
+ startCommandTask(owner: OwnerLease, intent: C.CommandIntent, operation: C.OperationId, signal?: AbortSignal): Promise<C.Result<TaskLease, C.StartFailure>>;
95
96
  /** Caller must hold launch authorization closed while this snapshot drains. */
96
97
  drainCommandAdmissions(owner: OwnerLease): Promise<void>;
97
98
  taskStdin(task: TaskLease): C.Result<StdinLease, C.InputError>;
@@ -1 +1 @@
1
- {"version":3,"file":"supervisor.d.ts","sourceRoot":"","sources":["../../../src/core/tasks/supervisor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,KAAK,KAAK,CAAC,MAAM,gBAAgB,CAAC;AAEzC,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,cAAc,EAAE,cAAc,GAAG,YAAY,CAAC,GAAG;IACxF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;IACjD,6EAA6E;IAC7E,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACrE,mBAAmB,CAAC,IAAI,YAAY,GAAG,SAAS,CAAC;CACjD,CAAC;AAEF,eAAO,MAAM,4BAA4B,QAAQ,CAAC;AAClD,qFAAqF;AACrF,cAAM,UAAU;;IAEf,MAAM,IAAI,KAAK,CAEd;CACD;AACD,cAAM,cAAe,SAAQ,UAAU;IACtC,QAAQ,CAAC,IAAI,UAAU;CACvB;AACD,cAAM,eAAgB,SAAQ,UAAU;IACvC,QAAQ,CAAC,IAAI,WAAW;CACxB;AACD,cAAM,cAAe,SAAQ,UAAU;IACtC,QAAQ,CAAC,IAAI,UAAU;CACvB;AACD,cAAM,cAAe,SAAQ,UAAU;IACtC,QAAQ,CAAC,IAAI,UAAU;CACvB;AACD,cAAM,sBAAuB,SAAQ,UAAU;IAC9C,QAAQ,CAAC,IAAI,kBAAkB;CAC/B;AACD,cAAM,eAAgB,SAAQ,UAAU;IACvC,QAAQ,CAAC,IAAI,WAAW;CACxB;AACD,MAAM,MAAM,UAAU,GAAG,eAAe,CAAC;AACzC,MAAM,MAAM,WAAW,GAAG,cAAc,CAAC;AACzC,MAAM,MAAM,UAAU,GAAG,eAAe,CAAC;AACzC,MAAM,MAAM,SAAS,GAAG,cAAc,CAAC;AACvC,MAAM,MAAM,SAAS,GAAG,cAAc,CAAC;AACvC,MAAM,MAAM,iBAAiB,GAAG,sBAAsB,CAAC;AAEvD,MAAM,MAAM,iBAAiB,GAAG;IAC/B,GAAG,EAAE,CAAC,CAAC,aAAa,CAAC;IACrB,MAAM,EAAE,WAAW,CAAC;IACpB,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;IACnF,+EAA+E;IAC/E,cAAc,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACpD,CAAC;AACF,oFAAoF;AACpF,MAAM,MAAM,aAAa,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;CAAE,CAAC;AAC3F,MAAM,MAAM,eAAe,GAAG;IAC7B,KAAK,EAAE,CAAC,CAAC,UAAU,CAAC;IACpB,oEAAoE;IACpE,KAAK,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,CAAC,CAAC,qBAAqB,CAAA;KAAE,CAAC;IAC3C,2EAA2E;IAC3E,sBAAsB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC;IACvD,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC;IAC7C,aAAa,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC,iBAAiB,GAAG,IAAI,CAAC;IACzE,YAAY,CAAC,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,CAAC,CAAC,WAAW,GAAG,aAAa,CAAC;CAC/E,CAAC;AAiCF,wFAAwF;AACxF,wBAAgB,oBAAoB,CACnC,IAAI,EAAE,SAAS,GACb,CAAC,CAAC,MAAM,CAAC;IAAE,OAAO,EAAE,oBAAoB,CAAC;IAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAA;CAAE,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,GAAG,uBAAuB,CAAC,CAAC,CAMnH;AAED,2FAA2F;AAC3F,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,SAAS,GAAG,UAAU,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC,GAAG,SAAS,CAGpH;AAoTD,qBAAa,gBAAgB;;IAW5B,uGAAuG;IACvG,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,WAAW,EAAE,KAAK,IAAI,CAAY;IAG9F,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC9C,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAgC;IAEjE,YAAY,KAAK,EAAE,MAAM,CAAC,cAAc,EAAE,OAAO,EAAE,MAAM,CAAC,sBAAsB,EAAE,SAAS,EAAE,MAAM,IAAI,EA6BtG;IACD,IAAI,QAAQ,IAAI,CAAC,CAAC,aAAa,CAE9B;IACD,IAAI,MAAM,IAAI,CAAC,CAAC,MAAM,CAErB;IACD,4FAA4F;IAC5F,IAAI,OAAO,IAAI,KAAK,GAAG,SAAS,CAE/B;IACD,yFAAyF;IACzF,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,GAAG,IAAI,CAEpC;IAUD,KAAK,IAAI,IAAI,CA0CZ;IACD,OAAO,CAAC,KAAK,UAAO,GAAG,IAAI,CAW1B;CACD;AASD,qBAAa,cAAc;;IAQ1B,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,WAAW,CAKrD;IACD,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,CAAC,CAiExF;IAaK,gBAAgB,CACrB,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,CAAC,CAAC,aAAa,EACvB,SAAS,EAAE,CAAC,CAAC,WAAW,GACtB,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAmC9C;IACD,+EAA+E;IACzE,sBAAsB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7D;IACD,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,CAAC,CAU7D;IACK,cAAc,CACnB,KAAK,EAAE,UAAU,EACjB,SAAS,EAAE,CAAC,CAAC,WAAW,EACxB,IAAI,EAAE,CAAC,CAAC,SAAS,GACf,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAgBjD;IACK,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAW1G;IACK,cAAc,CACnB,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,CAAC,CAAC,WAAW,EACrB,SAAS,EAAE,CAAC,CAAC,WAAW,EACxB,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,GAChD,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAkG9C;IACD,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,CAAC,CAAC,aAAa,CAE9C;IACK,WAAW,CAChB,IAAI,EAAE,SAAS,EACf,QAAQ,CAAC,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,WAAW,GACvB,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAW/C;IACD,yFAAyF;IACzF,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,CAMhF;IAEK,aAAa,CAClB,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,CAAC,CAAC,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,GACtC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAmB/C;IACK,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC,CAe5G;IACD,MAAM,CAAC,IAAI,EAAE,SAAS,GAAG,CAAC,CAAC,MAAM,CAEhC;IACD,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,GAAG,SAAS,GAAG,SAAS,CAE5C;IACD,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAE9E;IACD,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,UAAU,CAAC,CAM3F;IACD,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,CAE5D;IACK,kBAAkB,CACvB,IAAI,EAAE,SAAS,EACf,MAAM,CAAC,EAAE,CAAC,CAAC,UAAU,EACrB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,GACtC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAmB/C;IACK,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAQzG;IACK,cAAc,CACnB,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,CAAC,CAAC,eAAe,GACtB,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAyBtD;IACD;;;;;;OAMG;IACH,eAAe,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,UAAU,CAAC,CAc5F;CA2CD"}
1
+ {"version":3,"file":"supervisor.d.ts","sourceRoot":"","sources":["../../../src/core/tasks/supervisor.ts"],"names":[],"mappings":"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"}