pi-mega-compact 0.13.1 → 0.13.3

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 (212) hide show
  1. package/dist/extensions/dashboard-server/api-contracts/embedder-health.js +11 -0
  2. package/dist/extensions/dashboard-server/api-contracts/endpoints/registry.js +238 -0
  3. package/dist/extensions/dashboard-server/api-contracts/endpoints/types.js +1 -0
  4. package/dist/extensions/dashboard-server/api-contracts/endpoints.js +5 -224
  5. package/dist/extensions/dashboard-server/api-contracts/rag-settings.js +10 -0
  6. package/dist/extensions/dashboard-server/api-contracts/raptor.js +8 -0
  7. package/dist/extensions/dashboard-server/api-contracts.test/_helpers.js +32 -0
  8. package/dist/extensions/dashboard-server/routes-cache.test/_helpers.js +48 -0
  9. package/dist/extensions/dashboard-server/routes-embedder-health.js +67 -0
  10. package/dist/extensions/dashboard-server/routes-rag-settings.js +169 -0
  11. package/dist/extensions/dashboard-server/routes-raptor.js +88 -0
  12. package/dist/extensions/dashboard-server/routes-setup.js +1 -1
  13. package/dist/extensions/dashboard-server/routes.js +3 -0
  14. package/dist/extensions/dashboard-server/server.js +7 -1
  15. package/dist/extensions/mega-cache-replay.test/_helpers.js +175 -0
  16. package/dist/extensions/mega-commands/dataCommands.js +151 -0
  17. package/dist/extensions/mega-commands/helpers.js +61 -0
  18. package/dist/extensions/mega-commands/historyCommands.js +97 -0
  19. package/dist/extensions/mega-commands/setupCommand.js +200 -0
  20. package/dist/extensions/mega-commands.js +14 -499
  21. package/dist/extensions/mega-compact-s38.test/_helpers.js +194 -0
  22. package/dist/extensions/mega-compact.test/_helpers.js +225 -0
  23. package/dist/extensions/mega-events/agent-handlers/agentEndHandler.js +211 -0
  24. package/dist/extensions/mega-events/agent-handlers/turnEndHandler/cacheStripe.js +49 -0
  25. package/dist/extensions/mega-events/agent-handlers/turnEndHandler/contextHealth.js +33 -0
  26. package/dist/extensions/mega-events/agent-handlers/turnEndHandler/errorRetry.js +387 -0
  27. package/dist/extensions/mega-events/agent-handlers/turnEndHandler/event.js +7 -0
  28. package/dist/extensions/mega-events/agent-handlers/turnEndHandler/gameScoring.js +55 -0
  29. package/dist/extensions/mega-events/agent-handlers/turnEndHandler/lengthStop.js +12 -0
  30. package/dist/extensions/mega-events/agent-handlers/turnEndHandler/memoryReview.js +22 -0
  31. package/dist/extensions/mega-events/agent-handlers/turnEndHandler/recordTurnRow.js +38 -0
  32. package/dist/extensions/mega-events/agent-handlers/turnEndHandler.js +36 -0
  33. package/dist/extensions/mega-events/agent-handlers.js +4 -799
  34. package/dist/extensions/mega-events/context-handler/afterCompact.js +163 -0
  35. package/dist/extensions/mega-events/context-handler/messageText.js +12 -0
  36. package/dist/extensions/mega-events/context-handler/tailResult.js +46 -0
  37. package/dist/extensions/mega-events/context-handler.js +11 -198
  38. package/dist/extensions/mega-events/separated-prompt.test/_helpers.js +25 -0
  39. package/dist/src/config.js +14 -5
  40. package/dist/src/dedup-engine.test/_helpers.js +55 -0
  41. package/dist/src/e2e.test/_helpers.js +52 -0
  42. package/dist/src/embedder.js +1 -0
  43. package/dist/src/httpEmbedder.js +6 -0
  44. package/dist/src/hyde.js +146 -0
  45. package/dist/src/importance.test/_helpers.js +5 -0
  46. package/dist/src/memoryGraph/sources/checkpoints.js +78 -0
  47. package/dist/src/memoryGraph/sources/edges.js +17 -0
  48. package/dist/src/memoryGraph/sources/flags.js +22 -0
  49. package/dist/src/memoryGraph/sources/helpers.js +14 -0
  50. package/dist/src/memoryGraph/sources/memories.js +88 -0
  51. package/dist/src/memoryGraph/sources/raptor.js +26 -0
  52. package/dist/src/memoryGraph/sources/turns.js +176 -0
  53. package/dist/src/memoryGraph/sources.js +15 -441
  54. package/dist/src/memoryGraph-gates.test/_helpers.js +120 -0
  55. package/dist/src/ratio.bench.test/_helpers.js +198 -0
  56. package/dist/src/recall/async.js +112 -0
  57. package/dist/src/recall/format.js +149 -0
  58. package/dist/src/recall/memory.js +62 -0
  59. package/dist/src/recall/reformulate.js +82 -0
  60. package/dist/src/recall/sync.js +170 -0
  61. package/dist/src/recall/types.js +1 -0
  62. package/dist/src/recall.js +13 -530
  63. package/dist/src/store/sqlite/schema/core.js +232 -0
  64. package/dist/src/store/sqlite/schema/game.js +65 -0
  65. package/dist/src/store/sqlite/schema/plan-v2.js +107 -0
  66. package/dist/src/store/sqlite/schema/turns.js +59 -0
  67. package/dist/src/store/sqlite/schema.js +8 -441
  68. package/dist/src/store/turns/contract-compliance.test/_helpers.js +21 -0
  69. package/dist/src/store/turns/sqlite-store/admin.js +171 -0
  70. package/dist/src/store/turns/sqlite-store/ctx.js +1 -0
  71. package/dist/src/store/turns/sqlite-store/read.js +111 -0
  72. package/dist/src/store/turns/sqlite-store/rows.js +42 -0
  73. package/dist/src/store/turns/sqlite-store/write.js +102 -0
  74. package/dist/src/store/turns/sqlite-store.js +31 -367
  75. package/dist/src/vectorStore/class.js +356 -0
  76. package/dist/src/vectorStore/hash.js +10 -0
  77. package/dist/src/vectorStore/types.js +2 -0
  78. package/dist/src/vectorStore.js +8 -359
  79. package/dist/src/vectorStore.test/_helpers.js +17 -0
  80. package/extensions/dashboard-client/dist/assets/{CacheTab-8HRroK9K.js → CacheTab-Cqnc7lMg.js} +2 -2
  81. package/extensions/dashboard-client/dist/assets/{CacheTab-8HRroK9K.js.map → CacheTab-Cqnc7lMg.js.map} +1 -1
  82. package/extensions/dashboard-client/dist/assets/{EventsTab-ncobZw-I.js → EventsTab-tYk3VFAp.js} +2 -2
  83. package/extensions/dashboard-client/dist/assets/{EventsTab-ncobZw-I.js.map → EventsTab-tYk3VFAp.js.map} +1 -1
  84. package/extensions/dashboard-client/dist/assets/{HealthTab-C6BI1EZG.js → HealthTab-D2_kjgxw.js} +2 -2
  85. package/extensions/dashboard-client/dist/assets/{HealthTab-C6BI1EZG.js.map → HealthTab-D2_kjgxw.js.map} +1 -1
  86. package/extensions/dashboard-client/dist/assets/MaintenanceTab-Bc-uPYrz.js +2 -0
  87. package/extensions/dashboard-client/dist/assets/MaintenanceTab-Bc-uPYrz.js.map +1 -0
  88. package/extensions/dashboard-client/dist/assets/MemoryMapTab-D1V9g_NC.js +2 -0
  89. package/extensions/dashboard-client/dist/assets/MemoryMapTab-D1V9g_NC.js.map +1 -0
  90. package/extensions/dashboard-client/dist/assets/{MetricsTab-B88XTCMk.js → MetricsTab-DT_XfL96.js} +2 -2
  91. package/extensions/dashboard-client/dist/assets/{MetricsTab-B88XTCMk.js.map → MetricsTab-DT_XfL96.js.map} +1 -1
  92. package/extensions/dashboard-client/dist/assets/{OverviewTab-CGZrSia-.js → OverviewTab-BY6KZCme.js} +2 -2
  93. package/extensions/dashboard-client/dist/assets/{OverviewTab-CGZrSia-.js.map → OverviewTab-BY6KZCme.js.map} +1 -1
  94. package/extensions/dashboard-client/dist/assets/{ReposTab-BZo5cNS1.js → ReposTab-CeS-tpDM.js} +2 -2
  95. package/extensions/dashboard-client/dist/assets/{ReposTab-BZo5cNS1.js.map → ReposTab-CeS-tpDM.js.map} +1 -1
  96. package/extensions/dashboard-client/dist/assets/{SessionsTab-C2RokJcw.js → SessionsTab-C30AwyoF.js} +2 -2
  97. package/extensions/dashboard-client/dist/assets/{SessionsTab-C2RokJcw.js.map → SessionsTab-C30AwyoF.js.map} +1 -1
  98. package/extensions/dashboard-client/dist/assets/SetupTab-BJUHOVK2.js +2 -0
  99. package/extensions/dashboard-client/dist/assets/SetupTab-BJUHOVK2.js.map +1 -0
  100. package/extensions/dashboard-client/dist/assets/{TimeSavedCard-CewYB2aA.js → TimeSavedCard-p55K1tFP.js} +2 -2
  101. package/extensions/dashboard-client/dist/assets/{TimeSavedCard-CewYB2aA.js.map → TimeSavedCard-p55K1tFP.js.map} +1 -1
  102. package/extensions/dashboard-client/dist/assets/{TopicsTab-DpVNIuaL.js → TopicsTab-D8FqyAbK.js} +2 -2
  103. package/extensions/dashboard-client/dist/assets/{TopicsTab-DpVNIuaL.js.map → TopicsTab-D8FqyAbK.js.map} +1 -1
  104. package/extensions/dashboard-client/dist/assets/{TurnsTab-KeuKKVC9.js → TurnsTab-ju-nXDys.js} +2 -2
  105. package/extensions/dashboard-client/dist/assets/{TurnsTab-KeuKKVC9.js.map → TurnsTab-ju-nXDys.js.map} +1 -1
  106. package/extensions/dashboard-client/dist/assets/{index-Cucgohga.js → index-BEj1Zahy.js} +9 -9
  107. package/extensions/dashboard-client/dist/assets/index-BEj1Zahy.js.map +1 -0
  108. package/extensions/dashboard-client/dist/assets/{useSSE-DJsqdPXC.js → useSSE-p1pOI_-P.js} +2 -2
  109. package/extensions/dashboard-client/dist/assets/{useSSE-DJsqdPXC.js.map → useSSE-p1pOI_-P.js.map} +1 -1
  110. package/extensions/dashboard-client/dist/index.html +1 -1
  111. package/extensions/dashboard-client/src/api/client.ts +33 -0
  112. package/extensions/dashboard-client/src/tabs/MaintenanceTab/ActionsCard.tsx +178 -0
  113. package/extensions/dashboard-client/src/tabs/MaintenanceTab/DbStatsCard.tsx +140 -0
  114. package/extensions/dashboard-client/src/tabs/MaintenanceTab/DebugBundleCard.tsx +109 -0
  115. package/extensions/dashboard-client/src/tabs/MaintenanceTab/HealthMitigationCard.tsx +98 -0
  116. package/extensions/dashboard-client/src/tabs/MaintenanceTab/SchemaHealthCard.tsx +108 -0
  117. package/extensions/dashboard-client/src/tabs/MaintenanceTab.tsx +12 -598
  118. package/extensions/dashboard-client/src/tabs/MemoryMapTab/MemoryMapView.tsx +476 -0
  119. package/extensions/dashboard-client/src/tabs/MemoryMapTab/RaptorTreeView.tsx +163 -0
  120. package/extensions/dashboard-client/src/tabs/MemoryMapTab.tsx +56 -466
  121. package/extensions/dashboard-client/src/tabs/SetupTab/EmbedderHealthCard.tsx +109 -0
  122. package/extensions/dashboard-client/src/tabs/SetupTab/EmbedderSetup.tsx +470 -0
  123. package/extensions/dashboard-client/src/tabs/SetupTab/RagSettingsCard.tsx +160 -0
  124. package/extensions/dashboard-client/src/tabs/SetupTab.tsx +13 -483
  125. package/extensions/dashboard-server/api-contracts/embedder-health.ts +32 -0
  126. package/extensions/dashboard-server/api-contracts/endpoints/registry.ts +383 -0
  127. package/extensions/dashboard-server/api-contracts/endpoints/types.ts +350 -0
  128. package/extensions/dashboard-server/api-contracts/endpoints.ts +27 -648
  129. package/extensions/dashboard-server/api-contracts/index.ts +14 -0
  130. package/extensions/dashboard-server/api-contracts/rag-settings.ts +42 -0
  131. package/extensions/dashboard-server/api-contracts/raptor.ts +49 -0
  132. package/extensions/dashboard-server/api-contracts.test/_helpers.ts +47 -0
  133. package/extensions/dashboard-server/routes-cache.test/_helpers.ts +94 -0
  134. package/extensions/dashboard-server/routes-embedder-health.ts +77 -0
  135. package/extensions/dashboard-server/routes-rag-settings.ts +207 -0
  136. package/extensions/dashboard-server/routes-raptor.ts +128 -0
  137. package/extensions/dashboard-server/routes-setup.ts +1 -1
  138. package/extensions/dashboard-server/routes.ts +3 -0
  139. package/extensions/dashboard-server/server.ts +6 -0
  140. package/extensions/mega-cache-replay.test/_helpers.ts +188 -0
  141. package/extensions/mega-commands/dataCommands.ts +169 -0
  142. package/extensions/mega-commands/helpers.ts +62 -0
  143. package/extensions/mega-commands/historyCommands.ts +117 -0
  144. package/extensions/mega-commands/setupCommand.ts +235 -0
  145. package/extensions/mega-commands.ts +25 -538
  146. package/extensions/mega-compact-s38.test/_helpers.ts +201 -0
  147. package/extensions/mega-compact.test/_helpers.ts +237 -0
  148. package/extensions/mega-events/agent-handlers/agentEndHandler.ts +238 -0
  149. package/extensions/mega-events/agent-handlers/turnEndHandler/cacheStripe.ts +74 -0
  150. package/extensions/mega-events/agent-handlers/turnEndHandler/contextHealth.ts +50 -0
  151. package/extensions/mega-events/agent-handlers/turnEndHandler/errorRetry.ts +421 -0
  152. package/extensions/mega-events/agent-handlers/turnEndHandler/event.ts +16 -0
  153. package/extensions/mega-events/agent-handlers/turnEndHandler/gameScoring.ts +73 -0
  154. package/extensions/mega-events/agent-handlers/turnEndHandler/lengthStop.ts +29 -0
  155. package/extensions/mega-events/agent-handlers/turnEndHandler/memoryReview.ts +42 -0
  156. package/extensions/mega-events/agent-handlers/turnEndHandler/recordTurnRow.ts +61 -0
  157. package/extensions/mega-events/agent-handlers/turnEndHandler.ts +64 -0
  158. package/extensions/mega-events/agent-handlers.ts +15 -861
  159. package/extensions/mega-events/context-handler/afterCompact.ts +213 -0
  160. package/extensions/mega-events/context-handler/messageText.ts +20 -0
  161. package/extensions/mega-events/context-handler/tailResult.ts +63 -0
  162. package/extensions/mega-events/context-handler.ts +17 -235
  163. package/extensions/mega-events/separated-prompt.test/_helpers.ts +35 -0
  164. package/package.json +1 -1
  165. package/src/config.ts +17 -5
  166. package/src/dedup-engine.test/_helpers.ts +79 -0
  167. package/src/e2e.test/_helpers.ts +59 -0
  168. package/src/embedder.ts +4 -0
  169. package/src/httpEmbedder.ts +7 -0
  170. package/src/hyde.ts +162 -0
  171. package/src/importance.test/_helpers.ts +5 -0
  172. package/src/memoryGraph/sources/checkpoints.ts +99 -0
  173. package/src/memoryGraph/sources/edges.ts +23 -0
  174. package/src/memoryGraph/sources/flags.ts +26 -0
  175. package/src/memoryGraph/sources/helpers.ts +13 -0
  176. package/src/memoryGraph/sources/memories.ts +108 -0
  177. package/src/memoryGraph/sources/raptor.ts +37 -0
  178. package/src/memoryGraph/sources/turns.ts +226 -0
  179. package/src/memoryGraph/sources.ts +19 -544
  180. package/src/memoryGraph-gates.test/_helpers.ts +164 -0
  181. package/src/ratio.bench.test/_helpers.ts +268 -0
  182. package/src/recall/async.ts +142 -0
  183. package/src/recall/format.ts +173 -0
  184. package/src/recall/memory.ts +90 -0
  185. package/src/recall/reformulate.ts +111 -0
  186. package/src/recall/sync.ts +197 -0
  187. package/src/recall/types.ts +63 -0
  188. package/src/recall.ts +25 -712
  189. package/src/store/sqlite/schema/core.ts +233 -0
  190. package/src/store/sqlite/schema/game.ts +66 -0
  191. package/src/store/sqlite/schema/plan-v2.ts +108 -0
  192. package/src/store/sqlite/schema/turns.ts +60 -0
  193. package/src/store/sqlite/schema.ts +13 -441
  194. package/src/store/turns/contract-compliance.test/_helpers.ts +38 -0
  195. package/src/store/turns/sqlite-store/admin.ts +249 -0
  196. package/src/store/turns/sqlite-store/ctx.ts +14 -0
  197. package/src/store/turns/sqlite-store/read.ts +174 -0
  198. package/src/store/turns/sqlite-store/rows.ts +55 -0
  199. package/src/store/turns/sqlite-store/write.ts +193 -0
  200. package/src/store/turns/sqlite-store.ts +33 -514
  201. package/src/vectorStore/class.ts +433 -0
  202. package/src/vectorStore/hash.ts +11 -0
  203. package/src/vectorStore/types.ts +58 -0
  204. package/src/vectorStore.test/_helpers.ts +20 -0
  205. package/src/vectorStore.ts +13 -489
  206. package/extensions/dashboard-client/dist/assets/MaintenanceTab-DZi1MnZI.js +0 -2
  207. package/extensions/dashboard-client/dist/assets/MaintenanceTab-DZi1MnZI.js.map +0 -1
  208. package/extensions/dashboard-client/dist/assets/MemoryMapTab-CjUa9zzw.js +0 -2
  209. package/extensions/dashboard-client/dist/assets/MemoryMapTab-CjUa9zzw.js.map +0 -1
  210. package/extensions/dashboard-client/dist/assets/SetupTab-C_BwmebC.js +0 -2
  211. package/extensions/dashboard-client/dist/assets/SetupTab-C_BwmebC.js.map +0 -1
  212. package/extensions/dashboard-client/dist/assets/index-Cucgohga.js.map +0 -1
@@ -0,0 +1,42 @@
1
+ /**
2
+ * turnEndHandler/memoryReview.ts — S20+S24 memory auto-review.
3
+ *
4
+ * Extracted from turnEndHandler.ts (delegate-shell split) to keep every source
5
+ * file under the extensions limit. Auto-reviews the conversation and persists
6
+ * durable memories. Best-effort + non-fatal: a review failure must never break
7
+ * the agent loop. Debounced by the pressure-adjusted interval.
8
+ */
9
+ import type { ExtensionContext } from "@earendil-works/pi-coding-agent";
10
+ import type { MegaRuntime } from "../../../mega-runtime.js";
11
+ import { runMemoryReview } from "../../../mega-pipeline.js";
12
+ import { memoryReviewCadence, type MegaConfig } from "../../../mega-config.js";
13
+
14
+ /** S20+S24: auto-review the conversation and persist durable memories. */
15
+ export async function memoryReview(
16
+ ctx: ExtensionContext,
17
+ runtime: MegaRuntime,
18
+ config: MegaConfig,
19
+ ): Promise<void> {
20
+ // S20+S24: auto-review the conversation and persist durable memories. The
21
+ // review cadence scales with pressure (memoryReviewCadence): as context
22
+ // fills, the conversation is reviewed more often so memories keep pace with
23
+ // faster churn. Best-effort + non-fatal: a review failure must never break
24
+ // the agent loop. Debounced by the pressure-adjusted interval.
25
+ if (config.memoryAutoReview && runtime.currentTurn > 0) {
26
+ const cadence = memoryReviewCadence(
27
+ runtime.pressureBand,
28
+ config.memoryReviewInterval,
29
+ );
30
+ if (runtime.currentTurn % cadence === 0) {
31
+ // S20+S24: review the conversation and persist durable memories. The
32
+ // cadence scales with pressure (memoryReviewCadence): as context fills,
33
+ // the conversation is reviewed more often so memories keep pace with
34
+ // faster churn. Shared runMemoryReview body (also used on compact).
35
+ const entries = ctx.sessionManager.getEntries();
36
+ const view = runtime.engineView(
37
+ entries.flatMap((e: any) => (e.message ? [e.message] : [])),
38
+ );
39
+ await runMemoryReview(runtime, view, "turn");
40
+ }
41
+ }
42
+ }
@@ -0,0 +1,61 @@
1
+ /**
2
+ * turnEndHandler/recordTurnRow.ts — S43 per-turn tracking.
3
+ *
4
+ * Extracted from turnEndHandler.ts (delegate-shell split) to keep every source
5
+ * file under the extensions limit. Records one turn row with the cached metrics
6
+ * so the turn layer is queryable + forkable. Best-effort + non-fatal: a write
7
+ * failure never breaks the agent loop.
8
+ */
9
+ import type { MegaRuntime } from "../../../mega-runtime.js";
10
+ import type { MegaConfig } from "../../../mega-config.js";
11
+ import { ensureConversationIdFor, recordTurnWrite } from "../../../mega-turn-store.js";
12
+ import type { TurnEndEvent } from "./event.js";
13
+
14
+ /** S43: record one turn row with the cached metrics. Best-effort + non-fatal. */
15
+ export function recordTurnRow(
16
+ event: TurnEndEvent,
17
+ runtime: MegaRuntime,
18
+ config: MegaConfig,
19
+ ): void {
20
+ // S43 (per-turn tracking): record one turn row with the cached metrics so
21
+ // the turn layer is queryable + forkable. Best-effort + non-fatal: a write
22
+ // failure never breaks the agent loop. The catch logs the error (structured
23
+ // JSON line to events.log) so a recurring turn-write failure is diagnosable
24
+ // instead of silently producing a blank Turns tab.
25
+ try {
26
+ const convId = ensureConversationIdFor(
27
+ config,
28
+ runtime.rt.sessionId,
29
+ runtime.currentStateDir,
30
+ );
31
+ recordTurnWrite(
32
+ config,
33
+ {
34
+ conversationId: convId,
35
+ sessionId: runtime.rt.sessionId,
36
+ turnIndex: event.turnIndex,
37
+ role: (event as { role?: string }).role ?? "assistant",
38
+ endedAt: Date.now(),
39
+ startedAt: undefined,
40
+ ctxTokens: runtime.lastCtxTokens ?? undefined,
41
+ ctxPercent: runtime.lastCtxPercent ?? undefined,
42
+ pressureBand: runtime.pressureBand ?? undefined,
43
+ modelId: runtime.currentModel?.modelId ?? undefined,
44
+ },
45
+ runtime.currentStateDir,
46
+ );
47
+ runtime.dashboard.event("turn_written", {
48
+ turnIndex: event.turnIndex,
49
+ conversationId: convId,
50
+ pressureBand: runtime.pressureBand ?? null,
51
+ turnsDbEnabled: config.turnsDbEnabled,
52
+ });
53
+ } catch (e) {
54
+ runtime.dashboard.event("turn_write_failed", {
55
+ turnIndex: event.turnIndex,
56
+ turnsDbEnabled: config.turnsDbEnabled,
57
+ error: e instanceof Error ? e.message : String(e),
58
+ stack: e instanceof Error ? e.stack?.split("\n").slice(0, 3).join(" | ") : undefined,
59
+ });
60
+ }
61
+ }
@@ -0,0 +1,64 @@
1
+ /**
2
+ * agent-handlers/turnEndHandler.ts — the pi `turn_end` handler body.
3
+ *
4
+ * Delegate-shell (extensions split): extracts each concern into a helper in
5
+ * ./turnEndHandler/* so every source file stays under the extensions limit.
6
+ * The heavy sections live in sibling files: recordTurnRow (S43 persistence),
7
+ * gameScoring (S33/S35), memoryReview (S20/S24), lengthStop (S28), errorRetry
8
+ * (S38/R1-R11 safety net), cacheStripe (P3.5), and contextHealth (v0.12).
9
+ */
10
+ import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent";
11
+ import type { MegaRuntime } from "../../mega-runtime.js";
12
+ import type { MegaConfig } from "../../mega-config.js";
13
+ import type { TurnEndEvent } from "./turnEndHandler/event.js";
14
+ import { recordTurnRow } from "./turnEndHandler/recordTurnRow.js";
15
+ import { gameScoring } from "./turnEndHandler/gameScoring.js";
16
+ import { memoryReview } from "./turnEndHandler/memoryReview.js";
17
+ import { lengthStop } from "./turnEndHandler/lengthStop.js";
18
+ import { errorRetry } from "./turnEndHandler/errorRetry.js";
19
+ import { cacheStripe } from "./turnEndHandler/cacheStripe.js";
20
+ import { contextHealth } from "./turnEndHandler/contextHealth.js";
21
+
22
+ /** Handle the `turn_end` pi event. Non-fatal end-to-end. */
23
+ export async function handleTurnEnd(
24
+ event: TurnEndEvent,
25
+ ctx: ExtensionContext,
26
+ pi: ExtensionAPI,
27
+ runtime: MegaRuntime,
28
+ config: MegaConfig,
29
+ ): Promise<void> {
30
+ runtime.dashboard.event("turn_end", { turnIndex: event.turnIndex });
31
+ runtime.snapshot(ctx);
32
+ runtime.lastErrorCategory = null;
33
+
34
+ // S53: consume staged recall blocks ONLY if they were actually injected
35
+ // into a view this turn. If no context event fired (edge: turn ended
36
+ // before any LLM call), recallInjectedThisTurn stays false and the blocks
37
+ // remain staged for the next turn's first context event.
38
+ if (config.recallTailInject && runtime.rt.recallInjectedThisTurn) {
39
+ runtime.pendingRecallBlock = undefined;
40
+ runtime.pendingMemoryRecallBlock = undefined;
41
+ runtime.rt.recallInjectedThisTurn = false;
42
+ }
43
+
44
+ // S43 (per-turn tracking): record one turn row. Best-effort + non-fatal.
45
+ recordTurnRow(event, runtime, config);
46
+
47
+ // S33/S35: game-mode scoring + achievements. Best-effort + non-fatal (G6).
48
+ gameScoring(event, ctx, runtime);
49
+
50
+ // S20+S24: auto-review the conversation, persist durable memories.
51
+ await memoryReview(ctx, runtime, config);
52
+
53
+ // S28: detect max-output-token truncation, arm the agent_end nudge.
54
+ lengthStop(event, runtime, config);
55
+
56
+ // S38/R1-R11: broader error-retry safety net. Non-fatal end-to-end.
57
+ await errorRetry(event, ctx, pi, runtime, config);
58
+
59
+ // P3.5: topic-shift cache stripe refresh. Best-effort + non-fatal.
60
+ cacheStripe(event, runtime, config);
61
+
62
+ // v0.12: context-health score + mitigation. Non-fatal.
63
+ contextHealth(event, ctx, runtime, config);
64
+ }