pi-spark 0.27.0 → 0.28.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.28.0](https://github.com/zlliang/pi-spark/compare/v0.27.0...v0.28.0) (2026-09-22)
4
+
5
+
6
+ ### ⚠ BREAKING CHANGES
7
+
8
+ * use Pi 0.87 context projections for recaps and titles
9
+
10
+ ### Bug Fixes
11
+
12
+ * use Pi 0.87 context projections for recaps and titles ([a822fa3](https://github.com/zlliang/pi-spark/commit/a822fa350f1146123d46a7dbf53d812947ff7b49))
13
+
3
14
  ## [0.27.0](https://github.com/zlliang/pi-spark/compare/v0.26.0...v0.27.0) (2026-09-20)
4
15
 
5
16
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-spark",
3
- "version": "0.27.0",
3
+ "version": "0.28.0",
4
4
  "description": "Pi package that polishes your daily experience",
5
5
  "keywords": [
6
6
  "pi-coding-agent",
@@ -44,17 +44,17 @@
44
44
  "zod": "^4.4.3"
45
45
  },
46
46
  "peerDependencies": {
47
- "@earendil-works/pi-agent-core": ">=0.86.0",
48
- "@earendil-works/pi-ai": ">=0.86.0",
49
- "@earendil-works/pi-coding-agent": ">=0.86.0",
50
- "@earendil-works/pi-tui": ">=0.86.0",
47
+ "@earendil-works/pi-agent-core": ">=0.87.0",
48
+ "@earendil-works/pi-ai": ">=0.87.0",
49
+ "@earendil-works/pi-coding-agent": ">=0.87.0",
50
+ "@earendil-works/pi-tui": ">=0.87.0",
51
51
  "typebox": "*"
52
52
  },
53
53
  "devDependencies": {
54
- "@earendil-works/pi-agent-core": ">=0.86.0",
55
- "@earendil-works/pi-ai": ">=0.86.0",
56
- "@earendil-works/pi-coding-agent": ">=0.86.0",
57
- "@earendil-works/pi-tui": ">=0.86.0",
54
+ "@earendil-works/pi-agent-core": ">=0.87.0",
55
+ "@earendil-works/pi-ai": ">=0.87.0",
56
+ "@earendil-works/pi-coding-agent": ">=0.87.0",
57
+ "@earendil-works/pi-tui": ">=0.87.0",
58
58
  "@types/node": "*",
59
59
  "typebox": "*",
60
60
  "typescript": "^7.0.2"
@@ -1,6 +1,6 @@
1
1
  import parseDuration from "parse-duration";
2
2
  import * as z from "zod";
3
- import { convertToLlm, sessionEntryToContextMessages } from "@earendil-works/pi-coding-agent";
3
+ import { convertToLlm } from "@earendil-works/pi-coding-agent";
4
4
 
5
5
  import type { ExtensionContext } from "@earendil-works/pi-coding-agent";
6
6
 
@@ -69,7 +69,7 @@ export class IdleListener {
69
69
  }
70
70
 
71
71
  private check(ctx: ExtensionContext): void {
72
- const canEnter = ctx.isIdle() && ctx.sessionManager.buildContextEntries().some((entry) => convertToLlm(sessionEntryToContextMessages(entry)).length > 0);
72
+ const canEnter = ctx.isIdle() && convertToLlm(ctx.sessionManager.buildSessionProjection().messages).some((message) => message.role !== "system");
73
73
  if (!canEnter) {
74
74
  this.lastEditorText = undefined;
75
75
  if (this.entered) {
@@ -1,4 +1,4 @@
1
- import { convertToLlm, serializeConversation, sessionEntryToContextMessages } from "@earendil-works/pi-coding-agent";
1
+ import { convertToLlm, serializeConversation } from "@earendil-works/pi-coding-agent";
2
2
 
3
3
  import { clearRecapWidget, setRecapLoadingWidget, setRecapTextWidget } from "./widget";
4
4
  import { sanitizeText } from "../../utils/format";
@@ -109,7 +109,7 @@ export class RecapManager {
109
109
  }
110
110
 
111
111
  private buildPrompt(ctx: ExtensionContext): string {
112
- const messages = ctx.sessionManager.buildContextEntries().flatMap(sessionEntryToContextMessages);
112
+ const messages = ctx.sessionManager.buildSessionProjection().messages;
113
113
  const text = serializeConversation(convertToLlm(messages));
114
114
  const conversation = text.length > MAX_CONVERSATION_CHARS ? text.slice(-MAX_CONVERSATION_CHARS) : text;
115
115
 
@@ -91,7 +91,7 @@ export class TitleManager {
91
91
  }
92
92
 
93
93
  private buildPrompt(ctx: ExtensionContext): string {
94
- const messages = ctx.sessionManager.getBranch().filter((entry) => entry.type === "message").map((entry) => entry.message);
94
+ const messages = ctx.sessionManager.buildSessionProjection().messages;
95
95
  const text = serializeConversation(convertToLlm(messages));
96
96
  const conversation = text.length > MAX_CONVERSATION_CHARS ? text.slice(0, MAX_CONVERSATION_CHARS) : text;
97
97