pi-mega-compact 0.13.1 → 0.13.2

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 (207) 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 +225 -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/raptor.js +8 -0
  6. package/dist/extensions/dashboard-server/api-contracts.test/_helpers.js +32 -0
  7. package/dist/extensions/dashboard-server/routes-cache.test/_helpers.js +48 -0
  8. package/dist/extensions/dashboard-server/routes-embedder-health.js +67 -0
  9. package/dist/extensions/dashboard-server/routes-raptor.js +88 -0
  10. package/dist/extensions/dashboard-server/routes-setup.js +1 -1
  11. package/dist/extensions/dashboard-server/routes.js +2 -0
  12. package/dist/extensions/dashboard-server/server.js +5 -1
  13. package/dist/extensions/mega-cache-replay.test/_helpers.js +175 -0
  14. package/dist/extensions/mega-commands/dataCommands.js +151 -0
  15. package/dist/extensions/mega-commands/helpers.js +61 -0
  16. package/dist/extensions/mega-commands/historyCommands.js +97 -0
  17. package/dist/extensions/mega-commands/setupCommand.js +200 -0
  18. package/dist/extensions/mega-commands.js +14 -499
  19. package/dist/extensions/mega-compact-s38.test/_helpers.js +194 -0
  20. package/dist/extensions/mega-compact.test/_helpers.js +225 -0
  21. package/dist/extensions/mega-events/agent-handlers/agentEndHandler.js +211 -0
  22. package/dist/extensions/mega-events/agent-handlers/turnEndHandler/cacheStripe.js +49 -0
  23. package/dist/extensions/mega-events/agent-handlers/turnEndHandler/contextHealth.js +33 -0
  24. package/dist/extensions/mega-events/agent-handlers/turnEndHandler/errorRetry.js +387 -0
  25. package/dist/extensions/mega-events/agent-handlers/turnEndHandler/event.js +7 -0
  26. package/dist/extensions/mega-events/agent-handlers/turnEndHandler/gameScoring.js +55 -0
  27. package/dist/extensions/mega-events/agent-handlers/turnEndHandler/lengthStop.js +12 -0
  28. package/dist/extensions/mega-events/agent-handlers/turnEndHandler/memoryReview.js +22 -0
  29. package/dist/extensions/mega-events/agent-handlers/turnEndHandler/recordTurnRow.js +38 -0
  30. package/dist/extensions/mega-events/agent-handlers/turnEndHandler.js +36 -0
  31. package/dist/extensions/mega-events/agent-handlers.js +4 -799
  32. package/dist/extensions/mega-events/context-handler/afterCompact.js +163 -0
  33. package/dist/extensions/mega-events/context-handler/messageText.js +12 -0
  34. package/dist/extensions/mega-events/context-handler/tailResult.js +46 -0
  35. package/dist/extensions/mega-events/context-handler.js +11 -198
  36. package/dist/extensions/mega-events/separated-prompt.test/_helpers.js +25 -0
  37. package/dist/src/config.js +2 -0
  38. package/dist/src/dedup-engine.test/_helpers.js +55 -0
  39. package/dist/src/e2e.test/_helpers.js +52 -0
  40. package/dist/src/embedder.js +1 -0
  41. package/dist/src/httpEmbedder.js +6 -0
  42. package/dist/src/hyde.js +146 -0
  43. package/dist/src/importance.test/_helpers.js +5 -0
  44. package/dist/src/memoryGraph/sources/checkpoints.js +78 -0
  45. package/dist/src/memoryGraph/sources/edges.js +17 -0
  46. package/dist/src/memoryGraph/sources/flags.js +22 -0
  47. package/dist/src/memoryGraph/sources/helpers.js +14 -0
  48. package/dist/src/memoryGraph/sources/memories.js +88 -0
  49. package/dist/src/memoryGraph/sources/raptor.js +26 -0
  50. package/dist/src/memoryGraph/sources/turns.js +176 -0
  51. package/dist/src/memoryGraph/sources.js +15 -441
  52. package/dist/src/memoryGraph-gates.test/_helpers.js +120 -0
  53. package/dist/src/ratio.bench.test/_helpers.js +198 -0
  54. package/dist/src/recall/async.js +112 -0
  55. package/dist/src/recall/format.js +149 -0
  56. package/dist/src/recall/memory.js +62 -0
  57. package/dist/src/recall/reformulate.js +82 -0
  58. package/dist/src/recall/sync.js +169 -0
  59. package/dist/src/recall/types.js +1 -0
  60. package/dist/src/recall.js +13 -530
  61. package/dist/src/store/sqlite/schema/core.js +232 -0
  62. package/dist/src/store/sqlite/schema/game.js +65 -0
  63. package/dist/src/store/sqlite/schema/plan-v2.js +107 -0
  64. package/dist/src/store/sqlite/schema/turns.js +59 -0
  65. package/dist/src/store/sqlite/schema.js +8 -441
  66. package/dist/src/store/turns/contract-compliance.test/_helpers.js +21 -0
  67. package/dist/src/store/turns/sqlite-store/admin.js +171 -0
  68. package/dist/src/store/turns/sqlite-store/ctx.js +1 -0
  69. package/dist/src/store/turns/sqlite-store/read.js +111 -0
  70. package/dist/src/store/turns/sqlite-store/rows.js +42 -0
  71. package/dist/src/store/turns/sqlite-store/write.js +102 -0
  72. package/dist/src/store/turns/sqlite-store.js +31 -367
  73. package/dist/src/vectorStore/class.js +356 -0
  74. package/dist/src/vectorStore/hash.js +10 -0
  75. package/dist/src/vectorStore/types.js +2 -0
  76. package/dist/src/vectorStore.js +8 -359
  77. package/dist/src/vectorStore.test/_helpers.js +17 -0
  78. package/extensions/dashboard-client/dist/assets/{CacheTab-8HRroK9K.js → CacheTab-DPRHjYZ0.js} +2 -2
  79. package/extensions/dashboard-client/dist/assets/{CacheTab-8HRroK9K.js.map → CacheTab-DPRHjYZ0.js.map} +1 -1
  80. package/extensions/dashboard-client/dist/assets/{EventsTab-ncobZw-I.js → EventsTab-CgwYq-Qf.js} +2 -2
  81. package/extensions/dashboard-client/dist/assets/{EventsTab-ncobZw-I.js.map → EventsTab-CgwYq-Qf.js.map} +1 -1
  82. package/extensions/dashboard-client/dist/assets/{HealthTab-C6BI1EZG.js → HealthTab-BgOCjVzR.js} +2 -2
  83. package/extensions/dashboard-client/dist/assets/{HealthTab-C6BI1EZG.js.map → HealthTab-BgOCjVzR.js.map} +1 -1
  84. package/extensions/dashboard-client/dist/assets/MaintenanceTab-Yw1yFpsy.js +2 -0
  85. package/extensions/dashboard-client/dist/assets/MaintenanceTab-Yw1yFpsy.js.map +1 -0
  86. package/extensions/dashboard-client/dist/assets/MemoryMapTab-yHUX7Yzi.js +2 -0
  87. package/extensions/dashboard-client/dist/assets/MemoryMapTab-yHUX7Yzi.js.map +1 -0
  88. package/extensions/dashboard-client/dist/assets/{MetricsTab-B88XTCMk.js → MetricsTab-CcH9fP8P.js} +2 -2
  89. package/extensions/dashboard-client/dist/assets/{MetricsTab-B88XTCMk.js.map → MetricsTab-CcH9fP8P.js.map} +1 -1
  90. package/extensions/dashboard-client/dist/assets/{OverviewTab-CGZrSia-.js → OverviewTab-BOs8ZNev.js} +2 -2
  91. package/extensions/dashboard-client/dist/assets/{OverviewTab-CGZrSia-.js.map → OverviewTab-BOs8ZNev.js.map} +1 -1
  92. package/extensions/dashboard-client/dist/assets/{ReposTab-BZo5cNS1.js → ReposTab-B-MfSPvg.js} +2 -2
  93. package/extensions/dashboard-client/dist/assets/{ReposTab-BZo5cNS1.js.map → ReposTab-B-MfSPvg.js.map} +1 -1
  94. package/extensions/dashboard-client/dist/assets/{SessionsTab-C2RokJcw.js → SessionsTab-BmeN649Q.js} +2 -2
  95. package/extensions/dashboard-client/dist/assets/{SessionsTab-C2RokJcw.js.map → SessionsTab-BmeN649Q.js.map} +1 -1
  96. package/extensions/dashboard-client/dist/assets/SetupTab-nOknoph5.js +2 -0
  97. package/extensions/dashboard-client/dist/assets/SetupTab-nOknoph5.js.map +1 -0
  98. package/extensions/dashboard-client/dist/assets/{TimeSavedCard-CewYB2aA.js → TimeSavedCard-DnPg0L0z.js} +2 -2
  99. package/extensions/dashboard-client/dist/assets/{TimeSavedCard-CewYB2aA.js.map → TimeSavedCard-DnPg0L0z.js.map} +1 -1
  100. package/extensions/dashboard-client/dist/assets/{TopicsTab-DpVNIuaL.js → TopicsTab-BODHOg_b.js} +2 -2
  101. package/extensions/dashboard-client/dist/assets/{TopicsTab-DpVNIuaL.js.map → TopicsTab-BODHOg_b.js.map} +1 -1
  102. package/extensions/dashboard-client/dist/assets/{TurnsTab-KeuKKVC9.js → TurnsTab-BK0I7hKr.js} +2 -2
  103. package/extensions/dashboard-client/dist/assets/{TurnsTab-KeuKKVC9.js.map → TurnsTab-BK0I7hKr.js.map} +1 -1
  104. package/extensions/dashboard-client/dist/assets/{index-Cucgohga.js → index-mOlljTFI.js} +9 -9
  105. package/extensions/dashboard-client/dist/assets/index-mOlljTFI.js.map +1 -0
  106. package/extensions/dashboard-client/dist/assets/{useSSE-DJsqdPXC.js → useSSE-BYOtv1-3.js} +2 -2
  107. package/extensions/dashboard-client/dist/assets/{useSSE-DJsqdPXC.js.map → useSSE-BYOtv1-3.js.map} +1 -1
  108. package/extensions/dashboard-client/dist/index.html +1 -1
  109. package/extensions/dashboard-client/src/api/client.ts +16 -0
  110. package/extensions/dashboard-client/src/tabs/MaintenanceTab/ActionsCard.tsx +178 -0
  111. package/extensions/dashboard-client/src/tabs/MaintenanceTab/DbStatsCard.tsx +140 -0
  112. package/extensions/dashboard-client/src/tabs/MaintenanceTab/DebugBundleCard.tsx +109 -0
  113. package/extensions/dashboard-client/src/tabs/MaintenanceTab/HealthMitigationCard.tsx +98 -0
  114. package/extensions/dashboard-client/src/tabs/MaintenanceTab/SchemaHealthCard.tsx +108 -0
  115. package/extensions/dashboard-client/src/tabs/MaintenanceTab.tsx +12 -598
  116. package/extensions/dashboard-client/src/tabs/MemoryMapTab/MemoryMapView.tsx +476 -0
  117. package/extensions/dashboard-client/src/tabs/MemoryMapTab/RaptorTreeView.tsx +163 -0
  118. package/extensions/dashboard-client/src/tabs/MemoryMapTab.tsx +56 -466
  119. package/extensions/dashboard-client/src/tabs/SetupTab/EmbedderHealthCard.tsx +109 -0
  120. package/extensions/dashboard-client/src/tabs/SetupTab/EmbedderSetup.tsx +468 -0
  121. package/extensions/dashboard-client/src/tabs/SetupTab.tsx +13 -483
  122. package/extensions/dashboard-server/api-contracts/embedder-health.ts +32 -0
  123. package/extensions/dashboard-server/api-contracts/endpoints/registry.ts +360 -0
  124. package/extensions/dashboard-server/api-contracts/endpoints/types.ts +350 -0
  125. package/extensions/dashboard-server/api-contracts/endpoints.ts +27 -648
  126. package/extensions/dashboard-server/api-contracts/index.ts +6 -0
  127. package/extensions/dashboard-server/api-contracts/raptor.ts +49 -0
  128. package/extensions/dashboard-server/api-contracts.test/_helpers.ts +47 -0
  129. package/extensions/dashboard-server/routes-cache.test/_helpers.ts +94 -0
  130. package/extensions/dashboard-server/routes-embedder-health.ts +77 -0
  131. package/extensions/dashboard-server/routes-raptor.ts +128 -0
  132. package/extensions/dashboard-server/routes-setup.ts +1 -1
  133. package/extensions/dashboard-server/routes.ts +2 -0
  134. package/extensions/dashboard-server/server.ts +4 -0
  135. package/extensions/mega-cache-replay.test/_helpers.ts +188 -0
  136. package/extensions/mega-commands/dataCommands.ts +169 -0
  137. package/extensions/mega-commands/helpers.ts +62 -0
  138. package/extensions/mega-commands/historyCommands.ts +117 -0
  139. package/extensions/mega-commands/setupCommand.ts +235 -0
  140. package/extensions/mega-commands.ts +25 -538
  141. package/extensions/mega-compact-s38.test/_helpers.ts +201 -0
  142. package/extensions/mega-compact.test/_helpers.ts +237 -0
  143. package/extensions/mega-events/agent-handlers/agentEndHandler.ts +238 -0
  144. package/extensions/mega-events/agent-handlers/turnEndHandler/cacheStripe.ts +74 -0
  145. package/extensions/mega-events/agent-handlers/turnEndHandler/contextHealth.ts +50 -0
  146. package/extensions/mega-events/agent-handlers/turnEndHandler/errorRetry.ts +421 -0
  147. package/extensions/mega-events/agent-handlers/turnEndHandler/event.ts +16 -0
  148. package/extensions/mega-events/agent-handlers/turnEndHandler/gameScoring.ts +73 -0
  149. package/extensions/mega-events/agent-handlers/turnEndHandler/lengthStop.ts +29 -0
  150. package/extensions/mega-events/agent-handlers/turnEndHandler/memoryReview.ts +42 -0
  151. package/extensions/mega-events/agent-handlers/turnEndHandler/recordTurnRow.ts +61 -0
  152. package/extensions/mega-events/agent-handlers/turnEndHandler.ts +64 -0
  153. package/extensions/mega-events/agent-handlers.ts +15 -861
  154. package/extensions/mega-events/context-handler/afterCompact.ts +213 -0
  155. package/extensions/mega-events/context-handler/messageText.ts +20 -0
  156. package/extensions/mega-events/context-handler/tailResult.ts +63 -0
  157. package/extensions/mega-events/context-handler.ts +17 -235
  158. package/extensions/mega-events/separated-prompt.test/_helpers.ts +35 -0
  159. package/package.json +1 -1
  160. package/src/config.ts +4 -0
  161. package/src/dedup-engine.test/_helpers.ts +79 -0
  162. package/src/e2e.test/_helpers.ts +59 -0
  163. package/src/embedder.ts +4 -0
  164. package/src/httpEmbedder.ts +7 -0
  165. package/src/hyde.ts +162 -0
  166. package/src/importance.test/_helpers.ts +5 -0
  167. package/src/memoryGraph/sources/checkpoints.ts +99 -0
  168. package/src/memoryGraph/sources/edges.ts +23 -0
  169. package/src/memoryGraph/sources/flags.ts +26 -0
  170. package/src/memoryGraph/sources/helpers.ts +13 -0
  171. package/src/memoryGraph/sources/memories.ts +108 -0
  172. package/src/memoryGraph/sources/raptor.ts +37 -0
  173. package/src/memoryGraph/sources/turns.ts +226 -0
  174. package/src/memoryGraph/sources.ts +19 -544
  175. package/src/memoryGraph-gates.test/_helpers.ts +164 -0
  176. package/src/ratio.bench.test/_helpers.ts +268 -0
  177. package/src/recall/async.ts +142 -0
  178. package/src/recall/format.ts +173 -0
  179. package/src/recall/memory.ts +90 -0
  180. package/src/recall/reformulate.ts +111 -0
  181. package/src/recall/sync.ts +196 -0
  182. package/src/recall/types.ts +63 -0
  183. package/src/recall.ts +25 -712
  184. package/src/store/sqlite/schema/core.ts +233 -0
  185. package/src/store/sqlite/schema/game.ts +66 -0
  186. package/src/store/sqlite/schema/plan-v2.ts +108 -0
  187. package/src/store/sqlite/schema/turns.ts +60 -0
  188. package/src/store/sqlite/schema.ts +13 -441
  189. package/src/store/turns/contract-compliance.test/_helpers.ts +38 -0
  190. package/src/store/turns/sqlite-store/admin.ts +249 -0
  191. package/src/store/turns/sqlite-store/ctx.ts +14 -0
  192. package/src/store/turns/sqlite-store/read.ts +174 -0
  193. package/src/store/turns/sqlite-store/rows.ts +55 -0
  194. package/src/store/turns/sqlite-store/write.ts +193 -0
  195. package/src/store/turns/sqlite-store.ts +33 -514
  196. package/src/vectorStore/class.ts +433 -0
  197. package/src/vectorStore/hash.ts +11 -0
  198. package/src/vectorStore/types.ts +58 -0
  199. package/src/vectorStore.test/_helpers.ts +20 -0
  200. package/src/vectorStore.ts +13 -489
  201. package/extensions/dashboard-client/dist/assets/MaintenanceTab-DZi1MnZI.js +0 -2
  202. package/extensions/dashboard-client/dist/assets/MaintenanceTab-DZi1MnZI.js.map +0 -1
  203. package/extensions/dashboard-client/dist/assets/MemoryMapTab-CjUa9zzw.js +0 -2
  204. package/extensions/dashboard-client/dist/assets/MemoryMapTab-CjUa9zzw.js.map +0 -1
  205. package/extensions/dashboard-client/dist/assets/SetupTab-C_BwmebC.js +0 -2
  206. package/extensions/dashboard-client/dist/assets/SetupTab-C_BwmebC.js.map +0 -1
  207. 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
+ }