advisor-pi 1.0.2 → 1.1.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/README.md +23 -7
- package/dist/index.d.ts +48 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +179 -27
- package/dist/index.js.map +1 -1
- package/package.json +2 -1
- package/src/index.ts +202 -27
package/README.md
CHANGED
|
@@ -18,10 +18,18 @@ advice to the executor.
|
|
|
18
18
|
- Lets the executor decide when a consultation is useful.
|
|
19
19
|
- Calls a configured advisor model through Pi's model registry and auth.
|
|
20
20
|
- Tracks advisor uses per session branch and stops after the configured limit.
|
|
21
|
+
- Caps the conversation transcript sent per call at a configurable character
|
|
22
|
+
limit (default 20000): longer transcripts keep the most recent context and
|
|
23
|
+
are marked as truncated, so per-call cost stays bounded as sessions grow.
|
|
21
24
|
- Passes a prompt-cache preference (`none`, `short`, or `long`) where the
|
|
22
25
|
selected provider supports it.
|
|
23
|
-
-
|
|
24
|
-
|
|
26
|
+
- Defaults to `openai-codex/gpt-5.6-sol` with `high` thinking.
|
|
27
|
+
- Validates the configured model against the registry at load: when the
|
|
28
|
+
default (or a stored/flag-provided model) does not resolve, it falls back
|
|
29
|
+
to a working model with a warning notice instead of failing every call.
|
|
30
|
+
Stored legacy defaults are only migrated when the migration target resolves.
|
|
31
|
+
- Shows a compact `advisor:<provider>/<model> <thinking> <remaining>` status in Pi's
|
|
32
|
+
footer when UI is available.
|
|
25
33
|
|
|
26
34
|
## Commands
|
|
27
35
|
|
|
@@ -30,7 +38,9 @@ advice to the executor.
|
|
|
30
38
|
/advisor-pi enable
|
|
31
39
|
/advisor-pi disable
|
|
32
40
|
/advisor-pi model <provider>/<model>
|
|
41
|
+
/advisor-pi thinking <minimal|low|medium|high|xhigh|max>
|
|
33
42
|
/advisor-pi max-uses <number>
|
|
43
|
+
/advisor-pi max-transcript-chars <number>
|
|
34
44
|
/advisor-pi cache <none|short|long>
|
|
35
45
|
/advisor-pi reset
|
|
36
46
|
```
|
|
@@ -38,16 +48,20 @@ advice to the executor.
|
|
|
38
48
|
Examples:
|
|
39
49
|
|
|
40
50
|
```text
|
|
41
|
-
/advisor-pi model
|
|
51
|
+
/advisor-pi model openai-codex/gpt-5.6-sol
|
|
52
|
+
/advisor-pi thinking high
|
|
42
53
|
/advisor-pi max-uses 5
|
|
54
|
+
/advisor-pi max-transcript-chars 20000
|
|
43
55
|
/advisor-pi cache long
|
|
44
56
|
```
|
|
45
57
|
|
|
46
58
|
## CLI flags
|
|
47
59
|
|
|
48
60
|
```bash
|
|
49
|
-
pi --advisor-model
|
|
50
|
-
--advisor-
|
|
61
|
+
pi --advisor-model openai-codex/gpt-5.6-sol \
|
|
62
|
+
--advisor-thinking high \
|
|
63
|
+
--advisor-max-uses 5 \
|
|
64
|
+
--advisor-max-transcript-chars 20000 \
|
|
51
65
|
--advisor-cache short
|
|
52
66
|
```
|
|
53
67
|
|
|
@@ -90,7 +104,8 @@ Each advisor consultation is a separate model call. That means:
|
|
|
90
104
|
- Advisor input and output are billed separately by the selected provider.
|
|
91
105
|
- Streaming from the executor pauses while the advisor call runs.
|
|
92
106
|
- Longer transcripts cost more because the advisor reads the conversation
|
|
93
|
-
context.
|
|
107
|
+
context. Each call sends at most `max-transcript-chars` characters
|
|
108
|
+
(default 20000), keeping the most recent context and marking truncation.
|
|
94
109
|
- The `max-uses` setting is a safety budget; raise it only when deeper review is
|
|
95
110
|
worth the extra cost.
|
|
96
111
|
|
|
@@ -113,6 +128,7 @@ specific model compatibility, and cache reads/writes may still be billed.
|
|
|
113
128
|
reports.
|
|
114
129
|
- The advisor has no tools and cannot inspect files beyond what appears in the
|
|
115
130
|
transcript.
|
|
116
|
-
- Very long conversations
|
|
131
|
+
- Very long conversations are truncated to the transcript cap before sending,
|
|
132
|
+
so older context may be omitted on advisor calls.
|
|
117
133
|
- `max-uses` is tracked per Pi session branch from extension state and tool
|
|
118
134
|
result details; manual session editing can affect reconstruction.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,51 @@
|
|
|
1
|
+
import { type CacheRetention, type ThinkingLevel } from "@earendil-works/pi-ai";
|
|
1
2
|
import { type ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
3
|
+
export declare const STATE_ENTRY = "advisor-pi-state";
|
|
4
|
+
export declare const DEFAULT_ADVISOR_MODEL = "openai-codex/gpt-5.6-sol";
|
|
5
|
+
export declare const LEGACY_DEFAULT_ADVISOR_MODEL = "openai-codex/gpt-5.5";
|
|
6
|
+
export declare const DEFAULT_MAX_TRANSCRIPT_CHARS = 20000;
|
|
7
|
+
type AdvisorThinkingLevel = ThinkingLevel | "max";
|
|
8
|
+
type AdvisorConfig = {
|
|
9
|
+
enabled: boolean;
|
|
10
|
+
provider: string;
|
|
11
|
+
modelId: string;
|
|
12
|
+
thinkingLevel: AdvisorThinkingLevel;
|
|
13
|
+
maxUses: number;
|
|
14
|
+
cacheRetention: CacheRetention;
|
|
15
|
+
maxTokens: number;
|
|
16
|
+
timeoutMs: number;
|
|
17
|
+
maxTranscriptChars: number;
|
|
18
|
+
};
|
|
19
|
+
type AdvisorStateEntry = {
|
|
20
|
+
version: 1;
|
|
21
|
+
config: AdvisorConfig;
|
|
22
|
+
useCount: number;
|
|
23
|
+
updatedAt: string;
|
|
24
|
+
};
|
|
25
|
+
export type ModelRegistryLike = {
|
|
26
|
+
find: (provider: string, modelId: string) => unknown;
|
|
27
|
+
getAvailable?: () => Array<{
|
|
28
|
+
provider?: unknown;
|
|
29
|
+
id?: unknown;
|
|
30
|
+
}>;
|
|
31
|
+
};
|
|
2
32
|
export default function advisorPiExtension(pi: ExtensionAPI): void;
|
|
33
|
+
export declare function defaultConfig(): AdvisorConfig;
|
|
34
|
+
export declare function truncateTranscript(text: string, maxChars: number): string;
|
|
35
|
+
export declare function makeStateEntry(config: AdvisorConfig, useCount: number): AdvisorStateEntry;
|
|
36
|
+
export declare function persistState(pi: ExtensionAPI, config: AdvisorConfig, useCount: number): void;
|
|
37
|
+
export declare function normalizeConfig(input: Partial<AdvisorConfig>, fallback: AdvisorConfig, registry?: ModelRegistryLike): AdvisorConfig;
|
|
38
|
+
export declare function modelResolves(registry: ModelRegistryLike | undefined, provider: string, modelId: string): boolean;
|
|
39
|
+
export declare function resolveAdvisorModel(registry: ModelRegistryLike | undefined, candidates: Array<{
|
|
40
|
+
provider: string;
|
|
41
|
+
modelId: string;
|
|
42
|
+
}>): {
|
|
43
|
+
provider: string;
|
|
44
|
+
modelId: string;
|
|
45
|
+
} | undefined;
|
|
46
|
+
export declare function parseModelSpec(value: string): {
|
|
47
|
+
provider: string;
|
|
48
|
+
modelId: string;
|
|
49
|
+
} | undefined;
|
|
50
|
+
export {};
|
|
3
51
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,cAAc,EAAgB,KAAK,aAAa,EAAc,MAAM,uBAAuB,CAAC;AACtI,OAAO,EAIN,KAAK,YAAY,EAEjB,MAAM,iCAAiC,CAAC;AAGzC,eAAO,MAAM,WAAW,qBAAqB,CAAC;AAE9C,eAAO,MAAM,qBAAqB,6BAA6B,CAAC;AAChE,eAAO,MAAM,4BAA4B,yBAAyB,CAAC;AAMnE,eAAO,MAAM,4BAA4B,QAAS,CAAC;AAsBnD,KAAK,oBAAoB,GAAG,aAAa,GAAG,KAAK,CAAC;AAElD,KAAK,aAAa,GAAG;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,oBAAoB,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACxB,OAAO,EAAE,CAAC,CAAC;IACX,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CAClB,CAAC;AAkBF,MAAM,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IACrD,YAAY,CAAC,EAAE,MAAM,KAAK,CAAC;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,EAAE,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACjE,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,EAAE,EAAE,YAAY,QAob1D;AAcD,wBAAgB,aAAa,IAAI,aAAa,CAa7C;AAoBD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKzE;AAiED,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,GAAG,iBAAiB,CAOzF;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAE5F;AAED,wBAAgB,eAAe,CAC9B,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,EAC7B,QAAQ,EAAE,aAAa,EACvB,QAAQ,CAAC,EAAE,iBAAiB,GAC1B,aAAa,CAwCf;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,iBAAiB,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAQjH;AAED,wBAAgB,mBAAmB,CAClC,QAAQ,EAAE,iBAAiB,GAAG,SAAS,EACvC,UAAU,EAAE,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GACtD;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAenD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAO/F"}
|
package/dist/index.js
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { completeSimple, StringEnum } from "@earendil-works/pi-ai";
|
|
2
2
|
import { buildSessionContext, convertToLlm, serializeConversation, } from "@earendil-works/pi-coding-agent";
|
|
3
3
|
import { Type } from "typebox";
|
|
4
|
-
const STATE_ENTRY = "advisor-pi-state";
|
|
4
|
+
export const STATE_ENTRY = "advisor-pi-state";
|
|
5
5
|
const TOOL_NAME = "advisor";
|
|
6
|
-
const DEFAULT_ADVISOR_MODEL = "openai-codex/gpt-5.
|
|
7
|
-
const
|
|
6
|
+
export const DEFAULT_ADVISOR_MODEL = "openai-codex/gpt-5.6-sol";
|
|
7
|
+
export const LEGACY_DEFAULT_ADVISOR_MODEL = "openai-codex/gpt-5.5";
|
|
8
|
+
const DEFAULT_ADVISOR_THINKING_LEVEL = "high";
|
|
9
|
+
const DEFAULT_MAX_USES = 5;
|
|
8
10
|
const DEFAULT_CACHE_RETENTION = "short";
|
|
9
11
|
const DEFAULT_TIMEOUT_MS = 600_000;
|
|
10
12
|
const DEFAULT_MAX_TOKENS = 4_000;
|
|
13
|
+
export const DEFAULT_MAX_TRANSCRIPT_CHARS = 20_000;
|
|
11
14
|
const advisorToolSchema = Type.Object({
|
|
12
15
|
question: Type.String({
|
|
13
16
|
description: "Strategic question for the advisor. Ask for planning, risk analysis, course correction, or review guidance.",
|
|
@@ -24,7 +27,11 @@ export default function advisorPiExtension(pi) {
|
|
|
24
27
|
let config = defaultConfig();
|
|
25
28
|
let useCount = 0;
|
|
26
29
|
pi.registerFlag("advisor-model", {
|
|
27
|
-
description: "Advisor model as provider/model, e.g. openai-codex/gpt-5.
|
|
30
|
+
description: "Advisor model as provider/model, e.g. openai-codex/gpt-5.6-sol",
|
|
31
|
+
type: "string",
|
|
32
|
+
});
|
|
33
|
+
pi.registerFlag("advisor-thinking", {
|
|
34
|
+
description: "Advisor thinking level: minimal, low, medium, high, xhigh, or max",
|
|
28
35
|
type: "string",
|
|
29
36
|
});
|
|
30
37
|
pi.registerFlag("advisor-max-uses", {
|
|
@@ -35,6 +42,10 @@ export default function advisorPiExtension(pi) {
|
|
|
35
42
|
description: "Advisor prompt-cache preference: none, short, or long",
|
|
36
43
|
type: "string",
|
|
37
44
|
});
|
|
45
|
+
pi.registerFlag("advisor-max-transcript-chars", {
|
|
46
|
+
description: "Maximum conversation transcript characters sent per advisor call (keeps most recent)",
|
|
47
|
+
type: "string",
|
|
48
|
+
});
|
|
38
49
|
pi.registerFlag("advisor-enabled", {
|
|
39
50
|
description: "Enable the advisor tool on startup",
|
|
40
51
|
type: "boolean",
|
|
@@ -68,7 +79,7 @@ export default function advisorPiExtension(pi) {
|
|
|
68
79
|
content: [
|
|
69
80
|
{
|
|
70
81
|
type: "text",
|
|
71
|
-
text: `Consulting advisor ${config.provider}/${config.modelId}...`,
|
|
82
|
+
text: `Consulting advisor ${config.provider}/${config.modelId} (${config.thinkingLevel})...`,
|
|
72
83
|
},
|
|
73
84
|
],
|
|
74
85
|
details: makeSkippedDetails(config, useCount, params),
|
|
@@ -77,7 +88,7 @@ export default function advisorPiExtension(pi) {
|
|
|
77
88
|
if (!auth.ok)
|
|
78
89
|
throw new Error(auth.error);
|
|
79
90
|
const startedAt = Date.now();
|
|
80
|
-
const conversationText = serializeCurrentConversation(ctx);
|
|
91
|
+
const conversationText = truncateTranscript(serializeCurrentConversation(ctx), config.maxTranscriptChars);
|
|
81
92
|
const userMessage = {
|
|
82
93
|
role: "user",
|
|
83
94
|
content: [
|
|
@@ -88,7 +99,7 @@ export default function advisorPiExtension(pi) {
|
|
|
88
99
|
],
|
|
89
100
|
timestamp: Date.now(),
|
|
90
101
|
};
|
|
91
|
-
const response = await
|
|
102
|
+
const response = await completeSimple(model, {
|
|
92
103
|
systemPrompt: ADVISOR_SYSTEM_PROMPT,
|
|
93
104
|
messages: [userMessage],
|
|
94
105
|
}, {
|
|
@@ -96,6 +107,7 @@ export default function advisorPiExtension(pi) {
|
|
|
96
107
|
headers: auth.headers,
|
|
97
108
|
signal,
|
|
98
109
|
cacheRetention: config.cacheRetention,
|
|
110
|
+
reasoning: config.thinkingLevel,
|
|
99
111
|
sessionId: `advisor-pi:${ctx.sessionManager.getSessionId()}`,
|
|
100
112
|
maxTokens: config.maxTokens,
|
|
101
113
|
timeoutMs: config.timeoutMs,
|
|
@@ -119,6 +131,7 @@ export default function advisorPiExtension(pi) {
|
|
|
119
131
|
useCount,
|
|
120
132
|
maxUses: config.maxUses,
|
|
121
133
|
cacheRetention: config.cacheRetention,
|
|
134
|
+
thinkingLevel: config.thinkingLevel,
|
|
122
135
|
elapsedMs,
|
|
123
136
|
stopReason: response.stopReason,
|
|
124
137
|
usage: response.usage,
|
|
@@ -129,7 +142,7 @@ export default function advisorPiExtension(pi) {
|
|
|
129
142
|
content: [
|
|
130
143
|
{
|
|
131
144
|
type: "text",
|
|
132
|
-
text: `Advisor guidance (${useCount}/${config.maxUses}, ${config.provider}/${config.modelId}):\n\n${text}`,
|
|
145
|
+
text: `Advisor guidance (${useCount}/${config.maxUses}, ${config.provider}/${config.modelId}, ${config.thinkingLevel}):\n\n${text}`,
|
|
133
146
|
},
|
|
134
147
|
],
|
|
135
148
|
details,
|
|
@@ -137,7 +150,7 @@ export default function advisorPiExtension(pi) {
|
|
|
137
150
|
},
|
|
138
151
|
});
|
|
139
152
|
pi.registerCommand("advisor-pi", {
|
|
140
|
-
description: "Configure advisor-pi: status, enable, disable, model, max-uses, cache, reset",
|
|
153
|
+
description: "Configure advisor-pi: status, enable, disable, model, thinking, max-uses, max-transcript-chars, cache, reset",
|
|
141
154
|
handler: async (args, ctx) => {
|
|
142
155
|
const result = handleCommand(args.trim(), ctx);
|
|
143
156
|
if (result.persist)
|
|
@@ -167,13 +180,14 @@ export default function advisorPiExtension(pi) {
|
|
|
167
180
|
function refreshStateFromBranch(ctx) {
|
|
168
181
|
config = defaultConfig();
|
|
169
182
|
useCount = 0;
|
|
170
|
-
const restoredFromBranch = restoreStateFromSession(ctx);
|
|
183
|
+
const restoredFromBranch = restoreStateFromSession(ctx, ctx.modelRegistry);
|
|
171
184
|
if (!restoredFromBranch)
|
|
172
|
-
applyStartupFlags(pi);
|
|
185
|
+
applyStartupFlags(pi, ctx.modelRegistry);
|
|
186
|
+
ensureAdvisorModelResolves(ctx);
|
|
173
187
|
syncActiveTool(pi);
|
|
174
188
|
updateStatus(ctx);
|
|
175
189
|
}
|
|
176
|
-
function restoreStateFromSession(ctx) {
|
|
190
|
+
function restoreStateFromSession(ctx, registry) {
|
|
177
191
|
let restored = false;
|
|
178
192
|
const branch = ctx.sessionManager.getBranch();
|
|
179
193
|
for (const entry of branch) {
|
|
@@ -181,7 +195,7 @@ export default function advisorPiExtension(pi) {
|
|
|
181
195
|
restored = true;
|
|
182
196
|
const data = entry.data;
|
|
183
197
|
if (data?.config)
|
|
184
|
-
config = normalizeConfig(data.config, config);
|
|
198
|
+
config = normalizeConfig(data.config, config, registry);
|
|
185
199
|
if (typeof data?.useCount === "number")
|
|
186
200
|
useCount = Math.max(0, data.useCount);
|
|
187
201
|
}
|
|
@@ -189,7 +203,7 @@ export default function advisorPiExtension(pi) {
|
|
|
189
203
|
restored = true;
|
|
190
204
|
const details = entry.message.details;
|
|
191
205
|
if (details?.state?.config)
|
|
192
|
-
config = normalizeConfig(details.state.config, config);
|
|
206
|
+
config = normalizeConfig(details.state.config, config, registry);
|
|
193
207
|
if (typeof details?.state?.useCount === "number")
|
|
194
208
|
useCount = Math.max(useCount, details.state.useCount);
|
|
195
209
|
else if (details?.advisor?.useCount)
|
|
@@ -198,18 +212,24 @@ export default function advisorPiExtension(pi) {
|
|
|
198
212
|
}
|
|
199
213
|
return restored;
|
|
200
214
|
}
|
|
201
|
-
function applyStartupFlags(api) {
|
|
215
|
+
function applyStartupFlags(api, registry) {
|
|
202
216
|
const enabledFlag = api.getFlag("advisor-enabled");
|
|
203
217
|
if (typeof enabledFlag === "boolean")
|
|
204
218
|
config.enabled = enabledFlag;
|
|
205
219
|
const modelFlag = api.getFlag("advisor-model");
|
|
206
220
|
if (typeof modelFlag === "string" && modelFlag.trim()) {
|
|
207
221
|
const parsed = parseModelSpec(modelFlag.trim());
|
|
208
|
-
if (parsed) {
|
|
222
|
+
if (parsed && (!registry || modelResolves(registry, parsed.provider, parsed.modelId))) {
|
|
209
223
|
config.provider = parsed.provider;
|
|
210
224
|
config.modelId = parsed.modelId;
|
|
211
225
|
}
|
|
212
226
|
}
|
|
227
|
+
const thinkingFlag = api.getFlag("advisor-thinking");
|
|
228
|
+
if (typeof thinkingFlag === "string") {
|
|
229
|
+
const thinkingLevel = parseThinkingLevel(thinkingFlag);
|
|
230
|
+
if (thinkingLevel)
|
|
231
|
+
config.thinkingLevel = thinkingLevel;
|
|
232
|
+
}
|
|
213
233
|
const maxUsesFlag = api.getFlag("advisor-max-uses");
|
|
214
234
|
if (typeof maxUsesFlag === "string") {
|
|
215
235
|
const maxUses = parsePositiveInt(maxUsesFlag);
|
|
@@ -222,6 +242,28 @@ export default function advisorPiExtension(pi) {
|
|
|
222
242
|
if (cacheRetention)
|
|
223
243
|
config.cacheRetention = cacheRetention;
|
|
224
244
|
}
|
|
245
|
+
const maxTranscriptCharsFlag = api.getFlag("advisor-max-transcript-chars");
|
|
246
|
+
if (typeof maxTranscriptCharsFlag === "string") {
|
|
247
|
+
const maxTranscriptChars = parsePositiveInt(maxTranscriptCharsFlag);
|
|
248
|
+
if (maxTranscriptChars !== undefined)
|
|
249
|
+
config.maxTranscriptChars = maxTranscriptChars;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
function ensureAdvisorModelResolves(ctx) {
|
|
253
|
+
const registry = ctx.modelRegistry;
|
|
254
|
+
if (!registry || modelResolves(registry, config.provider, config.modelId))
|
|
255
|
+
return;
|
|
256
|
+
const previous = `${config.provider}/${config.modelId}`;
|
|
257
|
+
const candidates = [parseModelSpec(DEFAULT_ADVISOR_MODEL), parseModelSpec(LEGACY_DEFAULT_ADVISOR_MODEL)].filter((candidate) => candidate !== undefined);
|
|
258
|
+
const working = resolveAdvisorModel(registry, candidates);
|
|
259
|
+
if (!working)
|
|
260
|
+
return;
|
|
261
|
+
config.provider = working.provider;
|
|
262
|
+
config.modelId = working.modelId;
|
|
263
|
+
persistState(pi, config, useCount);
|
|
264
|
+
if (ctx.hasUI) {
|
|
265
|
+
ctx.ui.notify(`Advisor model ${previous} not found. Falling back to ${working.provider}/${working.modelId}.`, "warning");
|
|
266
|
+
}
|
|
225
267
|
}
|
|
226
268
|
function handleCommand(args, ctx) {
|
|
227
269
|
if (!args || args === "status") {
|
|
@@ -272,6 +314,24 @@ export default function advisorPiExtension(pi) {
|
|
|
272
314
|
updateToolState: false,
|
|
273
315
|
};
|
|
274
316
|
}
|
|
317
|
+
case "thinking": {
|
|
318
|
+
const thinkingLevel = parseThinkingLevel(value);
|
|
319
|
+
if (!thinkingLevel) {
|
|
320
|
+
return {
|
|
321
|
+
message: "Usage: /advisor-pi thinking <minimal|low|medium|high|xhigh|max>",
|
|
322
|
+
level: "error",
|
|
323
|
+
persist: false,
|
|
324
|
+
updateToolState: false,
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
config.thinkingLevel = thinkingLevel;
|
|
328
|
+
return {
|
|
329
|
+
message: `advisor-pi thinking level set to ${thinkingLevel}`,
|
|
330
|
+
level: "info",
|
|
331
|
+
persist: true,
|
|
332
|
+
updateToolState: false,
|
|
333
|
+
};
|
|
334
|
+
}
|
|
275
335
|
case "max-uses": {
|
|
276
336
|
const maxUses = parsePositiveInt(value);
|
|
277
337
|
if (maxUses === undefined) {
|
|
@@ -308,9 +368,27 @@ export default function advisorPiExtension(pi) {
|
|
|
308
368
|
updateToolState: false,
|
|
309
369
|
};
|
|
310
370
|
}
|
|
371
|
+
case "max-transcript-chars": {
|
|
372
|
+
const maxTranscriptChars = parsePositiveInt(value);
|
|
373
|
+
if (maxTranscriptChars === undefined) {
|
|
374
|
+
return {
|
|
375
|
+
message: "Usage: /advisor-pi max-transcript-chars <positive-number>",
|
|
376
|
+
level: "error",
|
|
377
|
+
persist: false,
|
|
378
|
+
updateToolState: false,
|
|
379
|
+
};
|
|
380
|
+
}
|
|
381
|
+
config.maxTranscriptChars = maxTranscriptChars;
|
|
382
|
+
return {
|
|
383
|
+
message: `advisor-pi max transcript chars set to ${maxTranscriptChars}`,
|
|
384
|
+
level: "info",
|
|
385
|
+
persist: true,
|
|
386
|
+
updateToolState: false,
|
|
387
|
+
};
|
|
388
|
+
}
|
|
311
389
|
default:
|
|
312
390
|
return {
|
|
313
|
-
message: "Usage: /advisor-pi [status|enable|disable|model <provider>/<model>|max-uses <n>|cache <none|short|long>|reset]",
|
|
391
|
+
message: "Usage: /advisor-pi [status|enable|disable|model <provider>/<model>|thinking <minimal|low|medium|high|xhigh|max>|max-uses <n>|max-transcript-chars <n>|cache <none|short|long>|reset]",
|
|
314
392
|
level: "error",
|
|
315
393
|
persist: false,
|
|
316
394
|
updateToolState: false,
|
|
@@ -335,7 +413,8 @@ export default function advisorPiExtension(pi) {
|
|
|
335
413
|
return;
|
|
336
414
|
}
|
|
337
415
|
const remaining = Math.max(0, config.maxUses - useCount);
|
|
338
|
-
|
|
416
|
+
const modelLabel = `${config.provider}/${config.modelId}`;
|
|
417
|
+
ctx.ui.setStatus("advisor-pi", ctx.ui.theme.fg(remaining > 0 ? "accent" : "warning", `advisor:${modelLabel} ${config.thinkingLevel} ${remaining}`));
|
|
339
418
|
}
|
|
340
419
|
function formatStatus(ctx) {
|
|
341
420
|
const model = ctx.modelRegistry.find(config.provider, config.modelId);
|
|
@@ -343,7 +422,9 @@ export default function advisorPiExtension(pi) {
|
|
|
343
422
|
return [
|
|
344
423
|
`advisor-pi ${config.enabled ? "enabled" : "disabled"}`,
|
|
345
424
|
`model: ${config.provider}/${config.modelId} (${availability})`,
|
|
425
|
+
`thinking: ${config.thinkingLevel}`,
|
|
346
426
|
`uses: ${useCount}/${config.maxUses}`,
|
|
427
|
+
`transcript: max ${config.maxTranscriptChars} chars`,
|
|
347
428
|
`cache: ${config.cacheRetention}`,
|
|
348
429
|
].join(" • ");
|
|
349
430
|
}
|
|
@@ -359,23 +440,25 @@ Your role is strategic guidance only. You do not have tools and you do not make
|
|
|
359
440
|
- If the task is unsafe, impossible, or underspecified, say what must be clarified.
|
|
360
441
|
|
|
361
442
|
Return guidance in short sections with bullets when useful.`;
|
|
362
|
-
function defaultConfig() {
|
|
363
|
-
const parsed = parseModelSpec(DEFAULT_ADVISOR_MODEL) ?? { provider: "openai-codex", modelId: "gpt-5.
|
|
443
|
+
export function defaultConfig() {
|
|
444
|
+
const parsed = parseModelSpec(DEFAULT_ADVISOR_MODEL) ?? { provider: "openai-codex", modelId: "gpt-5.6-sol" };
|
|
364
445
|
return {
|
|
365
446
|
enabled: true,
|
|
366
447
|
provider: parsed.provider,
|
|
367
448
|
modelId: parsed.modelId,
|
|
449
|
+
thinkingLevel: DEFAULT_ADVISOR_THINKING_LEVEL,
|
|
368
450
|
maxUses: DEFAULT_MAX_USES,
|
|
369
451
|
cacheRetention: DEFAULT_CACHE_RETENTION,
|
|
370
452
|
maxTokens: DEFAULT_MAX_TOKENS,
|
|
371
453
|
timeoutMs: DEFAULT_TIMEOUT_MS,
|
|
454
|
+
maxTranscriptChars: DEFAULT_MAX_TRANSCRIPT_CHARS,
|
|
372
455
|
};
|
|
373
456
|
}
|
|
374
457
|
function buildExecutorGuidance(config, useCount) {
|
|
375
458
|
const remaining = Math.max(0, config.maxUses - useCount);
|
|
376
459
|
return [
|
|
377
460
|
"Advisor-pi is enabled.",
|
|
378
|
-
`The advisor tool consults ${config.provider}/${config.modelId} for strategic guidance and has ${remaining}/${config.maxUses} uses remaining on this branch.`,
|
|
461
|
+
`The advisor tool consults ${config.provider}/${config.modelId} with ${config.thinkingLevel} thinking for strategic guidance and has ${remaining}/${config.maxUses} uses remaining on this branch.`,
|
|
379
462
|
"Use advisor for complex planning, risky implementation choices, repeated failures, or course correction. Do not use advisor for trivial edits or simple facts.",
|
|
380
463
|
`Advisor cache preference is ${config.cacheRetention}; caching support is provider-dependent.`,
|
|
381
464
|
].join("\n");
|
|
@@ -387,6 +470,14 @@ function serializeCurrentConversation(ctx) {
|
|
|
387
470
|
const llmMessages = convertToLlm(sessionContext.messages);
|
|
388
471
|
return serializeConversation(llmMessages);
|
|
389
472
|
}
|
|
473
|
+
export function truncateTranscript(text, maxChars) {
|
|
474
|
+
if (maxChars <= 0)
|
|
475
|
+
return text;
|
|
476
|
+
if (text.length <= maxChars)
|
|
477
|
+
return text;
|
|
478
|
+
const omitted = text.length - maxChars;
|
|
479
|
+
return `[... earlier conversation truncated: showing the most recent ${maxChars} of ${text.length} characters (${omitted} omitted)]\n\n${text.slice(text.length - maxChars)}`;
|
|
480
|
+
}
|
|
390
481
|
function buildAdvisorUserPrompt(params, conversationText) {
|
|
391
482
|
return [
|
|
392
483
|
"## Executor Question",
|
|
@@ -438,13 +529,14 @@ function makeSkippedDetails(config, useCount, params) {
|
|
|
438
529
|
useCount,
|
|
439
530
|
maxUses: config.maxUses,
|
|
440
531
|
cacheRetention: config.cacheRetention,
|
|
532
|
+
thinkingLevel: config.thinkingLevel,
|
|
441
533
|
elapsedMs: 0,
|
|
442
534
|
stopReason: "skipped",
|
|
443
535
|
},
|
|
444
536
|
state: makeStateEntry(config, useCount),
|
|
445
537
|
};
|
|
446
538
|
}
|
|
447
|
-
function makeStateEntry(config, useCount) {
|
|
539
|
+
export function makeStateEntry(config, useCount) {
|
|
448
540
|
return {
|
|
449
541
|
version: 1,
|
|
450
542
|
config: { ...config },
|
|
@@ -452,21 +544,75 @@ function makeStateEntry(config, useCount) {
|
|
|
452
544
|
updatedAt: new Date().toISOString(),
|
|
453
545
|
};
|
|
454
546
|
}
|
|
455
|
-
function persistState(pi, config, useCount) {
|
|
547
|
+
export function persistState(pi, config, useCount) {
|
|
456
548
|
pi.appendEntry(STATE_ENTRY, makeStateEntry(config, useCount));
|
|
457
549
|
}
|
|
458
|
-
function normalizeConfig(input, fallback) {
|
|
459
|
-
|
|
550
|
+
export function normalizeConfig(input, fallback, registry) {
|
|
551
|
+
const normalized = {
|
|
460
552
|
enabled: typeof input.enabled === "boolean" ? input.enabled : fallback.enabled,
|
|
461
553
|
provider: typeof input.provider === "string" && input.provider ? input.provider : fallback.provider,
|
|
462
554
|
modelId: typeof input.modelId === "string" && input.modelId ? input.modelId : fallback.modelId,
|
|
555
|
+
thinkingLevel: parseThinkingLevel(input.thinkingLevel) ?? fallback.thinkingLevel,
|
|
463
556
|
maxUses: typeof input.maxUses === "number" && input.maxUses > 0 ? Math.floor(input.maxUses) : fallback.maxUses,
|
|
464
557
|
cacheRetention: parseCacheRetention(input.cacheRetention) ?? fallback.cacheRetention,
|
|
465
558
|
maxTokens: typeof input.maxTokens === "number" && input.maxTokens > 0 ? Math.floor(input.maxTokens) : fallback.maxTokens,
|
|
466
559
|
timeoutMs: typeof input.timeoutMs === "number" && input.timeoutMs > 0 ? Math.floor(input.timeoutMs) : fallback.timeoutMs,
|
|
560
|
+
maxTranscriptChars: typeof input.maxTranscriptChars === "number" && input.maxTranscriptChars > 0
|
|
561
|
+
? Math.floor(input.maxTranscriptChars)
|
|
562
|
+
: fallback.maxTranscriptChars,
|
|
467
563
|
};
|
|
564
|
+
const legacyDefault = parseModelSpec(LEGACY_DEFAULT_ADVISOR_MODEL);
|
|
565
|
+
if (input.thinkingLevel === undefined &&
|
|
566
|
+
legacyDefault &&
|
|
567
|
+
normalized.provider === legacyDefault.provider &&
|
|
568
|
+
normalized.modelId === legacyDefault.modelId) {
|
|
569
|
+
// Only rewrite the stored legacy default when the migration target resolves.
|
|
570
|
+
// Otherwise a resolving stored model would be replaced by a non-resolving default.
|
|
571
|
+
if (!registry || modelResolves(registry, fallback.provider, fallback.modelId)) {
|
|
572
|
+
normalized.provider = fallback.provider;
|
|
573
|
+
normalized.modelId = fallback.modelId;
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
if (registry && typeof input.provider === "string" && input.provider && typeof input.modelId === "string" && input.modelId) {
|
|
577
|
+
// Never replace a resolving stored model with a non-resolving one.
|
|
578
|
+
if (modelResolves(registry, input.provider, input.modelId) && !modelResolves(registry, normalized.provider, normalized.modelId)) {
|
|
579
|
+
normalized.provider = input.provider;
|
|
580
|
+
normalized.modelId = input.modelId;
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
return normalized;
|
|
468
584
|
}
|
|
469
|
-
function
|
|
585
|
+
export function modelResolves(registry, provider, modelId) {
|
|
586
|
+
if (!registry)
|
|
587
|
+
return false;
|
|
588
|
+
try {
|
|
589
|
+
const found = registry.find(provider, modelId);
|
|
590
|
+
return found !== undefined && found !== null;
|
|
591
|
+
}
|
|
592
|
+
catch {
|
|
593
|
+
return false;
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
export function resolveAdvisorModel(registry, candidates) {
|
|
597
|
+
if (!registry)
|
|
598
|
+
return undefined;
|
|
599
|
+
for (const candidate of candidates) {
|
|
600
|
+
if (modelResolves(registry, candidate.provider, candidate.modelId))
|
|
601
|
+
return candidate;
|
|
602
|
+
}
|
|
603
|
+
try {
|
|
604
|
+
const available = registry.getAvailable?.();
|
|
605
|
+
const first = Array.isArray(available) ? available[0] : undefined;
|
|
606
|
+
if (first && typeof first.provider === "string" && typeof first.id === "string" && first.provider && first.id) {
|
|
607
|
+
return { provider: first.provider, modelId: first.id };
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
catch {
|
|
611
|
+
// Ignore registry listing failures; callers keep the current config.
|
|
612
|
+
}
|
|
613
|
+
return undefined;
|
|
614
|
+
}
|
|
615
|
+
export function parseModelSpec(value) {
|
|
470
616
|
const slash = value.indexOf("/");
|
|
471
617
|
if (slash <= 0 || slash === value.length - 1)
|
|
472
618
|
return undefined;
|
|
@@ -486,4 +632,10 @@ function parseCacheRetention(value) {
|
|
|
486
632
|
return value;
|
|
487
633
|
return undefined;
|
|
488
634
|
}
|
|
635
|
+
function parseThinkingLevel(value) {
|
|
636
|
+
if (value === "minimal" || value === "low" || value === "medium" || value === "high" || value === "xhigh" || value === "max") {
|
|
637
|
+
return value;
|
|
638
|
+
}
|
|
639
|
+
return undefined;
|
|
640
|
+
}
|
|
489
641
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "advisor-pi",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Advisor-style strategic model guidance for Pi Coding Agent workflows",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
},
|
|
19
19
|
"scripts": {
|
|
20
20
|
"build": "tsc",
|
|
21
|
+
"test": "npm run build && node --test test/*.test.mjs",
|
|
21
22
|
"prepublishOnly": "npm run build"
|
|
22
23
|
},
|
|
23
24
|
"pi": {
|
package/src/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { completeSimple, StringEnum, type CacheRetention, type Message, type ThinkingLevel, type Usage } from "@earendil-works/pi-ai";
|
|
2
2
|
import {
|
|
3
3
|
buildSessionContext,
|
|
4
4
|
convertToLlm,
|
|
@@ -8,13 +8,16 @@ import {
|
|
|
8
8
|
} from "@earendil-works/pi-coding-agent";
|
|
9
9
|
import { Type, type Static } from "typebox";
|
|
10
10
|
|
|
11
|
-
const STATE_ENTRY = "advisor-pi-state";
|
|
11
|
+
export const STATE_ENTRY = "advisor-pi-state";
|
|
12
12
|
const TOOL_NAME = "advisor";
|
|
13
|
-
const DEFAULT_ADVISOR_MODEL = "openai-codex/gpt-5.
|
|
14
|
-
const
|
|
13
|
+
export const DEFAULT_ADVISOR_MODEL = "openai-codex/gpt-5.6-sol";
|
|
14
|
+
export const LEGACY_DEFAULT_ADVISOR_MODEL = "openai-codex/gpt-5.5";
|
|
15
|
+
const DEFAULT_ADVISOR_THINKING_LEVEL: AdvisorThinkingLevel = "high";
|
|
16
|
+
const DEFAULT_MAX_USES = 5;
|
|
15
17
|
const DEFAULT_CACHE_RETENTION: CacheRetention = "short";
|
|
16
18
|
const DEFAULT_TIMEOUT_MS = 600_000;
|
|
17
19
|
const DEFAULT_MAX_TOKENS = 4_000;
|
|
20
|
+
export const DEFAULT_MAX_TRANSCRIPT_CHARS = 20_000;
|
|
18
21
|
|
|
19
22
|
const advisorToolSchema = Type.Object({
|
|
20
23
|
question: Type.String({
|
|
@@ -36,15 +39,18 @@ const advisorToolSchema = Type.Object({
|
|
|
36
39
|
});
|
|
37
40
|
|
|
38
41
|
type AdvisorToolInput = Static<typeof advisorToolSchema>;
|
|
42
|
+
type AdvisorThinkingLevel = ThinkingLevel | "max";
|
|
39
43
|
|
|
40
44
|
type AdvisorConfig = {
|
|
41
45
|
enabled: boolean;
|
|
42
46
|
provider: string;
|
|
43
47
|
modelId: string;
|
|
48
|
+
thinkingLevel: AdvisorThinkingLevel;
|
|
44
49
|
maxUses: number;
|
|
45
50
|
cacheRetention: CacheRetention;
|
|
46
51
|
maxTokens: number;
|
|
47
52
|
timeoutMs: number;
|
|
53
|
+
maxTranscriptChars: number;
|
|
48
54
|
};
|
|
49
55
|
|
|
50
56
|
type AdvisorStateEntry = {
|
|
@@ -62,6 +68,7 @@ type AdvisorToolDetails = {
|
|
|
62
68
|
useCount: number;
|
|
63
69
|
maxUses: number;
|
|
64
70
|
cacheRetention: CacheRetention;
|
|
71
|
+
thinkingLevel: AdvisorThinkingLevel;
|
|
65
72
|
elapsedMs: number;
|
|
66
73
|
stopReason: string;
|
|
67
74
|
usage?: Usage;
|
|
@@ -69,12 +76,21 @@ type AdvisorToolDetails = {
|
|
|
69
76
|
state: AdvisorStateEntry;
|
|
70
77
|
};
|
|
71
78
|
|
|
79
|
+
export type ModelRegistryLike = {
|
|
80
|
+
find: (provider: string, modelId: string) => unknown;
|
|
81
|
+
getAvailable?: () => Array<{ provider?: unknown; id?: unknown }>;
|
|
82
|
+
};
|
|
83
|
+
|
|
72
84
|
export default function advisorPiExtension(pi: ExtensionAPI) {
|
|
73
85
|
let config = defaultConfig();
|
|
74
86
|
let useCount = 0;
|
|
75
87
|
|
|
76
88
|
pi.registerFlag("advisor-model", {
|
|
77
|
-
description: "Advisor model as provider/model, e.g. openai-codex/gpt-5.
|
|
89
|
+
description: "Advisor model as provider/model, e.g. openai-codex/gpt-5.6-sol",
|
|
90
|
+
type: "string",
|
|
91
|
+
});
|
|
92
|
+
pi.registerFlag("advisor-thinking", {
|
|
93
|
+
description: "Advisor thinking level: minimal, low, medium, high, xhigh, or max",
|
|
78
94
|
type: "string",
|
|
79
95
|
});
|
|
80
96
|
pi.registerFlag("advisor-max-uses", {
|
|
@@ -85,6 +101,10 @@ export default function advisorPiExtension(pi: ExtensionAPI) {
|
|
|
85
101
|
description: "Advisor prompt-cache preference: none, short, or long",
|
|
86
102
|
type: "string",
|
|
87
103
|
});
|
|
104
|
+
pi.registerFlag("advisor-max-transcript-chars", {
|
|
105
|
+
description: "Maximum conversation transcript characters sent per advisor call (keeps most recent)",
|
|
106
|
+
type: "string",
|
|
107
|
+
});
|
|
88
108
|
pi.registerFlag("advisor-enabled", {
|
|
89
109
|
description: "Enable the advisor tool on startup",
|
|
90
110
|
type: "boolean",
|
|
@@ -127,7 +147,7 @@ export default function advisorPiExtension(pi: ExtensionAPI) {
|
|
|
127
147
|
content: [
|
|
128
148
|
{
|
|
129
149
|
type: "text",
|
|
130
|
-
text: `Consulting advisor ${config.provider}/${config.modelId}...`,
|
|
150
|
+
text: `Consulting advisor ${config.provider}/${config.modelId} (${config.thinkingLevel})...`,
|
|
131
151
|
},
|
|
132
152
|
],
|
|
133
153
|
details: makeSkippedDetails(config, useCount, params),
|
|
@@ -137,7 +157,7 @@ export default function advisorPiExtension(pi: ExtensionAPI) {
|
|
|
137
157
|
if (!auth.ok) throw new Error(auth.error);
|
|
138
158
|
|
|
139
159
|
const startedAt = Date.now();
|
|
140
|
-
const conversationText = serializeCurrentConversation(ctx);
|
|
160
|
+
const conversationText = truncateTranscript(serializeCurrentConversation(ctx), config.maxTranscriptChars);
|
|
141
161
|
const userMessage: Message = {
|
|
142
162
|
role: "user",
|
|
143
163
|
content: [
|
|
@@ -149,7 +169,7 @@ export default function advisorPiExtension(pi: ExtensionAPI) {
|
|
|
149
169
|
timestamp: Date.now(),
|
|
150
170
|
};
|
|
151
171
|
|
|
152
|
-
const response = await
|
|
172
|
+
const response = await completeSimple(
|
|
153
173
|
model,
|
|
154
174
|
{
|
|
155
175
|
systemPrompt: ADVISOR_SYSTEM_PROMPT,
|
|
@@ -160,6 +180,7 @@ export default function advisorPiExtension(pi: ExtensionAPI) {
|
|
|
160
180
|
headers: auth.headers,
|
|
161
181
|
signal,
|
|
162
182
|
cacheRetention: config.cacheRetention,
|
|
183
|
+
reasoning: config.thinkingLevel as ThinkingLevel,
|
|
163
184
|
sessionId: `advisor-pi:${ctx.sessionManager.getSessionId()}`,
|
|
164
185
|
maxTokens: config.maxTokens,
|
|
165
186
|
timeoutMs: config.timeoutMs,
|
|
@@ -187,6 +208,7 @@ export default function advisorPiExtension(pi: ExtensionAPI) {
|
|
|
187
208
|
useCount,
|
|
188
209
|
maxUses: config.maxUses,
|
|
189
210
|
cacheRetention: config.cacheRetention,
|
|
211
|
+
thinkingLevel: config.thinkingLevel,
|
|
190
212
|
elapsedMs,
|
|
191
213
|
stopReason: response.stopReason,
|
|
192
214
|
usage: response.usage,
|
|
@@ -198,7 +220,7 @@ export default function advisorPiExtension(pi: ExtensionAPI) {
|
|
|
198
220
|
content: [
|
|
199
221
|
{
|
|
200
222
|
type: "text",
|
|
201
|
-
text: `Advisor guidance (${useCount}/${config.maxUses}, ${config.provider}/${config.modelId}):\n\n${text}`,
|
|
223
|
+
text: `Advisor guidance (${useCount}/${config.maxUses}, ${config.provider}/${config.modelId}, ${config.thinkingLevel}):\n\n${text}`,
|
|
202
224
|
},
|
|
203
225
|
],
|
|
204
226
|
details,
|
|
@@ -207,7 +229,7 @@ export default function advisorPiExtension(pi: ExtensionAPI) {
|
|
|
207
229
|
});
|
|
208
230
|
|
|
209
231
|
pi.registerCommand("advisor-pi", {
|
|
210
|
-
description: "Configure advisor-pi: status, enable, disable, model, max-uses, cache, reset",
|
|
232
|
+
description: "Configure advisor-pi: status, enable, disable, model, thinking, max-uses, max-transcript-chars, cache, reset",
|
|
211
233
|
handler: async (args, ctx) => {
|
|
212
234
|
const result = handleCommand(args.trim(), ctx);
|
|
213
235
|
if (result.persist) persistState(pi, config, useCount);
|
|
@@ -239,26 +261,27 @@ export default function advisorPiExtension(pi: ExtensionAPI) {
|
|
|
239
261
|
function refreshStateFromBranch(ctx: ExtensionContext): void {
|
|
240
262
|
config = defaultConfig();
|
|
241
263
|
useCount = 0;
|
|
242
|
-
const restoredFromBranch = restoreStateFromSession(ctx);
|
|
243
|
-
if (!restoredFromBranch) applyStartupFlags(pi);
|
|
264
|
+
const restoredFromBranch = restoreStateFromSession(ctx, ctx.modelRegistry);
|
|
265
|
+
if (!restoredFromBranch) applyStartupFlags(pi, ctx.modelRegistry);
|
|
266
|
+
ensureAdvisorModelResolves(ctx);
|
|
244
267
|
syncActiveTool(pi);
|
|
245
268
|
updateStatus(ctx);
|
|
246
269
|
}
|
|
247
270
|
|
|
248
|
-
function restoreStateFromSession(ctx: ExtensionContext): boolean {
|
|
271
|
+
function restoreStateFromSession(ctx: ExtensionContext, registry?: ModelRegistryLike): boolean {
|
|
249
272
|
let restored = false;
|
|
250
273
|
const branch = ctx.sessionManager.getBranch();
|
|
251
274
|
for (const entry of branch) {
|
|
252
275
|
if (entry.type === "custom" && entry.customType === STATE_ENTRY) {
|
|
253
276
|
restored = true;
|
|
254
277
|
const data = entry.data as Partial<AdvisorStateEntry> | undefined;
|
|
255
|
-
if (data?.config) config = normalizeConfig(data.config, config);
|
|
278
|
+
if (data?.config) config = normalizeConfig(data.config, config, registry);
|
|
256
279
|
if (typeof data?.useCount === "number") useCount = Math.max(0, data.useCount);
|
|
257
280
|
}
|
|
258
281
|
if (entry.type === "message" && entry.message.role === "toolResult" && entry.message.toolName === TOOL_NAME) {
|
|
259
282
|
restored = true;
|
|
260
283
|
const details = entry.message.details as Partial<AdvisorToolDetails> | undefined;
|
|
261
|
-
if (details?.state?.config) config = normalizeConfig(details.state.config, config);
|
|
284
|
+
if (details?.state?.config) config = normalizeConfig(details.state.config, config, registry);
|
|
262
285
|
if (typeof details?.state?.useCount === "number") useCount = Math.max(useCount, details.state.useCount);
|
|
263
286
|
else if (details?.advisor?.useCount) useCount = Math.max(useCount, details.advisor.useCount);
|
|
264
287
|
}
|
|
@@ -266,19 +289,25 @@ export default function advisorPiExtension(pi: ExtensionAPI) {
|
|
|
266
289
|
return restored;
|
|
267
290
|
}
|
|
268
291
|
|
|
269
|
-
function applyStartupFlags(api: ExtensionAPI): void {
|
|
292
|
+
function applyStartupFlags(api: ExtensionAPI, registry?: ModelRegistryLike): void {
|
|
270
293
|
const enabledFlag = api.getFlag("advisor-enabled");
|
|
271
294
|
if (typeof enabledFlag === "boolean") config.enabled = enabledFlag;
|
|
272
295
|
|
|
273
296
|
const modelFlag = api.getFlag("advisor-model");
|
|
274
297
|
if (typeof modelFlag === "string" && modelFlag.trim()) {
|
|
275
298
|
const parsed = parseModelSpec(modelFlag.trim());
|
|
276
|
-
if (parsed) {
|
|
299
|
+
if (parsed && (!registry || modelResolves(registry, parsed.provider, parsed.modelId))) {
|
|
277
300
|
config.provider = parsed.provider;
|
|
278
301
|
config.modelId = parsed.modelId;
|
|
279
302
|
}
|
|
280
303
|
}
|
|
281
304
|
|
|
305
|
+
const thinkingFlag = api.getFlag("advisor-thinking");
|
|
306
|
+
if (typeof thinkingFlag === "string") {
|
|
307
|
+
const thinkingLevel = parseThinkingLevel(thinkingFlag);
|
|
308
|
+
if (thinkingLevel) config.thinkingLevel = thinkingLevel;
|
|
309
|
+
}
|
|
310
|
+
|
|
282
311
|
const maxUsesFlag = api.getFlag("advisor-max-uses");
|
|
283
312
|
if (typeof maxUsesFlag === "string") {
|
|
284
313
|
const maxUses = parsePositiveInt(maxUsesFlag);
|
|
@@ -290,6 +319,29 @@ export default function advisorPiExtension(pi: ExtensionAPI) {
|
|
|
290
319
|
const cacheRetention = parseCacheRetention(cacheFlag);
|
|
291
320
|
if (cacheRetention) config.cacheRetention = cacheRetention;
|
|
292
321
|
}
|
|
322
|
+
|
|
323
|
+
const maxTranscriptCharsFlag = api.getFlag("advisor-max-transcript-chars");
|
|
324
|
+
if (typeof maxTranscriptCharsFlag === "string") {
|
|
325
|
+
const maxTranscriptChars = parsePositiveInt(maxTranscriptCharsFlag);
|
|
326
|
+
if (maxTranscriptChars !== undefined) config.maxTranscriptChars = maxTranscriptChars;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
function ensureAdvisorModelResolves(ctx: ExtensionContext): void {
|
|
331
|
+
const registry = ctx.modelRegistry as ModelRegistryLike | undefined;
|
|
332
|
+
if (!registry || modelResolves(registry, config.provider, config.modelId)) return;
|
|
333
|
+
const previous = `${config.provider}/${config.modelId}`;
|
|
334
|
+
const candidates = [parseModelSpec(DEFAULT_ADVISOR_MODEL), parseModelSpec(LEGACY_DEFAULT_ADVISOR_MODEL)].filter(
|
|
335
|
+
(candidate): candidate is { provider: string; modelId: string } => candidate !== undefined,
|
|
336
|
+
);
|
|
337
|
+
const working = resolveAdvisorModel(registry, candidates);
|
|
338
|
+
if (!working) return;
|
|
339
|
+
config.provider = working.provider;
|
|
340
|
+
config.modelId = working.modelId;
|
|
341
|
+
persistState(pi, config, useCount);
|
|
342
|
+
if (ctx.hasUI) {
|
|
343
|
+
ctx.ui.notify(`Advisor model ${previous} not found. Falling back to ${working.provider}/${working.modelId}.`, "warning");
|
|
344
|
+
}
|
|
293
345
|
}
|
|
294
346
|
|
|
295
347
|
function handleCommand(
|
|
@@ -346,6 +398,24 @@ export default function advisorPiExtension(pi: ExtensionAPI) {
|
|
|
346
398
|
updateToolState: false,
|
|
347
399
|
};
|
|
348
400
|
}
|
|
401
|
+
case "thinking": {
|
|
402
|
+
const thinkingLevel = parseThinkingLevel(value);
|
|
403
|
+
if (!thinkingLevel) {
|
|
404
|
+
return {
|
|
405
|
+
message: "Usage: /advisor-pi thinking <minimal|low|medium|high|xhigh|max>",
|
|
406
|
+
level: "error",
|
|
407
|
+
persist: false,
|
|
408
|
+
updateToolState: false,
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
config.thinkingLevel = thinkingLevel;
|
|
412
|
+
return {
|
|
413
|
+
message: `advisor-pi thinking level set to ${thinkingLevel}`,
|
|
414
|
+
level: "info",
|
|
415
|
+
persist: true,
|
|
416
|
+
updateToolState: false,
|
|
417
|
+
};
|
|
418
|
+
}
|
|
349
419
|
case "max-uses": {
|
|
350
420
|
const maxUses = parsePositiveInt(value);
|
|
351
421
|
if (maxUses === undefined) {
|
|
@@ -382,10 +452,28 @@ export default function advisorPiExtension(pi: ExtensionAPI) {
|
|
|
382
452
|
updateToolState: false,
|
|
383
453
|
};
|
|
384
454
|
}
|
|
455
|
+
case "max-transcript-chars": {
|
|
456
|
+
const maxTranscriptChars = parsePositiveInt(value);
|
|
457
|
+
if (maxTranscriptChars === undefined) {
|
|
458
|
+
return {
|
|
459
|
+
message: "Usage: /advisor-pi max-transcript-chars <positive-number>",
|
|
460
|
+
level: "error",
|
|
461
|
+
persist: false,
|
|
462
|
+
updateToolState: false,
|
|
463
|
+
};
|
|
464
|
+
}
|
|
465
|
+
config.maxTranscriptChars = maxTranscriptChars;
|
|
466
|
+
return {
|
|
467
|
+
message: `advisor-pi max transcript chars set to ${maxTranscriptChars}`,
|
|
468
|
+
level: "info",
|
|
469
|
+
persist: true,
|
|
470
|
+
updateToolState: false,
|
|
471
|
+
};
|
|
472
|
+
}
|
|
385
473
|
default:
|
|
386
474
|
return {
|
|
387
475
|
message:
|
|
388
|
-
"Usage: /advisor-pi [status|enable|disable|model <provider>/<model>|max-uses <n>|cache <none|short|long>|reset]",
|
|
476
|
+
"Usage: /advisor-pi [status|enable|disable|model <provider>/<model>|thinking <minimal|low|medium|high|xhigh|max>|max-uses <n>|max-transcript-chars <n>|cache <none|short|long>|reset]",
|
|
389
477
|
level: "error",
|
|
390
478
|
persist: false,
|
|
391
479
|
updateToolState: false,
|
|
@@ -410,7 +498,11 @@ export default function advisorPiExtension(pi: ExtensionAPI) {
|
|
|
410
498
|
return;
|
|
411
499
|
}
|
|
412
500
|
const remaining = Math.max(0, config.maxUses - useCount);
|
|
413
|
-
|
|
501
|
+
const modelLabel = `${config.provider}/${config.modelId}`;
|
|
502
|
+
ctx.ui.setStatus(
|
|
503
|
+
"advisor-pi",
|
|
504
|
+
ctx.ui.theme.fg(remaining > 0 ? "accent" : "warning", `advisor:${modelLabel} ${config.thinkingLevel} ${remaining}`),
|
|
505
|
+
);
|
|
414
506
|
}
|
|
415
507
|
|
|
416
508
|
function formatStatus(ctx: ExtensionContext): string {
|
|
@@ -419,7 +511,9 @@ export default function advisorPiExtension(pi: ExtensionAPI) {
|
|
|
419
511
|
return [
|
|
420
512
|
`advisor-pi ${config.enabled ? "enabled" : "disabled"}`,
|
|
421
513
|
`model: ${config.provider}/${config.modelId} (${availability})`,
|
|
514
|
+
`thinking: ${config.thinkingLevel}`,
|
|
422
515
|
`uses: ${useCount}/${config.maxUses}`,
|
|
516
|
+
`transcript: max ${config.maxTranscriptChars} chars`,
|
|
423
517
|
`cache: ${config.cacheRetention}`,
|
|
424
518
|
].join(" • ");
|
|
425
519
|
}
|
|
@@ -437,16 +531,18 @@ Your role is strategic guidance only. You do not have tools and you do not make
|
|
|
437
531
|
|
|
438
532
|
Return guidance in short sections with bullets when useful.`;
|
|
439
533
|
|
|
440
|
-
function defaultConfig(): AdvisorConfig {
|
|
441
|
-
const parsed = parseModelSpec(DEFAULT_ADVISOR_MODEL) ?? { provider: "openai-codex", modelId: "gpt-5.
|
|
534
|
+
export function defaultConfig(): AdvisorConfig {
|
|
535
|
+
const parsed = parseModelSpec(DEFAULT_ADVISOR_MODEL) ?? { provider: "openai-codex", modelId: "gpt-5.6-sol" };
|
|
442
536
|
return {
|
|
443
537
|
enabled: true,
|
|
444
538
|
provider: parsed.provider,
|
|
445
539
|
modelId: parsed.modelId,
|
|
540
|
+
thinkingLevel: DEFAULT_ADVISOR_THINKING_LEVEL,
|
|
446
541
|
maxUses: DEFAULT_MAX_USES,
|
|
447
542
|
cacheRetention: DEFAULT_CACHE_RETENTION,
|
|
448
543
|
maxTokens: DEFAULT_MAX_TOKENS,
|
|
449
544
|
timeoutMs: DEFAULT_TIMEOUT_MS,
|
|
545
|
+
maxTranscriptChars: DEFAULT_MAX_TRANSCRIPT_CHARS,
|
|
450
546
|
};
|
|
451
547
|
}
|
|
452
548
|
|
|
@@ -454,7 +550,7 @@ function buildExecutorGuidance(config: AdvisorConfig, useCount: number): string
|
|
|
454
550
|
const remaining = Math.max(0, config.maxUses - useCount);
|
|
455
551
|
return [
|
|
456
552
|
"Advisor-pi is enabled.",
|
|
457
|
-
`The advisor tool consults ${config.provider}/${config.modelId} for strategic guidance and has ${remaining}/${config.maxUses} uses remaining on this branch.`,
|
|
553
|
+
`The advisor tool consults ${config.provider}/${config.modelId} with ${config.thinkingLevel} thinking for strategic guidance and has ${remaining}/${config.maxUses} uses remaining on this branch.`,
|
|
458
554
|
"Use advisor for complex planning, risky implementation choices, repeated failures, or course correction. Do not use advisor for trivial edits or simple facts.",
|
|
459
555
|
`Advisor cache preference is ${config.cacheRetention}; caching support is provider-dependent.`,
|
|
460
556
|
].join("\n");
|
|
@@ -468,6 +564,13 @@ function serializeCurrentConversation(ctx: ExtensionContext): string {
|
|
|
468
564
|
return serializeConversation(llmMessages);
|
|
469
565
|
}
|
|
470
566
|
|
|
567
|
+
export function truncateTranscript(text: string, maxChars: number): string {
|
|
568
|
+
if (maxChars <= 0) return text;
|
|
569
|
+
if (text.length <= maxChars) return text;
|
|
570
|
+
const omitted = text.length - maxChars;
|
|
571
|
+
return `[... earlier conversation truncated: showing the most recent ${maxChars} of ${text.length} characters (${omitted} omitted)]\n\n${text.slice(text.length - maxChars)}`;
|
|
572
|
+
}
|
|
573
|
+
|
|
471
574
|
function buildAdvisorUserPrompt(params: AdvisorToolInput, conversationText: string): string {
|
|
472
575
|
return [
|
|
473
576
|
"## Executor Question",
|
|
@@ -523,6 +626,7 @@ function makeSkippedDetails(config: AdvisorConfig, useCount: number, params: Adv
|
|
|
523
626
|
useCount,
|
|
524
627
|
maxUses: config.maxUses,
|
|
525
628
|
cacheRetention: config.cacheRetention,
|
|
629
|
+
thinkingLevel: config.thinkingLevel,
|
|
526
630
|
elapsedMs: 0,
|
|
527
631
|
stopReason: "skipped",
|
|
528
632
|
},
|
|
@@ -530,7 +634,7 @@ function makeSkippedDetails(config: AdvisorConfig, useCount: number, params: Adv
|
|
|
530
634
|
};
|
|
531
635
|
}
|
|
532
636
|
|
|
533
|
-
function makeStateEntry(config: AdvisorConfig, useCount: number): AdvisorStateEntry {
|
|
637
|
+
export function makeStateEntry(config: AdvisorConfig, useCount: number): AdvisorStateEntry {
|
|
534
638
|
return {
|
|
535
639
|
version: 1,
|
|
536
640
|
config: { ...config },
|
|
@@ -539,23 +643,87 @@ function makeStateEntry(config: AdvisorConfig, useCount: number): AdvisorStateEn
|
|
|
539
643
|
};
|
|
540
644
|
}
|
|
541
645
|
|
|
542
|
-
function persistState(pi: ExtensionAPI, config: AdvisorConfig, useCount: number): void {
|
|
646
|
+
export function persistState(pi: ExtensionAPI, config: AdvisorConfig, useCount: number): void {
|
|
543
647
|
pi.appendEntry(STATE_ENTRY, makeStateEntry(config, useCount));
|
|
544
648
|
}
|
|
545
649
|
|
|
546
|
-
function normalizeConfig(
|
|
547
|
-
|
|
650
|
+
export function normalizeConfig(
|
|
651
|
+
input: Partial<AdvisorConfig>,
|
|
652
|
+
fallback: AdvisorConfig,
|
|
653
|
+
registry?: ModelRegistryLike,
|
|
654
|
+
): AdvisorConfig {
|
|
655
|
+
const normalized: AdvisorConfig = {
|
|
548
656
|
enabled: typeof input.enabled === "boolean" ? input.enabled : fallback.enabled,
|
|
549
657
|
provider: typeof input.provider === "string" && input.provider ? input.provider : fallback.provider,
|
|
550
658
|
modelId: typeof input.modelId === "string" && input.modelId ? input.modelId : fallback.modelId,
|
|
659
|
+
thinkingLevel: parseThinkingLevel(input.thinkingLevel) ?? fallback.thinkingLevel,
|
|
551
660
|
maxUses: typeof input.maxUses === "number" && input.maxUses > 0 ? Math.floor(input.maxUses) : fallback.maxUses,
|
|
552
661
|
cacheRetention: parseCacheRetention(input.cacheRetention) ?? fallback.cacheRetention,
|
|
553
662
|
maxTokens: typeof input.maxTokens === "number" && input.maxTokens > 0 ? Math.floor(input.maxTokens) : fallback.maxTokens,
|
|
554
663
|
timeoutMs: typeof input.timeoutMs === "number" && input.timeoutMs > 0 ? Math.floor(input.timeoutMs) : fallback.timeoutMs,
|
|
664
|
+
maxTranscriptChars:
|
|
665
|
+
typeof input.maxTranscriptChars === "number" && input.maxTranscriptChars > 0
|
|
666
|
+
? Math.floor(input.maxTranscriptChars)
|
|
667
|
+
: fallback.maxTranscriptChars,
|
|
555
668
|
};
|
|
669
|
+
|
|
670
|
+
const legacyDefault = parseModelSpec(LEGACY_DEFAULT_ADVISOR_MODEL);
|
|
671
|
+
if (
|
|
672
|
+
input.thinkingLevel === undefined &&
|
|
673
|
+
legacyDefault &&
|
|
674
|
+
normalized.provider === legacyDefault.provider &&
|
|
675
|
+
normalized.modelId === legacyDefault.modelId
|
|
676
|
+
) {
|
|
677
|
+
// Only rewrite the stored legacy default when the migration target resolves.
|
|
678
|
+
// Otherwise a resolving stored model would be replaced by a non-resolving default.
|
|
679
|
+
if (!registry || modelResolves(registry, fallback.provider, fallback.modelId)) {
|
|
680
|
+
normalized.provider = fallback.provider;
|
|
681
|
+
normalized.modelId = fallback.modelId;
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
|
|
685
|
+
if (registry && typeof input.provider === "string" && input.provider && typeof input.modelId === "string" && input.modelId) {
|
|
686
|
+
// Never replace a resolving stored model with a non-resolving one.
|
|
687
|
+
if (modelResolves(registry, input.provider, input.modelId) && !modelResolves(registry, normalized.provider, normalized.modelId)) {
|
|
688
|
+
normalized.provider = input.provider;
|
|
689
|
+
normalized.modelId = input.modelId;
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
return normalized;
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
export function modelResolves(registry: ModelRegistryLike | undefined, provider: string, modelId: string): boolean {
|
|
697
|
+
if (!registry) return false;
|
|
698
|
+
try {
|
|
699
|
+
const found = registry.find(provider, modelId);
|
|
700
|
+
return found !== undefined && found !== null;
|
|
701
|
+
} catch {
|
|
702
|
+
return false;
|
|
703
|
+
}
|
|
556
704
|
}
|
|
557
705
|
|
|
558
|
-
function
|
|
706
|
+
export function resolveAdvisorModel(
|
|
707
|
+
registry: ModelRegistryLike | undefined,
|
|
708
|
+
candidates: Array<{ provider: string; modelId: string }>,
|
|
709
|
+
): { provider: string; modelId: string } | undefined {
|
|
710
|
+
if (!registry) return undefined;
|
|
711
|
+
for (const candidate of candidates) {
|
|
712
|
+
if (modelResolves(registry, candidate.provider, candidate.modelId)) return candidate;
|
|
713
|
+
}
|
|
714
|
+
try {
|
|
715
|
+
const available = registry.getAvailable?.();
|
|
716
|
+
const first = Array.isArray(available) ? available[0] : undefined;
|
|
717
|
+
if (first && typeof first.provider === "string" && typeof first.id === "string" && first.provider && first.id) {
|
|
718
|
+
return { provider: first.provider, modelId: first.id };
|
|
719
|
+
}
|
|
720
|
+
} catch {
|
|
721
|
+
// Ignore registry listing failures; callers keep the current config.
|
|
722
|
+
}
|
|
723
|
+
return undefined;
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
export function parseModelSpec(value: string): { provider: string; modelId: string } | undefined {
|
|
559
727
|
const slash = value.indexOf("/");
|
|
560
728
|
if (slash <= 0 || slash === value.length - 1) return undefined;
|
|
561
729
|
return {
|
|
@@ -575,3 +743,10 @@ function parseCacheRetention(value: unknown): CacheRetention | undefined {
|
|
|
575
743
|
return undefined;
|
|
576
744
|
}
|
|
577
745
|
|
|
746
|
+
function parseThinkingLevel(value: unknown): AdvisorThinkingLevel | undefined {
|
|
747
|
+
if (value === "minimal" || value === "low" || value === "medium" || value === "high" || value === "xhigh" || value === "max") {
|
|
748
|
+
return value;
|
|
749
|
+
}
|
|
750
|
+
return undefined;
|
|
751
|
+
}
|
|
752
|
+
|