autodev-cli 1.4.131 → 1.4.133

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 (265) hide show
  1. package/LICENSE.md +21 -0
  2. package/media/profile/00b-self-verifiable-work.md +62 -0
  3. package/media/profile/00c-verifiable-threads.md +78 -0
  4. package/media/profile/00d-turn-end-retrospective.md +61 -0
  5. package/media/profile/00e-long-horizon-planning.md +83 -0
  6. package/out/commands/office.js +4 -0
  7. package/out/commands/office.js.map +1 -1
  8. package/out/commands/start.js +1 -1
  9. package/out/commands/start.js.map +1 -1
  10. package/out/core/claudeUsage.d.ts +1 -26
  11. package/out/core/claudeUsage.js +15 -91
  12. package/out/core/claudeUsage.js.map +1 -1
  13. package/out/core/modelInfo.d.ts +1 -28
  14. package/out/core/modelInfo.js +15 -94
  15. package/out/core/modelInfo.js.map +1 -1
  16. package/out/core/provider/BaseProvider.d.ts +1 -14
  17. package/out/core/provider/BaseProvider.js +15 -22
  18. package/out/core/provider/BaseProvider.js.map +1 -1
  19. package/out/core/provider/ProviderRegistry.d.ts +1 -12
  20. package/out/core/provider/ProviderRegistry.js +15 -38
  21. package/out/core/provider/ProviderRegistry.js.map +1 -1
  22. package/out/core/provider/contract.d.ts +1 -62
  23. package/out/core/provider/contract.js +15 -6
  24. package/out/core/provider/contract.js.map +1 -1
  25. package/out/core/provider/implementations.d.ts +1 -65
  26. package/out/core/provider/implementations.js +4 -169
  27. package/out/core/provider/implementations.js.map +1 -1
  28. package/out/dispatcher.js +7 -0
  29. package/out/dispatcher.js.map +1 -1
  30. package/out/hookEventNormalizer.d.ts +1 -33
  31. package/out/hookEventNormalizer.js +15 -424
  32. package/out/hookEventNormalizer.js.map +1 -1
  33. package/out/profileBuilder.js +32 -0
  34. package/out/profileBuilder.js.map +1 -1
  35. package/out/providers/base/BaseProvider.d.ts +14 -0
  36. package/out/providers/base/BaseProvider.js +25 -0
  37. package/out/providers/base/BaseProvider.js.map +1 -0
  38. package/out/providers/base/ProviderEvents.d.ts +12 -0
  39. package/out/providers/base/ProviderEvents.js +81 -0
  40. package/out/providers/base/ProviderEvents.js.map +1 -0
  41. package/out/providers/base/ProviderManager.d.ts +25 -0
  42. package/out/providers/base/ProviderManager.js +22 -0
  43. package/out/providers/base/ProviderManager.js.map +1 -0
  44. package/out/providers/base/ProviderModels.d.ts +28 -0
  45. package/out/providers/base/ProviderModels.js +89 -0
  46. package/out/providers/base/ProviderModels.js.map +1 -0
  47. package/out/providers/base/ProviderNormalizer.d.ts +42 -0
  48. package/out/providers/base/ProviderNormalizer.js +439 -0
  49. package/out/providers/base/ProviderNormalizer.js.map +1 -0
  50. package/out/providers/base/ProviderRegistry.d.ts +12 -0
  51. package/out/providers/base/ProviderRegistry.js +42 -0
  52. package/out/providers/base/ProviderRegistry.js.map +1 -0
  53. package/out/providers/base/ProviderSessions.d.ts +15 -0
  54. package/out/providers/base/ProviderSessions.js +15 -0
  55. package/out/providers/base/ProviderSessions.js.map +1 -0
  56. package/out/providers/base/ProviderState.d.ts +9 -0
  57. package/out/providers/base/ProviderState.js +16 -0
  58. package/out/providers/base/ProviderState.js.map +1 -0
  59. package/out/providers/base/ProviderUsage.d.ts +12 -0
  60. package/out/providers/base/ProviderUsage.js +33 -0
  61. package/out/providers/base/ProviderUsage.js.map +1 -0
  62. package/out/providers/base/contract.d.ts +62 -0
  63. package/out/providers/base/contract.js +9 -0
  64. package/out/providers/base/contract.js.map +1 -0
  65. package/out/providers/base/factories.d.ts +64 -0
  66. package/out/providers/base/factories.js +265 -0
  67. package/out/providers/base/factories.js.map +1 -0
  68. package/out/providers/base/implementations.d.ts +5 -0
  69. package/out/providers/base/implementations.js +23 -0
  70. package/out/providers/base/implementations.js.map +1 -0
  71. package/out/providers/base/index.d.ts +13 -0
  72. package/out/providers/base/index.js +29 -0
  73. package/out/providers/base/index.js.map +1 -0
  74. package/out/providers/base/types.d.ts +30 -0
  75. package/out/providers/base/types.js +8 -0
  76. package/out/providers/base/types.js.map +1 -0
  77. package/out/providers/claude/ProviderEvents.d.ts +5 -0
  78. package/out/providers/claude/ProviderEvents.js +18 -0
  79. package/out/providers/claude/ProviderEvents.js.map +1 -0
  80. package/out/providers/claude/ProviderManager.d.ts +39 -0
  81. package/out/providers/claude/ProviderManager.js +50 -0
  82. package/out/providers/claude/ProviderManager.js.map +1 -0
  83. package/out/providers/claude/ProviderModels.d.ts +8 -0
  84. package/out/providers/claude/ProviderModels.js +23 -0
  85. package/out/providers/claude/ProviderModels.js.map +1 -0
  86. package/out/providers/claude/ProviderNormalizer.d.ts +5 -0
  87. package/out/providers/claude/ProviderNormalizer.js +10 -0
  88. package/out/providers/claude/ProviderNormalizer.js.map +1 -0
  89. package/out/providers/claude/ProviderSessions.d.ts +14 -0
  90. package/out/providers/claude/ProviderSessions.js +35 -0
  91. package/out/providers/claude/ProviderSessions.js.map +1 -0
  92. package/out/providers/claude/ProviderState.d.ts +13 -0
  93. package/out/providers/claude/ProviderState.js +19 -0
  94. package/out/providers/claude/ProviderState.js.map +1 -0
  95. package/out/providers/claude/ProviderUsage.d.ts +13 -0
  96. package/out/providers/claude/ProviderUsage.js +59 -0
  97. package/out/providers/claude/ProviderUsage.js.map +1 -0
  98. package/out/providers/claude/cli.d.ts +95 -0
  99. package/out/providers/claude/cli.js +674 -0
  100. package/out/providers/claude/cli.js.map +1 -0
  101. package/out/providers/claude/index.d.ts +9 -0
  102. package/out/providers/claude/index.js +26 -0
  103. package/out/providers/claude/index.js.map +1 -0
  104. package/out/providers/claude/tui.d.ts +38 -0
  105. package/out/providers/claude/tui.js +346 -0
  106. package/out/providers/claude/tui.js.map +1 -0
  107. package/out/providers/claudeCliProvider.d.ts +1 -95
  108. package/out/providers/claudeCliProvider.js +4 -660
  109. package/out/providers/claudeCliProvider.js.map +1 -1
  110. package/out/providers/claudeTuiProvider.d.ts +1 -38
  111. package/out/providers/claudeTuiProvider.js +4 -332
  112. package/out/providers/claudeTuiProvider.js.map +1 -1
  113. package/out/providers/copilot/ProviderEvents.d.ts +6 -0
  114. package/out/providers/copilot/ProviderEvents.js +18 -0
  115. package/out/providers/copilot/ProviderEvents.js.map +1 -0
  116. package/out/providers/copilot/ProviderManager.d.ts +39 -0
  117. package/out/providers/copilot/ProviderManager.js +98 -0
  118. package/out/providers/copilot/ProviderManager.js.map +1 -0
  119. package/out/providers/copilot/ProviderModels.d.ts +7 -0
  120. package/out/providers/copilot/ProviderModels.js +18 -0
  121. package/out/providers/copilot/ProviderModels.js.map +1 -0
  122. package/out/providers/copilot/ProviderNormalizer.d.ts +5 -0
  123. package/out/providers/copilot/ProviderNormalizer.js +10 -0
  124. package/out/providers/copilot/ProviderNormalizer.js.map +1 -0
  125. package/out/providers/copilot/ProviderSessions.d.ts +12 -0
  126. package/out/providers/copilot/ProviderSessions.js +39 -0
  127. package/out/providers/copilot/ProviderSessions.js.map +1 -0
  128. package/out/providers/copilot/ProviderState.d.ts +11 -0
  129. package/out/providers/copilot/ProviderState.js +17 -0
  130. package/out/providers/copilot/ProviderState.js.map +1 -0
  131. package/out/providers/copilot/ProviderUsage.d.ts +12 -0
  132. package/out/providers/copilot/ProviderUsage.js +41 -0
  133. package/out/providers/copilot/ProviderUsage.js.map +1 -0
  134. package/out/providers/copilot/cli.d.ts +16 -0
  135. package/out/providers/copilot/cli.js +52 -0
  136. package/out/providers/copilot/cli.js.map +1 -0
  137. package/out/providers/copilot/index.d.ts +10 -0
  138. package/out/providers/copilot/index.js +27 -0
  139. package/out/providers/copilot/index.js.map +1 -0
  140. package/out/providers/copilot/sdk.d.ts +22 -0
  141. package/out/providers/copilot/sdk.js +489 -0
  142. package/out/providers/copilot/sdk.js.map +1 -0
  143. package/out/providers/copilot/sessions.d.ts +25 -0
  144. package/out/providers/copilot/sessions.js +214 -0
  145. package/out/providers/copilot/sessions.js.map +1 -0
  146. package/out/providers/copilotCliProvider.d.ts +1 -16
  147. package/out/providers/copilotCliProvider.js +15 -49
  148. package/out/providers/copilotCliProvider.js.map +1 -1
  149. package/out/providers/copilotSdkProvider.d.ts +1 -22
  150. package/out/providers/copilotSdkProvider.js +4 -475
  151. package/out/providers/copilotSdkProvider.js.map +1 -1
  152. package/out/providers/copilotSessions.d.ts +1 -25
  153. package/out/providers/copilotSessions.js +4 -200
  154. package/out/providers/copilotSessions.js.map +1 -1
  155. package/out/providers/dummy/ProviderEvents.d.ts +5 -0
  156. package/out/providers/dummy/ProviderEvents.js +16 -0
  157. package/out/providers/dummy/ProviderEvents.js.map +1 -0
  158. package/out/providers/dummy/ProviderManager.d.ts +31 -0
  159. package/out/providers/dummy/ProviderManager.js +115 -0
  160. package/out/providers/dummy/ProviderManager.js.map +1 -0
  161. package/out/providers/dummy/ProviderModels.d.ts +7 -0
  162. package/out/providers/dummy/ProviderModels.js +15 -0
  163. package/out/providers/dummy/ProviderModels.js.map +1 -0
  164. package/out/providers/dummy/ProviderNormalizer.d.ts +4 -0
  165. package/out/providers/dummy/ProviderNormalizer.js +9 -0
  166. package/out/providers/dummy/ProviderNormalizer.js.map +1 -0
  167. package/out/providers/dummy/ProviderSessions.d.ts +12 -0
  168. package/out/providers/dummy/ProviderSessions.js +105 -0
  169. package/out/providers/dummy/ProviderSessions.js.map +1 -0
  170. package/out/providers/dummy/ProviderState.d.ts +12 -0
  171. package/out/providers/dummy/ProviderState.js +23 -0
  172. package/out/providers/dummy/ProviderState.js.map +1 -0
  173. package/out/providers/dummy/ProviderUsage.d.ts +9 -0
  174. package/out/providers/dummy/ProviderUsage.js +27 -0
  175. package/out/providers/dummy/ProviderUsage.js.map +1 -0
  176. package/out/providers/dummy/commands.d.ts +9 -0
  177. package/out/providers/dummy/commands.js +48 -0
  178. package/out/providers/dummy/commands.js.map +1 -0
  179. package/out/providers/dummy/index.d.ts +10 -0
  180. package/out/providers/dummy/index.js +27 -0
  181. package/out/providers/dummy/index.js.map +1 -0
  182. package/out/providers/dummy/office.d.ts +23 -0
  183. package/out/providers/dummy/office.js +66 -0
  184. package/out/providers/dummy/office.js.map +1 -0
  185. package/out/providers/dummy/traces.d.ts +8 -0
  186. package/out/providers/dummy/traces.js +174 -0
  187. package/out/providers/dummy/traces.js.map +1 -0
  188. package/out/providers/grok/ProviderEvents.d.ts +6 -0
  189. package/out/providers/grok/ProviderEvents.js +17 -0
  190. package/out/providers/grok/ProviderEvents.js.map +1 -0
  191. package/out/providers/grok/ProviderManager.d.ts +42 -0
  192. package/out/providers/grok/ProviderManager.js +48 -0
  193. package/out/providers/grok/ProviderManager.js.map +1 -0
  194. package/out/providers/grok/ProviderModels.d.ts +7 -0
  195. package/out/providers/grok/ProviderModels.js +16 -0
  196. package/out/providers/grok/ProviderModels.js.map +1 -0
  197. package/out/providers/grok/ProviderNormalizer.d.ts +5 -0
  198. package/out/providers/grok/ProviderNormalizer.js +10 -0
  199. package/out/providers/grok/ProviderNormalizer.js.map +1 -0
  200. package/out/providers/grok/ProviderSessions.d.ts +12 -0
  201. package/out/providers/grok/ProviderSessions.js +27 -0
  202. package/out/providers/grok/ProviderSessions.js.map +1 -0
  203. package/out/providers/grok/ProviderState.d.ts +10 -0
  204. package/out/providers/grok/ProviderState.js +15 -0
  205. package/out/providers/grok/ProviderState.js.map +1 -0
  206. package/out/providers/grok/ProviderUsage.d.ts +7 -0
  207. package/out/providers/grok/ProviderUsage.js +20 -0
  208. package/out/providers/grok/ProviderUsage.js.map +1 -0
  209. package/out/providers/grok/index.d.ts +9 -0
  210. package/out/providers/grok/index.js +26 -0
  211. package/out/providers/grok/index.js.map +1 -0
  212. package/out/providers/grok/sessions.d.ts +27 -0
  213. package/out/providers/grok/sessions.js +246 -0
  214. package/out/providers/grok/sessions.js.map +1 -0
  215. package/out/providers/grok/tui.d.ts +38 -0
  216. package/out/providers/grok/tui.js +1630 -0
  217. package/out/providers/grok/tui.js.map +1 -0
  218. package/out/providers/grokSessions.d.ts +1 -27
  219. package/out/providers/grokSessions.js +4 -232
  220. package/out/providers/grokSessions.js.map +1 -1
  221. package/out/providers/grokTuiProvider.d.ts +1 -38
  222. package/out/providers/grokTuiProvider.js +4 -1616
  223. package/out/providers/grokTuiProvider.js.map +1 -1
  224. package/out/providers/opencode/ProviderEvents.d.ts +6 -0
  225. package/out/providers/opencode/ProviderEvents.js +18 -0
  226. package/out/providers/opencode/ProviderEvents.js.map +1 -0
  227. package/out/providers/opencode/ProviderManager.d.ts +39 -0
  228. package/out/providers/opencode/ProviderManager.js +90 -0
  229. package/out/providers/opencode/ProviderManager.js.map +1 -0
  230. package/out/providers/opencode/ProviderModels.d.ts +7 -0
  231. package/out/providers/opencode/ProviderModels.js +17 -0
  232. package/out/providers/opencode/ProviderModels.js.map +1 -0
  233. package/out/providers/opencode/ProviderNormalizer.d.ts +5 -0
  234. package/out/providers/opencode/ProviderNormalizer.js +10 -0
  235. package/out/providers/opencode/ProviderNormalizer.js.map +1 -0
  236. package/out/providers/opencode/ProviderSessions.d.ts +11 -0
  237. package/out/providers/opencode/ProviderSessions.js +28 -0
  238. package/out/providers/opencode/ProviderSessions.js.map +1 -0
  239. package/out/providers/opencode/ProviderState.d.ts +14 -0
  240. package/out/providers/opencode/ProviderState.js +20 -0
  241. package/out/providers/opencode/ProviderState.js.map +1 -0
  242. package/out/providers/opencode/ProviderUsage.d.ts +7 -0
  243. package/out/providers/opencode/ProviderUsage.js +20 -0
  244. package/out/providers/opencode/ProviderUsage.js.map +1 -0
  245. package/out/providers/opencode/cli.d.ts +29 -0
  246. package/out/providers/opencode/cli.js +199 -0
  247. package/out/providers/opencode/cli.js.map +1 -0
  248. package/out/providers/opencode/index.d.ts +9 -0
  249. package/out/providers/opencode/index.js +26 -0
  250. package/out/providers/opencode/index.js.map +1 -0
  251. package/out/providers/opencode/sdk.d.ts +32 -0
  252. package/out/providers/opencode/sdk.js +610 -0
  253. package/out/providers/opencode/sdk.js.map +1 -0
  254. package/out/providers/opencodeCliProvider.d.ts +1 -29
  255. package/out/providers/opencodeCliProvider.js +15 -196
  256. package/out/providers/opencodeCliProvider.js.map +1 -1
  257. package/out/providers/opencodeSdkProvider.d.ts +1 -32
  258. package/out/providers/opencodeSdkProvider.js +4 -596
  259. package/out/providers/opencodeSdkProvider.js.map +1 -1
  260. package/out/providers.d.ts +1 -1
  261. package/out/providers.js +5 -0
  262. package/out/providers.js.map +1 -1
  263. package/out/sdk/index.js +5 -0
  264. package/out/sdk/index.js.map +1 -1
  265. package/package.json +2 -2
@@ -0,0 +1,439 @@
1
+ "use strict";
2
+ // ---------------------------------------------------------------------------
3
+ // hookEventNormalizer — converts raw events from any supported provider into
4
+ // the unified hook-event schema written to .autodev/hooks-events.jsonl.
5
+ //
6
+ // Unified schema (same as Claude/Copilot CLI hook scripts):
7
+ // hook_event_name — PascalCase event name (required)
8
+ // provider — source provider string (required)
9
+ // tool_name — name of tool involved (optional)
10
+ // tool_input — tool arguments (optional)
11
+ // tool_output — { text: string } (optional)
12
+ // success — boolean (optional)
13
+ // session_id — session / call ID (optional)
14
+ // message — free-form text (optional)
15
+ // timestamp — ISO-8601 (added here) (required)
16
+ //
17
+ // Usage:
18
+ // import { normalizeEvent } from './hookEventNormalizer';
19
+ // const hookEv = normalizeEvent('copilot-sdk', rawSdkEvent);
20
+ // if (hookEv) fs.appendFileSync(jsonlPath, JSON.stringify(hookEv) + '\n');
21
+ // ---------------------------------------------------------------------------
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.ProviderNormalizer = void 0;
24
+ exports.eventTypeFor = eventTypeFor;
25
+ exports.normalizeEvent = normalizeEvent;
26
+ exports.appendHookEvent = appendHookEvent;
27
+ // ---------------------------------------------------------------------------
28
+ // Helpers
29
+ // ---------------------------------------------------------------------------
30
+ function safeStr(v) {
31
+ if (v == null) {
32
+ return null;
33
+ }
34
+ if (typeof v === 'string') {
35
+ return v;
36
+ }
37
+ try {
38
+ return JSON.stringify(v);
39
+ }
40
+ catch {
41
+ return String(v);
42
+ }
43
+ }
44
+ function safeObj(v) {
45
+ if (v == null) {
46
+ return null;
47
+ }
48
+ try {
49
+ return JSON.parse(JSON.stringify(v));
50
+ }
51
+ catch {
52
+ return String(v);
53
+ }
54
+ }
55
+ function textOut(v, maxLen = 400) {
56
+ if (v == null) {
57
+ return null;
58
+ }
59
+ const s = typeof v === 'string' ? v : safeStr(v) ?? '';
60
+ return s.length > 0 ? { text: s.slice(0, maxLen) } : null;
61
+ }
62
+ // ---------------------------------------------------------------------------
63
+ // Provider: 'copilot-sdk'
64
+ //
65
+ // Raw event shape: { type: string; data?: Record<string, unknown>; ephemeral?: boolean }
66
+ // Caller should only pass non-ephemeral events.
67
+ // toolCallId → toolName: populated by tool.execution_start, consumed by
68
+ // tool.execution_complete so we can resolve the tool name even when the SDK
69
+ // doesn't repeat it in the completion payload. Auto-pruned after 500 entries.
70
+ const _toolCallNames = new Map();
71
+ // toolCallId → intentionSummary: populated by assistant.message (toolRequests),
72
+ // consumed by tool.execution_start so PreToolUse carries the agent's stated reasoning.
73
+ const _toolCallIntentions = new Map();
74
+ // ---------------------------------------------------------------------------
75
+ function normalizeCopilotSdk(raw, provider) {
76
+ const type = raw['type'];
77
+ if (!type) {
78
+ return null;
79
+ }
80
+ const d = raw['data'] ?? {};
81
+ const toolName = (d['toolName'] ?? d['name'] ?? d['toolId']);
82
+ // Safe-serialise the raw data payload so pixel-office has all available fields.
83
+ const rawData = safeObj(d);
84
+ // Base event: include safe raw data so nothing is lost, then let mapped
85
+ // fields below override / supplement.
86
+ const base = {
87
+ sdk_type: type,
88
+ data: rawData,
89
+ };
90
+ switch (type) {
91
+ case 'tool.execution_start': {
92
+ const callId = safeStr(d['toolCallId']);
93
+ if (callId && toolName) {
94
+ if (_toolCallNames.size > 500) {
95
+ _toolCallNames.clear();
96
+ }
97
+ _toolCallNames.set(callId, toolName);
98
+ }
99
+ // Look up reasoning from the preceding assistant.message toolRequests
100
+ const reasoning = callId ? (_toolCallIntentions.get(callId) ?? null) : null;
101
+ if (callId) {
102
+ _toolCallIntentions.delete(callId);
103
+ }
104
+ return {
105
+ ...base,
106
+ hook_event_name: 'PreToolUse',
107
+ provider,
108
+ tool_name: toolName ?? 'unknown',
109
+ tool_input: safeObj(d['arguments']),
110
+ session_id: callId,
111
+ reasoning,
112
+ };
113
+ }
114
+ case 'tool.execution_complete': {
115
+ const success = d['success'];
116
+ const result = d['result'];
117
+ const err = d['error'];
118
+ const outRaw = success === false
119
+ ? (err?.['message'])
120
+ : (result?.['content'] ?? result?.['detailedContent']);
121
+ // tool name: prefer explicit field, then the start-event cache by toolCallId,
122
+ // then telemetry properties.command (present on failures), else 'unknown'.
123
+ const callId2 = safeStr(d['toolCallId']);
124
+ const telemetry = d['toolTelemetry'];
125
+ const telProps = telemetry?.['properties'];
126
+ const resolvedToolName = toolName
127
+ ?? (callId2 ? _toolCallNames.get(callId2) : undefined)
128
+ ?? safeStr(telProps?.['command'])
129
+ ?? 'unknown';
130
+ if (callId2) {
131
+ _toolCallNames.delete(callId2);
132
+ } // clean up
133
+ // Parse file paths (JSON string in restrictedProperties.filePaths)
134
+ const telRestricted = telemetry?.['restrictedProperties'];
135
+ const fpRaw = telRestricted?.['filePaths'];
136
+ let filePaths = null;
137
+ if (typeof fpRaw === 'string') {
138
+ try {
139
+ const parsed = JSON.parse(fpRaw);
140
+ if (Array.isArray(parsed)) {
141
+ filePaths = parsed.filter((x) => typeof x === 'string');
142
+ }
143
+ }
144
+ catch { /* ignore */ }
145
+ }
146
+ else if (Array.isArray(fpRaw)) {
147
+ filePaths = fpRaw.filter((x) => typeof x === 'string');
148
+ }
149
+ // Lines added/removed from telemetry metrics
150
+ const telMetrics = telemetry?.['metrics'];
151
+ const linesAdded = typeof telMetrics?.['linesAdded'] === 'number' ? telMetrics['linesAdded'] : null;
152
+ const linesRemoved = typeof telMetrics?.['linesRemoved'] === 'number' ? telMetrics['linesRemoved'] : null;
153
+ return {
154
+ ...base,
155
+ hook_event_name: success === false ? 'PostToolUseFailure' : 'PostToolUse',
156
+ provider,
157
+ tool_name: resolvedToolName,
158
+ tool_output: textOut(outRaw),
159
+ success: success ?? true,
160
+ session_id: safeStr(d['toolCallId']),
161
+ model: safeStr(d['model']),
162
+ interaction_id: safeStr(d['interactionId']),
163
+ file_paths: filePaths,
164
+ lines_added: linesAdded,
165
+ lines_removed: linesRemoved,
166
+ };
167
+ }
168
+ case 'subagent.started':
169
+ return {
170
+ ...base,
171
+ hook_event_name: 'SubagentStart',
172
+ provider,
173
+ message: safeStr(d['agentDisplayName'] ?? d['agentName']),
174
+ session_id: safeStr(d['toolCallId']),
175
+ };
176
+ case 'assistant.message': {
177
+ const content = d['content'];
178
+ const tools = d['toolRequests'];
179
+ const outputTokens = typeof d['outputTokens'] === 'number' ? d['outputTokens'] : null;
180
+ const interactionId = safeStr(d['interactionId']);
181
+ if ((!content || content.length === 0) && (!tools || tools.length === 0)) {
182
+ return null;
183
+ }
184
+ // Store intentionSummary per toolCallId so PreToolUse can carry reasoning
185
+ if (tools && tools.length > 0) {
186
+ for (const t of tools) {
187
+ const cid = safeStr(t['toolCallId']);
188
+ const intention = safeStr(t['intentionSummary']);
189
+ if (cid && intention) {
190
+ if (_toolCallIntentions.size > 500) {
191
+ _toolCallIntentions.clear();
192
+ }
193
+ _toolCallIntentions.set(cid, intention);
194
+ }
195
+ }
196
+ }
197
+ // Build message: prefer content text; fall back to intention summaries; then count
198
+ let summary;
199
+ if (content && content.length > 0) {
200
+ summary = content.slice(0, 400);
201
+ }
202
+ else if (tools && tools.length > 0) {
203
+ const intentions = tools
204
+ .map(t => safeStr(t['intentionSummary']))
205
+ .filter((s) => s !== null && s.length > 0)
206
+ .join(' | ');
207
+ summary = intentions || `[${tools.length} tool call(s)]`;
208
+ }
209
+ else {
210
+ summary = '[empty message]';
211
+ }
212
+ return {
213
+ ...base,
214
+ hook_event_name: 'AgentMessage',
215
+ provider,
216
+ message: summary,
217
+ session_id: safeStr(d['messageId'] ?? d['interactionId']),
218
+ interaction_id: interactionId,
219
+ output_tokens: outputTokens,
220
+ };
221
+ }
222
+ case 'session.task_complete':
223
+ return {
224
+ ...base,
225
+ hook_event_name: 'Stop',
226
+ provider,
227
+ message: safeStr(d['summary']),
228
+ };
229
+ case 'user.message':
230
+ return {
231
+ ...base,
232
+ hook_event_name: 'UserPromptSubmit',
233
+ provider,
234
+ message: safeStr(d['content']),
235
+ session_id: safeStr(d['messageId']),
236
+ };
237
+ case 'assistant.turn_start':
238
+ return { ...base, hook_event_name: 'TurnStart', provider, interaction_id: safeStr(d['interactionId']) };
239
+ case 'assistant.turn_end':
240
+ return { ...base, hook_event_name: 'TurnEnd', provider };
241
+ case 'permission.requested':
242
+ return {
243
+ ...base,
244
+ hook_event_name: 'PermissionRequest',
245
+ provider,
246
+ message: safeStr(d['permissionRequest']),
247
+ session_id: safeStr(d['requestId']),
248
+ };
249
+ default:
250
+ return null; // unknown / uninteresting event
251
+ }
252
+ }
253
+ // ---------------------------------------------------------------------------
254
+ // Provider: 'opencode-sdk'
255
+ //
256
+ // Raw event shape: the outer SSE envelope; relevant data in payload.properties.
257
+ // ---------------------------------------------------------------------------
258
+ function normalizeOpencodeSDK(raw, provider) {
259
+ const payload = (raw['payload'] ?? raw);
260
+ const type = payload['type'];
261
+ const props = payload['properties'];
262
+ if (!type) {
263
+ return null;
264
+ }
265
+ const toolName = (props?.['toolID'] ?? props?.['name'] ?? props?.['tool']);
266
+ const sessionId = safeStr(props?.['sessionID'] ?? props?.['session_id']);
267
+ switch (type) {
268
+ case 'tool.execute.before':
269
+ return {
270
+ hook_event_name: 'PreToolUse',
271
+ provider,
272
+ tool_name: toolName ?? 'unknown',
273
+ tool_input: safeObj(props?.['args'] ?? props?.['input']),
274
+ session_id: sessionId,
275
+ };
276
+ case 'tool.execute.after': {
277
+ const rawOut = props?.['output'] ?? props?.['result'] ?? props?.['text'];
278
+ return {
279
+ hook_event_name: 'PostToolUse',
280
+ provider,
281
+ tool_name: toolName ?? 'unknown',
282
+ tool_input: safeObj(props?.['args'] ?? props?.['input']),
283
+ tool_output: textOut(rawOut),
284
+ session_id: sessionId,
285
+ };
286
+ }
287
+ case 'permission.updated': {
288
+ const permTitle = safeStr(props?.['title']);
289
+ return {
290
+ hook_event_name: 'PermissionReplied',
291
+ provider,
292
+ message: permTitle,
293
+ session_id: sessionId,
294
+ };
295
+ }
296
+ case 'session.compacted':
297
+ return {
298
+ hook_event_name: 'PostCompact',
299
+ provider,
300
+ session_id: sessionId,
301
+ };
302
+ case 'session.idle': {
303
+ // Optional _assistantText injected by opencodeSdkProvider for flush
304
+ const assistantText = props?.['_assistantText'];
305
+ if (assistantText) {
306
+ return {
307
+ hook_event_name: 'AgentMessage',
308
+ provider,
309
+ message: assistantText,
310
+ session_id: sessionId,
311
+ };
312
+ }
313
+ return {
314
+ hook_event_name: 'Stop',
315
+ provider,
316
+ session_id: sessionId,
317
+ };
318
+ }
319
+ case 'session.error':
320
+ return {
321
+ hook_event_name: 'StopFailure',
322
+ provider,
323
+ message: safeStr(props?.['error'] ?? props?.['message']),
324
+ session_id: sessionId,
325
+ };
326
+ case 'message.part.delta':
327
+ return null; // streamed text — not forwarded
328
+ default:
329
+ return null;
330
+ }
331
+ }
332
+ // ---------------------------------------------------------------------------
333
+ // Provider: 'claude-cli' / 'copilot-cli'
334
+ //
335
+ // Raw event = the JSON that was already written by the hook script.
336
+ // It already has hook_event_name + provider; we just ensure timestamp + schema.
337
+ // ---------------------------------------------------------------------------
338
+ function normalizeCliHook(raw, provider) {
339
+ const hookName = raw['hook_event_name'] ?? raw['hook'];
340
+ if (!hookName) {
341
+ return null;
342
+ }
343
+ return {
344
+ ...raw,
345
+ hook_event_name: hookName,
346
+ provider: raw['provider'] ?? provider,
347
+ tool_name: raw['tool_name'] ?? raw['tool'],
348
+ session_id: safeStr(raw['session_id'] ?? raw['sessionId']),
349
+ message: safeStr(raw['message'] ?? raw['summary']),
350
+ };
351
+ }
352
+ // ---------------------------------------------------------------------------
353
+ // Public API
354
+ // ---------------------------------------------------------------------------
355
+ /**
356
+ * Normalize a raw provider event into the unified HookEvent schema.
357
+ *
358
+ * @param provider One of: 'copilot-sdk' | 'opencode-sdk' | 'claude-cli' |
359
+ * 'copilot-cli' | or any string for pass-through.
360
+ * @param raw The raw event object from the provider.
361
+ * @returns A HookEvent ready to be JSON-stringified, or null if the
362
+ * event type is not mapped / not interesting.
363
+ */
364
+ // Canonical hook_event_name (PascalCase) → event_type (snake_case). Mirrors
365
+ // pixel-office's HookEventNormalizer::CLAUDE_CODE_TYPES so the CLI can emit the
366
+ // final event_type itself — the server then trusts it and doesn't have to know
367
+ // every provider (which is what let grok-tui events fall through to "unknown").
368
+ const EVENT_TYPE_MAP = {
369
+ PreToolUse: 'tool_start', PostToolUse: 'tool_end', PostToolUseFailure: 'tool_error',
370
+ SessionStart: 'session_start', SessionEnd: 'session_end', Stop: 'session_end', StopFailure: 'stop_failure',
371
+ SubagentStart: 'subagent_start', SubagentStop: 'subagent_stop', TeammateIdle: 'teammate_idle',
372
+ PermissionRequest: 'permission_request', PermissionDenied: 'permission_denied', PermissionReplied: 'permission_replied',
373
+ UserPromptSubmit: 'user_prompt_submit',
374
+ TaskCreated: 'task_created', TaskCompleted: 'task_completed',
375
+ CwdChanged: 'cwd_changed', FileChanged: 'file_changed', InstructionsLoaded: 'instructions_loaded', ConfigChange: 'config_change',
376
+ PreCompact: 'pre_compact', PostCompact: 'post_compact',
377
+ Elicitation: 'elicitation', ElicitationResult: 'elicitation_result',
378
+ WorktreeCreate: 'worktree_create', WorktreeRemove: 'worktree_remove',
379
+ Notification: 'notification',
380
+ AgentMessage: 'agent_message', TurnStart: 'turn_start', TurnEnd: 'turn_end',
381
+ };
382
+ /** Canonical event_type for a hook_event_name (falls back to snake_case-ing the name). */
383
+ function eventTypeFor(hookEventName) {
384
+ if (EVENT_TYPE_MAP[hookEventName]) {
385
+ return EVENT_TYPE_MAP[hookEventName];
386
+ }
387
+ // Unknown PascalCase name → best-effort snake_case so it's at least descriptive.
388
+ return hookEventName.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toLowerCase();
389
+ }
390
+ function normalizeEvent(provider, raw) {
391
+ let partial = null;
392
+ if (provider === 'copilot-sdk') {
393
+ partial = normalizeCopilotSdk(raw, provider);
394
+ }
395
+ else if (provider === 'opencode-sdk') {
396
+ partial = normalizeOpencodeSDK(raw, provider);
397
+ }
398
+ else {
399
+ // claude-cli, copilot-cli, or any other — treat as already-formatted hook
400
+ partial = normalizeCliHook(raw, provider);
401
+ }
402
+ if (!partial) {
403
+ return null;
404
+ }
405
+ // Emit the canonical event_type alongside hook_event_name so downstream
406
+ // consumers (pixel-office) never have to re-derive it per provider.
407
+ const event_type = eventTypeFor(String(partial.hook_event_name ?? 'unknown'));
408
+ return { ...partial, event_type, timestamp: new Date().toISOString() };
409
+ }
410
+ /**
411
+ * Append a normalized event to a JSONL sink file.
412
+ * Creates the directory if it doesn't exist.
413
+ * Silently ignores write errors (non-critical path).
414
+ */
415
+ function appendHookEvent(jsonlPath, provider, raw, fs, path, onError) {
416
+ const ev = normalizeEvent(provider, raw);
417
+ if (!ev) {
418
+ return;
419
+ }
420
+ try {
421
+ fs.mkdirSync(path.dirname(jsonlPath), { recursive: true });
422
+ fs.appendFileSync(jsonlPath, JSON.stringify(ev) + '\n', 'utf8');
423
+ }
424
+ catch (e) {
425
+ onError?.(e);
426
+ }
427
+ }
428
+ /**
429
+ * Per-family normalizer. Concrete providers override `normalizeRaw` when they
430
+ * speak a native event dialect (copilot-sdk, opencode-sdk, dummy). CLI-hook
431
+ * families inherit the already-formatted pass-through.
432
+ */
433
+ class ProviderNormalizer {
434
+ normalize(raw) {
435
+ return normalizeEvent(this.provider, raw);
436
+ }
437
+ }
438
+ exports.ProviderNormalizer = ProviderNormalizer;
439
+ //# sourceMappingURL=ProviderNormalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProviderNormalizer.js","sourceRoot":"","sources":["../../../src/providers/base/ProviderNormalizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { ProviderId } from '../../providers';
2
+ import { IProvider } from './contract';
3
+ export declare class ProviderRegistry {
4
+ private readonly _providers;
5
+ constructor(providers: IProvider[]);
6
+ /** Resolve a provider by id. Throws on an unknown id (fail loudly). */
7
+ get(id: ProviderId): IProvider;
8
+ has(id: ProviderId): boolean;
9
+ ids(): ProviderId[];
10
+ }
11
+ /** The default registry wired with every built-in provider. */
12
+ export declare const providerRegistry: ProviderRegistry;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ // ---------------------------------------------------------------------------
3
+ // ProviderRegistry — single point that maps a ProviderId to its IProvider
4
+ // strategy (dependency inversion: callers depend on this + IProvider, never on
5
+ // a concrete provider). Adding a provider = add a class + one line here, with
6
+ // no change to the dispatcher (open/closed).
7
+ // ---------------------------------------------------------------------------
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.providerRegistry = exports.ProviderRegistry = void 0;
10
+ const implementations_1 = require("./implementations");
11
+ class ProviderRegistry {
12
+ _providers = new Map();
13
+ constructor(providers) {
14
+ for (const p of providers) {
15
+ this._providers.set(p.id, p);
16
+ }
17
+ }
18
+ /** Resolve a provider by id. Throws on an unknown id (fail loudly). */
19
+ get(id) {
20
+ const p = this._providers.get(id);
21
+ if (!p) {
22
+ throw new Error(`No provider registered for id "${id}"`);
23
+ }
24
+ return p;
25
+ }
26
+ has(id) { return this._providers.has(id); }
27
+ ids() { return [...this._providers.keys()]; }
28
+ }
29
+ exports.ProviderRegistry = ProviderRegistry;
30
+ /** The default registry wired with every built-in provider. */
31
+ exports.providerRegistry = new ProviderRegistry([
32
+ new implementations_1.ClaudeCliProvider(),
33
+ new implementations_1.CopilotCliProvider(),
34
+ new implementations_1.OpenCodeCliProvider(),
35
+ new implementations_1.ClaudeTuiProvider(),
36
+ new implementations_1.CopilotSdkProvider(),
37
+ new implementations_1.OpenCodeSdkProvider(),
38
+ new implementations_1.GrokCliProvider(),
39
+ new implementations_1.GrokTuiProvider(),
40
+ implementations_1.dummyProvider,
41
+ ]);
42
+ //# sourceMappingURL=ProviderRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProviderRegistry.js","sourceRoot":"","sources":["../../../src/providers/base/ProviderRegistry.ts"],"names":[],"mappings":";AAAA,8EAA8E;AAC9E,0EAA0E;AAC1E,+EAA+E;AAC/E,8EAA8E;AAC9E,6CAA6C;AAC7C,8EAA8E;;;AAI9E,uDAI2B;AAE3B,MAAa,gBAAgB;IACV,UAAU,GAAG,IAAI,GAAG,EAAyB,CAAC;IAE/D,YAAY,SAAsB;QAChC,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAAC,CAAC;IAC9D,CAAC;IAED,uEAAuE;IACvE,GAAG,CAAC,EAAc;QAChB,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,CAAC,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAC;QAAC,CAAC;QACrE,OAAO,CAAC,CAAC;IACX,CAAC;IAED,GAAG,CAAC,EAAc,IAAa,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAEhE,GAAG,KAAmB,OAAO,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;CAC5D;AAjBD,4CAiBC;AAED,+DAA+D;AAClD,QAAA,gBAAgB,GAAG,IAAI,gBAAgB,CAAC;IACnD,IAAI,mCAAiB,EAAE;IACvB,IAAI,oCAAkB,EAAE;IACxB,IAAI,qCAAmB,EAAE;IACzB,IAAI,mCAAiB,EAAE;IACvB,IAAI,oCAAkB,EAAE;IACxB,IAAI,qCAAmB,EAAE;IACzB,IAAI,iCAAe,EAAE;IACrB,IAAI,iCAAe,EAAE;IACrB,+BAAa;CACd,CAAC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { Logger } from './contract';
2
+ import type { SessionRecord, TranscriptMsg } from './types';
3
+ export declare abstract class ProviderSessions {
4
+ abstract readonly family: string;
5
+ /** Sessions for one workspace, newest first. */
6
+ abstract list(root: string): SessionRecord[] | Promise<SessionRecord[]>;
7
+ /** Latest session id for `root`, or undefined when none exist. */
8
+ resolveLatest(root: string, _log?: Logger): Promise<string | undefined>;
9
+ /** Read a transcript by id into a normalized message array. */
10
+ abstract readTranscript(id: string, opts?: {
11
+ cwd?: string;
12
+ file?: string;
13
+ limit?: number;
14
+ }): TranscriptMsg[];
15
+ }
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ // ---------------------------------------------------------------------------
3
+ // ProviderSessions — list / read / resolve conversation sessions.
4
+ // ---------------------------------------------------------------------------
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ProviderSessions = void 0;
7
+ class ProviderSessions {
8
+ /** Latest session id for `root`, or undefined when none exist. */
9
+ async resolveLatest(root, _log) {
10
+ const all = await this.list(root);
11
+ return all[0]?.id;
12
+ }
13
+ }
14
+ exports.ProviderSessions = ProviderSessions;
15
+ //# sourceMappingURL=ProviderSessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProviderSessions.js","sourceRoot":"","sources":["../../../src/providers/base/ProviderSessions.ts"],"names":[],"mappings":";AAAA,8EAA8E;AAC9E,kEAAkE;AAClE,8EAA8E;;;AAK9E,MAAsB,gBAAgB;IAMpC,kEAAkE;IAClE,KAAK,CAAC,aAAa,CAAC,IAAY,EAAE,IAAa;QAC7C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACpB,CAAC;CAIF;AAdD,4CAcC"}
@@ -0,0 +1,9 @@
1
+ import type { Logger } from './contract';
2
+ export declare abstract class ProviderState {
3
+ abstract readonly family: string;
4
+ isBusy(_root: string): boolean;
5
+ lastActivity(_root: string): number;
6
+ forceIdle(_root: string): void;
7
+ close(_root: string, _log: Logger): void;
8
+ closeAll(): void;
9
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ // ---------------------------------------------------------------------------
3
+ // ProviderState — busy / activity / teardown for a persistent (sdk/tui)
4
+ // provider. CLI providers inherit the idle defaults.
5
+ // ---------------------------------------------------------------------------
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.ProviderState = void 0;
8
+ class ProviderState {
9
+ isBusy(_root) { return false; }
10
+ lastActivity(_root) { return 0; }
11
+ forceIdle(_root) { }
12
+ close(_root, _log) { }
13
+ closeAll() { }
14
+ }
15
+ exports.ProviderState = ProviderState;
16
+ //# sourceMappingURL=ProviderState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProviderState.js","sourceRoot":"","sources":["../../../src/providers/base/ProviderState.ts"],"names":[],"mappings":";AAAA,8EAA8E;AAC9E,wEAAwE;AACxE,qDAAqD;AACrD,8EAA8E;;;AAI9E,MAAsB,aAAa;IAGjC,MAAM,CAAC,KAAa,IAAa,OAAO,KAAK,CAAC,CAAC,CAAC;IAChD,YAAY,CAAC,KAAa,IAAY,OAAO,CAAC,CAAC,CAAC,CAAC;IACjD,SAAS,CAAC,KAAa,IAAsB,CAAC;IAC9C,KAAK,CAAC,KAAa,EAAE,IAAY,IAAsB,CAAC;IACxD,QAAQ,KAAuB,CAAC;CACjC;AARD,sCAQC"}
@@ -0,0 +1,12 @@
1
+ import type { UsagePayload } from './types';
2
+ /** Coerce an unknown to a finite, non-negative number, else 0. */
3
+ export declare function nonNeg(v: unknown): number;
4
+ /** Clamp a raw percent to 0..100 with one decimal place. */
5
+ export declare function clampPct(raw: number): number;
6
+ export declare abstract class ProviderUsage {
7
+ abstract readonly family: string;
8
+ abstract readonly defaultContextLimit: number;
9
+ /** Build a usage snapshot from a provider-native payload, or null if empty. */
10
+ abstract extract(raw: unknown, model?: string | null): UsagePayload | null;
11
+ protected pack(input: number, output: number, context: number, limit: number): UsagePayload | null;
12
+ }
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ // ---------------------------------------------------------------------------
3
+ // ProviderUsage — turn a provider-native usage block into the compact
4
+ // snapshot pixel-office renders (context% + tokens).
5
+ // ---------------------------------------------------------------------------
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.ProviderUsage = void 0;
8
+ exports.nonNeg = nonNeg;
9
+ exports.clampPct = clampPct;
10
+ /** Coerce an unknown to a finite, non-negative number, else 0. */
11
+ function nonNeg(v) {
12
+ return typeof v === 'number' && Number.isFinite(v) && v >= 0 ? v : 0;
13
+ }
14
+ /** Clamp a raw percent to 0..100 with one decimal place. */
15
+ function clampPct(raw) {
16
+ return Math.max(0, Math.min(100, Math.round(raw * 10) / 10));
17
+ }
18
+ class ProviderUsage {
19
+ pack(input, output, context, limit) {
20
+ if (input === 0 && output === 0 && context === 0) {
21
+ return null;
22
+ }
23
+ return {
24
+ tokens: input + output,
25
+ inputTokens: input,
26
+ outputTokens: output,
27
+ contextTokens: context,
28
+ contextPct: clampPct(limit > 0 ? (context / limit) * 100 : 0),
29
+ };
30
+ }
31
+ }
32
+ exports.ProviderUsage = ProviderUsage;
33
+ //# sourceMappingURL=ProviderUsage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProviderUsage.js","sourceRoot":"","sources":["../../../src/providers/base/ProviderUsage.ts"],"names":[],"mappings":";AAAA,8EAA8E;AAC9E,sEAAsE;AACtE,qDAAqD;AACrD,8EAA8E;;;AAK9E,wBAEC;AAGD,4BAEC;AARD,kEAAkE;AAClE,SAAgB,MAAM,CAAC,CAAU;IAC/B,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,4DAA4D;AAC5D,SAAgB,QAAQ,CAAC,GAAW;IAClC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,MAAsB,aAAa;IAOvB,IAAI,CAAC,KAAa,EAAE,MAAc,EAAE,OAAe,EAAE,KAAa;QAC1E,IAAI,KAAK,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;YAAC,OAAO,IAAI,CAAC;QAAC,CAAC;QAClE,OAAO;YACL,MAAM,EAAE,KAAK,GAAG,MAAM;YACtB,WAAW,EAAE,KAAK;YAClB,YAAY,EAAE,MAAM;YACpB,aAAa,EAAE,OAAO;YACtB,UAAU,EAAE,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC9D,CAAC;IACJ,CAAC;CACF;AAjBD,sCAiBC"}