@made-by-moonlight/athene-core 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (285) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +241 -0
  3. package/dist/activity-events.d.ts +42 -0
  4. package/dist/activity-events.d.ts.map +1 -0
  5. package/dist/activity-events.js +192 -0
  6. package/dist/activity-events.js.map +1 -0
  7. package/dist/activity-log.d.ts +71 -0
  8. package/dist/activity-log.d.ts.map +1 -0
  9. package/dist/activity-log.js +203 -0
  10. package/dist/activity-log.js.map +1 -0
  11. package/dist/activity-signal.d.ts +20 -0
  12. package/dist/activity-signal.d.ts.map +1 -0
  13. package/dist/activity-signal.js +91 -0
  14. package/dist/activity-signal.js.map +1 -0
  15. package/dist/agent-report.d.ts +148 -0
  16. package/dist/agent-report.d.ts.map +1 -0
  17. package/dist/agent-report.js +516 -0
  18. package/dist/agent-report.js.map +1 -0
  19. package/dist/agent-selection.d.ts +31 -0
  20. package/dist/agent-selection.d.ts.map +1 -0
  21. package/dist/agent-selection.js +69 -0
  22. package/dist/agent-selection.js.map +1 -0
  23. package/dist/agent-workspace-hooks.d.ts +74 -0
  24. package/dist/agent-workspace-hooks.d.ts.map +1 -0
  25. package/dist/agent-workspace-hooks.js +988 -0
  26. package/dist/agent-workspace-hooks.js.map +1 -0
  27. package/dist/atomic-write.d.ts +6 -0
  28. package/dist/atomic-write.d.ts.map +1 -0
  29. package/dist/atomic-write.js +49 -0
  30. package/dist/atomic-write.js.map +1 -0
  31. package/dist/cleanup-stack.d.ts +37 -0
  32. package/dist/cleanup-stack.d.ts.map +1 -0
  33. package/dist/cleanup-stack.js +45 -0
  34. package/dist/cleanup-stack.js.map +1 -0
  35. package/dist/code-review-manager.d.ts +118 -0
  36. package/dist/code-review-manager.d.ts.map +1 -0
  37. package/dist/code-review-manager.js +719 -0
  38. package/dist/code-review-manager.js.map +1 -0
  39. package/dist/code-review-store.d.ts +114 -0
  40. package/dist/code-review-store.d.ts.map +1 -0
  41. package/dist/code-review-store.js +346 -0
  42. package/dist/code-review-store.js.map +1 -0
  43. package/dist/config-generator.d.ts +84 -0
  44. package/dist/config-generator.d.ts.map +1 -0
  45. package/dist/config-generator.js +295 -0
  46. package/dist/config-generator.js.map +1 -0
  47. package/dist/config.d.ts +55 -0
  48. package/dist/config.d.ts.map +1 -0
  49. package/dist/config.js +852 -0
  50. package/dist/config.js.map +1 -0
  51. package/dist/daemon-children.d.ts +55 -0
  52. package/dist/daemon-children.d.ts.map +1 -0
  53. package/dist/daemon-children.js +435 -0
  54. package/dist/daemon-children.js.map +1 -0
  55. package/dist/dashboard-notifications.d.ts +42 -0
  56. package/dist/dashboard-notifications.d.ts.map +1 -0
  57. package/dist/dashboard-notifications.js +123 -0
  58. package/dist/dashboard-notifications.js.map +1 -0
  59. package/dist/events-db.d.ts +39 -0
  60. package/dist/events-db.d.ts.map +1 -0
  61. package/dist/events-db.js +185 -0
  62. package/dist/events-db.js.map +1 -0
  63. package/dist/feature-flags.d.ts +2 -0
  64. package/dist/feature-flags.d.ts.map +1 -0
  65. package/dist/feature-flags.js +9 -0
  66. package/dist/feature-flags.js.map +1 -0
  67. package/dist/feedback-tools.d.ts +97 -0
  68. package/dist/feedback-tools.d.ts.map +1 -0
  69. package/dist/feedback-tools.js +161 -0
  70. package/dist/feedback-tools.js.map +1 -0
  71. package/dist/file-lock.d.ts +5 -0
  72. package/dist/file-lock.d.ts.map +1 -0
  73. package/dist/file-lock.js +59 -0
  74. package/dist/file-lock.js.map +1 -0
  75. package/dist/format-automated-comments.d.ts +18 -0
  76. package/dist/format-automated-comments.d.ts.map +1 -0
  77. package/dist/gh-trace.d.ts +57 -0
  78. package/dist/gh-trace.d.ts.map +1 -0
  79. package/dist/gh-trace.js +320 -0
  80. package/dist/gh-trace.js.map +1 -0
  81. package/dist/git-activity.d.ts +10 -0
  82. package/dist/git-activity.d.ts.map +1 -0
  83. package/dist/git-activity.js +30 -0
  84. package/dist/git-activity.js.map +1 -0
  85. package/dist/global-config.d.ts +1085 -0
  86. package/dist/global-config.d.ts.map +1 -0
  87. package/dist/global-config.js +1067 -0
  88. package/dist/global-config.js.map +1 -0
  89. package/dist/index.d.ts +91 -0
  90. package/dist/index.d.ts.map +1 -0
  91. package/dist/index.js +59 -0
  92. package/dist/index.js.map +1 -0
  93. package/dist/key-value.d.ts +7 -0
  94. package/dist/key-value.d.ts.map +1 -0
  95. package/dist/key-value.js +24 -0
  96. package/dist/key-value.js.map +1 -0
  97. package/dist/lifecycle-manager.d.ts +22 -0
  98. package/dist/lifecycle-manager.d.ts.map +1 -0
  99. package/dist/lifecycle-manager.js +2813 -0
  100. package/dist/lifecycle-manager.js.map +1 -0
  101. package/dist/lifecycle-state.d.ts +28 -0
  102. package/dist/lifecycle-state.d.ts.map +1 -0
  103. package/dist/lifecycle-state.js +446 -0
  104. package/dist/lifecycle-state.js.map +1 -0
  105. package/dist/lifecycle-status-decisions.d.ts +85 -0
  106. package/dist/lifecycle-status-decisions.d.ts.map +1 -0
  107. package/dist/lifecycle-status-decisions.js +262 -0
  108. package/dist/lifecycle-status-decisions.js.map +1 -0
  109. package/dist/lifecycle-transition.d.ts +81 -0
  110. package/dist/lifecycle-transition.d.ts.map +1 -0
  111. package/dist/lifecycle-transition.js +207 -0
  112. package/dist/lifecycle-transition.js.map +1 -0
  113. package/dist/metadata.d.ts +54 -0
  114. package/dist/metadata.d.ts.map +1 -0
  115. package/dist/metadata.js +484 -0
  116. package/dist/metadata.js.map +1 -0
  117. package/dist/migration/storage-v2.d.ts +76 -0
  118. package/dist/migration/storage-v2.d.ts.map +1 -0
  119. package/dist/migration/storage-v2.js +1614 -0
  120. package/dist/migration/storage-v2.js.map +1 -0
  121. package/dist/notification-data.d.ts +135 -0
  122. package/dist/notification-data.d.ts.map +1 -0
  123. package/dist/notification-data.js +204 -0
  124. package/dist/notification-data.js.map +1 -0
  125. package/dist/notification-observability.d.ts +21 -0
  126. package/dist/notification-observability.d.ts.map +1 -0
  127. package/dist/notification-observability.js +154 -0
  128. package/dist/notification-observability.js.map +1 -0
  129. package/dist/notifier-resolution.d.ts +14 -0
  130. package/dist/notifier-resolution.d.ts.map +1 -0
  131. package/dist/notifier-resolution.js +23 -0
  132. package/dist/notifier-resolution.js.map +1 -0
  133. package/dist/observability.d.ts +100 -0
  134. package/dist/observability.d.ts.map +1 -0
  135. package/dist/observability.js +535 -0
  136. package/dist/observability.js.map +1 -0
  137. package/dist/opencode-agents-md.d.ts +3 -0
  138. package/dist/opencode-agents-md.d.ts.map +1 -0
  139. package/dist/opencode-agents-md.js +40 -0
  140. package/dist/opencode-agents-md.js.map +1 -0
  141. package/dist/opencode-config.d.ts +2 -0
  142. package/dist/opencode-config.d.ts.map +1 -0
  143. package/dist/opencode-config.js +17 -0
  144. package/dist/opencode-config.js.map +1 -0
  145. package/dist/opencode-session-id.d.ts +2 -0
  146. package/dist/opencode-session-id.d.ts.map +1 -0
  147. package/dist/opencode-session-id.js +12 -0
  148. package/dist/opencode-session-id.js.map +1 -0
  149. package/dist/opencode-shared.d.ts +80 -0
  150. package/dist/opencode-shared.d.ts.map +1 -0
  151. package/dist/opencode-shared.js +202 -0
  152. package/dist/opencode-shared.js.map +1 -0
  153. package/dist/orchestrator-prompt.d.ts +19 -0
  154. package/dist/orchestrator-prompt.d.ts.map +1 -0
  155. package/dist/orchestrator-prompt.js +130 -0
  156. package/dist/orchestrator-prompt.js.map +1 -0
  157. package/dist/orchestrator-session-strategy.d.ts +5 -0
  158. package/dist/orchestrator-session-strategy.d.ts.map +1 -0
  159. package/dist/orchestrator-session-strategy.js +13 -0
  160. package/dist/orchestrator-session-strategy.js.map +1 -0
  161. package/dist/paths.d.ts +145 -0
  162. package/dist/paths.d.ts.map +1 -0
  163. package/dist/paths.js +288 -0
  164. package/dist/paths.js.map +1 -0
  165. package/dist/platform.d.ts +32 -0
  166. package/dist/platform.d.ts.map +1 -0
  167. package/dist/platform.js +211 -0
  168. package/dist/platform.js.map +1 -0
  169. package/dist/plugin-registry.d.ts +15 -0
  170. package/dist/plugin-registry.d.ts.map +1 -0
  171. package/dist/plugin-registry.js +499 -0
  172. package/dist/plugin-registry.js.map +1 -0
  173. package/dist/portfolio-projects.d.ts +7 -0
  174. package/dist/portfolio-projects.d.ts.map +1 -0
  175. package/dist/portfolio-projects.js +65 -0
  176. package/dist/portfolio-projects.js.map +1 -0
  177. package/dist/portfolio-registry.d.ts +42 -0
  178. package/dist/portfolio-registry.d.ts.map +1 -0
  179. package/dist/portfolio-registry.js +311 -0
  180. package/dist/portfolio-registry.js.map +1 -0
  181. package/dist/portfolio-routing.d.ts +5 -0
  182. package/dist/portfolio-routing.d.ts.map +1 -0
  183. package/dist/portfolio-routing.js +24 -0
  184. package/dist/portfolio-routing.js.map +1 -0
  185. package/dist/portfolio-session-service.d.ts +15 -0
  186. package/dist/portfolio-session-service.d.ts.map +1 -0
  187. package/dist/portfolio-session-service.js +206 -0
  188. package/dist/portfolio-session-service.js.map +1 -0
  189. package/dist/process-cache.d.ts +32 -0
  190. package/dist/process-cache.d.ts.map +1 -0
  191. package/dist/process-cache.js +44 -0
  192. package/dist/process-cache.js.map +1 -0
  193. package/dist/project-resolver.d.ts +5 -0
  194. package/dist/project-resolver.d.ts.map +1 -0
  195. package/dist/project-resolver.js +20 -0
  196. package/dist/project-resolver.js.map +1 -0
  197. package/dist/prompt-builder.d.ts +42 -0
  198. package/dist/prompt-builder.d.ts.map +1 -0
  199. package/dist/prompt-builder.js +182 -0
  200. package/dist/prompt-builder.js.map +1 -0
  201. package/dist/prompts/orchestrator.md.js +4 -0
  202. package/dist/prompts/orchestrator.md.js.map +1 -0
  203. package/dist/query-activity-events.d.ts +42 -0
  204. package/dist/query-activity-events.d.ts.map +1 -0
  205. package/dist/query-activity-events.js +170 -0
  206. package/dist/query-activity-events.js.map +1 -0
  207. package/dist/recovery/actions.d.ts +7 -0
  208. package/dist/recovery/actions.d.ts.map +1 -0
  209. package/dist/recovery/index.d.ts +8 -0
  210. package/dist/recovery/index.d.ts.map +1 -0
  211. package/dist/recovery/logger.d.ts +12 -0
  212. package/dist/recovery/logger.d.ts.map +1 -0
  213. package/dist/recovery/manager.d.ts +24 -0
  214. package/dist/recovery/manager.d.ts.map +1 -0
  215. package/dist/recovery/scanner.d.ts +11 -0
  216. package/dist/recovery/scanner.d.ts.map +1 -0
  217. package/dist/recovery/types.d.ts +170 -0
  218. package/dist/recovery/types.d.ts.map +1 -0
  219. package/dist/recovery/validator.d.ts +8 -0
  220. package/dist/recovery/validator.d.ts.map +1 -0
  221. package/dist/report-watcher.d.ts +93 -0
  222. package/dist/report-watcher.d.ts.map +1 -0
  223. package/dist/report-watcher.js +182 -0
  224. package/dist/report-watcher.js.map +1 -0
  225. package/dist/scm-webhook-utils.d.ts +6 -0
  226. package/dist/scm-webhook-utils.d.ts.map +1 -0
  227. package/dist/scm-webhook-utils.js +36 -0
  228. package/dist/scm-webhook-utils.js.map +1 -0
  229. package/dist/session-manager.d.ts +22 -0
  230. package/dist/session-manager.d.ts.map +1 -0
  231. package/dist/session-manager.js +3077 -0
  232. package/dist/session-manager.js.map +1 -0
  233. package/dist/spawn-target.d.ts +23 -0
  234. package/dist/spawn-target.d.ts.map +1 -0
  235. package/dist/spawn-target.js +39 -0
  236. package/dist/spawn-target.js.map +1 -0
  237. package/dist/storage-key.d.ts +9 -0
  238. package/dist/storage-key.d.ts.map +1 -0
  239. package/dist/storage-key.js +59 -0
  240. package/dist/storage-key.js.map +1 -0
  241. package/dist/tmux.d.ts +39 -0
  242. package/dist/tmux.d.ts.map +1 -0
  243. package/dist/tmux.js +141 -0
  244. package/dist/tmux.js.map +1 -0
  245. package/dist/types.d.ts +1496 -0
  246. package/dist/types.d.ts.map +1 -0
  247. package/dist/types.js +215 -0
  248. package/dist/types.js.map +1 -0
  249. package/dist/update-cache.d.ts +59 -0
  250. package/dist/update-cache.d.ts.map +1 -0
  251. package/dist/update-cache.js +77 -0
  252. package/dist/update-cache.js.map +1 -0
  253. package/dist/utils/metadata-flatten.d.ts +3 -0
  254. package/dist/utils/metadata-flatten.d.ts.map +1 -0
  255. package/dist/utils/metadata-flatten.js +18 -0
  256. package/dist/utils/metadata-flatten.js.map +1 -0
  257. package/dist/utils/pr.d.ts +7 -0
  258. package/dist/utils/pr.d.ts.map +1 -0
  259. package/dist/utils/pr.js +97 -0
  260. package/dist/utils/pr.js.map +1 -0
  261. package/dist/utils/session-from-metadata.d.ts +16 -0
  262. package/dist/utils/session-from-metadata.d.ts.map +1 -0
  263. package/dist/utils/session-from-metadata.js +87 -0
  264. package/dist/utils/session-from-metadata.js.map +1 -0
  265. package/dist/utils/session-id.d.ts +4 -0
  266. package/dist/utils/session-id.d.ts.map +1 -0
  267. package/dist/utils/session-id.js +9 -0
  268. package/dist/utils/session-id.js.map +1 -0
  269. package/dist/utils/validation.d.ts +9 -0
  270. package/dist/utils/validation.d.ts.map +1 -0
  271. package/dist/utils/validation.js +45 -0
  272. package/dist/utils/validation.js.map +1 -0
  273. package/dist/utils.d.ts +65 -0
  274. package/dist/utils.d.ts.map +1 -0
  275. package/dist/utils.js +189 -0
  276. package/dist/utils.js.map +1 -0
  277. package/dist/version-compare.d.ts +27 -0
  278. package/dist/version-compare.d.ts.map +1 -0
  279. package/dist/version-compare.js +121 -0
  280. package/dist/version-compare.js.map +1 -0
  281. package/dist/windows-pty-registry.d.ts +27 -0
  282. package/dist/windows-pty-registry.d.ts.map +1 -0
  283. package/dist/windows-pty-registry.js +109 -0
  284. package/dist/windows-pty-registry.js.map +1 -0
  285. package/package.json +110 -0
@@ -0,0 +1,535 @@
1
+ import { readdirSync, readFileSync, mkdirSync, existsSync, writeFileSync, renameSync, statSync, unlinkSync, appendFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { randomUUID } from 'node:crypto';
4
+ import { getObservabilityBaseDir } from './paths.js';
5
+
6
+ const TRACE_LIMIT = 80;
7
+ const SESSION_LIMIT = 200;
8
+ const AUDIT_LOG_MAX_BYTES = 5 * 1024 * 1024;
9
+ const OBSERVABILITY_ERROR_LOG_MAX_BYTES = 512 * 1024;
10
+ const MAX_REDACTED_DEPTH = 4;
11
+ const MAX_REDACTED_STRING_LENGTH = 256;
12
+ const REDACTED_VALUE = "[redacted]";
13
+ const LEVEL_ORDER = {
14
+ debug: 10,
15
+ info: 20,
16
+ warn: 30,
17
+ error: 40,
18
+ };
19
+ function nowIso() {
20
+ return new Date().toISOString();
21
+ }
22
+ function sanitizeComponent(component) {
23
+ return component.replace(/[^a-zA-Z0-9_-]+/g, "-").replace(/^-+|-+$/g, "") || "component";
24
+ }
25
+ function parseLogLevel(raw) {
26
+ const value = raw?.trim().toLowerCase();
27
+ if (value === "debug" || value === "info" || value === "warn" || value === "error") {
28
+ return value;
29
+ }
30
+ return null;
31
+ }
32
+ function parseBooleanEnv(raw) {
33
+ const value = raw?.trim().toLowerCase();
34
+ if (!value)
35
+ return null;
36
+ if (value === "1" || value === "true" || value === "yes" || value === "on")
37
+ return true;
38
+ if (value === "0" || value === "false" || value === "no" || value === "off")
39
+ return false;
40
+ return null;
41
+ }
42
+ function getLogLevel(config) {
43
+ const raw = process.env["AO_LOG_LEVEL"]?.trim().toLowerCase();
44
+ return parseLogLevel(raw) ?? config.observability?.logLevel ?? "warn";
45
+ }
46
+ function shouldLog(level, config) {
47
+ return LEVEL_ORDER[level] >= LEVEL_ORDER[getLogLevel(config)];
48
+ }
49
+ function shouldMirrorStructuredLogsToStderr(config) {
50
+ return (parseBooleanEnv(process.env["AO_OBSERVABILITY_STDERR"]) ?? config.observability?.stderr ?? false);
51
+ }
52
+ function emitStructuredLog(config, entry, level) {
53
+ if (!shouldMirrorStructuredLogsToStderr(config) || !shouldLog(level, config))
54
+ return;
55
+ process.stderr.write(`${JSON.stringify({ ...entry, level })}\n`);
56
+ }
57
+ function atomicWriteJson(filePath, payload) {
58
+ const tmpPath = `${filePath}.tmp.${process.pid}.${Date.now()}`;
59
+ writeFileSync(tmpPath, `${JSON.stringify(payload, null, 2)}\n`, "utf-8");
60
+ renameSync(tmpPath, filePath);
61
+ }
62
+ function getObservabilityDir(config) {
63
+ const dir = join(getObservabilityBaseDir(config.configPath), "processes");
64
+ mkdirSync(dir, { recursive: true });
65
+ return dir;
66
+ }
67
+ function getSnapshotPath(config, component) {
68
+ return join(getObservabilityDir(config), `${sanitizeComponent(component)}-${process.pid}.json`);
69
+ }
70
+ function getAuditLogPath(config, component) {
71
+ return join(getObservabilityDir(config), `${sanitizeComponent(component)}-${process.pid}.ndjson`);
72
+ }
73
+ function shouldRedactKey(key) {
74
+ return /token|secret|password|cookie|authorization|api[-_]?key|prompt|message|note/i.test(key);
75
+ }
76
+ function sanitizeString(value) {
77
+ const collapsed = value.replace(/\s+/g, " ").trim();
78
+ return collapsed.length > MAX_REDACTED_STRING_LENGTH
79
+ ? `${collapsed.slice(0, MAX_REDACTED_STRING_LENGTH)}…`
80
+ : collapsed;
81
+ }
82
+ function sanitizeUnknown(value, depth = 0) {
83
+ if (value === null || value === undefined)
84
+ return value;
85
+ if (typeof value === "string")
86
+ return sanitizeString(value);
87
+ if (typeof value === "number" || typeof value === "boolean")
88
+ return value;
89
+ if (depth >= MAX_REDACTED_DEPTH)
90
+ return "[truncated]";
91
+ if (Array.isArray(value)) {
92
+ return value.slice(0, 25).map((entry) => sanitizeUnknown(entry, depth + 1));
93
+ }
94
+ if (typeof value === "object") {
95
+ return Object.fromEntries(Object.entries(value).slice(0, 25).map(([key, entry]) => [
96
+ key,
97
+ shouldRedactKey(key) ? REDACTED_VALUE : sanitizeUnknown(entry, depth + 1),
98
+ ]));
99
+ }
100
+ return String(value);
101
+ }
102
+ function sanitizeDataRecord(data) {
103
+ if (!data)
104
+ return undefined;
105
+ return sanitizeUnknown(data);
106
+ }
107
+ function sanitizeReason(reason) {
108
+ if (!reason)
109
+ return undefined;
110
+ return sanitizeString(reason);
111
+ }
112
+ function sanitizePath(path) {
113
+ if (!path)
114
+ return undefined;
115
+ return sanitizeString(path);
116
+ }
117
+ function appendRotatingNdjson(filePath, payload, maxBytes) {
118
+ const rotatedPath = `${filePath}.1`;
119
+ if (existsSync(filePath)) {
120
+ const currentSize = statSync(filePath).size;
121
+ if (currentSize >= maxBytes) {
122
+ if (existsSync(rotatedPath)) {
123
+ unlinkSync(rotatedPath);
124
+ }
125
+ renameSync(filePath, rotatedPath);
126
+ }
127
+ }
128
+ appendFileSync(filePath, `${JSON.stringify(payload)}\n`, "utf-8");
129
+ }
130
+ function appendAuditLog(config, component, payload, level) {
131
+ const filePath = getAuditLogPath(config, component);
132
+ appendRotatingNdjson(filePath, { ...payload, level }, AUDIT_LOG_MAX_BYTES);
133
+ }
134
+ function appendObservabilityFailure(config, payload) {
135
+ try {
136
+ const filePath = join(getObservabilityDir(config), "observability-errors.ndjson");
137
+ appendRotatingNdjson(filePath, payload, OBSERVABILITY_ERROR_LOG_MAX_BYTES);
138
+ }
139
+ catch {
140
+ // Best effort only — avoid recursive observability failures.
141
+ }
142
+ }
143
+ function readSnapshot(filePath, component) {
144
+ if (!existsSync(filePath)) {
145
+ return {
146
+ version: 1,
147
+ component,
148
+ pid: process.pid,
149
+ updatedAt: nowIso(),
150
+ metrics: {},
151
+ traces: [],
152
+ sessions: {},
153
+ health: {},
154
+ };
155
+ }
156
+ try {
157
+ const parsed = JSON.parse(readFileSync(filePath, "utf-8"));
158
+ return {
159
+ version: 1,
160
+ component,
161
+ pid: process.pid,
162
+ updatedAt: typeof parsed.updatedAt === "string" ? parsed.updatedAt : nowIso(),
163
+ metrics: parsed.metrics && typeof parsed.metrics === "object" ? parsed.metrics : {},
164
+ traces: Array.isArray(parsed.traces) ? parsed.traces : [],
165
+ sessions: parsed.sessions && typeof parsed.sessions === "object" ? parsed.sessions : {},
166
+ health: parsed.health && typeof parsed.health === "object" ? parsed.health : {},
167
+ };
168
+ }
169
+ catch {
170
+ return {
171
+ version: 1,
172
+ component,
173
+ pid: process.pid,
174
+ updatedAt: nowIso(),
175
+ metrics: {},
176
+ traces: [],
177
+ sessions: {},
178
+ health: {},
179
+ };
180
+ }
181
+ }
182
+ function writeSnapshot(config, snapshot) {
183
+ const filePath = getSnapshotPath(config, snapshot.component);
184
+ snapshot.updatedAt = nowIso();
185
+ atomicWriteJson(filePath, snapshot);
186
+ }
187
+ function compareIsoDesc(a, b) {
188
+ return b.localeCompare(a);
189
+ }
190
+ function mergeCounter(target, source) {
191
+ const merged = {
192
+ total: (target?.total ?? 0) + (source.total ?? 0),
193
+ success: (target?.success ?? 0) + (source.success ?? 0),
194
+ failure: (target?.failure ?? 0) + (source.failure ?? 0),
195
+ lastAt: target?.lastAt,
196
+ lastSuccessAt: target?.lastSuccessAt,
197
+ lastFailureAt: target?.lastFailureAt,
198
+ lastFailureReason: target?.lastFailureReason,
199
+ };
200
+ if (source.lastAt && (!merged.lastAt || source.lastAt > merged.lastAt)) {
201
+ merged.lastAt = source.lastAt;
202
+ }
203
+ if (source.lastSuccessAt &&
204
+ (!merged.lastSuccessAt || source.lastSuccessAt > merged.lastSuccessAt)) {
205
+ merged.lastSuccessAt = source.lastSuccessAt;
206
+ }
207
+ if (source.lastFailureAt &&
208
+ (!merged.lastFailureAt || source.lastFailureAt > merged.lastFailureAt)) {
209
+ merged.lastFailureAt = source.lastFailureAt;
210
+ merged.lastFailureReason = source.lastFailureReason;
211
+ }
212
+ return merged;
213
+ }
214
+ function healthSeverity(status) {
215
+ switch (status) {
216
+ case "error":
217
+ return 3;
218
+ case "warn":
219
+ return 2;
220
+ default:
221
+ return 1;
222
+ }
223
+ }
224
+ function metricBucketKey(metric, projectId) {
225
+ return `${projectId ?? "unknown"}::${metric}`;
226
+ }
227
+ function parseMetricBucketKey(bucketKey) {
228
+ const separatorIndex = bucketKey.indexOf("::");
229
+ if (separatorIndex === -1) {
230
+ return { metric: bucketKey };
231
+ }
232
+ const projectId = bucketKey.slice(0, separatorIndex);
233
+ return {
234
+ projectId: projectId === "unknown" ? undefined : projectId,
235
+ metric: bucketKey.slice(separatorIndex + 2),
236
+ };
237
+ }
238
+ function createCorrelationId(prefix = "ao") {
239
+ return `${prefix}-${randomUUID()}`;
240
+ }
241
+ function createProjectObserver(config, component) {
242
+ const normalizedComponent = sanitizeComponent(component);
243
+ function updateSnapshot(updater, logEntry) {
244
+ try {
245
+ const filePath = getSnapshotPath(config, normalizedComponent);
246
+ const snapshot = readSnapshot(filePath, normalizedComponent);
247
+ updater(snapshot);
248
+ writeSnapshot(config, snapshot);
249
+ if (logEntry && shouldLog(logEntry.level, config)) {
250
+ appendAuditLog(config, normalizedComponent, logEntry.payload, logEntry.level);
251
+ emitStructuredLog(config, logEntry.payload, logEntry.level);
252
+ }
253
+ }
254
+ catch (error) {
255
+ const payload = {
256
+ source: "ao-observability",
257
+ timestamp: nowIso(),
258
+ component: normalizedComponent,
259
+ outcome: "failure",
260
+ operation: "observability.write",
261
+ reason: error instanceof Error ? error.message : String(error),
262
+ };
263
+ appendObservabilityFailure(config, payload);
264
+ emitStructuredLog(config, payload, "error");
265
+ }
266
+ }
267
+ return {
268
+ component: normalizedComponent,
269
+ recordOperation(input) {
270
+ const timestamp = nowIso();
271
+ const operation = input.operation ?? input.metric;
272
+ const level = input.level ?? (input.outcome === "failure" ? "error" : "info");
273
+ const trace = {
274
+ id: randomUUID(),
275
+ timestamp,
276
+ component: normalizedComponent,
277
+ operation,
278
+ outcome: input.outcome,
279
+ correlationId: input.correlationId,
280
+ projectId: input.projectId,
281
+ sessionId: input.sessionId,
282
+ path: sanitizePath(input.path),
283
+ reason: sanitizeReason(input.reason),
284
+ durationMs: input.durationMs,
285
+ data: sanitizeDataRecord(input.data),
286
+ };
287
+ updateSnapshot((snapshot) => {
288
+ const bucketKey = metricBucketKey(input.metric, input.projectId);
289
+ const currentCounter = snapshot.metrics[bucketKey] ?? {
290
+ total: 0,
291
+ success: 0,
292
+ failure: 0,
293
+ };
294
+ currentCounter.total += 1;
295
+ currentCounter.lastAt = timestamp;
296
+ if (input.outcome === "success") {
297
+ currentCounter.success += 1;
298
+ currentCounter.lastSuccessAt = timestamp;
299
+ }
300
+ else {
301
+ currentCounter.failure += 1;
302
+ currentCounter.lastFailureAt = timestamp;
303
+ currentCounter.lastFailureReason = sanitizeReason(input.reason);
304
+ }
305
+ snapshot.metrics[bucketKey] = currentCounter;
306
+ snapshot.traces = [trace, ...snapshot.traces]
307
+ .sort((a, b) => compareIsoDesc(a.timestamp, b.timestamp))
308
+ .slice(0, TRACE_LIMIT);
309
+ if (input.sessionId) {
310
+ snapshot.sessions[input.sessionId] = {
311
+ sessionId: input.sessionId,
312
+ projectId: input.projectId,
313
+ correlationId: input.correlationId,
314
+ operation,
315
+ outcome: input.outcome,
316
+ updatedAt: timestamp,
317
+ reason: sanitizeReason(input.reason),
318
+ };
319
+ const sessionEntries = Object.entries(snapshot.sessions).sort(([, a], [, b]) => compareIsoDesc(a.updatedAt, b.updatedAt));
320
+ snapshot.sessions = Object.fromEntries(sessionEntries.slice(0, SESSION_LIMIT));
321
+ }
322
+ }, {
323
+ level,
324
+ payload: {
325
+ source: "ao-observability",
326
+ timestamp,
327
+ component: normalizedComponent,
328
+ metric: input.metric,
329
+ operation,
330
+ outcome: input.outcome,
331
+ correlationId: input.correlationId,
332
+ projectId: input.projectId,
333
+ sessionId: input.sessionId,
334
+ reason: sanitizeReason(input.reason),
335
+ durationMs: input.durationMs,
336
+ path: sanitizePath(input.path),
337
+ data: sanitizeDataRecord(input.data),
338
+ },
339
+ });
340
+ },
341
+ recordDiagnostic(input) {
342
+ const timestamp = nowIso();
343
+ const level = input.level ?? "info";
344
+ const trace = {
345
+ id: randomUUID(),
346
+ timestamp,
347
+ component: normalizedComponent,
348
+ operation: input.operation,
349
+ outcome: "success",
350
+ correlationId: input.correlationId,
351
+ projectId: input.projectId,
352
+ sessionId: input.sessionId,
353
+ path: sanitizePath(input.path),
354
+ data: {
355
+ message: sanitizeString(input.message),
356
+ ...sanitizeDataRecord(input.data),
357
+ },
358
+ };
359
+ updateSnapshot((snapshot) => {
360
+ snapshot.traces = [trace, ...snapshot.traces]
361
+ .sort((a, b) => compareIsoDesc(a.timestamp, b.timestamp))
362
+ .slice(0, TRACE_LIMIT);
363
+ if (input.sessionId) {
364
+ snapshot.sessions[input.sessionId] = {
365
+ sessionId: input.sessionId,
366
+ projectId: input.projectId,
367
+ correlationId: input.correlationId,
368
+ operation: input.operation,
369
+ outcome: "success",
370
+ updatedAt: timestamp,
371
+ };
372
+ const sessionEntries = Object.entries(snapshot.sessions).sort(([, a], [, b]) => compareIsoDesc(a.updatedAt, b.updatedAt));
373
+ snapshot.sessions = Object.fromEntries(sessionEntries.slice(0, SESSION_LIMIT));
374
+ }
375
+ }, {
376
+ level,
377
+ payload: {
378
+ source: "ao-observability",
379
+ timestamp,
380
+ component: normalizedComponent,
381
+ operation: input.operation,
382
+ correlationId: input.correlationId,
383
+ projectId: input.projectId,
384
+ sessionId: input.sessionId,
385
+ path: sanitizePath(input.path),
386
+ data: {
387
+ message: sanitizeString(input.message),
388
+ ...sanitizeDataRecord(input.data),
389
+ },
390
+ },
391
+ });
392
+ },
393
+ setHealth(input) {
394
+ const updatedAt = nowIso();
395
+ updateSnapshot((snapshot) => {
396
+ snapshot.health[input.surface] = {
397
+ surface: input.surface,
398
+ status: input.status,
399
+ updatedAt,
400
+ component: normalizedComponent,
401
+ projectId: input.projectId,
402
+ correlationId: input.correlationId,
403
+ reason: sanitizeReason(input.reason),
404
+ details: sanitizeDataRecord(input.details),
405
+ };
406
+ }, {
407
+ level: input.status === "error" ? "error" : input.status === "warn" ? "warn" : "info",
408
+ payload: {
409
+ source: "ao-observability",
410
+ timestamp: updatedAt,
411
+ component: normalizedComponent,
412
+ surface: input.surface,
413
+ status: input.status,
414
+ projectId: input.projectId,
415
+ correlationId: input.correlationId,
416
+ reason: sanitizeReason(input.reason),
417
+ details: sanitizeDataRecord(input.details),
418
+ },
419
+ });
420
+ },
421
+ };
422
+ }
423
+ function readObservabilitySummary(config) {
424
+ const dir = getObservabilityDir(config);
425
+ const projects = {};
426
+ for (const fileName of readdirSync(dir)) {
427
+ if (!fileName.endsWith(".json"))
428
+ continue;
429
+ const filePath = join(dir, fileName);
430
+ let snapshot;
431
+ try {
432
+ snapshot = JSON.parse(readFileSync(filePath, "utf-8"));
433
+ }
434
+ catch {
435
+ continue;
436
+ }
437
+ if (!snapshot || typeof snapshot !== "object")
438
+ continue;
439
+ for (const [bucketKey, counter] of Object.entries(snapshot.metrics ?? {})) {
440
+ const { projectId, metric } = parseMetricBucketKey(bucketKey);
441
+ if (!projectId)
442
+ continue;
443
+ const project = projects[projectId] ??
444
+ (projects[projectId] = {
445
+ projectId,
446
+ updatedAt: snapshot.updatedAt,
447
+ metrics: {},
448
+ health: {},
449
+ recentTraces: [],
450
+ sessions: {},
451
+ });
452
+ project.metrics[metric] = mergeCounter(project.metrics[metric], counter);
453
+ if (snapshot.updatedAt > project.updatedAt) {
454
+ project.updatedAt = snapshot.updatedAt;
455
+ }
456
+ }
457
+ for (const trace of snapshot.traces ?? []) {
458
+ if (!trace.projectId)
459
+ continue;
460
+ const project = projects[trace.projectId] ??
461
+ (projects[trace.projectId] = {
462
+ projectId: trace.projectId,
463
+ updatedAt: trace.timestamp,
464
+ metrics: {},
465
+ health: {},
466
+ recentTraces: [],
467
+ sessions: {},
468
+ });
469
+ project.recentTraces.push(trace);
470
+ if (trace.timestamp > project.updatedAt) {
471
+ project.updatedAt = trace.timestamp;
472
+ }
473
+ }
474
+ for (const health of Object.values(snapshot.health ?? {})) {
475
+ const projectId = health.projectId;
476
+ if (!projectId)
477
+ continue;
478
+ const project = projects[projectId] ??
479
+ (projects[projectId] = {
480
+ projectId,
481
+ updatedAt: health.updatedAt,
482
+ metrics: {},
483
+ health: {},
484
+ recentTraces: [],
485
+ sessions: {},
486
+ });
487
+ const existing = project.health[health.surface];
488
+ if (!existing || health.updatedAt >= existing.updatedAt) {
489
+ project.health[health.surface] = health;
490
+ }
491
+ if (health.updatedAt > project.updatedAt) {
492
+ project.updatedAt = health.updatedAt;
493
+ }
494
+ }
495
+ for (const session of Object.values(snapshot.sessions ?? {})) {
496
+ if (!session.projectId)
497
+ continue;
498
+ const project = projects[session.projectId] ??
499
+ (projects[session.projectId] = {
500
+ projectId: session.projectId,
501
+ updatedAt: session.updatedAt,
502
+ metrics: {},
503
+ health: {},
504
+ recentTraces: [],
505
+ sessions: {},
506
+ });
507
+ const existing = project.sessions[session.sessionId];
508
+ if (!existing || session.updatedAt >= existing.updatedAt) {
509
+ project.sessions[session.sessionId] = session;
510
+ }
511
+ if (session.updatedAt > project.updatedAt) {
512
+ project.updatedAt = session.updatedAt;
513
+ }
514
+ }
515
+ }
516
+ let overallStatus = "ok";
517
+ for (const project of Object.values(projects)) {
518
+ project.recentTraces = project.recentTraces
519
+ .sort((a, b) => compareIsoDesc(a.timestamp, b.timestamp))
520
+ .slice(0, TRACE_LIMIT);
521
+ for (const health of Object.values(project.health)) {
522
+ if (healthSeverity(health.status) > healthSeverity(overallStatus)) {
523
+ overallStatus = health.status;
524
+ }
525
+ }
526
+ }
527
+ return {
528
+ generatedAt: nowIso(),
529
+ overallStatus,
530
+ projects,
531
+ };
532
+ }
533
+
534
+ export { createCorrelationId, createProjectObserver, readObservabilitySummary };
535
+ //# sourceMappingURL=observability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observability.js","sources":["../src/observability.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAoJA,MAAM,WAAW,GAAG,EAAE;AACtB,MAAM,aAAa,GAAG,GAAG;AACzB,MAAM,mBAAmB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI;AAC3C,MAAM,iCAAiC,GAAG,GAAG,GAAG,IAAI;AACpD,MAAM,kBAAkB,GAAG,CAAC;AAC5B,MAAM,0BAA0B,GAAG,GAAG;AACtC,MAAM,cAAc,GAAG,YAAY;AACnC,MAAM,WAAW,GAAuC;AACtD,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,KAAK,EAAE,EAAE;CACV;AAED,SAAS,MAAM,GAAA;AACb,IAAA,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AACjC;AAEA,SAAS,iBAAiB,CAAC,SAAiB,EAAA;AAC1C,IAAA,OAAO,SAAS,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,WAAW;AAC1F;AAEA,SAAS,aAAa,CAAC,GAAuB,EAAA;IAC5C,MAAM,KAAK,GAAG,GAAG,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE;AACvC,IAAA,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,OAAO,EAAE;AAClF,QAAA,OAAO,KAAK;IACd;AACA,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,eAAe,CAAC,GAAuB,EAAA;IAC9C,MAAM,KAAK,GAAG,GAAG,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE;AACvC,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,IAAI;AACvB,IAAA,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI;AAAE,QAAA,OAAO,IAAI;AACvF,IAAA,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK;AAAE,QAAA,OAAO,KAAK;AACzF,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,WAAW,CAAC,MAA0B,EAAA;AAC7C,IAAA,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE;AAC7D,IAAA,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,aAAa,EAAE,QAAQ,IAAI,MAAM;AACvE;AAEA,SAAS,SAAS,CAAC,KAAyB,EAAE,MAA0B,EAAA;AACtE,IAAA,OAAO,WAAW,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC/D;AAEA,SAAS,kCAAkC,CAAC,MAA0B,EAAA;AACpE,IAAA,QACE,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,IAAI,MAAM,CAAC,aAAa,EAAE,MAAM,IAAI,KAAK;AAEpG;AAEA,SAAS,iBAAiB,CACxB,MAA0B,EAC1B,KAA8B,EAC9B,KAAyB,EAAA;AAEzB,IAAA,IAAI,CAAC,kCAAkC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;QAAE;AAC9E,IAAA,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA,EAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA,EAAA,CAAI,CAAC;AAClE;AAEA,SAAS,eAAe,CAAC,QAAgB,EAAE,OAAgB,EAAA;AACzD,IAAA,MAAM,OAAO,GAAG,CAAA,EAAG,QAAQ,QAAQ,OAAO,CAAC,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,GAAG,EAAE,EAAE;AAC9D,IAAA,aAAa,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC;AACxE,IAAA,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC;AAC/B;AAEA,SAAS,mBAAmB,CAAC,MAA0B,EAAA;AACrD,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC;IACzE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACnC,IAAA,OAAO,GAAG;AACZ;AAEA,SAAS,eAAe,CAAC,MAA0B,EAAE,SAAiB,EAAA;AACpE,IAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAA,EAAG,iBAAiB,CAAC,SAAS,CAAC,CAAA,CAAA,EAAI,OAAO,CAAC,GAAG,CAAA,KAAA,CAAO,CAAC;AACjG;AAEA,SAAS,eAAe,CAAC,MAA0B,EAAE,SAAiB,EAAA;AACpE,IAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAA,EAAG,iBAAiB,CAAC,SAAS,CAAC,CAAA,CAAA,EAAI,OAAO,CAAC,GAAG,CAAA,OAAA,CAAS,CAAC;AACnG;AAEA,SAAS,eAAe,CAAC,GAAW,EAAA;AAClC,IAAA,OAAO,6EAA6E,CAAC,IAAI,CACvF,GAAG,CACJ;AACH;AAEA,SAAS,cAAc,CAAC,KAAa,EAAA;AACnC,IAAA,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE;AACnD,IAAA,OAAO,SAAS,CAAC,MAAM,GAAG;UACtB,CAAA,EAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,0BAA0B,CAAC,CAAA,CAAA;UACjD,SAAS;AACf;AAEA,SAAS,eAAe,CAAC,KAAc,EAAE,KAAK,GAAG,CAAC,EAAA;AAChD,IAAA,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;AAAE,QAAA,OAAO,KAAK;IACvD,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,QAAA,OAAO,cAAc,CAAC,KAAK,CAAC;IAC3D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS;AAAE,QAAA,OAAO,KAAK;IACzE,IAAI,KAAK,IAAI,kBAAkB;AAAE,QAAA,OAAO,aAAa;AACrD,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACxB,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IAC7E;AACA,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK;YACvD,GAAG;AACH,YAAA,eAAe,CAAC,GAAG,CAAC,GAAG,cAAc,GAAG,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC;AAC1E,SAAA,CAAC,CACH;IACH;AACA,IAAA,OAAO,MAAM,CAAC,KAAK,CAAC;AACtB;AAEA,SAAS,kBAAkB,CAAC,IAA8B,EAAA;AACxD,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,SAAS;AAC3B,IAAA,OAAO,eAAe,CAAC,IAAI,CAA4B;AACzD;AAEA,SAAS,cAAc,CAAC,MAAe,EAAA;AACrC,IAAA,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,SAAS;AAC7B,IAAA,OAAO,cAAc,CAAC,MAAM,CAAC;AAC/B;AAEA,SAAS,YAAY,CAAC,IAAa,EAAA;AACjC,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,SAAS;AAC3B,IAAA,OAAO,cAAc,CAAC,IAAI,CAAC;AAC7B;AAEA,SAAS,oBAAoB,CAAC,QAAgB,EAAE,OAAgC,EAAE,QAAgB,EAAA;AAChG,IAAA,MAAM,WAAW,GAAG,CAAA,EAAG,QAAQ,IAAI;AACnC,IAAA,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE;QACxB,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI;AAC3C,QAAA,IAAI,WAAW,IAAI,QAAQ,EAAE;AAC3B,YAAA,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE;gBAC3B,UAAU,CAAC,WAAW,CAAC;YACzB;AACA,YAAA,UAAU,CAAC,QAAQ,EAAE,WAAW,CAAC;QACnC;IACF;AACA,IAAA,cAAc,CAAC,QAAQ,EAAE,CAAA,EAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA,EAAA,CAAI,EAAE,OAAO,CAAC;AACnE;AAEA,SAAS,cAAc,CACrB,MAA0B,EAC1B,SAAiB,EACjB,OAAgC,EAChC,KAAyB,EAAA;IAEzB,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC;AACnD,IAAA,oBAAoB,CAAC,QAAQ,EAAE,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,EAAE,mBAAmB,CAAC;AAC5E;AAEA,SAAS,0BAA0B,CACjC,MAA0B,EAC1B,OAAgC,EAAA;AAEhC,IAAA,IAAI;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,6BAA6B,CAAC;AACjF,QAAA,oBAAoB,CAAC,QAAQ,EAAE,OAAO,EAAE,iCAAiC,CAAC;IAC5E;AAAE,IAAA,MAAM;;IAER;AACF;AAEA,SAAS,YAAY,CAAC,QAAgB,EAAE,SAAiB,EAAA;AACvD,IAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;QACzB,OAAO;AACL,YAAA,OAAO,EAAE,CAAC;YACV,SAAS;YACT,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,SAAS,EAAE,MAAM,EAAE;AACnB,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,MAAM,EAAE,EAAE;SACX;IACH;AAEA,IAAA,IAAI;AACF,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CACvB,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CACS;QAC1C,OAAO;AACL,YAAA,OAAO,EAAE,CAAC;YACV,SAAS;YACT,GAAG,EAAE,OAAO,CAAC,GAAG;AAChB,YAAA,SAAS,EAAE,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,GAAG,MAAM,CAAC,SAAS,GAAG,MAAM,EAAE;YAC7E,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,GAAG,MAAM,CAAC,OAAO,GAAG,EAAE;AACnF,YAAA,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,EAAE;YACzD,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,GAAG,MAAM,CAAC,QAAQ,GAAG,EAAE;YACvF,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,GAAG,MAAM,CAAC,MAAM,GAAG,EAAE;SAChF;IACH;AAAE,IAAA,MAAM;QACN,OAAO;AACL,YAAA,OAAO,EAAE,CAAC;YACV,SAAS;YACT,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,SAAS,EAAE,MAAM,EAAE;AACnB,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,MAAM,EAAE,EAAE;SACX;IACH;AACF;AAEA,SAAS,aAAa,CAAC,MAA0B,EAAE,QAAsC,EAAA;IACvF,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC;AAC5D,IAAA,QAAQ,CAAC,SAAS,GAAG,MAAM,EAAE;AAC7B,IAAA,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACrC;AAEA,SAAS,cAAc,CAAC,CAAS,EAAE,CAAS,EAAA;AAC1C,IAAA,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AAC3B;AAEA,SAAS,YAAY,CACnB,MAA8C,EAC9C,MAAkC,EAAA;AAElC,IAAA,MAAM,MAAM,GAA+B;AACzC,QAAA,KAAK,EAAE,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,KAAK,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;AACjD,QAAA,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC,KAAK,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;AACvD,QAAA,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC,KAAK,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;QACvD,MAAM,EAAE,MAAM,EAAE,MAAM;QACtB,aAAa,EAAE,MAAM,EAAE,aAAa;QACpC,aAAa,EAAE,MAAM,EAAE,aAAa;QACpC,iBAAiB,EAAE,MAAM,EAAE,iBAAiB;KAC7C;AAED,IAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE;AACtE,QAAA,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;IAC/B;IACA,IACE,MAAM,CAAC,aAAa;AACpB,SAAC,CAAC,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC,EACtE;AACA,QAAA,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa;IAC7C;IACA,IACE,MAAM,CAAC,aAAa;AACpB,SAAC,CAAC,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC,EACtE;AACA,QAAA,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa;AAC3C,QAAA,MAAM,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB;IACrD;AAEA,IAAA,OAAO,MAAM;AACf;AAEA,SAAS,cAAc,CAAC,MAAiC,EAAA;IACvD,QAAQ,MAAM;AACZ,QAAA,KAAK,OAAO;AACV,YAAA,OAAO,CAAC;AACV,QAAA,KAAK,MAAM;AACT,YAAA,OAAO,CAAC;AACV,QAAA;AACE,YAAA,OAAO,CAAC;;AAEd;AAEA,SAAS,eAAe,CAAC,MAA+B,EAAE,SAAkB,EAAA;AAC1E,IAAA,OAAO,GAAG,SAAS,IAAI,SAAS,CAAA,EAAA,EAAK,MAAM,EAAE;AAC/C;AAEA,SAAS,oBAAoB,CAAC,SAAiB,EAAA;IAC7C,MAAM,cAAc,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;AAC9C,IAAA,IAAI,cAAc,KAAK,EAAE,EAAE;AACzB,QAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE;IAC9B;IACA,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC;IACpD,OAAO;QACL,SAAS,EAAE,SAAS,KAAK,SAAS,GAAG,SAAS,GAAG,SAAS;QAC1D,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC;KAC5C;AACH;AAEM,SAAU,mBAAmB,CAAC,MAAM,GAAG,IAAI,EAAA;AAC/C,IAAA,OAAO,GAAG,MAAM,CAAA,CAAA,EAAI,UAAU,EAAE,EAAE;AACpC;AAEM,SAAU,qBAAqB,CACnC,MAA0B,EAC1B,SAAiB,EAAA;AAEjB,IAAA,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,SAAS,CAAC;AAExD,IAAA,SAAS,cAAc,CACrB,OAAyD,EACzD,QAA0E,EAAA;AAE1E,QAAA,IAAI;YACF,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,EAAE,mBAAmB,CAAC;YAC7D,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,EAAE,mBAAmB,CAAC;YAC5D,OAAO,CAAC,QAAQ,CAAC;AACjB,YAAA,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC;YAC/B,IAAI,QAAQ,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE;AACjD,gBAAA,cAAc,CAAC,MAAM,EAAE,mBAAmB,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC;gBAC7E,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC;YAC7D;QACF;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,MAAM,OAAO,GAAG;AACd,gBAAA,MAAM,EAAE,kBAAkB;gBAC1B,SAAS,EAAE,MAAM,EAAE;AACnB,gBAAA,SAAS,EAAE,mBAAmB;AAC9B,gBAAA,OAAO,EAAE,SAAS;AAClB,gBAAA,SAAS,EAAE,qBAAqB;AAChC,gBAAA,MAAM,EAAE,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;aAC/D;AACD,YAAA,0BAA0B,CAAC,MAAM,EAAE,OAAO,CAAC;AAC3C,YAAA,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC;QAC7C;IACF;IAEA,OAAO;AACL,QAAA,SAAS,EAAE,mBAAmB;AAC9B,QAAA,eAAe,CAAC,KAAK,EAAA;AACnB,YAAA,MAAM,SAAS,GAAG,MAAM,EAAE;YAC1B,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,MAAM;YACjD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,OAAO,KAAK,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAC7E,YAAA,MAAM,KAAK,GAA6B;gBACtC,EAAE,EAAE,UAAU,EAAE;gBAChB,SAAS;AACT,gBAAA,SAAS,EAAE,mBAAmB;gBAC9B,SAAS;gBACT,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,aAAa,EAAE,KAAK,CAAC,aAAa;gBAClC,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;AAC1B,gBAAA,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;AAC9B,gBAAA,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC;gBACpC,UAAU,EAAE,KAAK,CAAC,UAAU;AAC5B,gBAAA,IAAI,EAAE,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC;aACrC;AAED,YAAA,cAAc,CACZ,CAAC,QAAQ,KAAI;AACX,gBAAA,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC;gBAChE,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI;AACpD,oBAAA,KAAK,EAAE,CAAC;AACR,oBAAA,OAAO,EAAE,CAAC;AACV,oBAAA,OAAO,EAAE,CAAC;iBACX;AACD,gBAAA,cAAc,CAAC,KAAK,IAAI,CAAC;AACzB,gBAAA,cAAc,CAAC,MAAM,GAAG,SAAS;AACjC,gBAAA,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE;AAC/B,oBAAA,cAAc,CAAC,OAAO,IAAI,CAAC;AAC3B,oBAAA,cAAc,CAAC,aAAa,GAAG,SAAS;gBAC1C;qBAAO;AACL,oBAAA,cAAc,CAAC,OAAO,IAAI,CAAC;AAC3B,oBAAA,cAAc,CAAC,aAAa,GAAG,SAAS;oBACxC,cAAc,CAAC,iBAAiB,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC;gBACjE;AACA,gBAAA,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,cAAc;gBAE5C,QAAQ,CAAC,MAAM,GAAG,CAAC,KAAK,EAAE,GAAG,QAAQ,CAAC,MAAM;AACzC,qBAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC;AACvD,qBAAA,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC;AAExB,gBAAA,IAAI,KAAK,CAAC,SAAS,EAAE;AACnB,oBAAA,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG;wBACnC,SAAS,EAAE,KAAK,CAAC,SAAS;wBAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;wBAC1B,aAAa,EAAE,KAAK,CAAC,aAAa;wBAClC,SAAS;wBACT,OAAO,EAAE,KAAK,CAAC,OAAO;AACtB,wBAAA,SAAS,EAAE,SAAS;AACpB,wBAAA,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC;qBACrC;AAED,oBAAA,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KACzE,cAAc,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,CACzC;AACD,oBAAA,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;gBAChF;AACF,YAAA,CAAC,EACD;gBACE,KAAK;AACL,gBAAA,OAAO,EAAE;AACP,oBAAA,MAAM,EAAE,kBAAkB;oBAC1B,SAAS;AACT,oBAAA,SAAS,EAAE,mBAAmB;oBAC9B,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,SAAS;oBACT,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,aAAa,EAAE,KAAK,CAAC,aAAa;oBAClC,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;AAC1B,oBAAA,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC;oBACpC,UAAU,EAAE,KAAK,CAAC,UAAU;AAC5B,oBAAA,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;AAC9B,oBAAA,IAAI,EAAE,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC;AACrC,iBAAA;AACF,aAAA,CACF;QACH,CAAC;AAED,QAAA,gBAAgB,CAAC,KAAK,EAAA;AACpB,YAAA,MAAM,SAAS,GAAG,MAAM,EAAE;AAC1B,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,MAAM;AACnC,YAAA,MAAM,KAAK,GAA6B;gBACtC,EAAE,EAAE,UAAU,EAAE;gBAChB,SAAS;AACT,gBAAA,SAAS,EAAE,mBAAmB;gBAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;AAC1B,gBAAA,OAAO,EAAE,SAAS;gBAClB,aAAa,EAAE,KAAK,CAAC,aAAa;gBAClC,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;AAC1B,gBAAA,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;AAC9B,gBAAA,IAAI,EAAE;AACJ,oBAAA,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC;AACtC,oBAAA,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC;AAClC,iBAAA;aACF;AAED,YAAA,cAAc,CACZ,CAAC,QAAQ,KAAI;gBACX,QAAQ,CAAC,MAAM,GAAG,CAAC,KAAK,EAAE,GAAG,QAAQ,CAAC,MAAM;AACzC,qBAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC;AACvD,qBAAA,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC;AAExB,gBAAA,IAAI,KAAK,CAAC,SAAS,EAAE;AACnB,oBAAA,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG;wBACnC,SAAS,EAAE,KAAK,CAAC,SAAS;wBAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;wBAC1B,aAAa,EAAE,KAAK,CAAC,aAAa;wBAClC,SAAS,EAAE,KAAK,CAAC,SAAS;AAC1B,wBAAA,OAAO,EAAE,SAAS;AAClB,wBAAA,SAAS,EAAE,SAAS;qBACrB;AAED,oBAAA,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KACzE,cAAc,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,CACzC;AACD,oBAAA,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;gBAChF;AACF,YAAA,CAAC,EACD;gBACE,KAAK;AACL,gBAAA,OAAO,EAAE;AACP,oBAAA,MAAM,EAAE,kBAAkB;oBAC1B,SAAS;AACT,oBAAA,SAAS,EAAE,mBAAmB;oBAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,aAAa,EAAE,KAAK,CAAC,aAAa;oBAClC,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;AAC1B,oBAAA,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;AAC9B,oBAAA,IAAI,EAAE;AACJ,wBAAA,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC;AACtC,wBAAA,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC;AAClC,qBAAA;AACF,iBAAA;AACF,aAAA,CACF;QACH,CAAC;AAED,QAAA,SAAS,CAAC,KAAK,EAAA;AACb,YAAA,MAAM,SAAS,GAAG,MAAM,EAAE;AAC1B,YAAA,cAAc,CACZ,CAAC,QAAQ,KAAI;AACX,gBAAA,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG;oBAC/B,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,SAAS;AACT,oBAAA,SAAS,EAAE,mBAAmB;oBAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,aAAa,EAAE,KAAK,CAAC,aAAa;AAClC,oBAAA,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC;AACpC,oBAAA,OAAO,EAAE,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC;iBAC3C;AACH,YAAA,CAAC,EACD;gBACE,KAAK,EAAE,KAAK,CAAC,MAAM,KAAK,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC,MAAM,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM;AACrF,gBAAA,OAAO,EAAE;AACP,oBAAA,MAAM,EAAE,kBAAkB;AAC1B,oBAAA,SAAS,EAAE,SAAS;AACpB,oBAAA,SAAS,EAAE,mBAAmB;oBAC9B,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,aAAa,EAAE,KAAK,CAAC,aAAa;AAClC,oBAAA,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC;AACpC,oBAAA,OAAO,EAAE,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC;AAC3C,iBAAA;AACF,aAAA,CACF;QACH,CAAC;KACF;AACH;AAEM,SAAU,wBAAwB,CAAC,MAA0B,EAAA;AACjE,IAAA,MAAM,GAAG,GAAG,mBAAmB,CAAC,MAAM,CAAC;IACvC,MAAM,QAAQ,GAAiD,EAAE;IAEjE,KAAK,MAAM,QAAQ,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE;AACvC,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC;AAEpC,QAAA,IAAI,QAAsC;AAC1C,QAAA,IAAI;AACF,YAAA,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAiC;QACxF;AAAE,QAAA,MAAM;YACN;QACF;AAEA,QAAA,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;YAAE;AAE/C,QAAA,KAAK,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE;YACzE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,oBAAoB,CAAC,SAAS,CAAC;AAC7D,YAAA,IAAI,CAAC,SAAS;gBAAE;AAChB,YAAA,MAAM,OAAO,GACX,QAAQ,CAAC,SAAS,CAAC;AACnB,iBAAC,QAAQ,CAAC,SAAS,CAAC,GAAG;oBACrB,SAAS;oBACT,SAAS,EAAE,QAAQ,CAAC,SAAS;AAC7B,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,MAAM,EAAE,EAAE;AACV,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,QAAQ,EAAE,EAAE;AACb,iBAAA,CAAC;AACJ,YAAA,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;YACxE,IAAI,QAAQ,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE;AAC1C,gBAAA,OAAO,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS;YACxC;QACF;QAEA,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,IAAI,EAAE,EAAE;YACzC,IAAI,CAAC,KAAK,CAAC,SAAS;gBAAE;AACtB,YAAA,MAAM,OAAO,GACX,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC;AACzB,iBAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG;oBAC3B,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;AAC1B,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,MAAM,EAAE,EAAE;AACV,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,QAAQ,EAAE,EAAE;AACb,iBAAA,CAAC;AACJ,YAAA,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;YAChC,IAAI,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE;AACvC,gBAAA,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS;YACrC;QACF;AAEA,QAAA,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE;AACzD,YAAA,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS;AAClC,YAAA,IAAI,CAAC,SAAS;gBAAE;AAChB,YAAA,MAAM,OAAO,GACX,QAAQ,CAAC,SAAS,CAAC;AACnB,iBAAC,QAAQ,CAAC,SAAS,CAAC,GAAG;oBACrB,SAAS;oBACT,SAAS,EAAE,MAAM,CAAC,SAAS;AAC3B,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,MAAM,EAAE,EAAE;AACV,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,QAAQ,EAAE,EAAE;AACb,iBAAA,CAAC;YACJ,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;YAC/C,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,EAAE;gBACvD,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM;YACzC;YACA,IAAI,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE;AACxC,gBAAA,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS;YACtC;QACF;AAEA,QAAA,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE;YAC5D,IAAI,CAAC,OAAO,CAAC,SAAS;gBAAE;AACxB,YAAA,MAAM,OAAO,GACX,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC;AAC3B,iBAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG;oBAC7B,SAAS,EAAE,OAAO,CAAC,SAAS;oBAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;AAC5B,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,MAAM,EAAE,EAAE;AACV,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,QAAQ,EAAE,EAAE;AACb,iBAAA,CAAC;YACJ,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC;YACpD,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,EAAE;gBACxD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO;YAC/C;YACA,IAAI,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE;AACzC,gBAAA,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS;YACvC;QACF;IACF;IAEA,IAAI,aAAa,GAA8B,IAAI;IACnD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;AAC7C,QAAA,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC;AAC5B,aAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC;AACvD,aAAA,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC;AACxB,QAAA,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AAClD,YAAA,IAAI,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,cAAc,CAAC,aAAa,CAAC,EAAE;AACjE,gBAAA,aAAa,GAAG,MAAM,CAAC,MAAM;YAC/B;QACF;IACF;IAEA,OAAO;QACL,WAAW,EAAE,MAAM,EAAE;QACrB,aAAa;QACb,QAAQ;KACT;AACH;;;;"}
@@ -0,0 +1,3 @@
1
+ export declare function getWorkspaceAgentsMdPath(workspacePath: string): string;
2
+ export declare function writeWorkspaceOpenCodeAgentsMd(workspacePath: string, promptFile: string): string;
3
+ //# sourceMappingURL=opencode-agents-md.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode-agents-md.d.ts","sourceRoot":"","sources":["../src/opencode-agents-md.ts"],"names":[],"mappings":"AAMA,wBAAgB,wBAAwB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAEtE;AAgBD,wBAAgB,8BAA8B,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAkBhG"}
@@ -0,0 +1,40 @@
1
+ import { mkdirSync, existsSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+
4
+ const AO_OPENCODE_SECTION_START = "<!-- AO_ORCHESTRATOR_PROMPT_START -->";
5
+ const AO_OPENCODE_SECTION_END = "<!-- AO_ORCHESTRATOR_PROMPT_END -->";
6
+ function getWorkspaceAgentsMdPath(workspacePath) {
7
+ return join(workspacePath, "AGENTS.md");
8
+ }
9
+ function stripExistingAoOpenCodeSection(content) {
10
+ const start = content.indexOf(AO_OPENCODE_SECTION_START);
11
+ const end = content.indexOf(AO_OPENCODE_SECTION_END);
12
+ if (start === -1 || end === -1 || end < start) {
13
+ return content;
14
+ }
15
+ const before = content.slice(0, start).trimEnd();
16
+ const after = content.slice(end + AO_OPENCODE_SECTION_END.length).trimStart();
17
+ if (before && after)
18
+ return `${before}\n\n${after}`;
19
+ return before || after;
20
+ }
21
+ function writeWorkspaceOpenCodeAgentsMd(workspacePath, promptFile) {
22
+ const agentsMdPath = getWorkspaceAgentsMdPath(workspacePath);
23
+ mkdirSync(workspacePath, { recursive: true });
24
+ const existing = existsSync(agentsMdPath) ? readFileSync(agentsMdPath, "utf-8") : "";
25
+ const baseContent = stripExistingAoOpenCodeSection(existing).trimEnd();
26
+ const prompt = readFileSync(promptFile, "utf-8").trim();
27
+ const aoSection = [
28
+ AO_OPENCODE_SECTION_START,
29
+ "## Athene",
30
+ "",
31
+ prompt,
32
+ AO_OPENCODE_SECTION_END,
33
+ ].join("\n");
34
+ const nextContent = baseContent ? `${baseContent}\n\n${aoSection}\n` : `${aoSection}\n`;
35
+ writeFileSync(agentsMdPath, nextContent, "utf-8");
36
+ return agentsMdPath;
37
+ }
38
+
39
+ export { getWorkspaceAgentsMdPath, writeWorkspaceOpenCodeAgentsMd };
40
+ //# sourceMappingURL=opencode-agents-md.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode-agents-md.js","sources":["../src/opencode-agents-md.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAGA,MAAM,yBAAyB,GAAG,uCAAuC;AACzE,MAAM,uBAAuB,GAAG,qCAAqC;AAE/D,SAAU,wBAAwB,CAAC,aAAqB,EAAA;AAC5D,IAAA,OAAO,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC;AACzC;AAEA,SAAS,8BAA8B,CAAC,OAAe,EAAA;IACrD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,yBAAyB,CAAC;IACxD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC;AACpD,IAAA,IAAI,KAAK,KAAK,EAAE,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG,GAAG,KAAK,EAAE;AAC7C,QAAA,OAAO,OAAO;IAChB;AAEA,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE;AAChD,IAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE;IAE7E,IAAI,MAAM,IAAI,KAAK;AAAE,QAAA,OAAO,CAAA,EAAG,MAAM,CAAA,IAAA,EAAO,KAAK,EAAE;IACnD,OAAO,MAAM,IAAI,KAAK;AACxB;AAEM,SAAU,8BAA8B,CAAC,aAAqB,EAAE,UAAkB,EAAA;AACtF,IAAA,MAAM,YAAY,GAAG,wBAAwB,CAAC,aAAa,CAAC;IAC5D,SAAS,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAE7C,IAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,YAAY,CAAC,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,GAAG,EAAE;IACpF,MAAM,WAAW,GAAG,8BAA8B,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE;IACtE,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE;AACvD,IAAA,MAAM,SAAS,GAAG;QAChB,yBAAyB;QACzB,WAAW;QACX,EAAE;QACF,MAAM;QACN,uBAAuB;AACxB,KAAA,CAAC,IAAI,CAAC,IAAI,CAAC;AAEZ,IAAA,MAAM,WAAW,GAAG,WAAW,GAAG,CAAA,EAAG,WAAW,CAAA,IAAA,EAAO,SAAS,IAAI,GAAG,CAAA,EAAG,SAAS,IAAI;AACvF,IAAA,aAAa,CAAC,YAAY,EAAE,WAAW,EAAE,OAAO,CAAC;AACjD,IAAA,OAAO,YAAY;AACrB;;;;"}
@@ -0,0 +1,2 @@
1
+ export declare function writeOpenCodeConfig(baseDir: string, sessionId: string, instructionFiles: string[]): string;
2
+ //# sourceMappingURL=opencode-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode-config.d.ts","sourceRoot":"","sources":["../src/opencode-config.ts"],"names":[],"mappings":"AAOA,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,MAAM,EAAE,GACzB,MAAM,CAeR"}
@@ -0,0 +1,17 @@
1
+ import { mkdirSync, writeFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+
4
+ function getOpenCodeConfigPath(baseDir, sessionId) {
5
+ return join(baseDir, `opencode-config-${sessionId}.json`);
6
+ }
7
+ function writeOpenCodeConfig(baseDir, sessionId, instructionFiles) {
8
+ mkdirSync(baseDir, { recursive: true });
9
+ const configPath = getOpenCodeConfigPath(baseDir, sessionId);
10
+ writeFileSync(configPath, JSON.stringify({
11
+ instructions: instructionFiles,
12
+ }, null, 2), "utf-8");
13
+ return configPath;
14
+ }
15
+
16
+ export { writeOpenCodeConfig };
17
+ //# sourceMappingURL=opencode-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode-config.js","sources":["../src/opencode-config.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAGA,SAAS,qBAAqB,CAAC,OAAe,EAAE,SAAiB,EAAA;IAC/D,OAAO,IAAI,CAAC,OAAO,EAAE,mBAAmB,SAAS,CAAA,KAAA,CAAO,CAAC;AAC3D;SAEgB,mBAAmB,CACjC,OAAe,EACf,SAAiB,EACjB,gBAA0B,EAAA;IAE1B,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACvC,MAAM,UAAU,GAAG,qBAAqB,CAAC,OAAO,EAAE,SAAS,CAAC;AAC5D,IAAA,aAAa,CACX,UAAU,EACV,IAAI,CAAC,SAAS,CACZ;AACE,QAAA,YAAY,EAAE,gBAAgB;AAC/B,KAAA,EACD,IAAI,EACJ,CAAC,CACF,EACD,OAAO,CACR;AACD,IAAA,OAAO,UAAU;AACnB;;;;"}
@@ -0,0 +1,2 @@
1
+ export declare function asValidOpenCodeSessionId(value: unknown): string | undefined;
2
+ //# sourceMappingURL=opencode-session-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode-session-id.d.ts","sourceRoot":"","sources":["../src/opencode-session-id.ts"],"names":[],"mappings":"AAEA,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAK3E"}