spiracha 1.4.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/AGENTS.md +48 -5
  2. package/README.md +40 -5
  3. package/apps/ui/AGENTS.md +23 -4
  4. package/apps/ui/README.md +49 -2
  5. package/apps/ui/dist/client/assets/analytics-DOy1b6Sh.js +1 -0
  6. package/apps/ui/dist/client/assets/{antigravity-conversations._conversationId-DmD0sN8X.js → antigravity-conversations._conversationId-DqySVO2K.js} +2 -2
  7. package/apps/ui/dist/client/assets/antigravity-keychain-panel-B77qJz6f.js +1 -0
  8. package/apps/ui/dist/client/assets/antigravity._workspaceKey-B3NM6gRH.js +1 -0
  9. package/apps/ui/dist/client/assets/{antigravity.index-DEEkjlZa.js → antigravity.index-DP9JC2P9.js} +1 -1
  10. package/apps/ui/dist/client/assets/{badge-DfWvPfKF.js → badge-C3i4OKs8.js} +1 -1
  11. package/apps/ui/dist/client/assets/claude-code-sessions._sessionId-8pQ55ci2.js +1 -0
  12. package/apps/ui/dist/client/assets/claude-code-sessions._sessionId-DVz5UmtU.js +1 -0
  13. package/apps/ui/dist/client/assets/claude-code._workspaceKey-BBKskSum.js +1 -0
  14. package/apps/ui/dist/client/assets/claude-code._workspaceKey-OkikMUFs.js +1 -0
  15. package/apps/ui/dist/client/assets/claude-code.index-Cwu76dbb.js +1 -0
  16. package/apps/ui/dist/client/assets/claude-code.index-D6eMd08t.js +1 -0
  17. package/apps/ui/dist/client/assets/createServerFn-B-KkwmHU.js +3 -0
  18. package/apps/ui/dist/client/assets/cursor-threads._composerId-hBWlP1D-.js +1 -0
  19. package/apps/ui/dist/client/assets/cursor._workspaceKey-BFPkIRi-.js +1 -0
  20. package/apps/ui/dist/client/assets/cursor.index-8y4o20kb.js +2 -0
  21. package/apps/ui/dist/client/assets/delete-confirm-dialog-Bxs07u-j.js +7 -0
  22. package/apps/ui/dist/client/assets/dist-BrJhN2A0.js +5 -0
  23. package/apps/ui/dist/client/assets/{dist-BhZOxAPP.js → dist-Cmd3AIfD.js} +1 -1
  24. package/apps/ui/dist/client/assets/dropdown-menu-D5cvPaZt.js +1 -0
  25. package/apps/ui/dist/client/assets/{es2015-BkCWttyM.js → es2015-ad6040dw.js} +1 -1
  26. package/apps/ui/dist/client/assets/export-dialog-Dr8d2MqD.js +1 -0
  27. package/apps/ui/dist/client/assets/{formatters-BM9kB7ed.js → formatters-BtqyrX_c.js} +1 -1
  28. package/apps/ui/dist/client/assets/index-C-STgIH4.js +166 -0
  29. package/apps/ui/dist/client/assets/kiro-sessions._sessionId-CKgfJ7GR.js +1 -0
  30. package/apps/ui/dist/client/assets/kiro-sessions._sessionId-zvIJHtQF.js +1 -0
  31. package/apps/ui/dist/client/assets/kiro._workspaceKey-DhVuJuZB.js +1 -0
  32. package/apps/ui/dist/client/assets/kiro._workspaceKey-QArsjkTY.js +1 -0
  33. package/apps/ui/dist/client/assets/kiro.index-C-fr4m7i.js +1 -0
  34. package/apps/ui/dist/client/assets/kiro.index-OYgAdtZd.js +1 -0
  35. package/apps/ui/dist/client/assets/opencode-sessions._sessionId-DLjiTst-.js +1 -0
  36. package/apps/ui/dist/client/assets/opencode-sessions._sessionId-biBwrRbt.js +8 -0
  37. package/apps/ui/dist/client/assets/opencode._workspaceKey-C7OIzMOJ.js +1 -0
  38. package/apps/ui/dist/client/assets/opencode._workspaceKey-sBakX0oI.js +1 -0
  39. package/apps/ui/dist/client/assets/opencode.index-Bl_kNs9N.js +1 -0
  40. package/apps/ui/dist/client/assets/opencode.index-CN53bVmb.js +1 -0
  41. package/apps/ui/dist/client/assets/preload-helper-B8fFrdxC.js +1 -0
  42. package/apps/ui/dist/client/assets/projects._project-D8WloxQN.js +1 -0
  43. package/apps/ui/dist/client/assets/projects.index-5xRtuJdX.js +3 -0
  44. package/apps/ui/dist/client/assets/routes-DnzF_9CX.js +1 -0
  45. package/apps/ui/dist/client/assets/select-CYF6pF37.js +1 -0
  46. package/apps/ui/dist/client/assets/settings-Dx70jgP_.js +1 -0
  47. package/apps/ui/dist/client/assets/styles-B7Zi9EFA.css +1 -0
  48. package/apps/ui/dist/client/assets/tabs-CmuhkT-c.js +7 -0
  49. package/apps/ui/dist/client/assets/thread-transcript-stats-BUNz6u7F.js +1 -0
  50. package/apps/ui/dist/client/assets/threads._threadId-BMRSFow3.js +1 -0
  51. package/apps/ui/dist/client/assets/useMutation-BSFult2i.js +1 -0
  52. package/apps/ui/dist/client/assets/useQuery-CjINKZf1.js +1 -0
  53. package/apps/ui/dist/client/icon.svg +2 -1
  54. package/apps/ui/dist/server/assets/_tanstack-start-manifest_v-CQ8Jjs3B.js +387 -0
  55. package/apps/ui/dist/server/assets/{antigravity-conversations._conversationId-BtexWY-K.js → antigravity-conversations._conversationId-BKOyL2T6.js} +2 -2
  56. package/apps/ui/dist/server/assets/{antigravity-conversations._conversationId-zMrR6v6R.js → antigravity-conversations._conversationId-eS87Dx7g.js} +1 -1
  57. package/apps/ui/dist/server/assets/claude-code-db-Ik3VStKZ.js +361 -0
  58. package/apps/ui/dist/server/assets/claude-code-queries-Cgzi4K-e.js +37 -0
  59. package/apps/ui/dist/server/assets/claude-code-server-PfraClXS.js +72 -0
  60. package/apps/ui/dist/server/assets/claude-code-sessions._sessionId-C55oe6zj.js +18 -0
  61. package/apps/ui/dist/server/assets/claude-code-sessions._sessionId-D1RYYi3j.js +473 -0
  62. package/apps/ui/dist/server/assets/claude-code-sessions._sessionId-DSvPLEUL.js +11 -0
  63. package/apps/ui/dist/server/assets/claude-code-transcript-C-bxh3cS.js +139 -0
  64. package/apps/ui/dist/server/assets/claude-code-transcript-phase-DmUMc8VU.js +10 -0
  65. package/apps/ui/dist/server/assets/claude-code._workspaceKey-B5Xg_-tE.js +28 -0
  66. package/apps/ui/dist/server/assets/claude-code._workspaceKey-BPlzyXPa.js +11 -0
  67. package/apps/ui/dist/server/assets/claude-code._workspaceKey-DqDve2wl.js +191 -0
  68. package/apps/ui/dist/server/assets/claude-code.index-B7yYR7dD.js +92 -0
  69. package/apps/ui/dist/server/assets/claude-code.index-BUHThG1W.js +11 -0
  70. package/apps/ui/dist/server/assets/{codex-server-CNXSJuc2.js → codex-server-CGXU4H8-.js} +319 -29
  71. package/apps/ui/dist/server/assets/{cursor-db-cYZEU3WQ.js → cursor-db-CZnYy7aT.js} +3 -3
  72. package/apps/ui/dist/server/assets/{cursor-recovery-nq-kR62j.js → cursor-recovery-CXpO8KcD.js} +2 -2
  73. package/apps/ui/dist/server/assets/{cursor-server-C3q7hrp-.js → cursor-server-DNu52A3K.js} +13 -13
  74. package/apps/ui/dist/server/assets/{cursor-threads._composerId-BkMMTQ3v.js → cursor-threads._composerId-Ckn6ItHI.js} +3 -3
  75. package/apps/ui/dist/server/assets/{cursor-threads._composerId-BPJFWfJj.js → cursor-threads._composerId-p9-ARAzc.js} +1 -1
  76. package/apps/ui/dist/server/assets/{cursor-transcript-2iL3KFSK.js → cursor-transcript-B7tGnqtn.js} +1 -1
  77. package/apps/ui/dist/server/assets/{cursor._workspaceKey-C5PdTaKB.js → cursor._workspaceKey-CZuohIUL.js} +1 -1
  78. package/apps/ui/dist/server/assets/{cursor._workspaceKey-Ckj7apKI.js → cursor._workspaceKey-DPp5JSjy.js} +2 -2
  79. package/apps/ui/dist/server/assets/{export-dialog-BItjWgkZ.js → export-dialog-D88ze9Gy.js} +2 -2
  80. package/apps/ui/dist/server/assets/kiro-db--fXrED_-.js +552 -0
  81. package/apps/ui/dist/server/assets/kiro-queries-CzNlM2ok.js +37 -0
  82. package/apps/ui/dist/server/assets/kiro-server-9WRxg2Au.js +72 -0
  83. package/apps/ui/dist/server/assets/kiro-sessions._sessionId-CRY2c7YO.js +11 -0
  84. package/apps/ui/dist/server/assets/kiro-sessions._sessionId-F1UlwxmR.js +449 -0
  85. package/apps/ui/dist/server/assets/kiro-sessions._sessionId-bvTulT7C.js +18 -0
  86. package/apps/ui/dist/server/assets/kiro-transcript-DoekQBaH.js +112 -0
  87. package/apps/ui/dist/server/assets/kiro-transcript-phase-CJG40nQg.js +27 -0
  88. package/apps/ui/dist/server/assets/kiro._workspaceKey-BDe9sQwo.js +11 -0
  89. package/apps/ui/dist/server/assets/kiro._workspaceKey-CJsjgNwO.js +28 -0
  90. package/apps/ui/dist/server/assets/kiro._workspaceKey-D_-4Qb7y.js +193 -0
  91. package/apps/ui/dist/server/assets/kiro.index-C__-UROk.js +11 -0
  92. package/apps/ui/dist/server/assets/kiro.index-CmTbqeYj.js +93 -0
  93. package/apps/ui/dist/server/assets/opencode-db-BM7KjOzc.js +397 -0
  94. package/apps/ui/dist/server/assets/opencode-queries-BeNYXnQv.js +50 -0
  95. package/apps/ui/dist/server/assets/opencode-server-BpQ_kRze.js +72 -0
  96. package/apps/ui/dist/server/assets/opencode-sessions._sessionId-CGQ-t0vD.js +518 -0
  97. package/apps/ui/dist/server/assets/opencode-sessions._sessionId-D8Q7in_Z.js +18 -0
  98. package/apps/ui/dist/server/assets/opencode-sessions._sessionId-DKOvi0lV.js +11 -0
  99. package/apps/ui/dist/server/assets/opencode-think-tags-CAoD-EcZ.js +87 -0
  100. package/apps/ui/dist/server/assets/opencode-transcript-BNTcGNym.js +141 -0
  101. package/apps/ui/dist/server/assets/opencode-transcript-phase-OqLkiQD0.js +32 -0
  102. package/apps/ui/dist/server/assets/opencode._workspaceKey-BdqcWHw1.js +11 -0
  103. package/apps/ui/dist/server/assets/opencode._workspaceKey-CfH96HTT.js +28 -0
  104. package/apps/ui/dist/server/assets/opencode._workspaceKey-DdbHPDrO.js +207 -0
  105. package/apps/ui/dist/server/assets/opencode.index-BbVzkJXP.js +11 -0
  106. package/apps/ui/dist/server/assets/opencode.index-Vh_Gq_1L.js +93 -0
  107. package/apps/ui/dist/server/assets/{projects._project-Bpbc3C-L.js → projects._project-4io5LO0E.js} +1 -1
  108. package/apps/ui/dist/server/assets/{projects._project-CvZho6EQ.js → projects._project-D6ZoGhJ8.js} +2 -2
  109. package/apps/ui/dist/server/assets/{router-6m-ihwqA.js → router-Sac2DGk6.js} +157 -49
  110. package/apps/ui/dist/server/assets/{shared-CPRNYIql.js → shared-DyhChtHf.js} +4 -1
  111. package/apps/ui/dist/server/assets/source-session-export-server-DNutCawb.js +38 -0
  112. package/apps/ui/dist/server/assets/{start-CI_0bSiY.js → start-B_HFwkkk.js} +1 -1
  113. package/apps/ui/dist/server/assets/{tabs-CGA13IZM.js → tabs-DkaChNVg.js} +0 -1
  114. package/apps/ui/dist/server/assets/thread-transcript-stats-Dh34mt2u.js +45 -0
  115. package/apps/ui/dist/server/assets/{threads._threadId-D2GYkVn6.js → threads._threadId-BeXEc4Lo.js} +15 -6
  116. package/apps/ui/dist/server/assets/{threads._threadId-Bs0yuqO9.js → threads._threadId-Ci0S4mKU.js} +1 -1
  117. package/apps/ui/dist/server/server.js +72 -24
  118. package/package.json +21 -4
  119. package/src/lib/claude-code-db.ts +655 -0
  120. package/src/lib/claude-code-exporter-types.ts +110 -0
  121. package/src/lib/claude-code-transcript-phase.ts +25 -0
  122. package/src/lib/claude-code-transcript.ts +180 -0
  123. package/src/lib/codex-browser-db.ts +490 -31
  124. package/src/lib/codex-browser-export.ts +18 -2
  125. package/src/lib/codex-thread-cache.ts +17 -1
  126. package/src/lib/concurrency.ts +25 -0
  127. package/src/lib/kiro-db.ts +949 -0
  128. package/src/lib/kiro-exporter-types.ts +100 -0
  129. package/src/lib/kiro-transcript-phase.ts +41 -0
  130. package/src/lib/kiro-transcript.ts +115 -0
  131. package/src/lib/opencode-db.ts +610 -0
  132. package/src/lib/opencode-exporter-types.ts +129 -0
  133. package/src/lib/opencode-think-tags.ts +126 -0
  134. package/src/lib/opencode-transcript-phase.ts +50 -0
  135. package/src/lib/opencode-transcript.ts +194 -0
  136. package/src/lib/shared.ts +25 -0
  137. package/src/lib/ui-export-archive.ts +61 -0
  138. package/apps/ui/dist/client/assets/analytics-DK2jdvmI.js +0 -1
  139. package/apps/ui/dist/client/assets/antigravity-keychain-panel-BRHVjFAM.js +0 -1
  140. package/apps/ui/dist/client/assets/antigravity._workspaceKey-CGV7amas.js +0 -1
  141. package/apps/ui/dist/client/assets/createServerFn-CgRRVpBH.js +0 -3
  142. package/apps/ui/dist/client/assets/cursor-threads._composerId-Ti2gTm63.js +0 -1
  143. package/apps/ui/dist/client/assets/cursor._workspaceKey-DzD_c6j9.js +0 -1
  144. package/apps/ui/dist/client/assets/cursor.index-PkCFVcl4.js +0 -2
  145. package/apps/ui/dist/client/assets/delete-confirm-dialog-BHRmyLHr.js +0 -11
  146. package/apps/ui/dist/client/assets/dropdown-menu-Dy5cLzTy.js +0 -1
  147. package/apps/ui/dist/client/assets/export-dialog-C86SYHJn.js +0 -1
  148. package/apps/ui/dist/client/assets/index-CPvAP-jk.js +0 -149
  149. package/apps/ui/dist/client/assets/projects._project-Ckf6muWZ.js +0 -1
  150. package/apps/ui/dist/client/assets/projects.index-V5ibNZII.js +0 -3
  151. package/apps/ui/dist/client/assets/routes-Df2tgpyd.js +0 -1
  152. package/apps/ui/dist/client/assets/select-Bf2GwfPR.js +0 -1
  153. package/apps/ui/dist/client/assets/settings-5VQIzME0.js +0 -1
  154. package/apps/ui/dist/client/assets/styles-BhRkXgwB.css +0 -1
  155. package/apps/ui/dist/client/assets/tabs-OO4VU5KR.js +0 -7
  156. package/apps/ui/dist/client/assets/threads._threadId-BgDhFj2I.js +0 -1
  157. package/apps/ui/dist/client/assets/useMutation-CC_B7uy5.js +0 -1
  158. package/apps/ui/dist/client/assets/useQuery-C5By6WKU.js +0 -1
  159. package/apps/ui/dist/server/assets/_tanstack-start-manifest_v-CRW2kqj0.js +0 -232
@@ -0,0 +1,72 @@
1
+ import { t as createServerFn } from "../server.js";
2
+ import { t as createServerRpc } from "./createServerRpc-CF_DEwnm.js";
3
+ import { t as renderSourceSessionDownload } from "./source-session-export-server-DNutCawb.js";
4
+ import { z } from "zod";
5
+ //#region src/lib/kiro-server.ts?tss-serverfn-split
6
+ var workspaceSchema = z.object({ workspaceKey: z.string().min(1) });
7
+ var sessionSchema = z.object({ sessionId: z.string().min(1) });
8
+ var exportSessionSchema = z.object({
9
+ includeCommentary: z.boolean().default(true),
10
+ includeMetadata: z.boolean().default(true),
11
+ includeTools: z.boolean().default(true),
12
+ outputFormat: z.enum(["md", "txt"]).default("md"),
13
+ sessionId: z.string().min(1),
14
+ zipArchive: z.boolean().default(false)
15
+ });
16
+ var listKiroWorkspacesFn_createServerFn_handler = createServerRpc({
17
+ id: "e5dccf57fb45a9c1fe971e71935dd743e2c4108badfb95aa89cf08a5ccd7c3af",
18
+ name: "listKiroWorkspacesFn",
19
+ filename: "src/lib/kiro-server.ts"
20
+ }, (opts) => listKiroWorkspacesFn.__executeServer(opts));
21
+ var listKiroWorkspacesFn = createServerFn({ method: "GET" }).handler(listKiroWorkspacesFn_createServerFn_handler, async () => {
22
+ const { listKiroWorkspaceGroups } = await import("./kiro-db--fXrED_-.js");
23
+ return listKiroWorkspaceGroups();
24
+ });
25
+ var listKiroSessionsFn_createServerFn_handler = createServerRpc({
26
+ id: "05f39c4ddd140732eec6814673bdb975c3092ae88d9fb87479586125e8da3917",
27
+ name: "listKiroSessionsFn",
28
+ filename: "src/lib/kiro-server.ts"
29
+ }, (opts) => listKiroSessionsFn.__executeServer(opts));
30
+ var listKiroSessionsFn = createServerFn({ method: "GET" }).validator(workspaceSchema).handler(listKiroSessionsFn_createServerFn_handler, async ({ data }) => {
31
+ const { listKiroSessionsForGroup } = await import("./kiro-db--fXrED_-.js");
32
+ return listKiroSessionsForGroup(data.workspaceKey);
33
+ });
34
+ var loadKiroSessionTranscript = async (sessionId) => {
35
+ const { readKiroSessionTranscript, resolveKiroWorkspaceSessionsDir } = await import("./kiro-db--fXrED_-.js");
36
+ const transcript = await readKiroSessionTranscript(resolveKiroWorkspaceSessionsDir(), sessionId);
37
+ if (!transcript) throw new Error(`Kiro session not found: ${sessionId}`);
38
+ return transcript;
39
+ };
40
+ var getKiroSessionDetailFn_createServerFn_handler = createServerRpc({
41
+ id: "51dfddfd486f04b369fef0b3a5aaa0dcd275fc5495ac2fba85a3348408d897c9",
42
+ name: "getKiroSessionDetailFn",
43
+ filename: "src/lib/kiro-server.ts"
44
+ }, (opts) => getKiroSessionDetailFn.__executeServer(opts));
45
+ var getKiroSessionDetailFn = createServerFn({ method: "GET" }).validator(sessionSchema).handler(getKiroSessionDetailFn_createServerFn_handler, async ({ data }) => {
46
+ return loadKiroSessionTranscript(data.sessionId);
47
+ });
48
+ var exportKiroSessionFn_createServerFn_handler = createServerRpc({
49
+ id: "a3419cd85493ddc5959e22d85e6b1c5bfb4ce862bb7117ad6a98e3c97d14d066",
50
+ name: "exportKiroSessionFn",
51
+ filename: "src/lib/kiro-server.ts"
52
+ }, (opts) => exportKiroSessionFn.__executeServer(opts));
53
+ var exportKiroSessionFn = createServerFn({ method: "POST" }).validator(exportSessionSchema).handler(exportKiroSessionFn_createServerFn_handler, async ({ data }) => {
54
+ const { renderKiroTranscript } = await import("./kiro-transcript-DoekQBaH.js");
55
+ const transcript = await loadKiroSessionTranscript(data.sessionId);
56
+ const content = renderKiroTranscript(transcript, {
57
+ includeCommentary: data.includeCommentary,
58
+ includeMetadata: data.includeMetadata,
59
+ includeTools: data.includeTools,
60
+ outputFormat: data.outputFormat
61
+ });
62
+ if (!content) throw new Error(`Kiro session has no exportable content: ${data.sessionId}`);
63
+ return renderSourceSessionDownload({
64
+ content,
65
+ fallbackBaseName: "kiro-session",
66
+ fileBaseName: transcript.session.title || transcript.session.sessionId,
67
+ outputFormat: data.outputFormat,
68
+ zipArchive: data.zipArchive
69
+ });
70
+ });
71
+ //#endregion
72
+ export { exportKiroSessionFn_createServerFn_handler, getKiroSessionDetailFn_createServerFn_handler, listKiroSessionsFn_createServerFn_handler, listKiroWorkspacesFn_createServerFn_handler };
@@ -0,0 +1,11 @@
1
+ import { t as ReloadErrorPanel } from "./reload-error-panel-BJMxY3U1.js";
2
+ import { jsx } from "react/jsx-runtime";
3
+ //#region src/routes/kiro-sessions.$sessionId.tsx?tsr-split=errorComponent
4
+ var KiroSessionDetailErrorComponent = ({ error }) => {
5
+ return /* @__PURE__ */ jsx(ReloadErrorPanel, {
6
+ description: error.message,
7
+ title: "Failed to load Kiro session"
8
+ });
9
+ };
10
+ //#endregion
11
+ export { KiroSessionDetailErrorComponent as errorComponent };
@@ -0,0 +1,449 @@
1
+ import { t as Button } from "./button-CmTDnzOn.js";
2
+ import { i as exportKiroSessionFn, t as kiroSessionDetailQueryOptions } from "./kiro-queries-CzNlM2ok.js";
3
+ import { t as Route } from "./kiro-sessions._sessionId-bvTulT7C.js";
4
+ import { t as Checkbox } from "./checkbox-C0hovF41.js";
5
+ import { t as MetricCard } from "./metric-card-ByEeLu0r.js";
6
+ import { t as PageHeader } from "./page-header-VNSaM3xd.js";
7
+ import { i as formatList, o as formatNumber, r as formatDateTime } from "./formatters-FJaGZgJk.js";
8
+ import { a as TranscriptView, c as Breadcrumbs, i as TabsTrigger, n as TabsContent, o as MetadataSection, r as TabsList, s as JsonPanel, t as Tabs } from "./tabs-DkaChNVg.js";
9
+ import { n as downloadUrlFile, t as downloadTextFile } from "./download-DMmiy1xf.js";
10
+ import { t as ExportDialog } from "./export-dialog-D88ze9Gy.js";
11
+ import { t as getThreadTranscriptStats } from "./thread-transcript-stats-Dh34mt2u.js";
12
+ import { n as getKiroMessagePhase, t as getFinalKiroAssistantMessageEntryIds } from "./kiro-transcript-phase-CJG40nQg.js";
13
+ import { useMemo, useState } from "react";
14
+ import { Link } from "@tanstack/react-router";
15
+ import { jsx, jsxs } from "react/jsx-runtime";
16
+ import { useMutation, useSuspenseQuery } from "@tanstack/react-query";
17
+ import { Download } from "lucide-react";
18
+ //#region src/lib/kiro-transcript-events.ts
19
+ var buildRaw = (entry, part, eventType) => ({
20
+ entryId: entry.entryId,
21
+ eventType,
22
+ executionId: entry.executionId,
23
+ role: entry.role,
24
+ source: "kiro_workspace_sessions",
25
+ type: part.type,
26
+ ...part.raw
27
+ });
28
+ var buildMessageEvent = (transcript, entry, part, sequence, text, phase) => ({
29
+ isHiddenByDefault: entry.role !== "assistant" && entry.role !== "user",
30
+ kind: "message",
31
+ memoryCitation: null,
32
+ model: transcript.session.selectedModel ?? transcript.session.defaultModelTitle,
33
+ phase,
34
+ raw: buildRaw(entry, part, "message"),
35
+ role: entry.role,
36
+ sequence,
37
+ text,
38
+ timestamp: entry.timestamp,
39
+ variant: entry.role === "user" ? "user_message" : entry.role === "assistant" ? "agent_message" : "message"
40
+ });
41
+ var getPartString = (part, key) => {
42
+ const value = part.raw[key];
43
+ return typeof value === "string" && value.trim() ? value : null;
44
+ };
45
+ var buildToolCallEvent = (transcript, entry, part, sequence, command) => ({
46
+ argumentsParseFailed: false,
47
+ argumentsText: command,
48
+ callId: entry.entryId,
49
+ command,
50
+ kind: "tool_call",
51
+ name: getPartString(part, "toolName") ?? "kiro_action",
52
+ raw: buildRaw(entry, part, "tool_call"),
53
+ sequence,
54
+ timestamp: entry.timestamp,
55
+ workdir: transcript.session.worktree
56
+ });
57
+ var partToEvents = (transcript, entry, part, sequence, finalAssistantMessageEntryIds) => {
58
+ if (entry.entryType === "tool_call" && part.type === "text") {
59
+ const command = part.text?.trim();
60
+ return command ? [buildToolCallEvent(transcript, entry, part, sequence, command)] : [];
61
+ }
62
+ if (part.type === "text" || part.type === "image") {
63
+ const text = part.text?.trim();
64
+ return text ? [buildMessageEvent(transcript, entry, part, sequence, text, getKiroMessagePhase(entry, finalAssistantMessageEntryIds))] : [];
65
+ }
66
+ return [];
67
+ };
68
+ var kiroTranscriptToThreadEvents = (transcript) => {
69
+ const events = [];
70
+ const finalAssistantMessageEntryIds = getFinalKiroAssistantMessageEntryIds(transcript.entries);
71
+ let sequence = 0;
72
+ for (const entry of transcript.entries) for (const part of entry.parts) {
73
+ events.push(...partToEvents(transcript, entry, part, sequence, finalAssistantMessageEntryIds));
74
+ sequence += 1;
75
+ }
76
+ return events;
77
+ };
78
+ var getKiroThreadTranscriptStats = (events) => {
79
+ return getThreadTranscriptStats(events);
80
+ };
81
+ //#endregion
82
+ //#region src/routes/kiro-sessions.$sessionId.tsx?tsr-split=component
83
+ var getKiroModelLabel = (detail) => {
84
+ return detail.session.selectedModel ?? detail.session.defaultModelTitle ?? "unknown";
85
+ };
86
+ var buildSessionMetadata = (detail) => [
87
+ {
88
+ label: "Session ID",
89
+ value: /* @__PURE__ */ jsx("span", {
90
+ "data-mono": "true",
91
+ children: detail.session.sessionId
92
+ })
93
+ },
94
+ {
95
+ label: "Workspace",
96
+ value: /* @__PURE__ */ jsx(Link, {
97
+ className: "text-[var(--accent)]",
98
+ params: { workspaceKey: detail.session.workspaceKey },
99
+ to: "/kiro/$workspaceKey",
100
+ children: detail.session.workspaceLabel
101
+ })
102
+ },
103
+ {
104
+ label: "Worktree",
105
+ value: detail.session.worktree
106
+ },
107
+ {
108
+ label: "Workspace path",
109
+ value: detail.session.workspacePath ?? "unknown"
110
+ },
111
+ {
112
+ label: "Workspace directory",
113
+ value: detail.session.workspaceDirectory ?? "unknown"
114
+ },
115
+ {
116
+ label: "Selected model",
117
+ value: detail.session.selectedModel ?? "unknown"
118
+ },
119
+ {
120
+ label: "Default model",
121
+ value: detail.session.defaultModelTitle ?? "unknown"
122
+ },
123
+ {
124
+ label: "Profile",
125
+ value: detail.session.selectedProfileId ?? "unknown"
126
+ },
127
+ {
128
+ label: "Autonomy mode",
129
+ value: detail.session.autonomyMode ?? "unknown"
130
+ },
131
+ {
132
+ label: "Session type",
133
+ value: detail.session.sessionType ?? "unknown"
134
+ },
135
+ {
136
+ label: "Created",
137
+ value: /* @__PURE__ */ jsx("span", {
138
+ suppressHydrationWarning: true,
139
+ children: formatDateTime(detail.session.createdAtMs)
140
+ })
141
+ },
142
+ {
143
+ label: "Last active",
144
+ value: /* @__PURE__ */ jsx("span", {
145
+ suppressHydrationWarning: true,
146
+ children: formatDateTime(detail.session.lastActiveAtMs)
147
+ })
148
+ },
149
+ {
150
+ label: "Source file",
151
+ value: detail.session.filePath
152
+ }
153
+ ];
154
+ var buildTranscriptStatsItems = (detail, events, stats) => [
155
+ {
156
+ label: "Event kinds",
157
+ value: formatList([...new Set(events.map((event) => event.kind))])
158
+ },
159
+ {
160
+ label: "Messages",
161
+ value: formatNumber(stats.messageCount)
162
+ },
163
+ {
164
+ label: "User messages",
165
+ value: formatNumber(stats.userMessageCount)
166
+ },
167
+ {
168
+ label: "Assistant messages",
169
+ value: formatNumber(stats.assistantMessageCount)
170
+ },
171
+ {
172
+ label: "Final answers",
173
+ value: formatNumber(stats.finalAnswerCount)
174
+ },
175
+ {
176
+ label: "Images",
177
+ value: formatNumber(detail.session.imageCount)
178
+ },
179
+ {
180
+ label: "Prompt logs",
181
+ value: formatNumber(detail.session.promptLogCount)
182
+ },
183
+ {
184
+ label: "Renderable parts",
185
+ value: formatNumber(detail.renderablePartCount)
186
+ }
187
+ ];
188
+ var KiroTranscriptControls = ({ rawJsonDisabled = false, showCommentary, showExtraEvents, showRawJson, showToolCalls, showUserMessages, onShowCommentaryChange, onShowExtraEventsChange, onShowRawJsonChange, onShowToolCallsChange, onShowUserMessagesChange }) => {
189
+ return /* @__PURE__ */ jsxs("div", {
190
+ className: "flex flex-wrap gap-4 rounded-xl border border-[var(--border)] bg-[var(--panel)] px-4 py-3 shadow-[var(--panel-shadow)]",
191
+ children: [
192
+ /* @__PURE__ */ jsxs("div", {
193
+ className: "flex items-center gap-2 text-sm",
194
+ children: [/* @__PURE__ */ jsx(Checkbox, {
195
+ checked: showToolCalls,
196
+ id: "kiro-transcript-show-tool-calls",
197
+ onCheckedChange: (checked) => onShowToolCallsChange(checked === true)
198
+ }), /* @__PURE__ */ jsx("label", {
199
+ htmlFor: "kiro-transcript-show-tool-calls",
200
+ children: "Show tool calls"
201
+ })]
202
+ }),
203
+ /* @__PURE__ */ jsxs("div", {
204
+ className: "flex items-center gap-2 text-sm",
205
+ children: [/* @__PURE__ */ jsx(Checkbox, {
206
+ checked: showCommentary,
207
+ id: "kiro-transcript-show-commentary",
208
+ onCheckedChange: (checked) => onShowCommentaryChange(checked === true)
209
+ }), /* @__PURE__ */ jsx("label", {
210
+ htmlFor: "kiro-transcript-show-commentary",
211
+ children: "Show commentary"
212
+ })]
213
+ }),
214
+ /* @__PURE__ */ jsxs("div", {
215
+ className: "flex items-center gap-2 text-sm",
216
+ children: [/* @__PURE__ */ jsx(Checkbox, {
217
+ checked: showExtraEvents,
218
+ id: "kiro-transcript-show-extra-events",
219
+ onCheckedChange: (checked) => onShowExtraEventsChange(checked === true)
220
+ }), /* @__PURE__ */ jsx("label", {
221
+ htmlFor: "kiro-transcript-show-extra-events",
222
+ children: "Show extra events"
223
+ })]
224
+ }),
225
+ /* @__PURE__ */ jsxs("div", {
226
+ className: "flex items-center gap-2 text-sm",
227
+ children: [/* @__PURE__ */ jsx(Checkbox, {
228
+ checked: showRawJson,
229
+ disabled: rawJsonDisabled,
230
+ id: "kiro-transcript-show-raw-json",
231
+ onCheckedChange: (checked) => onShowRawJsonChange(checked === true)
232
+ }), /* @__PURE__ */ jsx("label", {
233
+ htmlFor: "kiro-transcript-show-raw-json",
234
+ children: "Raw JSON"
235
+ })]
236
+ }),
237
+ /* @__PURE__ */ jsxs("div", {
238
+ className: "flex items-center gap-2 text-sm",
239
+ children: [/* @__PURE__ */ jsx(Checkbox, {
240
+ checked: showUserMessages,
241
+ id: "kiro-transcript-show-user-messages",
242
+ onCheckedChange: (checked) => onShowUserMessagesChange(checked === true)
243
+ }), /* @__PURE__ */ jsx("label", {
244
+ htmlFor: "kiro-transcript-show-user-messages",
245
+ children: "User"
246
+ })]
247
+ })
248
+ ]
249
+ });
250
+ };
251
+ var KiroRawPanels = ({ detail, events }) => {
252
+ return /* @__PURE__ */ jsxs("div", {
253
+ className: "space-y-4",
254
+ children: [
255
+ /* @__PURE__ */ jsx(JsonPanel, {
256
+ title: "Session summary",
257
+ value: detail.session
258
+ }),
259
+ /* @__PURE__ */ jsx(JsonPanel, {
260
+ title: "Kiro entries",
261
+ value: detail.entries
262
+ }),
263
+ /* @__PURE__ */ jsx(JsonPanel, {
264
+ title: "Raw Kiro session",
265
+ value: detail.rawSession
266
+ }),
267
+ /* @__PURE__ */ jsx(JsonPanel, {
268
+ title: "Transcript events",
269
+ value: events
270
+ })
271
+ ]
272
+ });
273
+ };
274
+ var KiroSessionDetailPage = () => {
275
+ const detail = useSuspenseQuery(kiroSessionDetailQueryOptions(Route.useParams().sessionId)).data;
276
+ const [pendingExport, setPendingExport] = useState(false);
277
+ const [showToolCalls, setShowToolCalls] = useState(false);
278
+ const [showCommentary, setShowCommentary] = useState(false);
279
+ const [showExtraEvents, setShowExtraEvents] = useState(false);
280
+ const [showRawJson, setShowRawJson] = useState(false);
281
+ const [showUserMessages, setShowUserMessages] = useState(true);
282
+ const transcriptEvents = useMemo(() => kiroTranscriptToThreadEvents(detail), [detail]);
283
+ const transcriptStats = useMemo(() => getKiroThreadTranscriptStats(transcriptEvents), [transcriptEvents]);
284
+ const modelLabel = getKiroModelLabel(detail);
285
+ const exportSessionMutation = useMutation({
286
+ mutationFn: async (options) => {
287
+ const download = await exportKiroSessionFn({ data: {
288
+ includeCommentary: options.includeCommentary,
289
+ includeMetadata: options.includeMetadata,
290
+ includeTools: options.includeTools,
291
+ outputFormat: options.outputFormat,
292
+ sessionId: detail.session.sessionId,
293
+ zipArchive: options.zipArchive
294
+ } });
295
+ if (download.mode === "download") {
296
+ downloadTextFile(download.fileName, download.content, download.mimeType);
297
+ return;
298
+ }
299
+ await downloadUrlFile(download.fileName, download.downloadUrl);
300
+ },
301
+ onSuccess: () => {
302
+ setPendingExport(false);
303
+ }
304
+ });
305
+ return /* @__PURE__ */ jsxs("div", {
306
+ className: "space-y-6",
307
+ children: [
308
+ /* @__PURE__ */ jsx(PageHeader, {
309
+ actions: /* @__PURE__ */ jsxs(Button, {
310
+ className: "rounded-full",
311
+ type: "button",
312
+ variant: "outline",
313
+ onClick: () => setPendingExport(true),
314
+ children: [/* @__PURE__ */ jsx(Download, { className: "mr-2 size-4" }), "Export"]
315
+ }),
316
+ breadcrumb: /* @__PURE__ */ jsx(Breadcrumbs, { items: [
317
+ {
318
+ label: "Kiro",
319
+ to: "/kiro"
320
+ },
321
+ {
322
+ label: detail.session.workspaceLabel,
323
+ params: { workspaceKey: detail.session.workspaceKey },
324
+ to: "/kiro/$workspaceKey"
325
+ },
326
+ { label: detail.session.title }
327
+ ] }),
328
+ eyebrow: "Kiro session",
329
+ subtitle: "Session detail for the selected Kiro workspace conversation.",
330
+ title: detail.session.title
331
+ }),
332
+ /* @__PURE__ */ jsxs("div", {
333
+ className: "grid gap-3 md:grid-cols-2 xl:grid-cols-4",
334
+ children: [
335
+ /* @__PURE__ */ jsx(MetricCard, {
336
+ label: "Messages",
337
+ value: formatNumber(detail.session.messageCount)
338
+ }),
339
+ /* @__PURE__ */ jsx(MetricCard, {
340
+ label: "Images",
341
+ value: formatNumber(detail.session.imageCount)
342
+ }),
343
+ /* @__PURE__ */ jsx(MetricCard, {
344
+ label: "Prompt logs",
345
+ value: formatNumber(detail.session.promptLogCount)
346
+ }),
347
+ /* @__PURE__ */ jsx(MetricCard, {
348
+ label: "Model",
349
+ value: modelLabel
350
+ })
351
+ ]
352
+ }),
353
+ /* @__PURE__ */ jsxs(Tabs, {
354
+ className: "space-y-4",
355
+ defaultValue: "transcript",
356
+ children: [
357
+ /* @__PURE__ */ jsxs(TabsList, {
358
+ className: "grid w-fit min-w-[24rem] grid-cols-3 rounded-full border border-[var(--border)] bg-[var(--panel)] p-1",
359
+ children: [
360
+ /* @__PURE__ */ jsx(TabsTrigger, {
361
+ className: "rounded-full px-5 text-sm",
362
+ value: "transcript",
363
+ children: "Transcript"
364
+ }),
365
+ /* @__PURE__ */ jsx(TabsTrigger, {
366
+ className: "rounded-full px-5 text-sm",
367
+ value: "metadata",
368
+ children: "Metadata"
369
+ }),
370
+ /* @__PURE__ */ jsx(TabsTrigger, {
371
+ className: "rounded-full px-5 text-sm",
372
+ value: "raw",
373
+ children: "Raw"
374
+ })
375
+ ]
376
+ }),
377
+ /* @__PURE__ */ jsxs(TabsContent, {
378
+ className: "space-y-3",
379
+ value: "transcript",
380
+ children: [/* @__PURE__ */ jsx(KiroTranscriptControls, {
381
+ rawJsonDisabled: transcriptEvents.length === 0,
382
+ showCommentary,
383
+ showExtraEvents,
384
+ showRawJson,
385
+ showToolCalls,
386
+ showUserMessages,
387
+ onShowCommentaryChange: setShowCommentary,
388
+ onShowExtraEventsChange: setShowExtraEvents,
389
+ onShowRawJsonChange: setShowRawJson,
390
+ onShowToolCallsChange: setShowToolCalls,
391
+ onShowUserMessagesChange: setShowUserMessages
392
+ }), transcriptEvents.length > 0 ? /* @__PURE__ */ jsx(TranscriptView, {
393
+ assistantModel: modelLabel,
394
+ events: transcriptEvents,
395
+ projectPath: detail.session.worktree,
396
+ showCommentary,
397
+ showExtraEvents,
398
+ showRawJson,
399
+ showToolCalls,
400
+ showUserMessages
401
+ }) : /* @__PURE__ */ jsxs("section", {
402
+ className: "rounded-[1.6rem] border border-[var(--border)] bg-[var(--panel)] p-5 shadow-[var(--panel-shadow)]",
403
+ children: [/* @__PURE__ */ jsx("h3", {
404
+ className: "font-semibold text-[var(--muted-foreground)] text-sm uppercase tracking-[0.18em]",
405
+ children: "Transcript"
406
+ }), /* @__PURE__ */ jsx("p", {
407
+ className: "mt-4 text-[var(--muted-foreground)] text-sm",
408
+ children: "No renderable Kiro transcript content was found for this session."
409
+ })]
410
+ })]
411
+ }),
412
+ /* @__PURE__ */ jsx(TabsContent, {
413
+ value: "metadata",
414
+ children: /* @__PURE__ */ jsxs("div", {
415
+ className: "grid gap-4 xl:grid-cols-[0.95fr_1.05fr]",
416
+ children: [/* @__PURE__ */ jsx(MetadataSection, {
417
+ items: buildSessionMetadata(detail),
418
+ title: "Session metadata"
419
+ }), /* @__PURE__ */ jsx(MetadataSection, {
420
+ items: buildTranscriptStatsItems(detail, transcriptEvents, transcriptStats),
421
+ title: "Transcript stats"
422
+ })]
423
+ })
424
+ }),
425
+ /* @__PURE__ */ jsx(TabsContent, {
426
+ value: "raw",
427
+ children: /* @__PURE__ */ jsx(KiroRawPanels, {
428
+ detail,
429
+ events: transcriptEvents
430
+ })
431
+ })
432
+ ]
433
+ }),
434
+ /* @__PURE__ */ jsx(ExportDialog, {
435
+ errorMessage: exportSessionMutation.isError ? exportSessionMutation.error instanceof Error ? exportSessionMutation.error.message : "Export failed" : null,
436
+ open: pendingExport,
437
+ pending: exportSessionMutation.isPending,
438
+ title: `Export ${detail.session.title}`,
439
+ onExport: (options) => exportSessionMutation.mutate(options),
440
+ onOpenChange: (open) => {
441
+ setPendingExport(open);
442
+ if (!open) exportSessionMutation.reset();
443
+ }
444
+ })
445
+ ]
446
+ });
447
+ };
448
+ //#endregion
449
+ export { KiroSessionDetailPage as component };
@@ -0,0 +1,18 @@
1
+ import { t as kiroSessionDetailQueryOptions } from "./kiro-queries-CzNlM2ok.js";
2
+ import { t as LoadingPanel } from "./loading-panel-BGFnWseS.js";
3
+ import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
4
+ import { jsx } from "react/jsx-runtime";
5
+ //#region src/routes/kiro-sessions.$sessionId.tsx
6
+ var $$splitErrorComponentImporter = () => import("./kiro-sessions._sessionId-CRY2c7YO.js");
7
+ var $$splitComponentImporter = () => import("./kiro-sessions._sessionId-F1UlwxmR.js");
8
+ var Route = createFileRoute("/kiro-sessions/$sessionId")({
9
+ component: lazyRouteComponent($$splitComponentImporter, "component"),
10
+ errorComponent: lazyRouteComponent($$splitErrorComponentImporter, "errorComponent"),
11
+ loader: ({ context, params }) => context.queryClient.ensureQueryData(kiroSessionDetailQueryOptions(params.sessionId)),
12
+ pendingComponent: () => /* @__PURE__ */ jsx(LoadingPanel, {
13
+ description: "Loading the Kiro transcript, messages, attachments, and session metadata.",
14
+ title: "Loading session"
15
+ })
16
+ });
17
+ //#endregion
18
+ export { Route as t };
@@ -0,0 +1,112 @@
1
+ import { a as cleanExtractedText, g as renderSection, h as renderMetadataBlock, m as renderDocumentTitle, o as cleanInlineTitle } from "./shared-DyhChtHf.js";
2
+ import { n as getKiroMessagePhase, t as getFinalKiroAssistantMessageEntryIds } from "./kiro-transcript-phase-CJG40nQg.js";
3
+ //#region ../../src/lib/kiro-transcript.ts
4
+ var getSessionTitle = (session) => {
5
+ return cleanInlineTitle(session.title || session.sessionId);
6
+ };
7
+ var buildMetadataEntries = (session) => [
8
+ {
9
+ key: "exported_from",
10
+ value: "kiro_workspace_sessions"
11
+ },
12
+ {
13
+ key: "session_id",
14
+ value: session.sessionId
15
+ },
16
+ {
17
+ key: "title",
18
+ value: session.title
19
+ },
20
+ {
21
+ key: "source_session_path",
22
+ value: session.filePath
23
+ },
24
+ {
25
+ key: "workspace_key",
26
+ value: session.workspaceKey
27
+ },
28
+ {
29
+ key: "workspace_directory",
30
+ value: session.workspaceDirectory
31
+ },
32
+ {
33
+ key: "workspace_path",
34
+ value: session.workspacePath
35
+ },
36
+ {
37
+ key: "selected_model",
38
+ value: session.selectedModel
39
+ },
40
+ {
41
+ key: "default_model_title",
42
+ value: session.defaultModelTitle
43
+ },
44
+ {
45
+ key: "selected_profile_id",
46
+ value: session.selectedProfileId
47
+ },
48
+ {
49
+ key: "autonomy_mode",
50
+ value: session.autonomyMode
51
+ },
52
+ {
53
+ key: "session_type",
54
+ value: session.sessionType
55
+ },
56
+ {
57
+ key: "created_at_iso",
58
+ value: session.createdAtIso
59
+ },
60
+ {
61
+ key: "last_active_at_iso",
62
+ value: session.lastActiveAtIso
63
+ },
64
+ {
65
+ key: "message_count",
66
+ value: session.messageCount
67
+ },
68
+ {
69
+ key: "image_count",
70
+ value: session.imageCount
71
+ },
72
+ {
73
+ key: "prompt_log_count",
74
+ value: session.promptLogCount
75
+ }
76
+ ];
77
+ var roleTitle = (role) => {
78
+ if (role === "assistant") return "Assistant";
79
+ if (role === "user") return "User";
80
+ if (role === "system") return "System";
81
+ return role ? cleanInlineTitle(role) : "Message";
82
+ };
83
+ var renderTextPart = (part, title, options) => {
84
+ const text = cleanExtractedText(part.text ?? "").trim();
85
+ return text ? renderSection(title, text, options.outputFormat) : "";
86
+ };
87
+ var renderImagePart = (part, options) => {
88
+ if (!options.includeCommentary) return "";
89
+ return renderSection("Attachment", cleanExtractedText(part.text ?? "Image attachment").trim(), options.outputFormat);
90
+ };
91
+ var renderPart = (entry, part, options, finalAssistantMessageEntryIds) => {
92
+ if (entry.entryType === "tool_call") return options.includeTools && part.type === "text" ? renderTextPart(part, "Tool call", options) : "";
93
+ if (getKiroMessagePhase(entry, finalAssistantMessageEntryIds) === "commentary" && !options.includeCommentary) return "";
94
+ switch (part.type) {
95
+ case "text": return renderTextPart(part, roleTitle(entry.role), options);
96
+ case "image": return renderImagePart(part, options);
97
+ case "unknown": return "";
98
+ }
99
+ };
100
+ var renderKiroTranscript = (transcript, options) => {
101
+ const finalAssistantMessageEntryIds = getFinalKiroAssistantMessageEntryIds(transcript.entries);
102
+ const sections = transcript.entries.flatMap((entry) => entry.parts.map((part) => renderPart(entry, part, options, finalAssistantMessageEntryIds)).filter(Boolean));
103
+ if (sections.length === 0) return null;
104
+ return `${[
105
+ renderDocumentTitle(getSessionTitle(transcript.session), options.outputFormat),
106
+ "",
107
+ options.includeMetadata ? renderMetadataBlock(buildMetadataEntries(transcript.session), options.outputFormat) : "",
108
+ ...sections
109
+ ].filter(Boolean).join("\n").trimEnd()}\n`;
110
+ };
111
+ //#endregion
112
+ export { renderKiroTranscript };
@@ -0,0 +1,27 @@
1
+ //#region ../../src/lib/kiro-transcript-phase.ts
2
+ var getFinalKiroAssistantMessageEntryIds = (entries) => {
3
+ const finalEntryIds = /* @__PURE__ */ new Set();
4
+ let latestAssistantMessageEntryId = null;
5
+ const flushAssistantRun = () => {
6
+ if (latestAssistantMessageEntryId) {
7
+ finalEntryIds.add(latestAssistantMessageEntryId);
8
+ latestAssistantMessageEntryId = null;
9
+ }
10
+ };
11
+ for (const entry of entries) {
12
+ if (entry.entryType === "tool_call") continue;
13
+ if (entry.role === "user") {
14
+ flushAssistantRun();
15
+ continue;
16
+ }
17
+ if (entry.role === "assistant") latestAssistantMessageEntryId = entry.entryId;
18
+ }
19
+ flushAssistantRun();
20
+ return finalEntryIds;
21
+ };
22
+ var getKiroMessagePhase = (entry, finalAssistantMessageEntryIds) => {
23
+ if (entry.role !== "assistant") return null;
24
+ return finalAssistantMessageEntryIds.has(entry.entryId) ? "final_answer" : "commentary";
25
+ };
26
+ //#endregion
27
+ export { getKiroMessagePhase as n, getFinalKiroAssistantMessageEntryIds as t };