@a5c-ai/agent-comm-mux 5.0.1-staging.04ca6ab00d21

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 (263) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +99 -0
  3. package/dist/adapter-registry.d.ts +51 -0
  4. package/dist/adapter-registry.d.ts.map +1 -0
  5. package/dist/adapter-registry.js +208 -0
  6. package/dist/adapter-registry.js.map +1 -0
  7. package/dist/adapter-types.d.ts +164 -0
  8. package/dist/adapter-types.d.ts.map +1 -0
  9. package/dist/adapter-types.js +27 -0
  10. package/dist/adapter-types.js.map +1 -0
  11. package/dist/adapter.d.ts +248 -0
  12. package/dist/adapter.d.ts.map +1 -0
  13. package/dist/adapter.js +18 -0
  14. package/dist/adapter.js.map +1 -0
  15. package/dist/atomic-fs.d.ts +33 -0
  16. package/dist/atomic-fs.d.ts.map +1 -0
  17. package/dist/atomic-fs.js +190 -0
  18. package/dist/atomic-fs.js.map +1 -0
  19. package/dist/auth-manager.d.ts +37 -0
  20. package/dist/auth-manager.d.ts.map +1 -0
  21. package/dist/auth-manager.js +94 -0
  22. package/dist/auth-manager.js.map +1 -0
  23. package/dist/auth-types.d.ts +83 -0
  24. package/dist/auth-types.d.ts.map +1 -0
  25. package/dist/auth-types.js +10 -0
  26. package/dist/auth-types.js.map +1 -0
  27. package/dist/automation.d.ts +104 -0
  28. package/dist/automation.d.ts.map +1 -0
  29. package/dist/automation.js +2 -0
  30. package/dist/automation.js.map +1 -0
  31. package/dist/browser.d.ts +5 -0
  32. package/dist/browser.d.ts.map +1 -0
  33. package/dist/browser.js +2 -0
  34. package/dist/browser.js.map +1 -0
  35. package/dist/builtin-hooks.d.ts +24 -0
  36. package/dist/builtin-hooks.d.ts.map +1 -0
  37. package/dist/builtin-hooks.js +80 -0
  38. package/dist/builtin-hooks.js.map +1 -0
  39. package/dist/capabilities.d.ts +251 -0
  40. package/dist/capabilities.d.ts.map +1 -0
  41. package/dist/capabilities.js +7 -0
  42. package/dist/capabilities.js.map +1 -0
  43. package/dist/client.d.ts +118 -0
  44. package/dist/client.d.ts.map +1 -0
  45. package/dist/client.js +316 -0
  46. package/dist/client.js.map +1 -0
  47. package/dist/config-manager.d.ts +85 -0
  48. package/dist/config-manager.d.ts.map +1 -0
  49. package/dist/config-manager.js +202 -0
  50. package/dist/config-manager.js.map +1 -0
  51. package/dist/config-types.d.ts +134 -0
  52. package/dist/config-types.d.ts.map +1 -0
  53. package/dist/config-types.js +10 -0
  54. package/dist/config-types.js.map +1 -0
  55. package/dist/cost-utils.d.ts +31 -0
  56. package/dist/cost-utils.d.ts.map +1 -0
  57. package/dist/cost-utils.js +69 -0
  58. package/dist/cost-utils.js.map +1 -0
  59. package/dist/errors.d.ts +50 -0
  60. package/dist/errors.d.ts.map +1 -0
  61. package/dist/errors.js +85 -0
  62. package/dist/errors.js.map +1 -0
  63. package/dist/events-control.d.ts +91 -0
  64. package/dist/events-control.d.ts.map +1 -0
  65. package/dist/events-control.js +8 -0
  66. package/dist/events-control.js.map +1 -0
  67. package/dist/events.d.ts +285 -0
  68. package/dist/events.d.ts.map +1 -0
  69. package/dist/events.js +8 -0
  70. package/dist/events.js.map +1 -0
  71. package/dist/hook-catalog.d.ts +20 -0
  72. package/dist/hook-catalog.d.ts.map +1 -0
  73. package/dist/hook-catalog.js +63 -0
  74. package/dist/hook-catalog.js.map +1 -0
  75. package/dist/hook-dispatcher.d.ts +24 -0
  76. package/dist/hook-dispatcher.d.ts.map +1 -0
  77. package/dist/hook-dispatcher.js +91 -0
  78. package/dist/hook-dispatcher.js.map +1 -0
  79. package/dist/hook-payload.d.ts +24 -0
  80. package/dist/hook-payload.d.ts.map +1 -0
  81. package/dist/hook-payload.js +62 -0
  82. package/dist/hook-payload.js.map +1 -0
  83. package/dist/hooks.d.ts +59 -0
  84. package/dist/hooks.d.ts.map +1 -0
  85. package/dist/hooks.js +118 -0
  86. package/dist/hooks.js.map +1 -0
  87. package/dist/host-detection.d.ts +67 -0
  88. package/dist/host-detection.d.ts.map +1 -0
  89. package/dist/host-detection.js +147 -0
  90. package/dist/host-detection.js.map +1 -0
  91. package/dist/index.d.ts +88 -0
  92. package/dist/index.d.ts.map +1 -0
  93. package/dist/index.js +50 -0
  94. package/dist/index.js.map +1 -0
  95. package/dist/interaction-channel-impl.d.ts +56 -0
  96. package/dist/interaction-channel-impl.d.ts.map +1 -0
  97. package/dist/interaction-channel-impl.js +159 -0
  98. package/dist/interaction-channel-impl.js.map +1 -0
  99. package/dist/interaction.d.ts +93 -0
  100. package/dist/interaction.d.ts.map +1 -0
  101. package/dist/interaction.js +8 -0
  102. package/dist/interaction.js.map +1 -0
  103. package/dist/invocation.d.ts +100 -0
  104. package/dist/invocation.d.ts.map +1 -0
  105. package/dist/invocation.js +17 -0
  106. package/dist/invocation.js.map +1 -0
  107. package/dist/kanban.d.ts +894 -0
  108. package/dist/kanban.d.ts.map +1 -0
  109. package/dist/kanban.js +1155 -0
  110. package/dist/kanban.js.map +1 -0
  111. package/dist/merge.d.ts +37 -0
  112. package/dist/merge.d.ts.map +1 -0
  113. package/dist/merge.js +102 -0
  114. package/dist/merge.js.map +1 -0
  115. package/dist/model-registry.d.ts +61 -0
  116. package/dist/model-registry.d.ts.map +1 -0
  117. package/dist/model-registry.js +198 -0
  118. package/dist/model-registry.js.map +1 -0
  119. package/dist/plugin-manager-impl.d.ts +48 -0
  120. package/dist/plugin-manager-impl.d.ts.map +1 -0
  121. package/dist/plugin-manager-impl.js +343 -0
  122. package/dist/plugin-manager-impl.js.map +1 -0
  123. package/dist/plugin-manager.d.ts +81 -0
  124. package/dist/plugin-manager.d.ts.map +1 -0
  125. package/dist/plugin-manager.js +7 -0
  126. package/dist/plugin-manager.js.map +1 -0
  127. package/dist/plugin-types.d.ts +114 -0
  128. package/dist/plugin-types.d.ts.map +1 -0
  129. package/dist/plugin-types.js +7 -0
  130. package/dist/plugin-types.js.map +1 -0
  131. package/dist/process-tracker.d.ts +20 -0
  132. package/dist/process-tracker.d.ts.map +1 -0
  133. package/dist/process-tracker.js +96 -0
  134. package/dist/process-tracker.js.map +1 -0
  135. package/dist/profiles.d.ts +99 -0
  136. package/dist/profiles.d.ts.map +1 -0
  137. package/dist/profiles.js +231 -0
  138. package/dist/profiles.js.map +1 -0
  139. package/dist/programmatic-runner.d.ts +4 -0
  140. package/dist/programmatic-runner.d.ts.map +1 -0
  141. package/dist/programmatic-runner.js +110 -0
  142. package/dist/programmatic-runner.js.map +1 -0
  143. package/dist/provider-config.d.ts +40 -0
  144. package/dist/provider-config.d.ts.map +1 -0
  145. package/dist/provider-config.js +67 -0
  146. package/dist/provider-config.js.map +1 -0
  147. package/dist/provider-profiles.d.ts +47 -0
  148. package/dist/provider-profiles.d.ts.map +1 -0
  149. package/dist/provider-profiles.js +117 -0
  150. package/dist/provider-profiles.js.map +1 -0
  151. package/dist/provider-resolver.d.ts +15 -0
  152. package/dist/provider-resolver.d.ts.map +1 -0
  153. package/dist/provider-resolver.js +114 -0
  154. package/dist/provider-resolver.js.map +1 -0
  155. package/dist/provider-support-matrix.d.ts +12 -0
  156. package/dist/provider-support-matrix.d.ts.map +1 -0
  157. package/dist/provider-support-matrix.js +88 -0
  158. package/dist/provider-support-matrix.js.map +1 -0
  159. package/dist/remote-runner.d.ts +4 -0
  160. package/dist/remote-runner.d.ts.map +1 -0
  161. package/dist/remote-runner.js +114 -0
  162. package/dist/remote-runner.js.map +1 -0
  163. package/dist/retry.d.ts +13 -0
  164. package/dist/retry.d.ts.map +1 -0
  165. package/dist/retry.js +17 -0
  166. package/dist/retry.js.map +1 -0
  167. package/dist/run-handle-cost.d.ts +36 -0
  168. package/dist/run-handle-cost.d.ts.map +1 -0
  169. package/dist/run-handle-cost.js +62 -0
  170. package/dist/run-handle-cost.js.map +1 -0
  171. package/dist/run-handle-impl.d.ts +144 -0
  172. package/dist/run-handle-impl.d.ts.map +1 -0
  173. package/dist/run-handle-impl.js +695 -0
  174. package/dist/run-handle-impl.js.map +1 -0
  175. package/dist/run-handle.d.ts +222 -0
  176. package/dist/run-handle.d.ts.map +1 -0
  177. package/dist/run-handle.js +9 -0
  178. package/dist/run-handle.js.map +1 -0
  179. package/dist/run-options-validation.d.ts +23 -0
  180. package/dist/run-options-validation.d.ts.map +1 -0
  181. package/dist/run-options-validation.js +234 -0
  182. package/dist/run-options-validation.js.map +1 -0
  183. package/dist/run-options.d.ts +128 -0
  184. package/dist/run-options.d.ts.map +1 -0
  185. package/dist/run-options.js +329 -0
  186. package/dist/run-options.js.map +1 -0
  187. package/dist/runtime-hook-dispatcher.d.ts +19 -0
  188. package/dist/runtime-hook-dispatcher.d.ts.map +1 -0
  189. package/dist/runtime-hook-dispatcher.js +50 -0
  190. package/dist/runtime-hook-dispatcher.js.map +1 -0
  191. package/dist/runtime-hooks.d.ts +47 -0
  192. package/dist/runtime-hooks.d.ts.map +1 -0
  193. package/dist/runtime-hooks.js +2 -0
  194. package/dist/runtime-hooks.js.map +1 -0
  195. package/dist/schema/__tests__/event-schema.test.d.ts +1 -0
  196. package/dist/schema/__tests__/event-schema.test.d.ts.map +1 -0
  197. package/dist/schema/__tests__/event-schema.test.js +480 -0
  198. package/dist/schema/__tests__/event-schema.test.js.map +1 -0
  199. package/dist/schema/event-schema.d.ts +120 -0
  200. package/dist/schema/event-schema.d.ts.map +1 -0
  201. package/dist/schema/event-schema.js +546 -0
  202. package/dist/schema/event-schema.js.map +1 -0
  203. package/dist/schema/index.d.ts +7 -0
  204. package/dist/schema/index.d.ts.map +1 -0
  205. package/dist/schema/index.js +49 -0
  206. package/dist/schema/index.js.map +1 -0
  207. package/dist/session-manager-helpers.d.ts +33 -0
  208. package/dist/session-manager-helpers.d.ts.map +1 -0
  209. package/dist/session-manager-helpers.js +66 -0
  210. package/dist/session-manager-helpers.js.map +1 -0
  211. package/dist/session-manager.d.ts +70 -0
  212. package/dist/session-manager.d.ts.map +1 -0
  213. package/dist/session-manager.js +343 -0
  214. package/dist/session-manager.js.map +1 -0
  215. package/dist/session-types.d.ts +358 -0
  216. package/dist/session-types.d.ts.map +1 -0
  217. package/dist/session-types.js +10 -0
  218. package/dist/session-types.js.map +1 -0
  219. package/dist/spawn-invocation.d.ts +52 -0
  220. package/dist/spawn-invocation.d.ts.map +1 -0
  221. package/dist/spawn-invocation.js +218 -0
  222. package/dist/spawn-invocation.js.map +1 -0
  223. package/dist/spawn-runner-utils.d.ts +21 -0
  224. package/dist/spawn-runner-utils.d.ts.map +1 -0
  225. package/dist/spawn-runner-utils.js +102 -0
  226. package/dist/spawn-runner-utils.js.map +1 -0
  227. package/dist/spawn-runner.d.ts +21 -0
  228. package/dist/spawn-runner.d.ts.map +1 -0
  229. package/dist/spawn-runner.js +576 -0
  230. package/dist/spawn-runner.js.map +1 -0
  231. package/dist/spawn-runtime-hooks.d.ts +15 -0
  232. package/dist/spawn-runtime-hooks.d.ts.map +1 -0
  233. package/dist/spawn-runtime-hooks.js +136 -0
  234. package/dist/spawn-runtime-hooks.js.map +1 -0
  235. package/dist/state-machine.d.ts +33 -0
  236. package/dist/state-machine.d.ts.map +1 -0
  237. package/dist/state-machine.js +61 -0
  238. package/dist/state-machine.js.map +1 -0
  239. package/dist/storage.d.ts +47 -0
  240. package/dist/storage.d.ts.map +1 -0
  241. package/dist/storage.js +90 -0
  242. package/dist/storage.js.map +1 -0
  243. package/dist/stream-assembler.d.ts +51 -0
  244. package/dist/stream-assembler.d.ts.map +1 -0
  245. package/dist/stream-assembler.js +86 -0
  246. package/dist/stream-assembler.js.map +1 -0
  247. package/dist/tools/classify.d.ts +9 -0
  248. package/dist/tools/classify.d.ts.map +1 -0
  249. package/dist/tools/classify.js +77 -0
  250. package/dist/tools/classify.js.map +1 -0
  251. package/dist/tools/index.d.ts +2 -0
  252. package/dist/tools/index.d.ts.map +1 -0
  253. package/dist/tools/index.js +2 -0
  254. package/dist/tools/index.js.map +1 -0
  255. package/dist/types.d.ts +288 -0
  256. package/dist/types.d.ts.map +1 -0
  257. package/dist/types.js +8 -0
  258. package/dist/types.js.map +1 -0
  259. package/dist/workspaces.d.ts +142 -0
  260. package/dist/workspaces.d.ts.map +1 -0
  261. package/dist/workspaces.js +515 -0
  262. package/dist/workspaces.js.map +1 -0
  263. package/package.json +107 -0
@@ -0,0 +1,248 @@
1
+ /**
2
+ * AgentAdapter interface, SpawnArgs, ParseContext, and related types.
3
+ *
4
+ * @see 05-adapter-system.md §2, §3
5
+ */
6
+ import type { AgentName } from './types.js';
7
+ import type { AgentCapabilities, ModelCapabilities } from './capabilities.js';
8
+ import type { RunOptions } from './run-options.js';
9
+ import type { AgentEvent } from './events.js';
10
+ import type { StreamAssembler } from './stream-assembler.js';
11
+ import type { InstalledPlugin, PluginInstallOptions, PluginSearchOptions, PluginListing } from './plugin-types.js';
12
+ import type { RuntimeHookDispatcher, RuntimeHookSetup } from './runtime-hooks.js';
13
+ export type { Session, SessionMessage, SessionToolCall, SessionSummary, FullSession, SessionListOptions, SessionQuery, CostAggregationOptions, CostSummary, CostBreakdown, SessionDiff, DiffOperation } from './session-types.js';
14
+ import type { Session } from './session-types.js';
15
+ export type { AuthState, AuthSetupGuidance, AuthMethod, AuthSetupStep, AuthEnvVar } from './auth-types.js';
16
+ import type { AuthState } from './auth-types.js';
17
+ import type { AuthSetupGuidance } from './auth-types.js';
18
+ export type { AgentConfig, AgentConfigSchema, ConfigField, ValidationResult, ConfigValidationError, ConfigValidationWarning } from './config-types.js';
19
+ import type { AgentConfig } from './config-types.js';
20
+ import type { AgentConfigSchema } from './config-types.js';
21
+ export type { InstalledPlugin, PluginInstallOptions, PluginSearchOptions, PluginListing, } from './plugin-types.js';
22
+ /**
23
+ * Describes exactly how to spawn an agent subprocess.
24
+ * Returned by AgentAdapter.buildSpawnArgs().
25
+ */
26
+ export interface SpawnArgs {
27
+ /** The command to execute. */
28
+ command: string;
29
+ /** Array of CLI arguments. */
30
+ args: string[];
31
+ /** Environment variables for the subprocess. */
32
+ env: Record<string, string>;
33
+ /** Working directory for the subprocess. */
34
+ cwd: string;
35
+ /** Whether the subprocess requires a pseudo-terminal (PTY). */
36
+ usePty: boolean;
37
+ /** Standard input to pipe into the subprocess after spawn. */
38
+ stdin?: string;
39
+ /**
40
+ * Close stdin immediately after launch setup completes.
41
+ * Useful for CLIs that inspect stdin and block until EOF even when the
42
+ * primary prompt is supplied via command-line arguments.
43
+ */
44
+ closeStdinAfterSpawn?: boolean;
45
+ /** Timeout in milliseconds for entire subprocess execution. */
46
+ timeout?: number;
47
+ /** Inactivity timeout in milliseconds. */
48
+ inactivityTimeout?: number;
49
+ /** Shell mode — execute via system shell. */
50
+ shell?: boolean;
51
+ }
52
+ /**
53
+ * Contextual state passed to AgentAdapter.parseEvent() on every line.
54
+ */
55
+ export interface ParseContext {
56
+ /** The run ID for the current run. */
57
+ runId: string;
58
+ /** The agent name. */
59
+ agent: AgentName;
60
+ /** The session ID, if one has been established. */
61
+ sessionId: string | undefined;
62
+ /** Zero-based index of the current turn. */
63
+ turnIndex: number;
64
+ /** Whether debug mode is active. */
65
+ debug: boolean;
66
+ /** The output format requested in RunOptions.outputFormat. */
67
+ outputFormat: 'text' | 'json' | 'jsonl';
68
+ /** Whether the line came from stdout or stderr. */
69
+ source: 'stdout' | 'stderr';
70
+ /** The StreamAssembler instance for this run. */
71
+ assembler: StreamAssembler;
72
+ /** Total number of events emitted so far in this run. */
73
+ eventCount: number;
74
+ /** The last event type emitted, or null if no events have been emitted yet. */
75
+ lastEventType: string | null;
76
+ /** Adapter-managed state bag. */
77
+ adapterState: Record<string, unknown>;
78
+ }
79
+ /**
80
+ * Result of detecting whether a specific agent is installed and functional.
81
+ */
82
+ export interface InstalledAgentInfo {
83
+ /** The agent identifier. */
84
+ agent: AgentName;
85
+ /** Whether the agent CLI binary was found on PATH. */
86
+ installed: boolean;
87
+ /** Absolute path to the CLI binary, or null if not found. */
88
+ cliPath: string | null;
89
+ /** Detected version string, or null. */
90
+ version: string | null;
91
+ /** Whether the detected version meets the adapter's minVersion requirement. */
92
+ meetsMinVersion: boolean;
93
+ /** The minimum version required by the adapter. */
94
+ minVersion: string;
95
+ /** Current authentication state for this agent. */
96
+ authState: 'authenticated' | 'unauthenticated' | 'expired' | 'unknown';
97
+ /** The currently active/default model, or null. */
98
+ activeModel: string | null;
99
+ }
100
+ /**
101
+ * Lightweight descriptor of a registered adapter.
102
+ */
103
+ export interface AgentAdapterInfo {
104
+ /** The agent identifier. */
105
+ agent: AgentName;
106
+ /** Human-readable display name. */
107
+ displayName: string;
108
+ /** The CLI command used to invoke this agent. */
109
+ cliCommand: string;
110
+ /** Minimum CLI version required, if any. */
111
+ minVersion: string | undefined;
112
+ /** Whether this adapter was registered as a built-in or plugin. */
113
+ source: 'built-in' | 'plugin';
114
+ }
115
+ /** Result of `AgentAdapter.detectInstallation()`. */
116
+ export interface DetectInstallationResult {
117
+ /** Whether the harness binary was found on PATH (or equivalent). */
118
+ installed: boolean;
119
+ /** Detected version string, if obtainable. */
120
+ version?: string;
121
+ /** Absolute path to the binary, if located. */
122
+ path?: string;
123
+ /** Optional diagnostic notes (e.g. config dir discovered). */
124
+ notes?: string;
125
+ }
126
+ /** Result of `AgentAdapter.install()` / `update()`. */
127
+ export interface InstallResult {
128
+ /** Whether the operation succeeded. */
129
+ ok: boolean;
130
+ /** High-level method chosen (`npm`, `brew`, `manual`, `ssh`, `dry-run`, ...). */
131
+ method: string;
132
+ /** Command string that was (or would be) executed. */
133
+ command: string;
134
+ /** Captured stdout, if the command ran. */
135
+ stdout?: string;
136
+ /** Captured stderr, if the command ran. */
137
+ stderr?: string;
138
+ /** Version detected after a successful install. */
139
+ installedVersion?: string;
140
+ /** Human-readable message (e.g. manual install instructions). */
141
+ message?: string;
142
+ }
143
+ /** Options for `AgentAdapter.install()`. */
144
+ export interface AdapterInstallOptions {
145
+ /** Explicit version tag to pin (npm only; falls through when unsupported). */
146
+ version?: string;
147
+ /** Reinstall even if already detected. */
148
+ force?: boolean;
149
+ /** Print the planned command without executing. */
150
+ dryRun?: boolean;
151
+ }
152
+ /** Options for `AgentAdapter.update()`. */
153
+ export interface AdapterUpdateOptions {
154
+ /** Print the planned command without executing. */
155
+ dryRun?: boolean;
156
+ }
157
+ /**
158
+ * Pluggable subprocess runner used by install/update/detect.
159
+ * Tests replace this to avoid hitting the real system.
160
+ */
161
+ export type Spawner = (command: string, args: string[], options?: {
162
+ env?: Record<string, string>;
163
+ cwd?: string;
164
+ }) => Promise<{
165
+ code: number;
166
+ stdout: string;
167
+ stderr: string;
168
+ }>;
169
+ /**
170
+ * The full contract for an agent adapter.
171
+ */
172
+ export interface AgentAdapter {
173
+ readonly agent: AgentName;
174
+ readonly displayName: string;
175
+ readonly cliCommand: string;
176
+ readonly minVersion?: string;
177
+ readonly capabilities: AgentCapabilities;
178
+ readonly models: ModelCapabilities[];
179
+ readonly defaultModelId?: string;
180
+ readonly configSchema: AgentConfigSchema;
181
+ buildSpawnArgs(options: RunOptions): SpawnArgs;
182
+ parseEvent(line: string, context: ParseContext): AgentEvent | AgentEvent[] | null;
183
+ detectAuth(): Promise<AuthState>;
184
+ getAuthGuidance(): AuthSetupGuidance;
185
+ sessionDir(cwd?: string): string;
186
+ parseSessionFile(filePath: string): Promise<Session>;
187
+ listSessionFiles(cwd?: string): Promise<string[]>;
188
+ readConfig(cwd?: string): Promise<AgentConfig>;
189
+ writeConfig(config: Partial<AgentConfig>, cwd?: string): Promise<void>;
190
+ /** Optional adapter-native model discovery hook used by ModelRegistry.refresh(). */
191
+ discoverModels?(cwd?: string): Promise<ModelCapabilities[]>;
192
+ /** Translate a provider config into harness-specific env vars and args. */
193
+ translateProvider?(config: Record<string, unknown>): {
194
+ env: Record<string, string>;
195
+ args: string[];
196
+ proxyRequired: boolean;
197
+ proxyExposedTransport?: string;
198
+ };
199
+ /** Env-var names that indicate the current process is running under this harness. */
200
+ readonly hostEnvSignals?: readonly string[];
201
+ /** Extract adapter-specific metadata (session_id, run_id, etc.) from an env snapshot. */
202
+ readHostMetadata?(env: NodeJS.ProcessEnv): Record<string, string | number | boolean | null>;
203
+ /** Detects whether the harness binary is installed. */
204
+ detectInstallation?(): Promise<DetectInstallationResult>;
205
+ /** Installs the harness binary. */
206
+ install?(opts?: AdapterInstallOptions): Promise<InstallResult>;
207
+ /** Updates the harness binary. */
208
+ update?(opts?: AdapterUpdateOptions): Promise<InstallResult>;
209
+ /** Native hook type names this harness supports (see HOOK_CATALOG). */
210
+ readonly supportedHookTypes?: readonly string[];
211
+ /**
212
+ * Install a hook into the harness's native config (e.g. claude's
213
+ * ~/.claude/settings.json). Default implementation in BaseAdapter
214
+ * only writes to .amux/hooks.json — override to also wire the
215
+ * harness natively so it actually fires the hook.
216
+ */
217
+ installHook?(hookType: string, command: string, opts?: {
218
+ scope?: 'global' | 'project';
219
+ id?: string;
220
+ }): Promise<void>;
221
+ /** Remove a hook installed by `installHook`. */
222
+ uninstallHook?(id: string, opts?: {
223
+ scope?: 'global' | 'project';
224
+ }): Promise<boolean>;
225
+ /**
226
+ * Optional per-run native runtime-hook bridge setup for harnesses that can
227
+ * invoke external hook commands before or after internal actions.
228
+ */
229
+ setupRuntimeHooks?(options: RunOptions, dispatcher: RuntimeHookDispatcher): Promise<RuntimeHookSetup | void>;
230
+ listPlugins?(): Promise<InstalledPlugin[]>;
231
+ installPlugin?(pluginId: string, options?: PluginInstallOptions): Promise<InstalledPlugin>;
232
+ uninstallPlugin?(pluginId: string, options?: {
233
+ global?: boolean;
234
+ }): Promise<void>;
235
+ searchPlugins?(query: string, options?: PluginSearchOptions): Promise<PluginListing[]>;
236
+ }
237
+ export type { BaseAgentAdapterInterface, SubprocessAdapter, RemoteAdapter, ProgrammaticAdapter, RemoteConnection, HttpConnection, WebSocketConnection, WebSocketMessage, ServerOptions, ServerInfo, ServerHealth, ServerManager, AgentAdapter as MultiAgentAdapter, } from './adapter-types.js';
238
+ export { isSubprocessAdapter, isRemoteAdapter, isProgrammaticAdapter, isHttpConnection, isWebSocketConnection, } from './adapter-types.js';
239
+ /**
240
+ * Legacy AgentAdapter interface - equivalent to SubprocessAdapter in new architecture.
241
+ *
242
+ * @deprecated For new adapters, import specific types from './adapter-types.js':
243
+ * - SubprocessAdapter (CLI tools)
244
+ * - RemoteAdapter (HTTP/WebSocket)
245
+ * - ProgrammaticAdapter (direct SDK)
246
+ *
247
+ * This interface is maintained for backward compatibility with existing adapters.
248
+ */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * AgentAdapter interface, SpawnArgs, ParseContext, and related types.
3
+ *
4
+ * @see 05-adapter-system.md §2, §3
5
+ */
6
+ export { isSubprocessAdapter, isRemoteAdapter, isProgrammaticAdapter, isHttpConnection, isWebSocketConnection, } from './adapter-types.js';
7
+ /**
8
+ * Legacy AgentAdapter interface - equivalent to SubprocessAdapter in new architecture.
9
+ *
10
+ * @deprecated For new adapters, import specific types from './adapter-types.js':
11
+ * - SubprocessAdapter (CLI tools)
12
+ * - RemoteAdapter (HTTP/WebSocket)
13
+ * - ProgrammaticAdapter (direct SDK)
14
+ *
15
+ * This interface is maintained for backward compatibility with existing adapters.
16
+ */
17
+ // Note: This interface is still the "AgentAdapter" used by existing code
18
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA6WH,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,qBAAqB,EACrB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;GASG;AACH,yEAAyE"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Atomic filesystem helpers — the single source of truth for durable
3
+ * config/session writes across `@a5c-ai/agent-mux`.
4
+ *
5
+ * Guarantees:
6
+ * - Writes are atomic: a concurrent reader observes either the old or the
7
+ * new bytes, never a torn intermediate.
8
+ * - Writes are durable: data + directory entry are fsynced before rename.
9
+ * - Concurrent writers serialise through an advisory lockfile (`<path>.lock`)
10
+ * which records the holder's PID and a monotonic timestamp. Stale locks
11
+ * (holder dead or older than `staleMs`) are forcibly reclaimed.
12
+ *
13
+ * These primitives have no runtime dependencies beyond Node built-ins and
14
+ * work identically on Windows, macOS, and Linux.
15
+ *
16
+ * @see docs/08-config-and-auth.md
17
+ */
18
+ export interface AtomicWriteOptions {
19
+ /** Acquire an advisory lock before writing. @default true */
20
+ readonly lock?: boolean;
21
+ /** Max time to wait for a lock, in ms. @default 5000 */
22
+ readonly lockTimeoutMs?: number;
23
+ /** Lock is considered stale after this many ms without refresh. @default 30000 */
24
+ readonly staleMs?: number;
25
+ /** fsync the file after write. @default true */
26
+ readonly fsync?: boolean;
27
+ /** File mode for writeFile. */
28
+ readonly mode?: number;
29
+ }
30
+ /** Write `data` to `filePath` atomically (tmp + fsync + rename). */
31
+ export declare function writeFileAtomic(filePath: string, data: string | Uint8Array, opts?: AtomicWriteOptions): Promise<void>;
32
+ /** Write `data` as pretty-printed JSON atomically. */
33
+ export declare function writeJsonAtomic(filePath: string, data: unknown, opts?: AtomicWriteOptions): Promise<void>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atomic-fs.d.ts","sourceRoot":"","sources":["../src/atomic-fs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAMH,MAAM,WAAW,kBAAkB;IACjC,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,wDAAwD;IACxD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,kFAAkF;IAClF,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,gDAAgD;IAChD,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,+BAA+B;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AA0HD,oEAAoE;AACpE,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GAAG,UAAU,EACzB,IAAI,GAAE,kBAAuB,GAC5B,OAAO,CAAC,IAAI,CAAC,CA2Cf;AAED,sDAAsD;AACtD,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,EACb,IAAI,GAAE,kBAAuB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAGf"}
@@ -0,0 +1,190 @@
1
+ /**
2
+ * Atomic filesystem helpers — the single source of truth for durable
3
+ * config/session writes across `@a5c-ai/agent-mux`.
4
+ *
5
+ * Guarantees:
6
+ * - Writes are atomic: a concurrent reader observes either the old or the
7
+ * new bytes, never a torn intermediate.
8
+ * - Writes are durable: data + directory entry are fsynced before rename.
9
+ * - Concurrent writers serialise through an advisory lockfile (`<path>.lock`)
10
+ * which records the holder's PID and a monotonic timestamp. Stale locks
11
+ * (holder dead or older than `staleMs`) are forcibly reclaimed.
12
+ *
13
+ * These primitives have no runtime dependencies beyond Node built-ins and
14
+ * work identically on Windows, macOS, and Linux.
15
+ *
16
+ * @see docs/08-config-and-auth.md
17
+ */
18
+ import * as fs from 'node:fs/promises';
19
+ import * as fsSync from 'node:fs';
20
+ import * as path from 'node:path';
21
+ /** Check if a process with the given pid is alive on this host. */
22
+ function isPidAlive(pid) {
23
+ if (!Number.isFinite(pid) || pid <= 0)
24
+ return false;
25
+ if (pid === process.pid)
26
+ return true;
27
+ try {
28
+ process.kill(pid, 0);
29
+ return true;
30
+ }
31
+ catch (err) {
32
+ const code = err.code;
33
+ // EPERM means the process exists but we can't signal it.
34
+ return code === 'EPERM';
35
+ }
36
+ }
37
+ async function sleep(ms) {
38
+ return new Promise((r) => setTimeout(r, ms));
39
+ }
40
+ /**
41
+ * Rename with retry. On Windows, `rename` can briefly fail with EPERM/EBUSY
42
+ * if a concurrent reader has the target open (sharing-violation). The rename
43
+ * itself is still atomic from the filesystem's perspective — we just retry
44
+ * the call until the transient handle-sharing conflict clears.
45
+ */
46
+ async function renameWithRetry(from, to) {
47
+ const maxAttempts = 40;
48
+ let delay = 2;
49
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
50
+ try {
51
+ await fs.rename(from, to);
52
+ return;
53
+ }
54
+ catch (err) {
55
+ const code = err.code;
56
+ if (attempt === maxAttempts || (code !== 'EPERM' && code !== 'EBUSY' && code !== 'EACCES')) {
57
+ throw err;
58
+ }
59
+ await sleep(delay);
60
+ delay = Math.min(delay * 2, 50);
61
+ }
62
+ }
63
+ }
64
+ async function tryAcquireLock(lockPath, staleMs) {
65
+ const payload = {
66
+ pid: process.pid,
67
+ host: 'local',
68
+ at: Date.now(),
69
+ };
70
+ const body = JSON.stringify(payload);
71
+ try {
72
+ // wx = fail if exists; O_EXCL-equivalent.
73
+ const handle = await fs.open(lockPath, 'wx');
74
+ try {
75
+ await handle.writeFile(body, 'utf8');
76
+ }
77
+ finally {
78
+ await handle.close();
79
+ }
80
+ return true;
81
+ }
82
+ catch (err) {
83
+ if (err.code !== 'EEXIST')
84
+ throw err;
85
+ }
86
+ // Lockfile exists — inspect for staleness.
87
+ let raw;
88
+ try {
89
+ raw = await fs.readFile(lockPath, 'utf8');
90
+ }
91
+ catch {
92
+ // Lock disappeared between check and read — retry on next tick.
93
+ return false;
94
+ }
95
+ let parsed = null;
96
+ try {
97
+ parsed = JSON.parse(raw);
98
+ }
99
+ catch {
100
+ parsed = null;
101
+ }
102
+ const age = parsed?.at ? Date.now() - parsed.at : Infinity;
103
+ const holderAlive = typeof parsed?.pid === 'number' && isPidAlive(parsed.pid);
104
+ if (!holderAlive || age > staleMs) {
105
+ // Reclaim: remove stale lock then try to acquire fresh.
106
+ try {
107
+ await fs.unlink(lockPath);
108
+ }
109
+ catch {
110
+ // Someone else reclaimed first; fall through and retry.
111
+ }
112
+ return false;
113
+ }
114
+ return false;
115
+ }
116
+ async function acquireLock(lockPath, timeoutMs, staleMs) {
117
+ const start = Date.now();
118
+ let delay = 5;
119
+ // Ensure parent dir exists so we can create the lock.
120
+ await fs.mkdir(path.dirname(lockPath), { recursive: true });
121
+ while (true) {
122
+ if (await tryAcquireLock(lockPath, staleMs))
123
+ return;
124
+ if (Date.now() - start >= timeoutMs) {
125
+ throw new Error(`atomic-fs: timed out acquiring lock ${lockPath} after ${timeoutMs}ms`);
126
+ }
127
+ await sleep(delay);
128
+ delay = Math.min(delay * 2, 100);
129
+ }
130
+ }
131
+ async function releaseLock(lockPath) {
132
+ try {
133
+ await fs.unlink(lockPath);
134
+ }
135
+ catch {
136
+ // Best-effort.
137
+ }
138
+ }
139
+ /** Write `data` to `filePath` atomically (tmp + fsync + rename). */
140
+ export async function writeFileAtomic(filePath, data, opts = {}) {
141
+ const { lock = true, lockTimeoutMs = 5000, staleMs = 30000, fsync = true, mode, } = opts;
142
+ const lockPath = `${filePath}.lock`;
143
+ await fs.mkdir(path.dirname(filePath), { recursive: true });
144
+ if (lock)
145
+ await acquireLock(lockPath, lockTimeoutMs, staleMs);
146
+ try {
147
+ const tmp = `${filePath}.tmp-${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
148
+ const handle = await fs.open(tmp, 'w', mode);
149
+ try {
150
+ await handle.writeFile(data);
151
+ if (fsync) {
152
+ try {
153
+ await handle.sync();
154
+ }
155
+ catch {
156
+ // Some filesystems (e.g. tmpfs on certain configs) don't support fsync.
157
+ }
158
+ }
159
+ }
160
+ finally {
161
+ await handle.close();
162
+ }
163
+ await renameWithRetry(tmp, filePath);
164
+ if (fsync) {
165
+ // Best-effort fsync of the parent directory so the rename is durable.
166
+ try {
167
+ const dir = fsSync.openSync(path.dirname(filePath), 'r');
168
+ try {
169
+ fsSync.fsyncSync(dir);
170
+ }
171
+ finally {
172
+ fsSync.closeSync(dir);
173
+ }
174
+ }
175
+ catch {
176
+ // Directory fsync isn't supported on Windows; ignore EPERM/EISDIR/EINVAL.
177
+ }
178
+ }
179
+ }
180
+ finally {
181
+ if (lock)
182
+ await releaseLock(lockPath);
183
+ }
184
+ }
185
+ /** Write `data` as pretty-printed JSON atomically. */
186
+ export async function writeJsonAtomic(filePath, data, opts = {}) {
187
+ const body = JSON.stringify(data, null, 2);
188
+ await writeFileAtomic(filePath, body, opts);
189
+ }
190
+ //# sourceMappingURL=atomic-fs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atomic-fs.js","sourceRoot":"","sources":["../src/atomic-fs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * AuthManager interface and implementation for @a5c-ai/agent-mux.
3
+ *
4
+ * Provides read-only authentication state detection and setup guidance
5
+ * for all supported agents. Delegates detection to agent adapters.
6
+ *
7
+ * @see 08-config-and-auth.md
8
+ */
9
+ import type { AgentName } from './types.js';
10
+ import type { AdapterRegistry } from './adapter-registry.js';
11
+ export type { AuthMethod as AuthMethodType, AuthState as FullAuthState, AuthSetupGuidance as FullAuthSetupGuidance, AuthSetupStep, AuthEnvVar, } from './auth-types.js';
12
+ import type { AuthState } from './auth-types.js';
13
+ import type { AuthSetupGuidance } from './auth-types.js';
14
+ /** Authentication state detection and setup guidance. */
15
+ export interface AuthManager {
16
+ /** Check authentication state for a single agent. */
17
+ check(agent: AgentName): Promise<AuthState>;
18
+ /** Check authentication state for all registered agents. */
19
+ checkAll(): Promise<Record<string, AuthState>>;
20
+ /** Get structured setup guidance for authenticating with an agent. */
21
+ getSetupGuidance(agent: AgentName): AuthSetupGuidance;
22
+ }
23
+ /**
24
+ * Implementation of AuthManager.
25
+ *
26
+ * Delegates detection to adapter.detectAuth() and guidance to
27
+ * adapter.getAuthGuidance(). Each call to check() performs a fresh
28
+ * detection (no caching).
29
+ */
30
+ export declare class AuthManagerImpl implements AuthManager {
31
+ private readonly _adapters;
32
+ constructor(adapters: AdapterRegistry);
33
+ private _getAdapter;
34
+ check(agent: AgentName): Promise<AuthState>;
35
+ checkAll(): Promise<Record<string, AuthState>>;
36
+ getSetupGuidance(agent: AgentName): AuthSetupGuidance;
37
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-manager.d.ts","sourceRoot":"","sources":["../src/auth-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAM7D,YAAY,EACV,UAAU,IAAI,cAAc,EAC5B,SAAS,IAAI,aAAa,EAC1B,iBAAiB,IAAI,qBAAqB,EAC1C,aAAa,EACb,UAAU,GACX,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAMzD,yDAAyD;AACzD,MAAM,WAAW,WAAW;IAC1B,qDAAqD;IACrD,KAAK,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAE5C,4DAA4D;IAC5D,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IAE/C,sEAAsE;IACtE,gBAAgB,CAAC,KAAK,EAAE,SAAS,GAAG,iBAAiB,CAAC;CACvD;AAMD;;;;;;GAMG;AACH,qBAAa,eAAgB,YAAW,WAAW;IACjD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;gBAEhC,QAAQ,EAAE,eAAe;IAMrC,OAAO,CAAC,WAAW;IAUb,KAAK,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IAsC3C,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAwBpD,gBAAgB,CAAC,KAAK,EAAE,SAAS,GAAG,iBAAiB;CAItD"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * AuthManager interface and implementation for @a5c-ai/agent-mux.
3
+ *
4
+ * Provides read-only authentication state detection and setup guidance
5
+ * for all supported agents. Delegates detection to agent adapters.
6
+ *
7
+ * @see 08-config-and-auth.md
8
+ */
9
+ import { AgentMuxError } from './errors.js';
10
+ import { telemetry } from '@a5c-ai/agent-mux-observability';
11
+ // ---------------------------------------------------------------------------
12
+ // AuthManagerImpl
13
+ // ---------------------------------------------------------------------------
14
+ /**
15
+ * Implementation of AuthManager.
16
+ *
17
+ * Delegates detection to adapter.detectAuth() and guidance to
18
+ * adapter.getAuthGuidance(). Each call to check() performs a fresh
19
+ * detection (no caching).
20
+ */
21
+ export class AuthManagerImpl {
22
+ _adapters;
23
+ constructor(adapters) {
24
+ this._adapters = adapters;
25
+ }
26
+ // -- Helper ------------------------------------------------------------------
27
+ _getAdapter(agent) {
28
+ const adapter = this._adapters.get(agent);
29
+ if (!adapter) {
30
+ throw new AgentMuxError('AGENT_NOT_FOUND', `Unknown agent: "${agent}"`);
31
+ }
32
+ return adapter;
33
+ }
34
+ // -- check() -----------------------------------------------------------------
35
+ async check(agent) {
36
+ const span = telemetry.getTracer?.()?.startSpan(`auth.check.${agent}`);
37
+ const adapter = this._getAdapter(agent);
38
+ try {
39
+ const rawState = await adapter.detectAuth();
40
+ const state = {
41
+ agent,
42
+ status: rawState.status,
43
+ method: rawState.method,
44
+ identity: rawState.identity,
45
+ expiresAt: rawState.expiresAt
46
+ ? (rawState.expiresAt instanceof Date ? rawState.expiresAt : new Date(rawState.expiresAt))
47
+ : undefined,
48
+ checkedAt: new Date(),
49
+ };
50
+ if (span) {
51
+ span.setAttributes({
52
+ status: state.status,
53
+ method: state.method || 'unknown',
54
+ });
55
+ telemetry.endSpanSuccess(span);
56
+ }
57
+ telemetry.recordAuthEvent(agent, state.method || 'unknown', state.status === 'authenticated');
58
+ return state;
59
+ }
60
+ catch (err) {
61
+ if (span) {
62
+ telemetry.endSpanError(span, err);
63
+ }
64
+ throw err;
65
+ }
66
+ }
67
+ // -- checkAll() --------------------------------------------------------------
68
+ async checkAll() {
69
+ const adapters = this._adapters.list();
70
+ const results = {};
71
+ const checks = adapters.map(async (info) => {
72
+ try {
73
+ const state = await this.check(info.agent);
74
+ results[info.agent] = state;
75
+ }
76
+ catch {
77
+ results[info.agent] = {
78
+ agent: info.agent,
79
+ status: 'unknown',
80
+ checkedAt: new Date(),
81
+ details: 'Auth detection failed',
82
+ };
83
+ }
84
+ });
85
+ await Promise.all(checks);
86
+ return results;
87
+ }
88
+ // -- getSetupGuidance() ------------------------------------------------------
89
+ getSetupGuidance(agent) {
90
+ const adapter = this._getAdapter(agent);
91
+ return adapter.getAuthGuidance();
92
+ }
93
+ }
94
+ //# sourceMappingURL=auth-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-manager.js","sourceRoot":"","sources":["../src/auth-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAgC5D,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E;;;;;;GAMG;AACH,MAAM,OAAO,eAAe;IACT,SAAS,CAAkB;IAE5C,YAAY,QAAyB;QACnC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,CAAC;IAED,+EAA+E;IAEvE,WAAW,CAAC,KAAgB;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,aAAa,CAAC,iBAAiB,EAAE,mBAAmB,KAAK,GAAG,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,+EAA+E;IAE/E,KAAK,CAAC,KAAK,CAAC,KAAgB;QAC1B,MAAM,IAAI,GAAI,SAAiB,CAAC,SAAS,EAAE,EAAE,EAAE,SAAS,CAAC,cAAc,KAAK,EAAE,CAAC,CAAC;QAChF,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;YAE5C,MAAM,KAAK,GAAc;gBACvB,KAAK;gBACL,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,MAAM,EAAE,QAAQ,CAAC,MAAgC;gBACjD,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,SAAS,EAAE,QAAQ,CAAC,SAAS;oBAC3B,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,YAAY,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAmB,CAAC,CAAC;oBACpG,CAAC,CAAC,SAAS;gBACb,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB,CAAC;YAEF,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,CAAC,aAAa,CAAC;oBACjB,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,SAAS;iBAClC,CAAC,CAAC;gBACH,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC;YAED,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,IAAI,SAAS,EAAE,KAAK,CAAC,MAAM,KAAK,eAAe,CAAC,CAAC;YAE9F,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,IAAI,IAAI,EAAE,CAAC;gBACT,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACpC,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED,+EAA+E;IAE/E,KAAK,CAAC,QAAQ;QACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACvC,MAAM,OAAO,GAA8B,EAAE,CAAC;QAE9C,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACzC,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC3C,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;YAC9B,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG;oBACpB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,MAAM,EAAE,SAAS;oBACjB,SAAS,EAAE,IAAI,IAAI,EAAE;oBACrB,OAAO,EAAE,uBAAuB;iBACjC,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,+EAA+E;IAE/E,gBAAgB,CAAC,KAAgB;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACxC,OAAO,OAAO,CAAC,eAAe,EAAE,CAAC;IACnC,CAAC;CACF"}