pi-soly 1.13.0 → 1.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 (2) hide show
  1. package/context-manager.ts +54 -0
  2. package/package.json +12 -10
@@ -0,0 +1,54 @@
1
+ // =============================================================================
2
+ // context-manager.ts — single owner of pi's `context` channel
3
+ // =============================================================================
4
+ //
5
+ // pi fires a `context` event before each LLM call; a handler may return
6
+ // `{ messages }` to replace what the model sees for that one call. Only ONE
7
+ // owner should do this, or rewriters fight. soly takes ownership here and
8
+ // exposes a single pluggable rewriter slot — workflows (e.g. `/verify`'s
9
+ // fresh-context mode) install/remove a rewriter through this manager instead
10
+ // of each registering their own `context` handler.
11
+ //
12
+ // The rewriter must return a subset/reordering of the SAME message objects it
13
+ // is given (never fabricate messages — their full shape is owned by pi). The
14
+ // handler is fail-safe: a throwing rewriter leaves the turn untouched.
15
+ // =============================================================================
16
+
17
+ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
18
+
19
+ /** Minimal message shape the manager needs (pi's AgentMessage is a superset). */
20
+ export type AgentMessageLike = { role: string };
21
+
22
+ /** Transforms the message list for the next LLM call. Returns real messages. */
23
+ export type ContextRewriter = (messages: AgentMessageLike[]) => AgentMessageLike[];
24
+
25
+ export type ContextManager = {
26
+ /** Install a rewriter, or pass null to restore pass-through. */
27
+ setRewriter(rewriter: ContextRewriter | null): void;
28
+ /** Whether a rewriter is currently active. */
29
+ hasRewriter(): boolean;
30
+ };
31
+
32
+ /** Create the manager and register the single `context` handler. */
33
+ export function createContextManager(pi: ExtensionAPI): ContextManager {
34
+ let rewriter: ContextRewriter | null = null;
35
+
36
+ pi.on("context", (event) => {
37
+ if (!rewriter) return;
38
+ try {
39
+ const messages = rewriter(event.messages) as typeof event.messages;
40
+ return { messages };
41
+ } catch {
42
+ return; // never break a turn over a rewriter bug
43
+ }
44
+ });
45
+
46
+ return {
47
+ setRewriter(next): void {
48
+ rewriter = next;
49
+ },
50
+ hasRewriter(): boolean {
51
+ return rewriter !== null;
52
+ },
53
+ };
54
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-soly",
3
- "version": "1.13.0",
3
+ "version": "1.13.2",
4
4
  "description": "Project management + workflow framework for pi-coding-agent. Plans, state, MANDATORY rules, self-review, multi-question picker, native footer + welcome chrome — one npm install, zero config. The LLM drives execution and delegates to a worker subagent when available.",
5
5
  "type": "module",
6
6
  "main": "index.ts",
@@ -8,28 +8,30 @@
8
8
  "test": "bun test",
9
9
  "typecheck": "bun x tsc --noEmit"
10
10
  },
11
- "dependencies": {},
11
+ "dependencies": {
12
+ "@earendil-works/pi-ai": "0.78.1",
13
+ "@modelcontextprotocol/ext-apps": "^1.7.4",
14
+ "@modelcontextprotocol/sdk": "1.27.1",
15
+ "open": "^11.0.0",
16
+ "recheck": "^4.5.0",
17
+ "typebox": "1.1.38",
18
+ "zod": "^4.4.3"
19
+ },
12
20
  "peerDependencies": {
13
21
  "@earendil-works/pi-coding-agent": "*",
14
22
  "@earendil-works/pi-tui": "*"
15
23
  },
16
24
  "devDependencies": {
17
- "@earendil-works/pi-ai": "0.78.1",
18
25
  "@earendil-works/pi-coding-agent": "0.78.1",
19
- "@modelcontextprotocol/ext-apps": "^1.7.4",
20
- "@modelcontextprotocol/sdk": "1.27.1",
21
26
  "@types/node": "^25.9.1",
22
27
  "bun-types": "^1.3.14",
23
- "open": "^11.0.0",
24
- "recheck": "^4.5.0",
25
- "typebox": "1.1.38",
26
- "typescript": "^6.0.3",
27
- "zod": "^4.4.3"
28
+ "typescript": "^6.0.3"
28
29
  },
29
30
  "files": [
30
31
  "README.md",
31
32
  "commands.ts",
32
33
  "config.ts",
34
+ "context-manager.ts",
33
35
  "core.ts",
34
36
  "docs.ts",
35
37
  "env.ts",