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 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
- - Shows a compact `advisor:<remaining>` status in Pi's footer when UI is
24
- available.
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 anthropic/claude-opus-4-5
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 anthropic/claude-opus-4-5 \
50
- --advisor-max-uses 3 \
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 can make advisor calls slower and more expensive.
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
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAIN,KAAK,YAAY,EAEjB,MAAM,iCAAiC,CAAC;AAgEzC,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,EAAE,EAAE,YAAY,QAkW1D"}
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 { complete, StringEnum } from "@earendil-works/pi-ai";
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.5";
7
- const DEFAULT_MAX_USES = 3;
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.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 complete(model, {
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
- ctx.ui.setStatus("advisor-pi", ctx.ui.theme.fg(remaining > 0 ? "accent" : "warning", `advisor:${remaining}`));
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.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
- return {
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 parseModelSpec(value) {
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.2",
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 { complete, StringEnum, type CacheRetention, type Message, type Usage } from "@earendil-works/pi-ai";
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.5";
14
- const DEFAULT_MAX_USES = 3;
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.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 complete(
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
- ctx.ui.setStatus("advisor-pi", ctx.ui.theme.fg(remaining > 0 ? "accent" : "warning", `advisor:${remaining}`));
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.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(input: Partial<AdvisorConfig>, fallback: AdvisorConfig): AdvisorConfig {
547
- return {
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 parseModelSpec(value: string): { provider: string; modelId: string } | undefined {
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
+