@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,202 @@
1
+ /**
2
+ * ConfigManager interface and implementation for @a5c-ai/agent-mux.
3
+ *
4
+ * Provides unified configuration access for all supported agents.
5
+ * Reads and writes each agent's native config through the adapter layer.
6
+ *
7
+ * @see 08-config-and-auth.md
8
+ */
9
+ import { AgentMuxError } from './errors.js';
10
+ import { deepMerge } from './merge.js';
11
+ // ---------------------------------------------------------------------------
12
+ // ConfigManagerImpl
13
+ // ---------------------------------------------------------------------------
14
+ /**
15
+ * Implementation of ConfigManager.
16
+ *
17
+ * Delegates file I/O to agent adapters. Provides caching,
18
+ * deep merge, field-level access, and schema introspection.
19
+ */
20
+ export class ConfigManagerImpl {
21
+ _adapters;
22
+ _profileManager;
23
+ _cache = new Map();
24
+ /**
25
+ * Per-agent write serialisation. All `.set()` / `.setField()` / MCP mutation
26
+ * calls for a given agent queue onto the same promise so concurrent callers
27
+ * cannot interleave read-modify-write sequences. File-level atomicity is
28
+ * additionally enforced by the adapter writing through `writeJsonAtomic`
29
+ * from `atomic-fs.ts`, which uses a tmp+fsync+rename + advisory lockfile.
30
+ */
31
+ _writeQueue = new Map();
32
+ constructor(adapters, profileManager) {
33
+ this._adapters = adapters;
34
+ this._profileManager = profileManager;
35
+ }
36
+ // -- Helper ------------------------------------------------------------------
37
+ _getAdapter(agent) {
38
+ const adapter = this._adapters.get(agent);
39
+ if (!adapter) {
40
+ throw new AgentMuxError('AGENT_NOT_FOUND', `Unknown agent: "${agent}"`);
41
+ }
42
+ return adapter;
43
+ }
44
+ // -- get() -------------------------------------------------------------------
45
+ get(agent) {
46
+ const cached = this._cache.get(agent);
47
+ if (cached)
48
+ return cached;
49
+ this._getAdapter(agent); // Validates the agent exists
50
+ // Return a default config when cache is cold and no file has been read
51
+ const defaultConfig = {
52
+ agent,
53
+ source: 'merged',
54
+ filePaths: [],
55
+ };
56
+ this._cache.set(agent, defaultConfig);
57
+ return defaultConfig;
58
+ }
59
+ // -- getField() --------------------------------------------------------------
60
+ getField(agent, field) {
61
+ const config = this.get(agent);
62
+ return getNestedField(config, field);
63
+ }
64
+ // -- set() -------------------------------------------------------------------
65
+ async set(agent, fields) {
66
+ return this._enqueueWrite(agent, async () => {
67
+ const adapter = this._getAdapter(agent);
68
+ const current = this.get(agent);
69
+ const merged = deepMerge(current, fields);
70
+ await adapter.writeConfig(fields);
71
+ this._cache.set(agent, merged);
72
+ });
73
+ }
74
+ /** Serialise writes per agent so concurrent `.set()` cannot interleave. */
75
+ async _enqueueWrite(agent, fn) {
76
+ const prev = this._writeQueue.get(agent) ?? Promise.resolve();
77
+ const next = prev.catch(() => undefined).then(fn);
78
+ this._writeQueue.set(agent, next);
79
+ try {
80
+ return await next;
81
+ }
82
+ finally {
83
+ if (this._writeQueue.get(agent) === next) {
84
+ this._writeQueue.delete(agent);
85
+ }
86
+ }
87
+ }
88
+ // -- setField() --------------------------------------------------------------
89
+ async setField(agent, field, value) {
90
+ const partial = buildNestedObject(field, value);
91
+ await this.set(agent, partial);
92
+ }
93
+ // -- schema() ----------------------------------------------------------------
94
+ schema(agent) {
95
+ const adapter = this._getAdapter(agent);
96
+ return adapter.configSchema;
97
+ }
98
+ // -- validate() --------------------------------------------------------------
99
+ validate(_agent, _config) {
100
+ this._getAdapter(_agent);
101
+ // Basic validation: always returns valid for now.
102
+ // Full schema validation will be implemented when adapters provide
103
+ // detailed ConfigField descriptors.
104
+ return {
105
+ valid: true,
106
+ errors: [],
107
+ warnings: [],
108
+ };
109
+ }
110
+ // -- getMcpServers() ---------------------------------------------------------
111
+ getMcpServers(agent) {
112
+ const config = this.get(agent);
113
+ return config.mcpServers ?? [];
114
+ }
115
+ getModelSelection(agent) {
116
+ const adapter = this._getAdapter(agent);
117
+ const config = this.get(agent);
118
+ const configuredModel = typeof config.model === 'string' ? config.model : null;
119
+ const configuredProvider = typeof config.provider === 'string' ? config.provider : null;
120
+ const defaultModel = adapter.defaultModelId ?? null;
121
+ return {
122
+ configuredModel,
123
+ configuredProvider,
124
+ defaultModel,
125
+ effectiveModel: configuredModel ?? defaultModel,
126
+ };
127
+ }
128
+ async setModelSelection(agent, selection) {
129
+ const patch = {};
130
+ if (Object.prototype.hasOwnProperty.call(selection, 'model')) {
131
+ patch.model = selection.model ?? null;
132
+ }
133
+ if (Object.prototype.hasOwnProperty.call(selection, 'provider')) {
134
+ patch.provider = selection.provider ?? null;
135
+ }
136
+ await this.set(agent, patch);
137
+ }
138
+ // -- addMcpServer() ----------------------------------------------------------
139
+ async addMcpServer(agent, server) {
140
+ const existing = this.getMcpServers(agent);
141
+ const duplicate = existing.find((s) => s.name === server.name);
142
+ if (duplicate) {
143
+ throw new AgentMuxError('CONFIG_ERROR', `MCP server "${server.name}" already exists in config for agent "${agent}"`);
144
+ }
145
+ const updated = [...existing, server];
146
+ await this.set(agent, { mcpServers: updated });
147
+ }
148
+ // -- removeMcpServer() -------------------------------------------------------
149
+ async removeMcpServer(agent, serverName) {
150
+ const existing = this.getMcpServers(agent);
151
+ const index = existing.findIndex((s) => s.name === serverName);
152
+ if (index === -1) {
153
+ throw new AgentMuxError('CONFIG_ERROR', `MCP server "${serverName}" not found in config for agent "${agent}"`);
154
+ }
155
+ const updated = existing.filter((s) => s.name !== serverName);
156
+ await this.set(agent, { mcpServers: updated });
157
+ }
158
+ // -- reload() ----------------------------------------------------------------
159
+ async reload(agent) {
160
+ if (agent) {
161
+ this._getAdapter(agent);
162
+ this._cache.delete(agent);
163
+ }
164
+ else {
165
+ this._cache.clear();
166
+ }
167
+ }
168
+ // -- profiles() --------------------------------------------------------------
169
+ profiles() {
170
+ return this._profileManager;
171
+ }
172
+ }
173
+ // ---------------------------------------------------------------------------
174
+ // Helper: dot-notation field access
175
+ // ---------------------------------------------------------------------------
176
+ function getNestedField(obj, path) {
177
+ const parts = path.split('.');
178
+ let current = obj;
179
+ for (const part of parts) {
180
+ if (current === null || current === undefined || typeof current !== 'object') {
181
+ return undefined;
182
+ }
183
+ current = current[part];
184
+ }
185
+ return current;
186
+ }
187
+ function buildNestedObject(path, value) {
188
+ const parts = path.split('.');
189
+ if (parts.length === 1) {
190
+ return { [parts[0]]: value };
191
+ }
192
+ const result = {};
193
+ let current = result;
194
+ for (let i = 0; i < parts.length - 1; i++) {
195
+ const next = {};
196
+ current[parts[i]] = next;
197
+ current = next;
198
+ }
199
+ current[parts[parts.length - 1]] = value;
200
+ return result;
201
+ }
202
+ //# sourceMappingURL=config-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../src/config-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Configuration-related types for @a5c-ai/agent-mux.
3
+ *
4
+ * Defines agent config, config schema, config fields,
5
+ * and validation result types.
6
+ *
7
+ * @see 08-config-and-auth.md
8
+ */
9
+ import type { AgentName, McpServerConfig } from './types.js';
10
+ /** Unified agent configuration structure. */
11
+ export interface AgentConfig {
12
+ /** The agent this configuration belongs to. */
13
+ readonly agent?: AgentName;
14
+ /** Configuration source: global, project, or merged. */
15
+ readonly source?: 'global' | 'project' | 'merged';
16
+ /** File paths the configuration was loaded from. */
17
+ readonly filePaths?: string[];
18
+ /** Default model ID. */
19
+ model?: string | null;
20
+ /** Provider name. */
21
+ provider?: string | null;
22
+ /** Sampling temperature. */
23
+ temperature?: number;
24
+ /** Maximum output tokens. */
25
+ maxTokens?: number;
26
+ /** Allowed shell commands. */
27
+ allowedCommands?: string[];
28
+ /** Denied shell commands. */
29
+ deniedCommands?: string[];
30
+ /** Approval mode for tool calls. */
31
+ approvalMode?: 'yolo' | 'prompt' | 'deny';
32
+ /** MCP server configurations. */
33
+ mcpServers?: McpServerConfig[];
34
+ /** Skills to load. */
35
+ skills?: string[];
36
+ /** Path to the agents doc file. */
37
+ agentsDoc?: string;
38
+ /** Environment variables. */
39
+ env?: Record<string, string>;
40
+ /** Native agent-specific configuration. */
41
+ native?: Record<string, unknown>;
42
+ /** Index signature for dynamic access. */
43
+ [key: string]: unknown;
44
+ }
45
+ /** Effective model selection state for an agent. */
46
+ export interface ModelSelection {
47
+ /** Explicitly configured model, if any. */
48
+ readonly configuredModel: string | null;
49
+ /** Explicitly configured provider, if any. */
50
+ readonly configuredProvider: string | null;
51
+ /** Adapter-declared default model. */
52
+ readonly defaultModel: string | null;
53
+ /** Effective model after config fallback to adapter default. */
54
+ readonly effectiveModel: string | null;
55
+ }
56
+ /** Describes a single configuration field within an agent's config schema. */
57
+ export interface ConfigField {
58
+ /** Dot-notation field path. */
59
+ readonly path: string;
60
+ /** Human-readable label. */
61
+ readonly label: string;
62
+ /** Brief description. */
63
+ readonly description: string;
64
+ /** Value type. */
65
+ readonly type: 'string' | 'number' | 'boolean' | 'enum' | 'string[]' | 'object' | 'McpServerConfig[]';
66
+ /** Whether the field is required. */
67
+ readonly required: boolean;
68
+ /** Default value. */
69
+ readonly defaultValue?: unknown;
70
+ /** Allowed values for enum type. */
71
+ readonly enumValues?: string[];
72
+ /** Minimum for numeric fields. */
73
+ readonly min?: number;
74
+ /** Maximum for numeric fields. */
75
+ readonly max?: number;
76
+ /** Regex pattern for string values. */
77
+ readonly pattern?: string;
78
+ /** Whether this maps to a normalized AgentConfig field. */
79
+ readonly normalized: boolean;
80
+ /** Native key path in the agent's config file. */
81
+ readonly nativeKeyPath: string;
82
+ /** Which config scope(s) this field can appear in. */
83
+ readonly scope: 'global' | 'project' | 'both';
84
+ }
85
+ /** Agent configuration schema descriptor. */
86
+ export interface AgentConfigSchema {
87
+ /** The agent this schema belongs to. */
88
+ readonly agent?: AgentName;
89
+ /** Schema version (for backward compat). */
90
+ readonly version?: number;
91
+ /** Schema fields. */
92
+ readonly fields: ConfigField[] | unknown[];
93
+ /** Global config file paths. */
94
+ readonly configFilePaths?: string[];
95
+ /** Project config file paths. */
96
+ readonly projectConfigFilePaths?: string[];
97
+ /** Config file format. */
98
+ readonly configFormat?: 'json' | 'yaml';
99
+ /** Whether this agent supports project-level config. */
100
+ readonly supportsProjectConfig?: boolean;
101
+ }
102
+ /** Validation result from ConfigManager.validate(). */
103
+ export interface ValidationResult {
104
+ /** Whether the config is valid. */
105
+ readonly valid: boolean;
106
+ /** Field-level validation errors. */
107
+ readonly errors: ConfigValidationError[];
108
+ /** Field-level warnings. */
109
+ readonly warnings: ConfigValidationWarning[];
110
+ }
111
+ /** A single validation error for a config field. */
112
+ export interface ConfigValidationError {
113
+ /** Dot-notation path to the field. */
114
+ readonly field: string;
115
+ /** Error code. */
116
+ readonly code: 'required' | 'type_mismatch' | 'out_of_range' | 'invalid_enum' | 'pattern_mismatch' | 'unknown_field' | 'invalid_format';
117
+ /** Human-readable error message. */
118
+ readonly message: string;
119
+ /** The invalid value. */
120
+ readonly value?: unknown;
121
+ /** Expected type or constraint. */
122
+ readonly expected?: string;
123
+ }
124
+ /** A non-fatal validation warning. */
125
+ export interface ConfigValidationWarning {
126
+ /** Dot-notation path to the field. */
127
+ readonly field: string;
128
+ /** Warning code. */
129
+ readonly code: 'deprecated' | 'non_standard';
130
+ /** Human-readable warning message. */
131
+ readonly message: string;
132
+ /** Suggested replacement. */
133
+ readonly suggestion?: string;
134
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-types.d.ts","sourceRoot":"","sources":["../src/config-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Configuration-related types for @a5c-ai/agent-mux.
3
+ *
4
+ * Defines agent config, config schema, config fields,
5
+ * and validation result types.
6
+ *
7
+ * @see 08-config-and-auth.md
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=config-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-types.js","sourceRoot":"","sources":["../src/config-types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Public helpers for aggregating cost/token usage from an event stream or
3
+ * a stored session transcript. These mirror the internal accumulators in
4
+ * run-handle-cost.ts but accept any iterable of AgentEvent — so callers can
5
+ * use them on live streams (`handle.events()`) and on session files read
6
+ * back later (`sessions.read(id).events`) with the same shape.
7
+ */
8
+ import type { AgentEvent } from './events.js';
9
+ export interface EventCostSummary {
10
+ totalUsd: number;
11
+ inputTokens: number;
12
+ outputTokens: number;
13
+ thinkingTokens: number;
14
+ cachedTokens: number;
15
+ totalTokens: number;
16
+ costEventCount: number;
17
+ }
18
+ /** Fold every `cost` event in a collection into a single summary. */
19
+ export declare function sumCost(events: Iterable<AgentEvent>): EventCostSummary;
20
+ /** Async variant — fold cost events as they arrive on a live stream. */
21
+ export declare function sumCostAsync(events: AsyncIterable<AgentEvent>): Promise<EventCostSummary>;
22
+ /**
23
+ * Filter an event iterable to a single event type, with correct narrowing.
24
+ * `for (const ev of filterEvents(events, 'text_delta')) ev.delta ...`
25
+ */
26
+ export declare function filterEvents<T extends AgentEvent['type']>(events: Iterable<AgentEvent>, type: T): Generator<Extract<AgentEvent, {
27
+ type: T;
28
+ }>>;
29
+ export declare function filterEventsAsync<T extends AgentEvent['type']>(events: AsyncIterable<AgentEvent>, type: T): AsyncGenerator<Extract<AgentEvent, {
30
+ type: T;
31
+ }>>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-utils.d.ts","sourceRoot":"","sources":["../src/cost-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB;AAcD,qEAAqE;AACrE,wBAAgB,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,gBAAgB,CAetE;AAED,wEAAwE;AACxE,wBAAsB,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAe/F;AAED;;;GAGG;AACH,wBAAiB,YAAY,CAAC,CAAC,SAAS,UAAU,CAAC,MAAM,CAAC,EACxD,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC5B,IAAI,EAAE,CAAC,GACN,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC,CAAC,CAI7C;AAED,wBAAuB,iBAAiB,CAAC,CAAC,SAAS,UAAU,CAAC,MAAM,CAAC,EACnE,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,EACjC,IAAI,EAAE,CAAC,GACN,cAAc,CAAC,OAAO,CAAC,UAAU,EAAE;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC,CAAC,CAIlD"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Public helpers for aggregating cost/token usage from an event stream or
3
+ * a stored session transcript. These mirror the internal accumulators in
4
+ * run-handle-cost.ts but accept any iterable of AgentEvent — so callers can
5
+ * use them on live streams (`handle.events()`) and on session files read
6
+ * back later (`sessions.read(id).events`) with the same shape.
7
+ */
8
+ function emptySummary() {
9
+ return {
10
+ totalUsd: 0,
11
+ inputTokens: 0,
12
+ outputTokens: 0,
13
+ thinkingTokens: 0,
14
+ cachedTokens: 0,
15
+ totalTokens: 0,
16
+ costEventCount: 0,
17
+ };
18
+ }
19
+ /** Fold every `cost` event in a collection into a single summary. */
20
+ export function sumCost(events) {
21
+ const acc = emptySummary();
22
+ for (const ev of events) {
23
+ if (ev.type === 'cost') {
24
+ const c = ev.cost;
25
+ acc.totalUsd += c.totalUsd ?? 0;
26
+ acc.inputTokens += c.inputTokens ?? 0;
27
+ acc.outputTokens += c.outputTokens ?? 0;
28
+ acc.thinkingTokens += c.thinkingTokens ?? 0;
29
+ acc.cachedTokens += c.cachedTokens ?? 0;
30
+ acc.costEventCount += 1;
31
+ }
32
+ }
33
+ acc.totalTokens = acc.inputTokens + acc.outputTokens + acc.thinkingTokens;
34
+ return acc;
35
+ }
36
+ /** Async variant — fold cost events as they arrive on a live stream. */
37
+ export async function sumCostAsync(events) {
38
+ const acc = emptySummary();
39
+ for await (const ev of events) {
40
+ if (ev.type === 'cost') {
41
+ const c = ev.cost;
42
+ acc.totalUsd += c.totalUsd ?? 0;
43
+ acc.inputTokens += c.inputTokens ?? 0;
44
+ acc.outputTokens += c.outputTokens ?? 0;
45
+ acc.thinkingTokens += c.thinkingTokens ?? 0;
46
+ acc.cachedTokens += c.cachedTokens ?? 0;
47
+ acc.costEventCount += 1;
48
+ }
49
+ }
50
+ acc.totalTokens = acc.inputTokens + acc.outputTokens + acc.thinkingTokens;
51
+ return acc;
52
+ }
53
+ /**
54
+ * Filter an event iterable to a single event type, with correct narrowing.
55
+ * `for (const ev of filterEvents(events, 'text_delta')) ev.delta ...`
56
+ */
57
+ export function* filterEvents(events, type) {
58
+ for (const ev of events) {
59
+ if (ev.type === type)
60
+ yield ev;
61
+ }
62
+ }
63
+ export async function* filterEventsAsync(events, type) {
64
+ for await (const ev of events) {
65
+ if (ev.type === type)
66
+ yield ev;
67
+ }
68
+ }
69
+ //# sourceMappingURL=cost-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-utils.js","sourceRoot":"","sources":["../src/cost-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH,SAAS,YAAY;IACnB,OAAO;QACL,QAAQ,EAAE,CAAC;QACX,WAAW,EAAE,CAAC;QACd,YAAY,EAAE,CAAC;QACf,cAAc,EAAE,CAAC;QACjB,YAAY,EAAE,CAAC;QACf,WAAW,EAAE,CAAC;QACd,cAAc,EAAE,CAAC;KAClB,CAAC;AACJ,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,OAAO,CAAC,MAA4B;IAClD,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;IAC3B,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;QACxB,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;YAClB,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;YAChC,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC;YACtC,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC;YACxC,GAAG,CAAC,cAAc,IAAI,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC;YAC5C,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC;YACxC,GAAG,CAAC,cAAc,IAAI,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC,cAAc,CAAC;IAC1E,OAAO,GAAG,CAAC;AACb,CAAC;AAED,wEAAwE;AACxE,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAiC;IAClE,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;IAC3B,IAAI,KAAK,EAAE,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;QAC9B,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;YAClB,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;YAChC,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC;YACtC,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC;YACxC,GAAG,CAAC,cAAc,IAAI,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC;YAC5C,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC;YACxC,GAAG,CAAC,cAAc,IAAI,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC,cAAc,CAAC;IAC1E,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,SAAS,CAAC,CAAC,YAAY,CAC3B,MAA4B,EAC5B,IAAO;IAEP,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;QACxB,IAAI,EAAE,CAAC,IAAI,KAAK,IAAI;YAAE,MAAM,EAAsC,CAAC;IACrE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,iBAAiB,CACtC,MAAiC,EACjC,IAAO;IAEP,IAAI,KAAK,EAAE,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;QAC9B,IAAI,EAAE,CAAC,IAAI,KAAK,IAAI;YAAE,MAAM,EAAsC,CAAC;IACrE,CAAC;AACH,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Error hierarchy for @a5c-ai/agent-mux.
3
+ *
4
+ * All errors extend the base AgentMuxError.
5
+ */
6
+ import type { AgentName, ErrorCode, ValidationFieldError } from './types.js';
7
+ /**
8
+ * Base error class for all agent-mux errors.
9
+ * Provides a machine-readable `code` and a `recoverable` flag.
10
+ */
11
+ export declare class AgentMuxError extends Error {
12
+ /** Machine-readable error code. */
13
+ readonly code: ErrorCode;
14
+ /** Whether the operation can be retried. */
15
+ readonly recoverable: boolean;
16
+ constructor(code: ErrorCode, message: string, recoverable?: boolean);
17
+ }
18
+ /**
19
+ * Thrown when a RunOptions field or API call requires a capability that
20
+ * the target agent or model does not support.
21
+ */
22
+ export declare class CapabilityError extends AgentMuxError {
23
+ /** The agent that lacks the capability. */
24
+ readonly agent: AgentName;
25
+ /** The capability that was requested. */
26
+ readonly capability: string;
27
+ /** The model that was targeted, if applicable. */
28
+ readonly model?: string;
29
+ constructor(agent: AgentName, capability: string, model?: string);
30
+ }
31
+ /**
32
+ * Thrown when input values fail schema or range validation.
33
+ */
34
+ export declare class ValidationError extends AgentMuxError {
35
+ /** The field(s) that failed validation. */
36
+ readonly fields: ValidationFieldError[];
37
+ constructor(fields: ValidationFieldError[]);
38
+ }
39
+ /**
40
+ * Thrown when an agent's authentication state prevents the requested operation.
41
+ */
42
+ export declare class AuthError extends AgentMuxError {
43
+ /** The agent with the auth problem. */
44
+ readonly agent: AgentName;
45
+ /** Current auth status. */
46
+ readonly status: 'unauthenticated' | 'expired' | 'unknown';
47
+ /** Human-readable guidance on how to authenticate. */
48
+ readonly guidance: string;
49
+ constructor(agent: AgentName, status: AuthError['status'], guidance: string);
50
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAM7E;;;GAGG;AACH,qBAAa,aAAc,SAAQ,KAAK;IACtC,mCAAmC;IACnC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAEzB,4CAA4C;IAC5C,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;gBAElB,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAE,OAAe;CAM3E;AAMD;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,aAAa;IAChD,2CAA2C;IAC3C,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAE1B,yCAAyC;IACzC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,kDAAkD;IAClD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;gBAEZ,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;CAYjE;AAMD;;GAEG;AACH,qBAAa,eAAgB,SAAQ,aAAa;IAChD,2CAA2C;IAC3C,QAAQ,CAAC,MAAM,EAAE,oBAAoB,EAAE,CAAC;gBAE5B,MAAM,EAAE,oBAAoB,EAAE;CAM3C;AAMD;;GAEG;AACH,qBAAa,SAAU,SAAQ,aAAa;IAC1C,uCAAuC;IACvC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAE1B,2BAA2B;IAC3B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,GAAG,SAAS,GAAG,SAAS,CAAC;IAE3D,sDAAsD;IACtD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAGxB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,EAC3B,QAAQ,EAAE,MAAM;CAYnB"}
package/dist/errors.js ADDED
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Error hierarchy for @a5c-ai/agent-mux.
3
+ *
4
+ * All errors extend the base AgentMuxError.
5
+ */
6
+ // ---------------------------------------------------------------------------
7
+ // AgentMuxError — Base (§3.1)
8
+ // ---------------------------------------------------------------------------
9
+ /**
10
+ * Base error class for all agent-mux errors.
11
+ * Provides a machine-readable `code` and a `recoverable` flag.
12
+ */
13
+ export class AgentMuxError extends Error {
14
+ /** Machine-readable error code. */
15
+ code;
16
+ /** Whether the operation can be retried. */
17
+ recoverable;
18
+ constructor(code, message, recoverable = false) {
19
+ super(message);
20
+ this.name = 'AgentMuxError';
21
+ this.code = code;
22
+ this.recoverable = recoverable;
23
+ }
24
+ }
25
+ // ---------------------------------------------------------------------------
26
+ // CapabilityError (§3.2)
27
+ // ---------------------------------------------------------------------------
28
+ /**
29
+ * Thrown when a RunOptions field or API call requires a capability that
30
+ * the target agent or model does not support.
31
+ */
32
+ export class CapabilityError extends AgentMuxError {
33
+ /** The agent that lacks the capability. */
34
+ agent;
35
+ /** The capability that was requested. */
36
+ capability;
37
+ /** The model that was targeted, if applicable. */
38
+ model;
39
+ constructor(agent, capability, model) {
40
+ const modelSuffix = model ? ` (model: ${model})` : '';
41
+ super('CAPABILITY_ERROR', `Agent "${agent}" does not support capability "${capability}"${modelSuffix}`, false);
42
+ this.name = 'CapabilityError';
43
+ this.agent = agent;
44
+ this.capability = capability;
45
+ this.model = model;
46
+ }
47
+ }
48
+ // ---------------------------------------------------------------------------
49
+ // ValidationError (§3.3)
50
+ // ---------------------------------------------------------------------------
51
+ /**
52
+ * Thrown when input values fail schema or range validation.
53
+ */
54
+ export class ValidationError extends AgentMuxError {
55
+ /** The field(s) that failed validation. */
56
+ fields;
57
+ constructor(fields) {
58
+ const summary = fields.map((f) => `${f.field}: ${f.message}`).join('; ');
59
+ super('VALIDATION_ERROR', `Validation failed: ${summary}`, false);
60
+ this.name = 'ValidationError';
61
+ this.fields = fields;
62
+ }
63
+ }
64
+ // ---------------------------------------------------------------------------
65
+ // AuthError (§3.4)
66
+ // ---------------------------------------------------------------------------
67
+ /**
68
+ * Thrown when an agent's authentication state prevents the requested operation.
69
+ */
70
+ export class AuthError extends AgentMuxError {
71
+ /** The agent with the auth problem. */
72
+ agent;
73
+ /** Current auth status. */
74
+ status;
75
+ /** Human-readable guidance on how to authenticate. */
76
+ guidance;
77
+ constructor(agent, status, guidance) {
78
+ super('AUTH_ERROR', `Agent "${agent}" authentication failed (${status}): ${guidance}`, false);
79
+ this.name = 'AuthError';
80
+ this.agent = agent;
81
+ this.status = status;
82
+ this.guidance = guidance;
83
+ }
84
+ }
85
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,8EAA8E;AAC9E,8BAA8B;AAC9B,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,OAAO,aAAc,SAAQ,KAAK;IACtC,mCAAmC;IAC1B,IAAI,CAAY;IAEzB,4CAA4C;IACnC,WAAW,CAAU;IAE9B,YAAY,IAAe,EAAE,OAAe,EAAE,cAAuB,KAAK;QACxE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;CACF;AAED,8EAA8E;AAC9E,yBAAyB;AACzB,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,OAAO,eAAgB,SAAQ,aAAa;IAChD,2CAA2C;IAClC,KAAK,CAAY;IAE1B,yCAAyC;IAChC,UAAU,CAAS;IAE5B,kDAAkD;IACzC,KAAK,CAAU;IAExB,YAAY,KAAgB,EAAE,UAAkB,EAAE,KAAc;QAC9D,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,YAAY,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,KAAK,CACH,kBAAkB,EAClB,UAAU,KAAK,kCAAkC,UAAU,IAAI,WAAW,EAAE,EAC5E,KAAK,CACN,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAED,8EAA8E;AAC9E,yBAAyB;AACzB,8EAA8E;AAE9E;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,aAAa;IAChD,2CAA2C;IAClC,MAAM,CAAyB;IAExC,YAAY,MAA8B;QACxC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzE,KAAK,CAAC,kBAAkB,EAAE,sBAAsB,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;QAClE,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E;;GAEG;AACH,MAAM,OAAO,SAAU,SAAQ,aAAa;IAC1C,uCAAuC;IAC9B,KAAK,CAAY;IAE1B,2BAA2B;IAClB,MAAM,CAA4C;IAE3D,sDAAsD;IAC7C,QAAQ,CAAS;IAE1B,YACE,KAAgB,EAChB,MAA2B,EAC3B,QAAgB;QAEhB,KAAK,CACH,YAAY,EACZ,UAAU,KAAK,4BAA4B,MAAM,MAAM,QAAQ,EAAE,EACjE,KAAK,CACN,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF"}