@codemieai/code 0.12.0 → 0.13.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 (222) hide show
  1. package/README.md +146 -57
  2. package/bin/codemie-copilot.js +224 -0
  3. package/bin/codemie-pi.js +18 -0
  4. package/dist/agents/core/AgentCLI.d.ts.map +1 -1
  5. package/dist/agents/core/AgentCLI.js +16 -10
  6. package/dist/agents/core/AgentCLI.js.map +1 -1
  7. package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
  8. package/dist/agents/core/BaseAgentAdapter.js +43 -19
  9. package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
  10. package/dist/agents/core/agent-aliases.d.ts +17 -0
  11. package/dist/agents/core/agent-aliases.d.ts.map +1 -0
  12. package/dist/agents/core/agent-aliases.js +41 -0
  13. package/dist/agents/core/agent-aliases.js.map +1 -0
  14. package/dist/agents/core/session/session-origin-audit.d.ts +13 -0
  15. package/dist/agents/core/session/session-origin-audit.d.ts.map +1 -1
  16. package/dist/agents/core/session/session-origin-audit.js +34 -0
  17. package/dist/agents/core/session/session-origin-audit.js.map +1 -1
  18. package/dist/agents/core/session/stale-session-reconciliation.d.ts +42 -0
  19. package/dist/agents/core/session/stale-session-reconciliation.d.ts.map +1 -0
  20. package/dist/agents/core/session/stale-session-reconciliation.js +141 -0
  21. package/dist/agents/core/session/stale-session-reconciliation.js.map +1 -0
  22. package/dist/agents/core/session/types.d.ts +19 -0
  23. package/dist/agents/core/session/types.d.ts.map +1 -1
  24. package/dist/agents/core/session/types.js +17 -1
  25. package/dist/agents/core/session/types.js.map +1 -1
  26. package/dist/agents/core/types.d.ts +1 -0
  27. package/dist/agents/core/types.d.ts.map +1 -1
  28. package/dist/agents/plugins/codex/codex.reconciliation.d.ts +15 -35
  29. package/dist/agents/plugins/codex/codex.reconciliation.d.ts.map +1 -1
  30. package/dist/agents/plugins/codex/codex.reconciliation.js +8 -139
  31. package/dist/agents/plugins/codex/codex.reconciliation.js.map +1 -1
  32. package/dist/agents/plugins/copilot-cli/copilot-cli.constants.d.ts +4 -0
  33. package/dist/agents/plugins/copilot-cli/copilot-cli.constants.d.ts.map +1 -1
  34. package/dist/agents/plugins/copilot-cli/copilot-cli.constants.js +4 -0
  35. package/dist/agents/plugins/copilot-cli/copilot-cli.constants.js.map +1 -1
  36. package/dist/agents/plugins/copilot-cli/copilot-cli.models.d.ts +8 -0
  37. package/dist/agents/plugins/copilot-cli/copilot-cli.models.d.ts.map +1 -0
  38. package/dist/agents/plugins/copilot-cli/copilot-cli.models.js +195 -0
  39. package/dist/agents/plugins/copilot-cli/copilot-cli.models.js.map +1 -0
  40. package/dist/agents/plugins/copilot-cli/copilot-cli.plugin.d.ts +4 -20
  41. package/dist/agents/plugins/copilot-cli/copilot-cli.plugin.d.ts.map +1 -1
  42. package/dist/agents/plugins/copilot-cli/copilot-cli.plugin.js +237 -38
  43. package/dist/agents/plugins/copilot-cli/copilot-cli.plugin.js.map +1 -1
  44. package/dist/agents/plugins/copilot-cli/copilot-cli.session.d.ts.map +1 -1
  45. package/dist/agents/plugins/copilot-cli/copilot-cli.session.js +14 -2
  46. package/dist/agents/plugins/copilot-cli/copilot-cli.session.js.map +1 -1
  47. package/dist/agents/plugins/copilot-cli/index.d.ts +2 -1
  48. package/dist/agents/plugins/copilot-cli/index.d.ts.map +1 -1
  49. package/dist/agents/plugins/copilot-cli/index.js +2 -1
  50. package/dist/agents/plugins/copilot-cli/index.js.map +1 -1
  51. package/dist/agents/plugins/copilot-cli/session/processors/copilot-cli.conversations-processor.d.ts +6 -3
  52. package/dist/agents/plugins/copilot-cli/session/processors/copilot-cli.conversations-processor.d.ts.map +1 -1
  53. package/dist/agents/plugins/copilot-cli/session/processors/copilot-cli.conversations-processor.js +298 -5
  54. package/dist/agents/plugins/copilot-cli/session/processors/copilot-cli.conversations-processor.js.map +1 -1
  55. package/dist/agents/plugins/pi/__tests__/home-redirect.d.ts +12 -0
  56. package/dist/agents/plugins/pi/__tests__/home-redirect.d.ts.map +1 -0
  57. package/dist/agents/plugins/pi/__tests__/home-redirect.js +27 -0
  58. package/dist/agents/plugins/pi/__tests__/home-redirect.js.map +1 -0
  59. package/dist/agents/plugins/pi/extension/README.md +68 -0
  60. package/dist/agents/plugins/pi/extension/index.js +161 -0
  61. package/dist/agents/plugins/pi/extension/package.json +8 -0
  62. package/dist/agents/plugins/pi/index.d.ts +3 -0
  63. package/dist/agents/plugins/pi/index.d.ts.map +1 -0
  64. package/dist/agents/plugins/pi/index.js +3 -0
  65. package/dist/agents/plugins/pi/index.js.map +1 -0
  66. package/dist/agents/plugins/pi/pi.extension.d.ts +60 -0
  67. package/dist/agents/plugins/pi/pi.extension.d.ts.map +1 -0
  68. package/dist/agents/plugins/pi/pi.extension.js +201 -0
  69. package/dist/agents/plugins/pi/pi.extension.js.map +1 -0
  70. package/dist/agents/plugins/pi/pi.incremental-sync.d.ts +63 -0
  71. package/dist/agents/plugins/pi/pi.incremental-sync.d.ts.map +1 -0
  72. package/dist/agents/plugins/pi/pi.incremental-sync.js +266 -0
  73. package/dist/agents/plugins/pi/pi.incremental-sync.js.map +1 -0
  74. package/dist/agents/plugins/pi/pi.models.d.ts +20 -0
  75. package/dist/agents/plugins/pi/pi.models.d.ts.map +1 -0
  76. package/dist/agents/plugins/pi/pi.models.js +201 -0
  77. package/dist/agents/plugins/pi/pi.models.js.map +1 -0
  78. package/dist/agents/plugins/pi/pi.packages.d.ts +11 -0
  79. package/dist/agents/plugins/pi/pi.packages.d.ts.map +1 -0
  80. package/dist/agents/plugins/pi/pi.packages.js +35 -0
  81. package/dist/agents/plugins/pi/pi.packages.js.map +1 -0
  82. package/dist/agents/plugins/pi/pi.paths.d.ts +37 -0
  83. package/dist/agents/plugins/pi/pi.paths.d.ts.map +1 -0
  84. package/dist/agents/plugins/pi/pi.paths.js +146 -0
  85. package/dist/agents/plugins/pi/pi.paths.js.map +1 -0
  86. package/dist/agents/plugins/pi/pi.plugin.d.ts +30 -0
  87. package/dist/agents/plugins/pi/pi.plugin.d.ts.map +1 -0
  88. package/dist/agents/plugins/pi/pi.plugin.js +453 -0
  89. package/dist/agents/plugins/pi/pi.plugin.js.map +1 -0
  90. package/dist/agents/plugins/pi/pi.session.d.ts +114 -0
  91. package/dist/agents/plugins/pi/pi.session.d.ts.map +1 -0
  92. package/dist/agents/plugins/pi/pi.session.js +388 -0
  93. package/dist/agents/plugins/pi/pi.session.js.map +1 -0
  94. package/dist/agents/plugins/pi/pi.setup.d.ts +2 -0
  95. package/dist/agents/plugins/pi/pi.setup.d.ts.map +1 -0
  96. package/dist/agents/plugins/pi/pi.setup.js +33 -0
  97. package/dist/agents/plugins/pi/pi.setup.js.map +1 -0
  98. package/dist/agents/plugins/pi/pi.types.d.ts +143 -0
  99. package/dist/agents/plugins/pi/pi.types.d.ts.map +1 -0
  100. package/dist/agents/plugins/pi/pi.types.js +74 -0
  101. package/dist/agents/plugins/pi/pi.types.js.map +1 -0
  102. package/dist/agents/plugins/pi/session/pi-file-operations.d.ts +17 -0
  103. package/dist/agents/plugins/pi/session/pi-file-operations.d.ts.map +1 -0
  104. package/dist/agents/plugins/pi/session/pi-file-operations.js +98 -0
  105. package/dist/agents/plugins/pi/session/pi-file-operations.js.map +1 -0
  106. package/dist/agents/plugins/pi/session/pi-named-invocations.d.ts +52 -0
  107. package/dist/agents/plugins/pi/session/pi-named-invocations.d.ts.map +1 -0
  108. package/dist/agents/plugins/pi/session/pi-named-invocations.js +189 -0
  109. package/dist/agents/plugins/pi/session/pi-named-invocations.js.map +1 -0
  110. package/dist/agents/plugins/pi/session/pi-user-prompt.d.ts +14 -0
  111. package/dist/agents/plugins/pi/session/pi-user-prompt.d.ts.map +1 -0
  112. package/dist/agents/plugins/pi/session/pi-user-prompt.js +51 -0
  113. package/dist/agents/plugins/pi/session/pi-user-prompt.js.map +1 -0
  114. package/dist/agents/plugins/pi/session/processors/pi.conversations-processor.d.ts +52 -0
  115. package/dist/agents/plugins/pi/session/processors/pi.conversations-processor.d.ts.map +1 -0
  116. package/dist/agents/plugins/pi/session/processors/pi.conversations-processor.js +716 -0
  117. package/dist/agents/plugins/pi/session/processors/pi.conversations-processor.js.map +1 -0
  118. package/dist/agents/plugins/pi/session/processors/pi.metrics-processor.d.ts +104 -0
  119. package/dist/agents/plugins/pi/session/processors/pi.metrics-processor.d.ts.map +1 -0
  120. package/dist/agents/plugins/pi/session/processors/pi.metrics-processor.js +595 -0
  121. package/dist/agents/plugins/pi/session/processors/pi.metrics-processor.js.map +1 -0
  122. package/dist/agents/registry.d.ts.map +1 -1
  123. package/dist/agents/registry.js +2 -2
  124. package/dist/agents/registry.js.map +1 -1
  125. package/dist/cli/commands/analytics/agent-labels.d.ts.map +1 -1
  126. package/dist/cli/commands/analytics/agent-labels.js +1 -0
  127. package/dist/cli/commands/analytics/agent-labels.js.map +1 -1
  128. package/dist/cli/commands/analytics/cost/usage-readers.d.ts +24 -0
  129. package/dist/cli/commands/analytics/cost/usage-readers.d.ts.map +1 -1
  130. package/dist/cli/commands/analytics/cost/usage-readers.js +199 -54
  131. package/dist/cli/commands/analytics/cost/usage-readers.js.map +1 -1
  132. package/dist/cli/commands/analytics/index.js +1 -0
  133. package/dist/cli/commands/analytics/index.js.map +1 -1
  134. package/dist/cli/commands/analytics/native-loader.d.ts +21 -4
  135. package/dist/cli/commands/analytics/native-loader.d.ts.map +1 -1
  136. package/dist/cli/commands/analytics/native-loader.js +250 -96
  137. package/dist/cli/commands/analytics/native-loader.js.map +1 -1
  138. package/dist/cli/commands/analytics/report/client/app.js +47 -3
  139. package/dist/cli/commands/analytics/report/payload-builder.d.ts.map +1 -1
  140. package/dist/cli/commands/analytics/report/payload-builder.js +25 -2
  141. package/dist/cli/commands/analytics/report/payload-builder.js.map +1 -1
  142. package/dist/cli/commands/analytics/report/types.d.ts +1 -0
  143. package/dist/cli/commands/analytics/report/types.d.ts.map +1 -1
  144. package/dist/cli/commands/hook.d.ts.map +1 -1
  145. package/dist/cli/commands/hook.js +71 -29
  146. package/dist/cli/commands/hook.js.map +1 -1
  147. package/dist/cli/commands/install.d.ts.map +1 -1
  148. package/dist/cli/commands/install.js +7 -5
  149. package/dist/cli/commands/install.js.map +1 -1
  150. package/dist/cli/commands/list.d.ts.map +1 -1
  151. package/dist/cli/commands/list.js +3 -1
  152. package/dist/cli/commands/list.js.map +1 -1
  153. package/dist/cli/commands/proxy/connectors/desktop.d.ts +94 -4
  154. package/dist/cli/commands/proxy/connectors/desktop.d.ts.map +1 -1
  155. package/dist/cli/commands/proxy/connectors/desktop.js +244 -17
  156. package/dist/cli/commands/proxy/connectors/desktop.js.map +1 -1
  157. package/dist/cli/commands/proxy/connectors/managed-mcp-remote.d.ts +25 -0
  158. package/dist/cli/commands/proxy/connectors/managed-mcp-remote.d.ts.map +1 -1
  159. package/dist/cli/commands/proxy/connectors/managed-mcp-remote.js +59 -1
  160. package/dist/cli/commands/proxy/connectors/managed-mcp-remote.js.map +1 -1
  161. package/dist/cli/commands/proxy/index.d.ts.map +1 -1
  162. package/dist/cli/commands/proxy/index.js +10 -1
  163. package/dist/cli/commands/proxy/index.js.map +1 -1
  164. package/dist/cli/commands/uninstall.d.ts.map +1 -1
  165. package/dist/cli/commands/uninstall.js +5 -3
  166. package/dist/cli/commands/uninstall.js.map +1 -1
  167. package/dist/cli/commands/update.d.ts.map +1 -1
  168. package/dist/cli/commands/update.js +5 -3
  169. package/dist/cli/commands/update.js.map +1 -1
  170. package/dist/cli/first-time.d.ts.map +1 -1
  171. package/dist/cli/first-time.js +7 -6
  172. package/dist/cli/first-time.js.map +1 -1
  173. package/dist/providers/core/auth-validation.d.ts +7 -2
  174. package/dist/providers/core/auth-validation.d.ts.map +1 -1
  175. package/dist/providers/core/auth-validation.js +11 -5
  176. package/dist/providers/core/auth-validation.js.map +1 -1
  177. package/dist/providers/plugins/sso/proxy/plugins/claude-request-normalizer.plugin.d.ts +8 -3
  178. package/dist/providers/plugins/sso/proxy/plugins/claude-request-normalizer.plugin.d.ts.map +1 -1
  179. package/dist/providers/plugins/sso/proxy/plugins/claude-request-normalizer.plugin.js +46 -11
  180. package/dist/providers/plugins/sso/proxy/plugins/claude-request-normalizer.plugin.js.map +1 -1
  181. package/dist/providers/plugins/sso/proxy/plugins/codex-encrypted-content-sanitizer.plugin.d.ts +23 -13
  182. package/dist/providers/plugins/sso/proxy/plugins/codex-encrypted-content-sanitizer.plugin.d.ts.map +1 -1
  183. package/dist/providers/plugins/sso/proxy/plugins/codex-encrypted-content-sanitizer.plugin.js +75 -18
  184. package/dist/providers/plugins/sso/proxy/plugins/codex-encrypted-content-sanitizer.plugin.js.map +1 -1
  185. package/dist/providers/plugins/sso/proxy/plugins/copilot-encrypted-content-sanitizer.plugin.d.ts +21 -0
  186. package/dist/providers/plugins/sso/proxy/plugins/copilot-encrypted-content-sanitizer.plugin.d.ts.map +1 -0
  187. package/dist/providers/plugins/sso/proxy/plugins/copilot-encrypted-content-sanitizer.plugin.js +133 -0
  188. package/dist/providers/plugins/sso/proxy/plugins/copilot-encrypted-content-sanitizer.plugin.js.map +1 -0
  189. package/dist/providers/plugins/sso/proxy/plugins/header-injection.plugin.js +1 -1
  190. package/dist/providers/plugins/sso/proxy/plugins/header-injection.plugin.js.map +1 -1
  191. package/dist/providers/plugins/sso/proxy/plugins/index.d.ts +2 -1
  192. package/dist/providers/plugins/sso/proxy/plugins/index.d.ts.map +1 -1
  193. package/dist/providers/plugins/sso/proxy/plugins/index.js +4 -2
  194. package/dist/providers/plugins/sso/proxy/plugins/index.js.map +1 -1
  195. package/dist/providers/plugins/sso/proxy/plugins/types.d.ts +11 -0
  196. package/dist/providers/plugins/sso/proxy/plugins/types.d.ts.map +1 -1
  197. package/dist/providers/plugins/sso/proxy/sso.proxy.d.ts +2 -0
  198. package/dist/providers/plugins/sso/proxy/sso.proxy.d.ts.map +1 -1
  199. package/dist/providers/plugins/sso/proxy/sso.proxy.js +37 -1
  200. package/dist/providers/plugins/sso/proxy/sso.proxy.js.map +1 -1
  201. package/dist/providers/plugins/sso/session/SessionSyncer.d.ts.map +1 -1
  202. package/dist/providers/plugins/sso/session/SessionSyncer.js +13 -0
  203. package/dist/providers/plugins/sso/session/SessionSyncer.js.map +1 -1
  204. package/dist/providers/plugins/sso/session/processors/conversations/syncProcessor.js +6 -0
  205. package/dist/providers/plugins/sso/session/processors/conversations/syncProcessor.js.map +1 -1
  206. package/dist/providers/plugins/sso/session/processors/metrics/metrics-post-processor.d.ts +0 -6
  207. package/dist/providers/plugins/sso/session/processors/metrics/metrics-post-processor.d.ts.map +1 -1
  208. package/dist/providers/plugins/sso/session/processors/metrics/metrics-post-processor.js +28 -19
  209. package/dist/providers/plugins/sso/session/processors/metrics/metrics-post-processor.js.map +1 -1
  210. package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.d.ts.map +1 -1
  211. package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.js +13 -1
  212. package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.js.map +1 -1
  213. package/dist/telemetry/clients/claude-desktop/claude-desktop.paths.d.ts +12 -0
  214. package/dist/telemetry/clients/claude-desktop/claude-desktop.paths.d.ts.map +1 -1
  215. package/dist/telemetry/clients/claude-desktop/claude-desktop.paths.js +28 -1
  216. package/dist/telemetry/clients/claude-desktop/claude-desktop.paths.js.map +1 -1
  217. package/dist/utils/interactive.d.ts +14 -0
  218. package/dist/utils/interactive.d.ts.map +1 -0
  219. package/dist/utils/interactive.js +16 -0
  220. package/dist/utils/interactive.js.map +1 -0
  221. package/package.json +6 -4
  222. package/scripts/copy-plugins.js +6 -0
@@ -12,24 +12,29 @@
12
12
  * real path) so they are not double-counted.
13
13
  */
14
14
  import { realpathSync, readdirSync, readFileSync, openSync, readSync, closeSync } from 'node:fs';
15
- import { join } from 'node:path';
15
+ import { basename, join } from 'node:path';
16
16
  import { AgentRegistry } from '../../../agents/registry.js';
17
17
  import { getCodemiePath } from '../../../utils/paths.js';
18
18
  import { logger } from '../../../utils/logger.js';
19
19
  import { stripClear } from '../../../agents/plugins/claude/session/strip-clear.js';
20
+ import { SESSION_ORIGIN } from '../../../agents/core/session/types.js';
20
21
  import { isCodexFamilyAgent } from './cost/codex-agent.js';
21
22
  import { firstCodexUserText } from '../../../agents/plugins/codex/session/codex-user-prompt.js';
22
23
  import { collectCodexChildThreadIds } from '../../../agents/plugins/codex/session/codex-collab-links.js';
24
+ import { firstPiUserText } from '../../../agents/plugins/pi/session/pi-user-prompt.js';
25
+ import { PI_FORKED_CONTINUATION, piForkedContinuations } from '../../../agents/plugins/pi/pi.session.js';
23
26
  /** Agents whose native logs we discover + synthesize. */
24
- const NATIVE_AGENTS = ['claude', 'codex', 'copilot-cli'];
27
+ const NATIVE_AGENTS = ['claude', 'codex', 'copilot-cli', 'pi'];
28
+ function isPiAgent(agentName) {
29
+ return agentName.toLowerCase() === 'pi';
30
+ }
25
31
  /**
26
32
  * Agents CodeMie only reads analytics for and never installs, launches, or manages.
27
33
  *
28
34
  * The ownership gate below exists to stop analytics silently counting UNMANAGED runs of an
29
- * agent CodeMie CAN manage (EPMCDME-13367). An analytics-only agent has no managed variant,
30
- * so it can never carry an ownership marker — applying the gate would tag 100% of its
31
- * sessions `native-external` and drop them from the default report, making the integration
32
- * a silent no-op.
35
+ * agent CodeMie CAN manage (EPMCDME-13367). A truly analytics-only agent has no managed
36
+ * variant, so it can never carry an ownership marker — applying the gate would tag 100% of
37
+ * its sessions `native-external` and drop them from the default report.
33
38
  */
34
39
  function isAnalyticsOnlyAgent(agentName) {
35
40
  try {
@@ -110,6 +115,11 @@ function buildOwnershipIndex() {
110
115
  }
111
116
  else if (!f.endsWith('_metrics.json')) {
112
117
  const meta = JSON.parse(readFileSync(join(dir, f), 'utf-8'));
118
+ // A confirmed external-resume session must never re-adopt its transcript into the
119
+ // ownership index — that would silently exclude it from `native-external` filtering
120
+ // again, undoing the whole point of flagging it. See EPMCDME-12992.
121
+ if (meta.origin === SESSION_ORIGIN.EXTERNAL_RESUME)
122
+ continue;
113
123
  const asf = meta.correlation?.agentSessionFile;
114
124
  if (asf)
115
125
  out.add(safeRealPath(asf));
@@ -261,18 +271,16 @@ function codexTimestamps(records) {
261
271
  .map((r) => (r.timestamp ? Date.parse(r.timestamp) : NaN))
262
272
  .filter((n) => Number.isFinite(n));
263
273
  }
264
- /** Synthesize {@link RawSessionData} from a parsed Codex rollout (non-Claude JSONL shape). */
265
- export function synthesizeCodexRawSession(agentName, descriptor, parsed) {
266
- const records = (parsed.messages ?? []);
267
- const timestamps = codexTimestamps(records);
268
- const startTime = timestamps.length ? Math.min(...timestamps) : descriptor.createdAt;
269
- const endTime = timestamps.length ? Math.max(...timestamps) : descriptor.updatedAt ?? descriptor.createdAt;
270
- const meta = parsed.metadata;
271
- const cwd = meta?.projectPath ?? descriptor.projectPath ?? 'Unknown';
272
- const branch = meta?.branch;
273
- const turns = countCodexTurns(records);
274
- const openingPrompt = firstCodexUserText(records);
275
- const models = meta?.model ? [meta.model] : [];
274
+ /**
275
+ * Assemble {@link RawSessionData} from per-agent facts.
276
+ *
277
+ * All per-session metrics (tools / file ops / models / named invocations) ride on a single
278
+ * metrics-bearing delta — the aggregator sums across deltas, so one populated delta plus empty
279
+ * placeholders is equivalent to per-turn deltas. The placeholders exist purely so the
280
+ * aggregator's `totalTurns` (= `deltas.length`) matches the transcript's real turn count.
281
+ */
282
+ function buildNativeRawSession(agentName, descriptor, parsed, facts) {
283
+ const { cwd, branch, startTime, endTime, turns, models, openingPrompt } = facts;
276
284
  const metricsDelta = {
277
285
  recordId: `${descriptor.sessionId}-native`,
278
286
  sessionId: descriptor.sessionId,
@@ -283,9 +291,12 @@ export function synthesizeCodexRawSession(agentName, descriptor, parsed) {
283
291
  toolStatus: parsed.metrics?.toolStatus,
284
292
  fileOperations: parsed.metrics?.fileOperations,
285
293
  models,
294
+ // Named invocations are extracted at parse time (e.g. claude.session.ts extractMetrics);
295
+ // carry them through so native (untracked) sessions populate the skill/agent/command charts.
286
296
  ...(parsed.metrics?.skillInvocations && { skillInvocations: parsed.metrics.skillInvocations }),
287
297
  ...(parsed.metrics?.agentInvocations && { agentInvocations: parsed.metrics.agentInvocations }),
288
298
  ...(parsed.metrics?.commandInvocations && { commandInvocations: parsed.metrics.commandInvocations }),
299
+ // Opening prompt → drives the session title in the report (aggregator strips command/system XML).
289
300
  ...(openingPrompt && { userPrompts: [{ count: 1, text: openingPrompt }] }),
290
301
  syncStatus: 'synced',
291
302
  syncAttempts: 0,
@@ -305,7 +316,7 @@ export function synthesizeCodexRawSession(agentName, descriptor, parsed) {
305
316
  }
306
317
  return {
307
318
  sessionId: descriptor.sessionId,
308
- agentSessionFile: descriptor.filePath,
319
+ agentSessionFile: descriptor.filePath, // lets the cost enricher price native (untracked) sessions
309
320
  startEvent: {
310
321
  recordId: descriptor.sessionId,
311
322
  type: 'session_start',
@@ -327,11 +338,110 @@ export function synthesizeCodexRawSession(agentName, descriptor, parsed) {
327
338
  deltas,
328
339
  };
329
340
  }
341
+ /** Synthesize {@link RawSessionData} from a parsed Codex rollout (non-Claude JSONL shape). */
342
+ export function synthesizeCodexRawSession(agentName, descriptor, parsed) {
343
+ const records = (parsed.messages ?? []);
344
+ const timestamps = codexTimestamps(records);
345
+ const meta = parsed.metadata;
346
+ return buildNativeRawSession(agentName, descriptor, parsed, {
347
+ cwd: meta?.projectPath ?? descriptor.projectPath ?? 'Unknown',
348
+ branch: meta?.branch,
349
+ startTime: timestamps.length ? Math.min(...timestamps) : descriptor.createdAt,
350
+ endTime: timestamps.length ? Math.max(...timestamps) : descriptor.updatedAt ?? descriptor.createdAt,
351
+ turns: countCodexTurns(records),
352
+ models: meta?.model ? [meta.model] : [],
353
+ openingPrompt: firstCodexUserText(records),
354
+ });
355
+ }
330
356
  /**
331
- * Synthesize a {@link RawSessionData} from a parsed native session. Turns map to assistant
332
- * messages (the aggregator derives totalTurns from deltas.length), and all per-session metrics
333
- * (tools / file ops / models) are carried on a single delta — the aggregator sums across deltas,
334
- * so one metrics-bearing delta plus empty placeholders is equivalent to per-turn deltas.
357
+ * Every entry of the conversation this transcript belongs to, each counted once.
358
+ *
359
+ * `/fork` writes a NEW file that replays the prior conversation VERBATIM — entry ids included —
360
+ * and {@link foldPiForkFamilies} attaches those continuations to the transcript they grew out
361
+ * of. Concatenating blindly would count the replayed history once per fork: on a real 12-file
362
+ * corpus that is 121 turns for 21 real prompts, and every fork claiming the full multi-hour
363
+ * duration it inherited. De-duplicating on the entry id each file writes about itself collapses
364
+ * the family back to the single conversation it is.
365
+ */
366
+ function piConversationLines(parsed) {
367
+ const own = (parsed.messages ?? []);
368
+ const continuations = piForkedContinuations(parsed);
369
+ if (continuations.length === 0) {
370
+ return own;
371
+ }
372
+ const lines = [];
373
+ const seenIds = new Set();
374
+ for (const line of [...own, ...continuations.flatMap((fork) => (fork.messages ?? []))]) {
375
+ if (line?.id) {
376
+ if (seenIds.has(line.id)) {
377
+ continue; // replayed copy of an entry an earlier transcript in the family already had
378
+ }
379
+ seenIds.add(line.id);
380
+ }
381
+ lines.push(line);
382
+ }
383
+ return lines;
384
+ }
385
+ function piLineTimestamp(line) {
386
+ const messageTs = line.message?.timestamp;
387
+ if (typeof messageTs === 'number' && Number.isFinite(messageTs)) {
388
+ return messageTs;
389
+ }
390
+ const entryTs = line.timestamp ? Date.parse(line.timestamp) : NaN;
391
+ return Number.isFinite(entryTs) ? entryTs : null;
392
+ }
393
+ /**
394
+ * Turns in a Pi transcript = user prompts.
395
+ *
396
+ * Pi gives tool results their own `toolResult` role, so a `user` message is always a real prompt
397
+ * and never a tool round-trip — which makes prompt count the honest analogue of Codex's
398
+ * `task_complete` count. Counting assistant messages instead (what the Claude path does, because
399
+ * Claude has no such separation) would report ~170 "turns" for a dozen-prompt session.
400
+ */
401
+ function countPiTurns(lines) {
402
+ const prompts = lines.filter((l) => l.type === 'message' && l.message?.role === 'user').length;
403
+ return Math.max(prompts, 1);
404
+ }
405
+ /**
406
+ * Synthesize {@link RawSessionData} from a parsed Pi session (v3 JSONL — neither Claude- nor
407
+ * Codex-shaped: entries are `{type, id, parentId, timestamp, message}` envelopes).
408
+ *
409
+ * Only UNMANAGED `pi` runs reach here. A CodeMie-launched run writes an ownership sidecar for
410
+ * every transcript it produced (pi.plugin.ts `correlateRunToSession`), so `hasOwnershipMarker`
411
+ * classifies those as managed before this synthesis is ever consulted for the provider tag.
412
+ *
413
+ * NO GIT BRANCH. Pi's v3 header records `id`, `timestamp`, `cwd` and `parentSession` — no VCS
414
+ * state — and no entry carries one either, so unlike Codex (`session_meta.git.branch`) and Claude
415
+ * (per-message `gitBranch`) there is nothing truthful to report. Native Pi sessions therefore
416
+ * bucket under "Unknown" and `codemie analytics --branch <x>` filters all of them out. Reading
417
+ * the cwd's CURRENT branch would be a fabrication: it would stamp today's branch on a session
418
+ * recorded weeks ago. (`metadata.gitBranch` IS populated on the managed path, where
419
+ * `processSession` overlays the branch captured while the run was live.)
420
+ */
421
+ export function synthesizePiRawSession(agentName, descriptor, parsed) {
422
+ const lines = piConversationLines(parsed);
423
+ const timestamps = lines.map(piLineTimestamp).filter((n) => n !== null);
424
+ const meta = parsed.metadata;
425
+ const models = lines
426
+ .filter((l) => l.type === 'message' && l.message?.role === 'assistant')
427
+ .map((l) => l.message?.responseModel ?? l.message?.model)
428
+ .filter((m) => !!m);
429
+ return buildNativeRawSession(agentName, descriptor, parsed, {
430
+ // The adapter reads cwd from the transcript's own session header, which is authoritative:
431
+ // `--session <path>` can run Pi under a directory other than the one it was launched from.
432
+ cwd: meta?.projectPath ?? descriptor.projectPath ?? 'Unknown',
433
+ startTime: timestamps.length ? Math.min(...timestamps) : descriptor.createdAt,
434
+ endTime: timestamps.length ? Math.max(...timestamps) : descriptor.updatedAt ?? descriptor.createdAt,
435
+ turns: countPiTurns(lines),
436
+ models,
437
+ openingPrompt: firstPiUserText(lines),
438
+ });
439
+ }
440
+ /**
441
+ * Synthesize a {@link RawSessionData} from a parsed native session, dispatching to the reader
442
+ * that understands the agent's log shape. The Claude-shaped path below is the fallback: turns
443
+ * map to assistant messages, since Claude interleaves tool results into `user` messages and so
444
+ * has no prompt count to key on.
335
445
  *
336
446
  * A post-/clear file starts with the /clear sentinel as its first user message; stripClear strips
337
447
  * it so it is never mistaken for the session's opening prompt.
@@ -340,73 +450,21 @@ export function synthesizeRawSession(agentName, descriptor, parsed) {
340
450
  if (isCodexFamilyAgent(agentName)) {
341
451
  return synthesizeCodexRawSession(agentName, descriptor, parsed);
342
452
  }
453
+ if (isPiAgent(agentName)) {
454
+ return synthesizePiRawSession(agentName, descriptor, parsed);
455
+ }
343
456
  const messages = stripClear((parsed.messages ?? []));
344
457
  const timestamps = messages.map((m) => toMs(m.timestamp)).filter((n) => n != null);
345
- const startTime = timestamps.length ? Math.min(...timestamps) : descriptor.createdAt;
346
- const endTime = timestamps.length ? Math.max(...timestamps) : descriptor.updatedAt ?? descriptor.createdAt;
347
- const cwd = messages.find((m) => m.cwd)?.cwd ?? descriptor.projectPath ?? 'Unknown';
348
- const branch = modal(messages.map((m) => m.gitBranch).filter((b) => !!b));
349
458
  const assistantMsgs = messages.filter(isAssistant);
350
- const turns = Math.max(assistantMsgs.length, 1);
351
- const models = assistantMsgs.map((m) => m.message?.model).filter((m) => !!m);
352
- const openingPrompt = firstUserText(messages);
353
- const metricsDelta = {
354
- recordId: `${descriptor.sessionId}-native`,
355
- sessionId: descriptor.sessionId,
356
- agentSessionId: descriptor.sessionId,
357
- timestamp: startTime,
358
- gitBranch: branch,
359
- tools: parsed.metrics?.tools ?? {},
360
- toolStatus: parsed.metrics?.toolStatus,
361
- fileOperations: parsed.metrics?.fileOperations,
362
- models,
363
- // Named invocations are extracted at parse time (claude.session.ts extractMetrics); carry
364
- // them through so native (untracked) sessions populate the skill/agent/command charts.
365
- ...(parsed.metrics?.skillInvocations && { skillInvocations: parsed.metrics.skillInvocations }),
366
- ...(parsed.metrics?.agentInvocations && { agentInvocations: parsed.metrics.agentInvocations }),
367
- ...(parsed.metrics?.commandInvocations && { commandInvocations: parsed.metrics.commandInvocations }),
368
- // Opening prompt → drives the session title in the report (aggregator strips command/system XML).
369
- ...(openingPrompt && { userPrompts: [{ count: 1, text: openingPrompt }] }),
370
- syncStatus: 'synced',
371
- syncAttempts: 0,
372
- };
373
- // Pad to `turns` deltas so the aggregator's totalTurns (= deltas.length) is correct.
374
- const deltas = [metricsDelta];
375
- for (let i = 1; i < turns; i++) {
376
- deltas.push({
377
- recordId: `${descriptor.sessionId}-native-${i}`,
378
- sessionId: descriptor.sessionId,
379
- agentSessionId: descriptor.sessionId,
380
- timestamp: startTime,
381
- gitBranch: branch,
382
- tools: {},
383
- syncStatus: 'synced',
384
- syncAttempts: 0,
385
- });
386
- }
387
- return {
388
- sessionId: descriptor.sessionId,
389
- agentSessionFile: descriptor.filePath, // lets the cost enricher price native (untracked) sessions
390
- startEvent: {
391
- recordId: descriptor.sessionId,
392
- type: 'session_start',
393
- timestamp: startTime,
394
- codeMieSessionId: descriptor.sessionId,
395
- agentName,
396
- syncStatus: 'synced',
397
- data: { provider: 'native', workingDirectory: cwd, startTime },
398
- },
399
- endEvent: {
400
- recordId: `${descriptor.sessionId}-end`,
401
- type: 'session_end',
402
- timestamp: endTime,
403
- codeMieSessionId: descriptor.sessionId,
404
- agentName,
405
- syncStatus: 'synced',
406
- data: { endTime, duration: Math.max(0, endTime - startTime), totalTurns: turns },
407
- },
408
- deltas,
409
- };
459
+ return buildNativeRawSession(agentName, descriptor, parsed, {
460
+ cwd: messages.find((m) => m.cwd)?.cwd ?? descriptor.projectPath ?? 'Unknown',
461
+ branch: modal(messages.map((m) => m.gitBranch).filter((b) => !!b)),
462
+ startTime: timestamps.length ? Math.min(...timestamps) : descriptor.createdAt,
463
+ endTime: timestamps.length ? Math.max(...timestamps) : descriptor.updatedAt ?? descriptor.createdAt,
464
+ turns: Math.max(assistantMsgs.length, 1),
465
+ models: assistantMsgs.map((m) => m.message?.model).filter((m) => !!m),
466
+ openingPrompt: firstUserText(messages),
467
+ });
410
468
  }
411
469
  /** Number of days from a filter's fromDate to now (for the discovery window), or a wide default. */
412
470
  function windowDays(filter) {
@@ -416,6 +474,88 @@ function windowDays(filter) {
416
474
  }
417
475
  return 3650; // no lower bound requested → effectively "all"
418
476
  }
477
+ /** Parse every discovered Pi transcript once and resolve the fork source each header names. */
478
+ async function readPiTranscripts(discovered, deps) {
479
+ const piDiscoveredPaths = new Set(discovered.filter((d) => isPiAgent(d.agentName)).map((d) => deps.realPath(d.descriptor.filePath)));
480
+ const transcripts = [];
481
+ for (const { agentName, descriptor } of discovered) {
482
+ if (!isPiAgent(agentName)) {
483
+ continue;
484
+ }
485
+ const parsed = await deps.parse(agentName, descriptor.filePath, descriptor.sessionId);
486
+ const parentSession = parsed?.metadata?.parentSession;
487
+ const parentRealPath = parentSession ? deps.realPath(parentSession) : undefined;
488
+ transcripts.push({
489
+ descriptor,
490
+ realPath: deps.realPath(descriptor.filePath),
491
+ parsed,
492
+ ...(parentRealPath && piDiscoveredPaths.has(parentRealPath) && { parentRealPath }),
493
+ });
494
+ }
495
+ return transcripts;
496
+ }
497
+ /**
498
+ * The continuations to leave out of the listing, because the adapter already folded each one
499
+ * into the transcript it grew out of.
500
+ *
501
+ * A `/fork` continuation is not a new conversation, it is the same one carried into a new file:
502
+ * it replays the prior conversation VERBATIM and names its source in the header's
503
+ * `parentSession`. Emitting it separately reports one conversation as a dozen sessions — on a
504
+ * real corpus, 12 files for 2 conversations, with every derived per-session metric wrong by the
505
+ * same factor.
506
+ *
507
+ * Folding and suppression happen HERE, together, in one pass, because they must agree exactly:
508
+ * a file suppressed but not folded loses its spend outright, and one folded but not suppressed
509
+ * has it billed twice. An earlier design folded in the session adapter and suppressed here, and
510
+ * the two disagreed in both directions — including for a cross-directory fork
511
+ * (`SessionManager.forkFrom(sourcePath, targetCwd)`, reached by `pi --fork <global-id>`), which
512
+ * was suppressed while nothing folded it. Doing both from one decision makes that class of
513
+ * mismatch unrepresentable.
514
+ *
515
+ * This is also why the adapter must NOT fold: `codemie pi --fork` is a second MANAGED run with a
516
+ * CodeMie session of its own, and folding there moved its whole spend onto the run it forked
517
+ * from. Only the analytics layer knows which sessions are actually being reported.
518
+ *
519
+ * The source must still be in the listing. A fork whose source fell outside the discovery
520
+ * window has nobody to be counted inside, and dropping it would delete its spend from the report.
521
+ */
522
+ function foldPiForkFamilies(transcripts) {
523
+ const byRealPath = new Map(transcripts.map((t) => [t.realPath, t]));
524
+ const suppressed = new Set();
525
+ /** The oldest ancestor still in the listing, so a fork of a fork folds into one session. */
526
+ const rootOf = (start) => {
527
+ let current = start;
528
+ const seen = new Set([current.realPath]);
529
+ for (;;) {
530
+ const parent = current.parentRealPath ? byRealPath.get(current.parentRealPath) : undefined;
531
+ if (!parent?.parsed || seen.has(parent.realPath)) {
532
+ return current; // no parent in the listing, or a cyclic parentSession chain
533
+ }
534
+ seen.add(parent.realPath);
535
+ current = parent;
536
+ }
537
+ };
538
+ for (const transcript of transcripts) {
539
+ if (!transcript.parsed || !transcript.parentRealPath) {
540
+ continue;
541
+ }
542
+ const root = rootOf(transcript);
543
+ if (root === transcript || !root.parsed) {
544
+ continue; // its source is not in the listing — report it on its own or its spend is lost
545
+ }
546
+ root.parsed.subagents = [
547
+ ...(root.parsed.subagents ?? []),
548
+ {
549
+ agentId: basename(transcript.realPath, '.jsonl'),
550
+ filePath: transcript.realPath,
551
+ agentType: PI_FORKED_CONTINUATION,
552
+ messages: transcript.parsed.messages ?? [],
553
+ },
554
+ ];
555
+ suppressed.add(transcript.realPath);
556
+ }
557
+ return suppressed;
558
+ }
419
559
  /**
420
560
  * Discover native (untracked) sessions and return them as RawSessionData, ready to merge
421
561
  * with the tracked sessions from {@link MetricsDataLoader}. Sessions whose native log is
@@ -442,28 +582,42 @@ export async function loadNativeSessions(filter, deps = realNativeDeps) {
442
582
  }
443
583
  }
444
584
  }
585
+ // Same shape for Pi, one level up: parse each transcript ONCE, then drop the `/fork`
586
+ // continuations the adapter already folded into the transcript they grew out of.
587
+ const piTranscripts = await readPiTranscripts(discovered, deps);
588
+ const piByRealPath = new Map(piTranscripts.map((t) => [t.realPath, t]));
589
+ const piForkedChildren = foldPiForkFamilies(piTranscripts);
445
590
  const out = [];
446
591
  for (const { agentName, descriptor } of discovered) {
447
592
  if (isCodexFamilyAgent(agentName) && codexChildThreads.has(descriptor.sessionId)) {
448
593
  continue; // linked sub-agent rollout — already counted inside its parent
449
594
  }
595
+ if (isPiAgent(agentName) && piForkedChildren.has(deps.realPath(descriptor.filePath))) {
596
+ continue; // forked continuation — already counted inside the transcript it grew out of
597
+ }
450
598
  if (tracked.has(deps.realPath(descriptor.filePath))) {
451
599
  continue; // already tracked by CodeMie — avoid double counting
452
600
  }
453
- const parsed = isCodexFamilyAgent(agentName)
454
- ? codexParsed.get(descriptor.filePath) ?? null
455
- : await deps.parse(agentName, descriptor.filePath, descriptor.sessionId);
601
+ let parsed;
602
+ if (isCodexFamilyAgent(agentName)) {
603
+ parsed = codexParsed.get(descriptor.filePath) ?? null;
604
+ }
605
+ else if (isPiAgent(agentName)) {
606
+ parsed = piByRealPath.get(deps.realPath(descriptor.filePath))?.parsed ?? null;
607
+ }
608
+ else {
609
+ parsed = await deps.parse(agentName, descriptor.filePath, descriptor.sessionId);
610
+ }
456
611
  if (!parsed) {
457
612
  continue;
458
613
  }
459
614
  const raw = synthesizeRawSession(agentName, descriptor, parsed);
460
615
  if (raw.startEvent && !deps.hasOwnershipMarker(descriptor.filePath)) {
461
- // Analytics-only agents can never carry an ownership marker, so tagging them
462
- // 'native-external' would drop 100% of their sessions from the default report.
463
- // They still are not CodeMie-managed though, so they get their own tag rather than
464
- // the plain 'native' that means "CodeMie launched this" — otherwise the report
465
- // cannot distinguish managed from unmanaged usage. 'native-unmanaged' passes the
466
- // sessions-source filter (included by default) while staying honest about origin.
616
+ // Truly analytics-only agents can never carry an ownership marker, so tagging them
617
+ // 'native-external' would drop 100% of their sessions from the default report. They
618
+ // still are not CodeMie-managed, so they get their own tag rather than the plain
619
+ // 'native' that means "CodeMie launched this". Managed agents, including Copilot CLI,
620
+ // remain 'native-external' when their transcript lacks CodeMie ownership.
467
621
  raw.startEvent.data.provider = isAnalyticsOnlyAgent(agentName)
468
622
  ? 'native-unmanaged'
469
623
  : 'native-external';
@@ -1 +1 @@
1
- {"version":3,"file":"native-loader.js","sourceRoot":"","sources":["../../../../src/cli/commands/analytics/native-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"native-loader.js","sourceRoot":"","sources":["../../../../src/cli/commands/analytics/native-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACjG,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAM3C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,uDAAuD,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4DAA4D,CAAC;AAChG,OAAO,EAAE,0BAA0B,EAAE,MAAM,6DAA6D,CAAC;AACzG,OAAO,EAAE,eAAe,EAAE,MAAM,sDAAsD,CAAC;AACvF,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AAEzG,yDAAyD;AACzD,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,CAAU,CAAC;AAExE,SAAS,SAAS,CAAC,SAAiB;IAClC,OAAO,SAAS,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC;AAC1C,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,oBAAoB,CAAC,SAAiB;IAC7C,IAAI,CAAC;QACH,OAAO,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,aAAa,KAAK,IAAI,CAAC;IAC5E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAsBD,SAAS,YAAY,CAAC,CAAS;IAC7B,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,gGAAgG;AAChG,SAAS,mBAAmB;IAC1B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QACH,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;IAC9F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAE1D,CAAC;YACF,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC;YAC/C,IAAI,GAAG,EAAE,CAAC;gBACR,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,uCAAuC;QACzC,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,IAAI,mBAAmB,GAAuB,IAAI,CAAC;AAEnD,SAAS,mBAAmB;IAC1B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QACH,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,IAAI,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;gBACvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAE5D,CAAC;gBACF,IAAI,MAAM,CAAC,cAAc;oBAAE,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;YAC1E,CAAC;iBAAM,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;gBACxC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAG1D,CAAC;gBACF,kFAAkF;gBAClF,oFAAoF;gBACpF,oEAAoE;gBACpE,IAAI,IAAI,CAAC,MAAM,KAAK,cAAc,CAAC,eAAe;oBAAE,SAAS;gBAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC;gBAC/C,IAAI,GAAG;oBAAE,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,oCAAoC;QACtC,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAqB;IAC9C,eAAe,EAAE,mBAAmB;IACpC,KAAK,CAAC,QAAQ,CAAC,UAAU;QACvB,MAAM,KAAK,GAAuB,EAAE,CAAC;QACrC,KAAK,MAAM,SAAS,IAAI,aAAa,EAAE,CAAC;YACtC,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,iBAAiB,EAAE,EAAE,CAAC;YACzE,IAAI,CAAC,OAAO,EAAE,gBAAgB,EAAE,CAAC;gBAC/B,SAAS;YACX,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;gBACnE,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;oBACrC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,SAAS,IAAI,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;gBAC3E,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,CAAC,KAAK,CAAC,iCAAiC,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS;QACxC,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,iBAAiB,EAAE,EAAE,CAAC;QACzE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC;YACH,OAAO,MAAM,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,KAAK,CAAC,6BAA6B,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC;YAC3D,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,QAAQ,EAAE,YAAY;IACtB,kBAAkB,CAAC,QAAgB;QACjC,kEAAkE;QAClE,IAAI,CAAC,mBAAmB;YAAE,mBAAmB,GAAG,mBAAmB,EAAE,CAAC;QACtE,IAAI,mBAAmB,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAEjE,6EAA6E;QAC7E,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YACnC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,SAAiB,CAAC;YACtB,IAAI,CAAC;gBACH,SAAS,GAAG,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC5C,CAAC;oBAAS,CAAC;gBACT,SAAS,CAAC,EAAE,CAAC,CAAC;YAChB,CAAC;YACD,OAAO,GAAG;iBACP,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC;iBACtB,QAAQ,CAAC,OAAO,CAAC;iBACjB,KAAK,CAAC,IAAI,CAAC;iBACX,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;iBACZ,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;gBACb,IAAI,CAAC;oBACH,OAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAuB,CAAC,IAAI,KAAK,uBAAuB,CAAC;gBAClF,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC,CAAC,CAAC;QACP,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF,CAAC;AAUF;;;;GAIG;AACH,SAAS,aAAa,CAAC,QAAsB;IAC3C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC;QACvC,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC;QACnC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;gBACnB,OAAO,OAAO,CAAC;YACjB,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CACxB,CAAC,CAAC,EAAuC,EAAE,CACzC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAK,CAAuB,CAAC,IAAI,KAAK,MAAM,IAAI,OAAQ,CAAwB,CAAC,IAAI,KAAK,QAAQ,CACjI,CAAC;YACF,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC/B,OAAO,KAAK,CAAC,IAAI,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,IAAI,CAAC,EAA+B;IAC3C,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACzB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,WAAW,CAAC,CAAa;IAChC,OAAO,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,OAAO,EAAE,IAAI,KAAK,WAAW,CAAC;AACnE,CAAC;AAED,gFAAgF;AAChF,SAAS,KAAK,CAAC,MAAgB;IAC7B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,IAAI,IAAwB,CAAC;IAC7B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjB,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC;YACd,KAAK,GAAG,CAAC,CAAC;YACV,IAAI,GAAG,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,OAAO,EAAE,0BAA0B,EAAE,MAAM,6DAA6D,CAAC;AAazG,SAAS,eAAe,CAAC,OAA2B;IAClD,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,OAAO,EAAE,IAAI,KAAK,eAAe,CAAC,CAAC,MAAM,CAAC;IAC9G,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,eAAe,CAAC,OAA2B;IAClD,OAAO,OAAO;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;SACzD,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAgBD;;;;;;;GAOG;AACH,SAAS,qBAAqB,CAC5B,SAAiB,EACjB,UAA6B,EAC7B,MAAqB,EACrB,KAAyB;IAEzB,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC;IAEhF,MAAM,YAAY,GAAgB;QAChC,QAAQ,EAAE,GAAG,UAAU,CAAC,SAAS,SAAS;QAC1C,SAAS,EAAE,UAAU,CAAC,SAAS;QAC/B,cAAc,EAAE,UAAU,CAAC,SAAS;QACpC,SAAS,EAAE,SAAS;QACpB,SAAS,EAAE,MAAM;QACjB,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;QAClC,UAAU,EAAE,MAAM,CAAC,OAAO,EAAE,UAAU;QACtC,cAAc,EAAE,MAAM,CAAC,OAAO,EAAE,cAA+C;QAC/E,MAAM;QACN,yFAAyF;QACzF,6FAA6F;QAC7F,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,gBAAgB,IAAI,EAAE,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC9F,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,gBAAgB,IAAI,EAAE,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC9F,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,kBAAkB,IAAI,EAAE,kBAAkB,EAAE,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;QACpG,kGAAkG;QAClG,GAAG,CAAC,aAAa,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;QAC1E,UAAU,EAAE,QAAQ;QACpB,YAAY,EAAE,CAAC;KAChB,CAAC;IAEF,MAAM,MAAM,GAAkB,CAAC,YAAY,CAAC,CAAC;IAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC;YACV,QAAQ,EAAE,GAAG,UAAU,CAAC,SAAS,WAAW,CAAC,EAAE;YAC/C,SAAS,EAAE,UAAU,CAAC,SAAS;YAC/B,cAAc,EAAE,UAAU,CAAC,SAAS;YACpC,SAAS,EAAE,SAAS;YACpB,SAAS,EAAE,MAAM;YACjB,KAAK,EAAE,EAAE;YACT,UAAU,EAAE,QAAQ;YACpB,YAAY,EAAE,CAAC;SAChB,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,SAAS,EAAE,UAAU,CAAC,SAAS;QAC/B,gBAAgB,EAAE,UAAU,CAAC,QAAQ,EAAE,2DAA2D;QAClG,UAAU,EAAE;YACV,QAAQ,EAAE,UAAU,CAAC,SAAS;YAC9B,IAAI,EAAE,eAAe;YACrB,SAAS,EAAE,SAAS;YACpB,gBAAgB,EAAE,UAAU,CAAC,SAAS;YACtC,SAAS;YACT,UAAU,EAAE,QAAQ;YACpB,IAAI,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,EAAE,SAAS,EAAE;SAC/D;QACD,QAAQ,EAAE;YACR,QAAQ,EAAE,GAAG,UAAU,CAAC,SAAS,MAAM;YACvC,IAAI,EAAE,aAAa;YACnB,SAAS,EAAE,OAAO;YAClB,gBAAgB,EAAE,UAAU,CAAC,SAAS;YACtC,SAAS;YACT,UAAU,EAAE,QAAQ;YACpB,IAAI,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE;SACjF;QACD,MAAM;KACP,CAAC;AACJ,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,yBAAyB,CACvC,SAAiB,EACjB,UAA6B,EAC7B,MAAqB;IAErB,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAuB,CAAC;IAC9D,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,QAAiF,CAAC;IAEtG,OAAO,qBAAqB,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE;QAC1D,GAAG,EAAE,IAAI,EAAE,WAAW,IAAI,UAAU,CAAC,WAAW,IAAI,SAAS;QAC7D,MAAM,EAAE,IAAI,EAAE,MAAM;QACpB,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS;QAC7E,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,IAAI,UAAU,CAAC,SAAS;QACnG,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC;QAC/B,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;QACvC,aAAa,EAAE,kBAAkB,CAAC,OAAO,CAAC;KAC3C,CAAC,CAAC;AACL,CAAC;AAkBD;;;;;;;;;GASG;AACH,SAAS,mBAAmB,CAAC,MAAqB;IAChD,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAoB,CAAC;IACvD,MAAM,aAAa,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACpD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,KAAK,GAAoB,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,GAAG,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAoB,CAAC,CAAC,EAAE,CAAC;QAC1G,IAAI,IAAI,EAAE,EAAE,EAAE,CAAC;YACb,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;gBACzB,SAAS,CAAC,4EAA4E;YACxF,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvB,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CAAC,IAAmB;IAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;IAC1C,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAChE,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAClE,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AACnD,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,YAAY,CAAC,KAAsB;IAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;IAC/F,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,sBAAsB,CACpC,SAAiB,EACjB,UAA6B,EAC7B,MAAqB;IAErB,MAAM,KAAK,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IACrF,MAAM,IAAI,GAAG,MAAM,CAAC,QAAgD,CAAC;IAErE,MAAM,MAAM,GAAG,KAAK;SACjB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,EAAE,IAAI,KAAK,WAAW,CAAC;SACtE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,aAAa,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC;SACxD,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnC,OAAO,qBAAqB,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE;QAC1D,0FAA0F;QAC1F,2FAA2F;QAC3F,GAAG,EAAE,IAAI,EAAE,WAAW,IAAI,UAAU,CAAC,WAAW,IAAI,SAAS;QAC7D,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS;QAC7E,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,IAAI,UAAU,CAAC,SAAS;QACnG,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC;QAC1B,MAAM;QACN,aAAa,EAAE,eAAe,CAAC,KAAK,CAAC;KACtC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAClC,SAAiB,EACjB,UAA6B,EAC7B,MAAqB;IAErB,IAAI,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;QAClC,OAAO,yBAAyB,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;QACzB,OAAO,sBAAsB,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC/D,CAAC;IACD,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAiB,CAAiB,CAAC;IACrF,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;IAChG,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAEnD,OAAO,qBAAqB,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE;QAC1D,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,UAAU,CAAC,WAAW,IAAI,SAAS;QAC5E,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/E,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS;QAC7E,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,IAAI,UAAU,CAAC,SAAS;QACnG,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;QACxC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAClF,aAAa,EAAE,aAAa,CAAC,QAAQ,CAAC;KACvC,CAAC,CAAC;AACL,CAAC;AAED,oGAAoG;AACpG,SAAS,UAAU,CAAC,MAAwB;IAC1C,IAAI,MAAM,EAAE,QAAQ,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC;QAC9E,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,IAAI,CAAC,CAAC,+CAA+C;AAC9D,CAAC;AAYD,+FAA+F;AAC/F,KAAK,UAAU,iBAAiB,CAAC,UAA8B,EAAE,IAAsB;IACrF,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAC/B,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAClG,CAAC;IAEF,MAAM,WAAW,GAAmB,EAAE,CAAC;IACvC,KAAK,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,UAAU,EAAE,CAAC;QACnD,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;QACtF,MAAM,aAAa,GAAI,MAAM,EAAE,QAAmD,EAAE,aAAa,CAAC;QAClG,MAAM,cAAc,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAChF,WAAW,CAAC,IAAI,CAAC;YACf,UAAU;YACV,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC5C,MAAM;YACN,GAAG,CAAC,cAAc,IAAI,iBAAiB,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE,CAAC;SACnF,CAAC,CAAC;IACL,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,SAAS,kBAAkB,CAAC,WAA2B;IACrD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IAErC,4FAA4F;IAC5F,MAAM,MAAM,GAAG,CAAC,KAAmB,EAAgB,EAAE;QACnD,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QACjD,SAAS,CAAC;YACR,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC3F,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACjD,OAAO,OAAO,CAAC,CAAC,4DAA4D;YAC9E,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC1B,OAAO,GAAG,MAAM,CAAC;QACnB,CAAC;IACH,CAAC,CAAC;IAEF,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC;YACrD,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;QAChC,IAAI,IAAI,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACxC,SAAS,CAAC,+EAA+E;QAC3F,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG;YACtB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;YAChC;gBACE,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC;gBAChD,QAAQ,EAAE,UAAU,CAAC,QAAQ;gBAC7B,SAAS,EAAE,sBAAsB;gBACjC,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE;aAC3C;SACF,CAAC;QACF,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAwB,EACxB,OAAyB,cAAc;IAEvC,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;IACvC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAE3D,+FAA+F;IAC/F,6FAA6F;IAC7F,oFAAoF;IACpF,gDAAgD;IAChD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAgC,CAAC;IAC5D,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC5C,KAAK,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,UAAU,EAAE,CAAC;QACnD,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;QACpF,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC7C,IAAI,MAAM,EAAE,QAAQ,EAAE,CAAC;YACrB,KAAK,MAAM,EAAE,IAAI,0BAA0B,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7D,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IAED,qFAAqF;IACrF,iFAAiF;IACjF,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAChE,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAE3D,MAAM,GAAG,GAAqB,EAAE,CAAC;IACjC,KAAK,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,UAAU,EAAE,CAAC;QACnD,IAAI,kBAAkB,CAAC,SAAS,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACjF,SAAS,CAAC,+DAA+D;QAC3E,CAAC;QACD,IAAI,SAAS,CAAC,SAAS,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YACrF,SAAS,CAAC,6EAA6E;QACzF,CAAC;QACD,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YACpD,SAAS,CAAC,qDAAqD;QACjE,CAAC;QACD,IAAI,MAA4B,CAAC;QACjC,IAAI,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;YAClC,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;QACxD,CAAC;aAAM,IAAI,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;YAChC,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,IAAI,IAAI,CAAC;QAChF,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,SAAS;QACX,CAAC;QACD,MAAM,GAAG,GAAG,oBAAoB,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QAChE,IAAI,GAAG,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpE,mFAAmF;YACnF,oFAAoF;YACpF,iFAAiF;YACjF,sFAAsF;YACtF,0EAA0E;YAC1E,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,GAAG,oBAAoB,CAAC,SAAS,CAAC;gBAC5D,CAAC,CAAC,kBAAkB;gBACpB,CAAC,CAAC,iBAAiB,CAAC;QACxB,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -19,7 +19,7 @@
19
19
 
20
20
  // ---- palette ------------------------------------------------------------
21
21
  var PALETTE = ['#7C5CFC', '#2297F6', '#F5A534', '#06B6D4', '#259F4C', '#F9303C', '#C084FC', '#E879A6'];
22
- var AGENT_COLORS = { claude: '#7C5CFC', 'claude-acp': '#9D7BFF', 'claude-desktop': '#B79DFF', gemini: '#F5A534', codex: '#06B6D4', 'codemie-codex': '#06B6D4', opencode: '#259F4C', 'codemie-code': '#2297F6', 'copilot-cli': '#6E7681' };
22
+ var AGENT_COLORS = { claude: '#7C5CFC', 'claude-acp': '#9D7BFF', 'claude-desktop': '#B79DFF', gemini: '#F5A534', codex: '#06B6D4', 'codemie-codex': '#06B6D4', opencode: '#259F4C', 'codemie-code': '#2297F6', 'copilot-cli': '#6E7681', pi: '#E879A6' };
23
23
  var seenAgentColor = {};
24
24
  var colorCursor = 0;
25
25
  function colorFor(agent) {
@@ -29,7 +29,7 @@
29
29
  }
30
30
  // Agent keys are internal ids; these are what a human should read. Unmapped agents fall
31
31
  // through to the key itself, so listing an agent here is optional.
32
- var AGENT_LABELS = { 'copilot-cli': 'GitHub Copilot CLI' };
32
+ var AGENT_LABELS = { 'copilot-cli': 'GitHub Copilot CLI', pi: 'Pi' };
33
33
  function labelFor(agent) { return AGENT_LABELS[agent] || agent; }
34
34
 
35
35
  // ---- formatting ---------------------------------------------------------
@@ -1036,6 +1036,50 @@
1036
1036
  container.appendChild(sidePane);
1037
1037
  return container;
1038
1038
  }
1039
+ /**
1040
+ * Rebuild a single-session ReportPayload matching what
1041
+ * `codemie analytics --report --report-format json --session <id>` writes:
1042
+ * { meta, sessions: [record] }, with meta.totals/coverage scoped to this one session
1043
+ * and userEmail / periodStart / periodEnd populated. Mirrors buildPayload()'s meta
1044
+ * assembly (see report/payload-builder.ts) so the exported file is drop-in comparable.
1045
+ */
1046
+ function sessionPayload(s) {
1047
+ var perModel = s.perModelCost || [];
1048
+ var priced = perModel.length > 0;
1049
+ var unpricedModels = [];
1050
+ perModel.forEach(function (m) {
1051
+ if (m.unpriced && unpricedModels.indexOf(m.model) === -1) unpricedModels.push(m.model);
1052
+ });
1053
+ var meta = {
1054
+ generatedAt: new Date().toISOString(),
1055
+ // --session applies no date filter, so the CLI stamps 'all' / 'all' here too.
1056
+ rangeLabel: 'all',
1057
+ agents: [s.agentName],
1058
+ projectFilter: 'all',
1059
+ totals: {
1060
+ sessions: 1,
1061
+ durationMs: s.durationMs,
1062
+ turns: s.turns,
1063
+ files: s.fileOps,
1064
+ netLines: s.netLines,
1065
+ toolCallsTotal: s.toolCallsTotal,
1066
+ toolSuccessRate: s.toolCallsTotal ? Math.round((s.toolCallsSuccess / s.toolCallsTotal) * 1000) / 10 : 0,
1067
+ totalCostUSD: s.costUSD,
1068
+ cacheReadCostUSD: s.cacheReadCostUSD,
1069
+ pricedSessions: priced ? 1 : 0
1070
+ },
1071
+ unpricedModels: unpricedModels,
1072
+ coverage: [{ agentName: s.agentName, total: 1, priced: priced ? 1 : 0, withLog: s.hadLog ? 1 : 0 }]
1073
+ };
1074
+ // Same conditional-spread semantics as buildPayload: omit rather than emit null.
1075
+ if (DATA.meta && DATA.meta.userEmail !== undefined) meta.userEmail = DATA.meta.userEmail;
1076
+ if (Number.isFinite(s.startTime) && s.startTime > 0) {
1077
+ meta.periodStart = new Date(s.startTime).toISOString();
1078
+ meta.periodEnd = new Date(s.startTime + Math.max(Number.isFinite(s.durationMs) ? s.durationMs : 0, 0)).toISOString();
1079
+ }
1080
+ return { meta: meta, sessions: [s] };
1081
+ }
1082
+
1039
1083
  function openSessionModal(s, onBack) {
1040
1084
  if (!s) return;
1041
1085
  closeSessionModal();
@@ -1062,7 +1106,7 @@
1062
1106
  exportBtn.setAttribute('aria-label', 'Export session as JSON');
1063
1107
  exportBtn.setAttribute('title', 'Export session details as JSON');
1064
1108
  exportBtn.addEventListener('click', function () {
1065
- var json = JSON.stringify(s, null, 2);
1109
+ var json = JSON.stringify(sessionPayload(s), null, 2);
1066
1110
  var blob = new Blob([json], { type: 'application/json' });
1067
1111
  var url = URL.createObjectURL(blob);
1068
1112
  var a = document.createElement('a');
@@ -1 +1 @@
1
- {"version":3,"file":"payload-builder.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/analytics/report/payload-builder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAiB,MAAM,kBAAkB,CAAC;AAErF,OAAO,KAAK,EAAE,aAAa,EAAmC,MAAM,YAAY,CAAC;AAGjF,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,aAAa,EACnB,SAAS,EAAE,gBAAgB,EAC3B,OAAO,EAAE,WAAW,EACpB,GAAG,EAAE,cAAc,GAClB,aAAa,CAkIf"}
1
+ {"version":3,"file":"payload-builder.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/analytics/report/payload-builder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAiB,MAAM,kBAAkB,CAAC;AAErF,OAAO,KAAK,EAAE,aAAa,EAAmC,MAAM,YAAY,CAAC;AAGjF,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,aAAa,EACnB,SAAS,EAAE,gBAAgB,EAC3B,OAAO,EAAE,WAAW,EACpB,GAAG,EAAE,cAAc,GAClB,aAAa,CAyJf"}