zora-agent 0.9.0

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 (303) hide show
  1. package/CHANGELOG.md +145 -0
  2. package/LICENSE +21 -0
  3. package/README.md +159 -0
  4. package/dist/cli/audit-commands.d.ts +8 -0
  5. package/dist/cli/audit-commands.d.ts.map +1 -0
  6. package/dist/cli/audit-commands.js +67 -0
  7. package/dist/cli/audit-commands.js.map +1 -0
  8. package/dist/cli/daemon.d.ts +9 -0
  9. package/dist/cli/daemon.d.ts.map +1 -0
  10. package/dist/cli/daemon.js +107 -0
  11. package/dist/cli/daemon.js.map +1 -0
  12. package/dist/cli/doctor.d.ts +21 -0
  13. package/dist/cli/doctor.d.ts.map +1 -0
  14. package/dist/cli/doctor.js +31 -0
  15. package/dist/cli/doctor.js.map +1 -0
  16. package/dist/cli/edit-commands.d.ts +8 -0
  17. package/dist/cli/edit-commands.d.ts.map +1 -0
  18. package/dist/cli/edit-commands.js +46 -0
  19. package/dist/cli/edit-commands.js.map +1 -0
  20. package/dist/cli/index.d.ts +11 -0
  21. package/dist/cli/index.d.ts.map +1 -0
  22. package/dist/cli/index.js +319 -0
  23. package/dist/cli/index.js.map +1 -0
  24. package/dist/cli/init-command.d.ts +30 -0
  25. package/dist/cli/init-command.d.ts.map +1 -0
  26. package/dist/cli/init-command.js +425 -0
  27. package/dist/cli/init-command.js.map +1 -0
  28. package/dist/cli/memory-commands.d.ts +11 -0
  29. package/dist/cli/memory-commands.d.ts.map +1 -0
  30. package/dist/cli/memory-commands.js +57 -0
  31. package/dist/cli/memory-commands.js.map +1 -0
  32. package/dist/cli/presets.d.ts +12 -0
  33. package/dist/cli/presets.d.ts.map +1 -0
  34. package/dist/cli/presets.js +169 -0
  35. package/dist/cli/presets.js.map +1 -0
  36. package/dist/cli/skill-commands.d.ts +10 -0
  37. package/dist/cli/skill-commands.d.ts.map +1 -0
  38. package/dist/cli/skill-commands.js +73 -0
  39. package/dist/cli/skill-commands.js.map +1 -0
  40. package/dist/cli/steer-commands.d.ts +10 -0
  41. package/dist/cli/steer-commands.d.ts.map +1 -0
  42. package/dist/cli/steer-commands.js +92 -0
  43. package/dist/cli/steer-commands.js.map +1 -0
  44. package/dist/cli/team-commands.d.ts +8 -0
  45. package/dist/cli/team-commands.d.ts.map +1 -0
  46. package/dist/cli/team-commands.js +93 -0
  47. package/dist/cli/team-commands.js.map +1 -0
  48. package/dist/config/defaults.d.ts +26 -0
  49. package/dist/config/defaults.d.ts.map +1 -0
  50. package/dist/config/defaults.js +173 -0
  51. package/dist/config/defaults.js.map +1 -0
  52. package/dist/config/index.d.ts +3 -0
  53. package/dist/config/index.d.ts.map +1 -0
  54. package/dist/config/index.js +3 -0
  55. package/dist/config/index.js.map +1 -0
  56. package/dist/config/loader.d.ts +30 -0
  57. package/dist/config/loader.d.ts.map +1 -0
  58. package/dist/config/loader.js +130 -0
  59. package/dist/config/loader.js.map +1 -0
  60. package/dist/config/policy-loader.d.ts +18 -0
  61. package/dist/config/policy-loader.d.ts.map +1 -0
  62. package/dist/config/policy-loader.js +72 -0
  63. package/dist/config/policy-loader.js.map +1 -0
  64. package/dist/dashboard/auth-middleware.d.ts +15 -0
  65. package/dist/dashboard/auth-middleware.d.ts.map +1 -0
  66. package/dist/dashboard/auth-middleware.js +44 -0
  67. package/dist/dashboard/auth-middleware.js.map +1 -0
  68. package/dist/dashboard/frontend/vite.config.d.ts +3 -0
  69. package/dist/dashboard/frontend/vite.config.d.ts.map +1 -0
  70. package/dist/dashboard/frontend/vite.config.js +11 -0
  71. package/dist/dashboard/frontend/vite.config.js.map +1 -0
  72. package/dist/dashboard/server.d.ts +55 -0
  73. package/dist/dashboard/server.d.ts.map +1 -0
  74. package/dist/dashboard/server.js +254 -0
  75. package/dist/dashboard/server.js.map +1 -0
  76. package/dist/index.d.ts +20 -0
  77. package/dist/index.d.ts.map +1 -0
  78. package/dist/index.js +19 -0
  79. package/dist/index.js.map +1 -0
  80. package/dist/memory/category-organizer.d.ts +33 -0
  81. package/dist/memory/category-organizer.d.ts.map +1 -0
  82. package/dist/memory/category-organizer.js +137 -0
  83. package/dist/memory/category-organizer.js.map +1 -0
  84. package/dist/memory/extraction-pipeline.d.ts +22 -0
  85. package/dist/memory/extraction-pipeline.d.ts.map +1 -0
  86. package/dist/memory/extraction-pipeline.js +156 -0
  87. package/dist/memory/extraction-pipeline.js.map +1 -0
  88. package/dist/memory/index.d.ts +7 -0
  89. package/dist/memory/index.d.ts.map +1 -0
  90. package/dist/memory/index.js +7 -0
  91. package/dist/memory/index.js.map +1 -0
  92. package/dist/memory/memory-manager.d.ts +56 -0
  93. package/dist/memory/memory-manager.d.ts.map +1 -0
  94. package/dist/memory/memory-manager.js +198 -0
  95. package/dist/memory/memory-manager.js.map +1 -0
  96. package/dist/memory/memory-types.d.ts +44 -0
  97. package/dist/memory/memory-types.d.ts.map +1 -0
  98. package/dist/memory/memory-types.js +8 -0
  99. package/dist/memory/memory-types.js.map +1 -0
  100. package/dist/memory/salience-scorer.d.ts +19 -0
  101. package/dist/memory/salience-scorer.d.ts.map +1 -0
  102. package/dist/memory/salience-scorer.js +72 -0
  103. package/dist/memory/salience-scorer.js.map +1 -0
  104. package/dist/memory/structured-memory.d.ts +28 -0
  105. package/dist/memory/structured-memory.d.ts.map +1 -0
  106. package/dist/memory/structured-memory.js +140 -0
  107. package/dist/memory/structured-memory.js.map +1 -0
  108. package/dist/orchestrator/auth-monitor.d.ts +28 -0
  109. package/dist/orchestrator/auth-monitor.d.ts.map +1 -0
  110. package/dist/orchestrator/auth-monitor.js +49 -0
  111. package/dist/orchestrator/auth-monitor.js.map +1 -0
  112. package/dist/orchestrator/execution-loop.d.ts +59 -0
  113. package/dist/orchestrator/execution-loop.d.ts.map +1 -0
  114. package/dist/orchestrator/execution-loop.js +94 -0
  115. package/dist/orchestrator/execution-loop.js.map +1 -0
  116. package/dist/orchestrator/failover-controller.d.ts +32 -0
  117. package/dist/orchestrator/failover-controller.d.ts.map +1 -0
  118. package/dist/orchestrator/failover-controller.js +111 -0
  119. package/dist/orchestrator/failover-controller.js.map +1 -0
  120. package/dist/orchestrator/index.d.ts +11 -0
  121. package/dist/orchestrator/index.d.ts.map +1 -0
  122. package/dist/orchestrator/index.js +11 -0
  123. package/dist/orchestrator/index.js.map +1 -0
  124. package/dist/orchestrator/orchestrator.d.ts +99 -0
  125. package/dist/orchestrator/orchestrator.d.ts.map +1 -0
  126. package/dist/orchestrator/orchestrator.js +456 -0
  127. package/dist/orchestrator/orchestrator.js.map +1 -0
  128. package/dist/orchestrator/retry-queue.d.ts +39 -0
  129. package/dist/orchestrator/retry-queue.d.ts.map +1 -0
  130. package/dist/orchestrator/retry-queue.js +99 -0
  131. package/dist/orchestrator/retry-queue.js.map +1 -0
  132. package/dist/orchestrator/router.d.ts +49 -0
  133. package/dist/orchestrator/router.d.ts.map +1 -0
  134. package/dist/orchestrator/router.js +167 -0
  135. package/dist/orchestrator/router.js.map +1 -0
  136. package/dist/orchestrator/session-manager.d.ts +39 -0
  137. package/dist/orchestrator/session-manager.d.ts.map +1 -0
  138. package/dist/orchestrator/session-manager.js +117 -0
  139. package/dist/orchestrator/session-manager.js.map +1 -0
  140. package/dist/providers/claude-provider.d.ts +182 -0
  141. package/dist/providers/claude-provider.d.ts.map +1 -0
  142. package/dist/providers/claude-provider.js +443 -0
  143. package/dist/providers/claude-provider.js.map +1 -0
  144. package/dist/providers/gemini-provider.d.ts +46 -0
  145. package/dist/providers/gemini-provider.d.ts.map +1 -0
  146. package/dist/providers/gemini-provider.js +336 -0
  147. package/dist/providers/gemini-provider.js.map +1 -0
  148. package/dist/providers/index.d.ts +10 -0
  149. package/dist/providers/index.d.ts.map +1 -0
  150. package/dist/providers/index.js +10 -0
  151. package/dist/providers/index.js.map +1 -0
  152. package/dist/providers/ollama-provider.d.ts +61 -0
  153. package/dist/providers/ollama-provider.d.ts.map +1 -0
  154. package/dist/providers/ollama-provider.js +319 -0
  155. package/dist/providers/ollama-provider.js.map +1 -0
  156. package/dist/routines/event-triggers.d.ts +34 -0
  157. package/dist/routines/event-triggers.d.ts.map +1 -0
  158. package/dist/routines/event-triggers.js +104 -0
  159. package/dist/routines/event-triggers.js.map +1 -0
  160. package/dist/routines/heartbeat.d.ts +35 -0
  161. package/dist/routines/heartbeat.d.ts.map +1 -0
  162. package/dist/routines/heartbeat.js +93 -0
  163. package/dist/routines/heartbeat.js.map +1 -0
  164. package/dist/routines/index.d.ts +7 -0
  165. package/dist/routines/index.d.ts.map +1 -0
  166. package/dist/routines/index.js +7 -0
  167. package/dist/routines/index.js.map +1 -0
  168. package/dist/routines/routine-manager.d.ts +62 -0
  169. package/dist/routines/routine-manager.d.ts.map +1 -0
  170. package/dist/routines/routine-manager.js +148 -0
  171. package/dist/routines/routine-manager.js.map +1 -0
  172. package/dist/security/audit-logger.d.ts +55 -0
  173. package/dist/security/audit-logger.d.ts.map +1 -0
  174. package/dist/security/audit-logger.js +252 -0
  175. package/dist/security/audit-logger.js.map +1 -0
  176. package/dist/security/capability-tokens.d.ts +30 -0
  177. package/dist/security/capability-tokens.d.ts.map +1 -0
  178. package/dist/security/capability-tokens.js +110 -0
  179. package/dist/security/capability-tokens.js.map +1 -0
  180. package/dist/security/index.d.ts +18 -0
  181. package/dist/security/index.d.ts.map +1 -0
  182. package/dist/security/index.js +12 -0
  183. package/dist/security/index.js.map +1 -0
  184. package/dist/security/integrity-guardian.d.ts +43 -0
  185. package/dist/security/integrity-guardian.d.ts.map +1 -0
  186. package/dist/security/integrity-guardian.js +103 -0
  187. package/dist/security/integrity-guardian.js.map +1 -0
  188. package/dist/security/intent-capsule.d.ts +52 -0
  189. package/dist/security/intent-capsule.d.ts.map +1 -0
  190. package/dist/security/intent-capsule.js +157 -0
  191. package/dist/security/intent-capsule.js.map +1 -0
  192. package/dist/security/leak-detector.d.ts +26 -0
  193. package/dist/security/leak-detector.d.ts.map +1 -0
  194. package/dist/security/leak-detector.js +75 -0
  195. package/dist/security/leak-detector.js.map +1 -0
  196. package/dist/security/policy-engine.d.ts +188 -0
  197. package/dist/security/policy-engine.d.ts.map +1 -0
  198. package/dist/security/policy-engine.js +799 -0
  199. package/dist/security/policy-engine.js.map +1 -0
  200. package/dist/security/prompt-defense.d.ts +30 -0
  201. package/dist/security/prompt-defense.d.ts.map +1 -0
  202. package/dist/security/prompt-defense.js +164 -0
  203. package/dist/security/prompt-defense.js.map +1 -0
  204. package/dist/security/secrets-manager.d.ts +47 -0
  205. package/dist/security/secrets-manager.d.ts.map +1 -0
  206. package/dist/security/secrets-manager.js +132 -0
  207. package/dist/security/secrets-manager.js.map +1 -0
  208. package/dist/security/security-types.d.ts +84 -0
  209. package/dist/security/security-types.d.ts.map +1 -0
  210. package/dist/security/security-types.js +8 -0
  211. package/dist/security/security-types.js.map +1 -0
  212. package/dist/skills/index.d.ts +5 -0
  213. package/dist/skills/index.d.ts.map +1 -0
  214. package/dist/skills/index.js +5 -0
  215. package/dist/skills/index.js.map +1 -0
  216. package/dist/skills/skill-loader.d.ts +25 -0
  217. package/dist/skills/skill-loader.d.ts.map +1 -0
  218. package/dist/skills/skill-loader.js +64 -0
  219. package/dist/skills/skill-loader.js.map +1 -0
  220. package/dist/steering/flag-manager.d.ts +52 -0
  221. package/dist/steering/flag-manager.d.ts.map +1 -0
  222. package/dist/steering/flag-manager.js +160 -0
  223. package/dist/steering/flag-manager.js.map +1 -0
  224. package/dist/steering/index.d.ts +8 -0
  225. package/dist/steering/index.d.ts.map +1 -0
  226. package/dist/steering/index.js +8 -0
  227. package/dist/steering/index.js.map +1 -0
  228. package/dist/steering/steer-injector.d.ts +15 -0
  229. package/dist/steering/steer-injector.d.ts.map +1 -0
  230. package/dist/steering/steer-injector.js +41 -0
  231. package/dist/steering/steer-injector.js.map +1 -0
  232. package/dist/steering/steering-manager.d.ts +33 -0
  233. package/dist/steering/steering-manager.d.ts.map +1 -0
  234. package/dist/steering/steering-manager.js +79 -0
  235. package/dist/steering/steering-manager.js.map +1 -0
  236. package/dist/steering/telegram-gateway.d.ts +27 -0
  237. package/dist/steering/telegram-gateway.d.ts.map +1 -0
  238. package/dist/steering/telegram-gateway.js +89 -0
  239. package/dist/steering/telegram-gateway.js.map +1 -0
  240. package/dist/steering/types.d.ts +54 -0
  241. package/dist/steering/types.d.ts.map +1 -0
  242. package/dist/steering/types.js +11 -0
  243. package/dist/steering/types.js.map +1 -0
  244. package/dist/teams/agent-loader.d.ts +38 -0
  245. package/dist/teams/agent-loader.d.ts.map +1 -0
  246. package/dist/teams/agent-loader.js +85 -0
  247. package/dist/teams/agent-loader.js.map +1 -0
  248. package/dist/teams/bridge-watchdog.d.ts +44 -0
  249. package/dist/teams/bridge-watchdog.d.ts.map +1 -0
  250. package/dist/teams/bridge-watchdog.js +118 -0
  251. package/dist/teams/bridge-watchdog.js.map +1 -0
  252. package/dist/teams/gemini-bridge.d.ts +43 -0
  253. package/dist/teams/gemini-bridge.d.ts.map +1 -0
  254. package/dist/teams/gemini-bridge.js +132 -0
  255. package/dist/teams/gemini-bridge.js.map +1 -0
  256. package/dist/teams/index.d.ts +11 -0
  257. package/dist/teams/index.d.ts.map +1 -0
  258. package/dist/teams/index.js +11 -0
  259. package/dist/teams/index.js.map +1 -0
  260. package/dist/teams/mailbox.d.ts +33 -0
  261. package/dist/teams/mailbox.d.ts.map +1 -0
  262. package/dist/teams/mailbox.js +97 -0
  263. package/dist/teams/mailbox.js.map +1 -0
  264. package/dist/teams/pr-lifecycle.d.ts +47 -0
  265. package/dist/teams/pr-lifecycle.d.ts.map +1 -0
  266. package/dist/teams/pr-lifecycle.js +83 -0
  267. package/dist/teams/pr-lifecycle.js.map +1 -0
  268. package/dist/teams/team-manager.d.ts +57 -0
  269. package/dist/teams/team-manager.d.ts.map +1 -0
  270. package/dist/teams/team-manager.js +170 -0
  271. package/dist/teams/team-manager.js.map +1 -0
  272. package/dist/teams/team-types.d.ts +35 -0
  273. package/dist/teams/team-types.d.ts.map +1 -0
  274. package/dist/teams/team-types.js +9 -0
  275. package/dist/teams/team-types.js.map +1 -0
  276. package/dist/tools/index.d.ts +8 -0
  277. package/dist/tools/index.d.ts.map +1 -0
  278. package/dist/tools/index.js +8 -0
  279. package/dist/tools/index.js.map +1 -0
  280. package/dist/tools/notifications.d.ts +13 -0
  281. package/dist/tools/notifications.d.ts.map +1 -0
  282. package/dist/tools/notifications.js +30 -0
  283. package/dist/tools/notifications.js.map +1 -0
  284. package/dist/types.d.ts +311 -0
  285. package/dist/types.d.ts.map +1 -0
  286. package/dist/types.js +8 -0
  287. package/dist/types.js.map +1 -0
  288. package/dist/utils/fs.d.ts +9 -0
  289. package/dist/utils/fs.d.ts.map +1 -0
  290. package/dist/utils/fs.js +31 -0
  291. package/dist/utils/fs.js.map +1 -0
  292. package/dist/utils/logger.d.ts +43 -0
  293. package/dist/utils/logger.d.ts.map +1 -0
  294. package/dist/utils/logger.js +139 -0
  295. package/dist/utils/logger.js.map +1 -0
  296. package/dist/wasm/wasmtime-spike.d.ts +19 -0
  297. package/dist/wasm/wasmtime-spike.d.ts.map +1 -0
  298. package/dist/wasm/wasmtime-spike.js +39 -0
  299. package/dist/wasm/wasmtime-spike.js.map +1 -0
  300. package/examples/routines/content-pipeline.toml +20 -0
  301. package/examples/routines/job-search.toml +19 -0
  302. package/examples/routines/repo-cleanup.toml +14 -0
  303. package/package.json +66 -0
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Orchestrator — Central controller that boots, owns, and connects every component.
3
+ *
4
+ * Remediation Roadmap R1-R9:
5
+ * - Single owner that instantiates Router, FailoverController, RetryQueue,
6
+ * AuthMonitor, SessionManager, SteeringManager, MemoryManager,
7
+ * HeartbeatSystem, RoutineManager.
8
+ * - Exposes boot() and shutdown().
9
+ * - submitTask() wires routing, failover, retry, steering, session persistence,
10
+ * and memory context injection into a unified execution path.
11
+ */
12
+ import type { ZoraConfig, ZoraPolicy, LLMProvider, CostTier, AgentEvent } from '../types.js';
13
+ import { Router } from './router.js';
14
+ import { RetryQueue } from './retry-queue.js';
15
+ import { AuthMonitor } from './auth-monitor.js';
16
+ import { SessionManager } from './session-manager.js';
17
+ import { SteeringManager } from '../steering/steering-manager.js';
18
+ import { MemoryManager } from '../memory/memory-manager.js';
19
+ import { PolicyEngine } from '../security/policy-engine.js';
20
+ export interface OrchestratorOptions {
21
+ config: ZoraConfig;
22
+ policy: ZoraPolicy;
23
+ providers: LLMProvider[];
24
+ baseDir?: string;
25
+ }
26
+ export interface SubmitTaskOptions {
27
+ prompt: string;
28
+ model?: string;
29
+ maxCostTier?: CostTier;
30
+ maxTurns?: number;
31
+ jobId?: string;
32
+ onEvent?: (event: AgentEvent) => void;
33
+ }
34
+ export declare class Orchestrator {
35
+ private readonly _config;
36
+ private readonly _policy;
37
+ private readonly _baseDir;
38
+ private readonly _providers;
39
+ private _router;
40
+ private _failoverController;
41
+ private _retryQueue;
42
+ private _authMonitor;
43
+ private _sessionManager;
44
+ private _steeringManager;
45
+ private _memoryManager;
46
+ private _policyEngine;
47
+ private _notifications;
48
+ private _intentCapsuleManager;
49
+ private _heartbeatSystem;
50
+ private _routineManager;
51
+ private _authCheckTimeout;
52
+ private _retryPollTimeout;
53
+ private _booted;
54
+ constructor(options: OrchestratorOptions);
55
+ /**
56
+ * Boots all subsystems and starts background loops.
57
+ */
58
+ boot(): Promise<void>;
59
+ /**
60
+ * Gracefully shuts down all subsystems.
61
+ */
62
+ shutdown(): Promise<void>;
63
+ /**
64
+ * Submits a task through the full orchestration pipeline:
65
+ * 1. Load memory context (R6)
66
+ * 2. Classify and route to provider (R2)
67
+ * 3. Execute with event persistence (R8) and steering (R7)
68
+ * 4. Handle failures with failover (R3) and retry (R5)
69
+ */
70
+ submitTask(options: SubmitTaskOptions): Promise<string>;
71
+ /** Symbol used to mark errors that have already been through the failover path */
72
+ private static readonly _FAILOVER_SENTINEL;
73
+ /** Maximum depth of failover recursion to prevent unbounded re-execution */
74
+ private static readonly MAX_FAILOVER_DEPTH;
75
+ /**
76
+ * Executes a task with a specific provider, handling failover and event persistence.
77
+ */
78
+ private _executeWithProvider;
79
+ /**
80
+ * Creates custom tools available to the agent during execution.
81
+ */
82
+ private _createCustomTools;
83
+ /**
84
+ * Parse interval strings like "30m", "1h" to minutes.
85
+ */
86
+ private _parseIntervalMinutes;
87
+ private _assertBooted;
88
+ get isBooted(): boolean;
89
+ get router(): Router;
90
+ get sessionManager(): SessionManager;
91
+ get steeringManager(): SteeringManager;
92
+ get memoryManager(): MemoryManager;
93
+ get authMonitor(): AuthMonitor;
94
+ get retryQueue(): RetryQueue;
95
+ get policyEngine(): PolicyEngine;
96
+ get config(): ZoraConfig;
97
+ get providers(): LLMProvider[];
98
+ }
99
+ //# sourceMappingURL=orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,WAAW,EACX,QAAQ,EAER,UAAU,EACX,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAI5D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAG5D,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,QAAQ,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;CACvC;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAG3C,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,cAAc,CAAqB;IAG3C,OAAO,CAAC,qBAAqB,CAAwB;IAGrD,OAAO,CAAC,gBAAgB,CAAgC;IACxD,OAAO,CAAC,eAAe,CAA+B;IAGtD,OAAO,CAAC,iBAAiB,CAA8C;IACvE,OAAO,CAAC,iBAAiB,CAA8C;IAEvE,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,EAAE,mBAAmB;IAOxC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAgH3B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IA0B/B;;;;;;OAMG;IACG,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;IA8D7D,kFAAkF;IAClF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAuC;IAEjF,4EAA4E;IAC5E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAK;IAE/C;;OAEG;YACW,oBAAoB;IA+GlC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgE1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAc7B,OAAO,CAAC,aAAa;IAIrB,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,IAAI,MAAM,IAAI,MAAM,CAGnB;IAED,IAAI,cAAc,IAAI,cAAc,CAGnC;IAED,IAAI,eAAe,IAAI,eAAe,CAGrC;IAED,IAAI,aAAa,IAAI,aAAa,CAGjC;IAED,IAAI,WAAW,IAAI,WAAW,CAG7B;IAED,IAAI,UAAU,IAAI,UAAU,CAG3B;IAED,IAAI,YAAY,IAAI,YAAY,CAG/B;IAED,IAAI,MAAM,IAAI,UAAU,CAEvB;IAED,IAAI,SAAS,IAAI,WAAW,EAAE,CAE7B;CACF"}
@@ -0,0 +1,456 @@
1
+ /**
2
+ * Orchestrator — Central controller that boots, owns, and connects every component.
3
+ *
4
+ * Remediation Roadmap R1-R9:
5
+ * - Single owner that instantiates Router, FailoverController, RetryQueue,
6
+ * AuthMonitor, SessionManager, SteeringManager, MemoryManager,
7
+ * HeartbeatSystem, RoutineManager.
8
+ * - Exposes boot() and shutdown().
9
+ * - submitTask() wires routing, failover, retry, steering, session persistence,
10
+ * and memory context injection into a unified execution path.
11
+ */
12
+ import crypto from 'node:crypto';
13
+ import path from 'node:path';
14
+ import os from 'node:os';
15
+ import fs from 'node:fs';
16
+ import { Router } from './router.js';
17
+ import { FailoverController } from './failover-controller.js';
18
+ import { RetryQueue } from './retry-queue.js';
19
+ import { AuthMonitor } from './auth-monitor.js';
20
+ import { SessionManager } from './session-manager.js';
21
+ import { ExecutionLoop } from './execution-loop.js';
22
+ import { SteeringManager } from '../steering/steering-manager.js';
23
+ import { MemoryManager } from '../memory/memory-manager.js';
24
+ import { HeartbeatSystem } from '../routines/heartbeat.js';
25
+ import { RoutineManager } from '../routines/routine-manager.js';
26
+ import { NotificationTools } from '../tools/notifications.js';
27
+ import { PolicyEngine } from '../security/policy-engine.js';
28
+ import { IntentCapsuleManager } from '../security/intent-capsule.js';
29
+ export class Orchestrator {
30
+ _config;
31
+ _policy;
32
+ _baseDir;
33
+ _providers;
34
+ // Core components
35
+ _router;
36
+ _failoverController;
37
+ _retryQueue;
38
+ _authMonitor;
39
+ _sessionManager;
40
+ _steeringManager;
41
+ _memoryManager;
42
+ _policyEngine;
43
+ _notifications;
44
+ // Security
45
+ _intentCapsuleManager;
46
+ // Background systems
47
+ _heartbeatSystem = null;
48
+ _routineManager = null;
49
+ // Background intervals
50
+ _authCheckTimeout = null;
51
+ _retryPollTimeout = null;
52
+ _booted = false;
53
+ constructor(options) {
54
+ this._config = options.config;
55
+ this._policy = options.policy;
56
+ this._providers = options.providers;
57
+ this._baseDir = options.baseDir ?? path.join(os.homedir(), '.zora');
58
+ }
59
+ /**
60
+ * Boots all subsystems and starts background loops.
61
+ */
62
+ async boot() {
63
+ if (this._booted)
64
+ return;
65
+ // Initialize core services
66
+ this._notifications = new NotificationTools();
67
+ this._policyEngine = new PolicyEngine(this._policy);
68
+ this._policyEngine.startSession(`session_${Date.now()}`);
69
+ // ASI01: Create IntentCapsuleManager with per-session signing key
70
+ this._intentCapsuleManager = new IntentCapsuleManager(crypto.randomBytes(32).toString('hex'));
71
+ this._policyEngine.setIntentCapsuleManager(this._intentCapsuleManager);
72
+ this._sessionManager = new SessionManager(this._baseDir);
73
+ this._steeringManager = new SteeringManager(this._baseDir);
74
+ await this._steeringManager.init();
75
+ this._memoryManager = new MemoryManager(this._config.memory, this._baseDir);
76
+ await this._memoryManager.init();
77
+ // R2: Wire Router
78
+ this._router = new Router({
79
+ providers: this._providers,
80
+ mode: this._config.routing.mode,
81
+ providerOnlyName: this._config.routing.provider_only_name,
82
+ });
83
+ // R3: Wire FailoverController
84
+ this._failoverController = new FailoverController(this._providers, this._router, this._config.failover);
85
+ // R5: Initialize RetryQueue
86
+ this._retryQueue = new RetryQueue(this._baseDir);
87
+ await this._retryQueue.init();
88
+ // R4: Schedule AuthMonitor
89
+ this._authMonitor = new AuthMonitor({
90
+ providers: this._providers,
91
+ notifications: this._notifications,
92
+ preExpiryWarningHours: 2,
93
+ });
94
+ // R4: Schedule periodic auth checks (every 5 minutes) using self-rescheduling
95
+ // setTimeout to avoid overlapping async executions
96
+ const scheduleAuthCheck = () => {
97
+ this._authCheckTimeout = setTimeout(async () => {
98
+ try {
99
+ await this._authMonitor.checkAll();
100
+ }
101
+ catch (err) {
102
+ console.error('[Orchestrator] AuthMonitor check failed:', err);
103
+ }
104
+ scheduleAuthCheck();
105
+ }, 5 * 60 * 1000);
106
+ };
107
+ scheduleAuthCheck();
108
+ // R5: Poll RetryQueue (every 30 seconds) — remove task only after successful re-submission
109
+ const scheduleRetryPoll = () => {
110
+ this._retryPollTimeout = setTimeout(async () => {
111
+ try {
112
+ const readyTasks = this._retryQueue.getReadyTasks();
113
+ for (const task of readyTasks) {
114
+ try {
115
+ await this.submitTask({ prompt: task.task, jobId: task.jobId });
116
+ await this._retryQueue.remove(task.jobId);
117
+ }
118
+ catch (err) {
119
+ console.error(`[Orchestrator] Retry failed for ${task.jobId}:`, err);
120
+ // Leave task in queue for next poll cycle
121
+ }
122
+ }
123
+ }
124
+ catch (err) {
125
+ console.error('[Orchestrator] RetryQueue poll failed:', err);
126
+ }
127
+ scheduleRetryPoll();
128
+ }, 30 * 1000);
129
+ };
130
+ scheduleRetryPoll();
131
+ // R9: Start HeartbeatSystem and RoutineManager
132
+ const defaultLoop = new ExecutionLoop({
133
+ systemPrompt: 'You are Zora, a helpful autonomous agent.',
134
+ permissionMode: 'default',
135
+ cwd: process.cwd(),
136
+ canUseTool: this._policyEngine.createCanUseTool(),
137
+ customTools: this._createCustomTools(),
138
+ });
139
+ this._heartbeatSystem = new HeartbeatSystem({
140
+ loop: defaultLoop,
141
+ baseDir: this._baseDir,
142
+ intervalMinutes: this._parseIntervalMinutes(this._config.agent.heartbeat_interval),
143
+ });
144
+ await this._heartbeatSystem.start();
145
+ this._routineManager = new RoutineManager(async (opts) => this.submitTask({
146
+ prompt: opts.prompt,
147
+ model: opts.model,
148
+ maxCostTier: opts.maxCostTier,
149
+ }), this._baseDir);
150
+ await this._routineManager.init();
151
+ this._booted = true;
152
+ }
153
+ /**
154
+ * Gracefully shuts down all subsystems.
155
+ */
156
+ async shutdown() {
157
+ if (!this._booted)
158
+ return;
159
+ // Stop background timers
160
+ if (this._authCheckTimeout) {
161
+ clearTimeout(this._authCheckTimeout);
162
+ this._authCheckTimeout = null;
163
+ }
164
+ if (this._retryPollTimeout) {
165
+ clearTimeout(this._retryPollTimeout);
166
+ this._retryPollTimeout = null;
167
+ }
168
+ // Stop heartbeat and routines
169
+ if (this._heartbeatSystem) {
170
+ this._heartbeatSystem.stop();
171
+ this._heartbeatSystem = null;
172
+ }
173
+ if (this._routineManager) {
174
+ this._routineManager.stopAll();
175
+ this._routineManager = null;
176
+ }
177
+ this._booted = false;
178
+ }
179
+ /**
180
+ * Submits a task through the full orchestration pipeline:
181
+ * 1. Load memory context (R6)
182
+ * 2. Classify and route to provider (R2)
183
+ * 3. Execute with event persistence (R8) and steering (R7)
184
+ * 4. Handle failures with failover (R3) and retry (R5)
185
+ */
186
+ async submitTask(options) {
187
+ const jobId = options.jobId ?? `job_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`;
188
+ // R6: Inject MemoryManager context systematically
189
+ const memoryContext = await this._memoryManager.loadContext();
190
+ // Load SOUL.md for agent identity (fixes bug: file was created but never read)
191
+ const soulPath = this._config.agent.identity.soul_file.replace(/^~/, os.homedir());
192
+ let soulContent = '';
193
+ try {
194
+ if (fs.existsSync(soulPath)) {
195
+ soulContent = fs.readFileSync(soulPath, 'utf-8').trim();
196
+ }
197
+ }
198
+ catch {
199
+ // SOUL.md missing or unreadable — use default identity
200
+ }
201
+ // Build system prompt with policy awareness
202
+ const systemPrompt = [
203
+ soulContent || 'You are Zora, a helpful autonomous agent.',
204
+ '[SECURITY] You operate under a permission policy. Before planning any task,',
205
+ 'use the check_permissions tool to verify you have access to the paths and',
206
+ 'commands you need. If access is denied, tell the user what you need and why.',
207
+ 'Do NOT attempt actions without checking first.',
208
+ ...memoryContext,
209
+ ].join('\n\n');
210
+ // ASI01: Create signed intent capsule for goal drift detection
211
+ if (this._intentCapsuleManager) {
212
+ this._intentCapsuleManager.createCapsule(options.prompt);
213
+ }
214
+ // Classify task for routing
215
+ const classification = this._router.classifyTask(options.prompt);
216
+ // Build task context
217
+ const taskContext = {
218
+ jobId,
219
+ task: options.prompt,
220
+ requiredCapabilities: [],
221
+ complexity: classification.complexity,
222
+ resourceType: classification.resourceType,
223
+ systemPrompt,
224
+ memoryContext,
225
+ history: [],
226
+ modelPreference: options.model,
227
+ maxCostTier: options.maxCostTier,
228
+ maxTurns: options.maxTurns,
229
+ };
230
+ // R2: Route to provider
231
+ let selectedProvider;
232
+ try {
233
+ selectedProvider = await this._router.selectProvider(taskContext);
234
+ }
235
+ catch (err) {
236
+ throw new Error(`No provider available: ${err instanceof Error ? err.message : String(err)}`);
237
+ }
238
+ // Execute with the selected provider
239
+ return this._executeWithProvider(selectedProvider, taskContext, options.onEvent);
240
+ }
241
+ /** Symbol used to mark errors that have already been through the failover path */
242
+ static _FAILOVER_SENTINEL = Symbol.for('zora.failoverSentinel');
243
+ /** Maximum depth of failover recursion to prevent unbounded re-execution */
244
+ static MAX_FAILOVER_DEPTH = 3;
245
+ /**
246
+ * Executes a task with a specific provider, handling failover and event persistence.
247
+ */
248
+ async _executeWithProvider(provider, taskContext, onEvent, failoverDepth = 0) {
249
+ let result = '';
250
+ try {
251
+ // Execute via the provider's async generator
252
+ for await (const event of provider.execute(taskContext)) {
253
+ // R8: Persist events to SessionManager
254
+ await this._sessionManager.appendEvent(taskContext.jobId, event);
255
+ // R7: Poll SteeringManager during execution
256
+ if (event.type === 'text' || event.type === 'tool_result') {
257
+ const pendingMessages = await this._steeringManager.getPendingMessages(taskContext.jobId);
258
+ for (const msg of pendingMessages) {
259
+ // Inject steering as an event
260
+ const steerEvent = {
261
+ type: 'steering',
262
+ timestamp: new Date(),
263
+ content: { text: msg.message, source: msg.source, author: msg.author },
264
+ };
265
+ await this._sessionManager.appendEvent(taskContext.jobId, steerEvent);
266
+ taskContext.history.push(steerEvent);
267
+ if (onEvent)
268
+ onEvent(steerEvent);
269
+ // Archive the processed message
270
+ await this._steeringManager.archiveMessage(taskContext.jobId, msg.id);
271
+ }
272
+ }
273
+ // Notify caller
274
+ if (onEvent)
275
+ onEvent(event);
276
+ // Track history for failover handoff
277
+ taskContext.history.push(event);
278
+ // Capture result text
279
+ if (event.type === 'done') {
280
+ result = event.content.text ?? '';
281
+ }
282
+ // Handle errors — trigger failover (R3)
283
+ if (event.type === 'error') {
284
+ const errorContent = event.content;
285
+ const error = new Error(errorContent.message ?? 'Unknown provider error');
286
+ // Guard: skip failover if depth exceeded
287
+ if (failoverDepth >= Orchestrator.MAX_FAILOVER_DEPTH) {
288
+ throw error;
289
+ }
290
+ // R3: Connect FailoverController to error path
291
+ const failoverResult = await this._failoverController.handleFailure(taskContext, provider, error);
292
+ if (failoverResult) {
293
+ // Re-execute with the failover provider (increment depth)
294
+ return this._executeWithProvider(failoverResult.nextProvider, taskContext, onEvent, failoverDepth + 1);
295
+ }
296
+ // R5: Enqueue for retry if no failover available
297
+ try {
298
+ await this._retryQueue.enqueue(taskContext, error.message, this._config.failover.max_retries);
299
+ }
300
+ catch {
301
+ // Max retries exceeded or enqueue failed
302
+ }
303
+ // Mark so the outer catch doesn't re-trigger failover
304
+ error[Orchestrator._FAILOVER_SENTINEL] = true;
305
+ throw error;
306
+ }
307
+ }
308
+ }
309
+ catch (err) {
310
+ // Skip failover for errors already marked by the failover path
311
+ const isFailoverError = err instanceof Error && err[Orchestrator._FAILOVER_SENTINEL];
312
+ if (!isFailoverError && err instanceof Error && failoverDepth < Orchestrator.MAX_FAILOVER_DEPTH) {
313
+ // R3: Try failover on execution exceptions
314
+ const failoverResult = await this._failoverController.handleFailure(taskContext, provider, err);
315
+ if (failoverResult) {
316
+ // Mark the error so downstream doesn't re-trigger failover
317
+ err[Orchestrator._FAILOVER_SENTINEL] = true;
318
+ return this._executeWithProvider(failoverResult.nextProvider, taskContext, onEvent, failoverDepth + 1);
319
+ }
320
+ // R5: Enqueue for retry
321
+ try {
322
+ await this._retryQueue.enqueue(taskContext, err.message, this._config.failover.max_retries);
323
+ }
324
+ catch {
325
+ // Max retries exceeded
326
+ }
327
+ }
328
+ throw err;
329
+ }
330
+ // Record completion in daily notes
331
+ await this._memoryManager.appendDailyNote(`Completed task: ${taskContext.task}`);
332
+ return result;
333
+ }
334
+ /**
335
+ * Creates custom tools available to the agent during execution.
336
+ */
337
+ _createCustomTools() {
338
+ return [
339
+ {
340
+ name: 'check_permissions',
341
+ description: 'Check if you have access to specific paths or commands before executing. Use this during planning to verify your boundaries.',
342
+ input_schema: {
343
+ type: 'object',
344
+ properties: {
345
+ paths: { type: 'array', items: { type: 'string' }, description: 'Filesystem paths to check access for' },
346
+ commands: { type: 'array', items: { type: 'string' }, description: 'Shell commands to check access for' },
347
+ },
348
+ },
349
+ handler: async (input) => {
350
+ const paths = input['paths'] ?? [];
351
+ const commands = input['commands'] ?? [];
352
+ return this._policyEngine.checkAccess(paths, commands);
353
+ },
354
+ },
355
+ {
356
+ name: 'request_permissions',
357
+ description: 'Request additional permissions from the user. Use this when check_permissions shows a path or command is denied and you need it for the current task. The user will be asked to approve.',
358
+ input_schema: {
359
+ type: 'object',
360
+ properties: {
361
+ paths: { type: 'array', items: { type: 'string' }, description: 'Filesystem paths to request access for' },
362
+ commands: { type: 'array', items: { type: 'string' }, description: 'Shell commands to request access for' },
363
+ reason: { type: 'string', description: 'Why you need this access (shown to user)' },
364
+ },
365
+ required: ['reason'],
366
+ },
367
+ handler: async (input) => {
368
+ const paths = input['paths'] ?? [];
369
+ const commands = input['commands'] ?? [];
370
+ const reason = input['reason'] ?? 'No reason provided';
371
+ // Validate against permanent deny-list before asking the user
372
+ const deniedPaths = this._policy.filesystem.denied_paths;
373
+ for (const p of paths) {
374
+ const abs = path.resolve(p.replace(/^~/, os.homedir()));
375
+ for (const denied of deniedPaths) {
376
+ const absDenied = path.resolve(denied.replace(/^~/, os.homedir()));
377
+ if (abs === absDenied || abs.startsWith(absDenied + path.sep)) {
378
+ return {
379
+ granted: false,
380
+ message: `Cannot grant access to ${p} — it is in the permanent deny-list. This cannot be overridden at runtime.`,
381
+ };
382
+ }
383
+ }
384
+ }
385
+ // The actual approval flow happens outside (CLI prompt, dashboard, etc.)
386
+ // For now, return the request details so the caller can present them to the user.
387
+ // In the CLI, this will be intercepted by the onEvent callback.
388
+ return {
389
+ granted: false,
390
+ pending: true,
391
+ message: `Permission request submitted. Paths: ${paths.join(', ') || 'none'}. Commands: ${commands.join(', ') || 'none'}. Reason: ${reason}`,
392
+ request: { paths, commands, reason },
393
+ };
394
+ },
395
+ },
396
+ ];
397
+ }
398
+ /**
399
+ * Parse interval strings like "30m", "1h" to minutes.
400
+ */
401
+ _parseIntervalMinutes(interval) {
402
+ const match = interval.match(/^(\d+)(m|h|s)$/);
403
+ if (!match)
404
+ return 30; // default 30 minutes
405
+ const value = parseInt(match[1], 10);
406
+ switch (match[2]) {
407
+ case 'h': return value * 60;
408
+ case 'm': return value;
409
+ case 's': return Math.max(1, Math.floor(value / 60));
410
+ default: return 30;
411
+ }
412
+ }
413
+ // ─── Public accessors ──────────────────────────────────────────────
414
+ _assertBooted() {
415
+ if (!this._booted)
416
+ throw new Error('Orchestrator.boot() must be called before accessing subsystems');
417
+ }
418
+ get isBooted() {
419
+ return this._booted;
420
+ }
421
+ get router() {
422
+ this._assertBooted();
423
+ return this._router;
424
+ }
425
+ get sessionManager() {
426
+ this._assertBooted();
427
+ return this._sessionManager;
428
+ }
429
+ get steeringManager() {
430
+ this._assertBooted();
431
+ return this._steeringManager;
432
+ }
433
+ get memoryManager() {
434
+ this._assertBooted();
435
+ return this._memoryManager;
436
+ }
437
+ get authMonitor() {
438
+ this._assertBooted();
439
+ return this._authMonitor;
440
+ }
441
+ get retryQueue() {
442
+ this._assertBooted();
443
+ return this._retryQueue;
444
+ }
445
+ get policyEngine() {
446
+ this._assertBooted();
447
+ return this._policyEngine;
448
+ }
449
+ get config() {
450
+ return this._config;
451
+ }
452
+ get providers() {
453
+ return this._providers;
454
+ }
455
+ }
456
+ //# sourceMappingURL=orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/orchestrator/orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * RetryQueue — Persistence and scheduling for failed tasks.
3
+ *
4
+ * Spec §4.2 "Scheduler":
5
+ * - Tasks failed due to quota/transient errors are scheduled for retry.
6
+ * - Uses exponential backoff for cooldown tracking.
7
+ * - Persists state to prevent loss across restarts.
8
+ */
9
+ import type { TaskContext } from '../types.js';
10
+ export interface RetryEntry {
11
+ task: TaskContext;
12
+ retryCount: number;
13
+ lastError: string;
14
+ nextRunAt: Date;
15
+ }
16
+ export declare class RetryQueue {
17
+ private readonly _stateFile;
18
+ private _queue;
19
+ constructor(baseDir?: string);
20
+ /**
21
+ * Initializes the queue by loading persisted state.
22
+ */
23
+ init(): Promise<void>;
24
+ /**
25
+ * Adds a task to the retry queue with exponential backoff.
26
+ */
27
+ enqueue(task: TaskContext, error: string, maxRetries?: number): Promise<void>;
28
+ /**
29
+ * Returns tasks that are ready to be retried.
30
+ */
31
+ getReadyTasks(): TaskContext[];
32
+ /**
33
+ * Removes a task from the queue once successfully completed.
34
+ */
35
+ remove(jobId: string): Promise<void>;
36
+ private _save;
37
+ get size(): number;
38
+ }
39
+ //# sourceMappingURL=retry-queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry-queue.d.ts","sourceRoot":"","sources":["../../src/orchestrator/retry-queue.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,MAAM,CAAoB;gBAEtB,OAAO,GAAE,MAAyC;IAI9D;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB3B;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,GAAE,MAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCtF;;OAEG;IACH,aAAa,IAAI,WAAW,EAAE;IAM9B;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAK5B,KAAK;IAInB,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}