@oh-my-pi/pi-coding-agent 13.9.2 → 13.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +64 -0
- package/examples/sdk/02-custom-model.ts +2 -1
- package/package.json +7 -7
- package/src/cli/args.ts +10 -6
- package/src/cli/list-models.ts +2 -2
- package/src/commands/launch.ts +3 -3
- package/src/config/model-registry.ts +136 -38
- package/src/config/model-resolver.ts +47 -21
- package/src/config/settings-schema.ts +56 -2
- package/src/discovery/helpers.ts +3 -3
- package/src/extensibility/custom-tools/types.ts +2 -0
- package/src/extensibility/extensions/loader.ts +3 -2
- package/src/extensibility/extensions/types.ts +10 -7
- package/src/extensibility/hooks/types.ts +2 -0
- package/src/main.ts +5 -22
- package/src/memories/index.ts +7 -3
- package/src/modes/components/footer.ts +10 -8
- package/src/modes/components/model-selector.ts +33 -38
- package/src/modes/components/settings-defs.ts +32 -3
- package/src/modes/components/settings-selector.ts +16 -5
- package/src/modes/components/status-line/context-thresholds.ts +68 -0
- package/src/modes/components/status-line/segments.ts +11 -12
- package/src/modes/components/status-line.ts +2 -6
- package/src/modes/components/thinking-selector.ts +7 -7
- package/src/modes/components/tree-selector.ts +3 -2
- package/src/modes/controllers/command-controller.ts +11 -26
- package/src/modes/controllers/event-controller.ts +16 -3
- package/src/modes/controllers/input-controller.ts +4 -2
- package/src/modes/controllers/selector-controller.ts +5 -4
- package/src/modes/interactive-mode.ts +2 -2
- package/src/modes/rpc/rpc-client.ts +5 -10
- package/src/modes/rpc/rpc-types.ts +5 -5
- package/src/modes/theme/theme.ts +8 -3
- package/src/priority.json +1 -0
- package/src/prompts/system/auto-handoff-threshold-focus.md +1 -0
- package/src/prompts/system/system-prompt.md +18 -2
- package/src/prompts/tools/hashline.md +139 -83
- package/src/sdk.ts +24 -16
- package/src/session/agent-session.ts +261 -118
- package/src/session/agent-storage.ts +14 -14
- package/src/session/compaction/compaction.ts +500 -13
- package/src/session/messages.ts +12 -1
- package/src/session/session-manager.ts +77 -19
- package/src/slash-commands/builtin-registry.ts +48 -0
- package/src/task/agents.ts +3 -2
- package/src/task/executor.ts +2 -2
- package/src/task/types.ts +2 -1
- package/src/thinking.ts +87 -0
- package/src/tools/browser.ts +15 -6
- package/src/tools/fetch.ts +118 -100
- package/src/tools/index.ts +2 -1
- package/src/web/kagi.ts +62 -7
- package/src/web/search/providers/exa.ts +74 -3
package/src/sdk.ts
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import {
|
|
2
|
+
Agent,
|
|
3
|
+
type AgentEvent,
|
|
4
|
+
type AgentMessage,
|
|
5
|
+
type AgentTool,
|
|
6
|
+
INTENT_FIELD,
|
|
7
|
+
type ThinkingLevel,
|
|
8
|
+
} from "@oh-my-pi/pi-agent-core";
|
|
9
|
+
import type { Message, Model } from "@oh-my-pi/pi-ai";
|
|
3
10
|
|
|
4
11
|
import { prewarmOpenAICodexResponses } from "@oh-my-pi/pi-ai/providers/openai-codex-responses";
|
|
5
12
|
import type { Component } from "@oh-my-pi/pi-tui";
|
|
@@ -72,6 +79,7 @@ import {
|
|
|
72
79
|
loadProjectContextFiles as loadContextFilesInternal,
|
|
73
80
|
} from "./system-prompt";
|
|
74
81
|
import { AgentOutputManager } from "./task/output-manager";
|
|
82
|
+
import { resolveThinkingLevelForModel, toReasoningEffort } from "./thinking";
|
|
75
83
|
import {
|
|
76
84
|
BashTool,
|
|
77
85
|
BUILTIN_TOOLS,
|
|
@@ -117,10 +125,10 @@ export interface CreateAgentSessionOptions {
|
|
|
117
125
|
/** Raw model pattern string (e.g. from --model CLI flag) to resolve after extensions load.
|
|
118
126
|
* Used when model lookup is deferred because extension-provided models aren't registered yet. */
|
|
119
127
|
modelPattern?: string;
|
|
120
|
-
/** Thinking
|
|
128
|
+
/** Thinking selector. Default: from settings, else unset */
|
|
121
129
|
thinkingLevel?: ThinkingLevel;
|
|
122
130
|
/** Models available for cycling (Ctrl+P in interactive mode) */
|
|
123
|
-
scopedModels?: Array<{ model: Model; thinkingLevel
|
|
131
|
+
scopedModels?: Array<{ model: Model; thinkingLevel?: ThinkingLevel }>;
|
|
124
132
|
|
|
125
133
|
/** System prompt. String replaces default, function receives default and returns final. */
|
|
126
134
|
systemPrompt?: string | ((defaultPrompt: string) => string);
|
|
@@ -456,12 +464,13 @@ function createCustomToolsExtension(tools: CustomTool[]): ExtensionFactory {
|
|
|
456
464
|
runOnSession({ reason: "shutdown", previousSessionFile: undefined }, ctx),
|
|
457
465
|
);
|
|
458
466
|
api.on("auto_compaction_start", async (event, ctx) =>
|
|
459
|
-
runOnSession({ reason: "auto_compaction_start", trigger: event.reason }, ctx),
|
|
467
|
+
runOnSession({ reason: "auto_compaction_start", trigger: event.reason, action: event.action }, ctx),
|
|
460
468
|
);
|
|
461
469
|
api.on("auto_compaction_end", async (event, ctx) =>
|
|
462
470
|
runOnSession(
|
|
463
471
|
{
|
|
464
472
|
reason: "auto_compaction_end",
|
|
473
|
+
action: event.action,
|
|
465
474
|
result: event.result,
|
|
466
475
|
aborted: event.aborted,
|
|
467
476
|
willRetry: event.willRetry,
|
|
@@ -696,7 +705,7 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
|
|
696
705
|
|
|
697
706
|
// If session has data and includes a thinking entry, restore it
|
|
698
707
|
if (thinkingLevel === undefined && hasExistingSession && hasThinkingEntry) {
|
|
699
|
-
thinkingLevel = existingSession.thinkingLevel as ThinkingLevel;
|
|
708
|
+
thinkingLevel = existingSession.thinkingLevel as ThinkingLevel | undefined;
|
|
700
709
|
}
|
|
701
710
|
|
|
702
711
|
if (thinkingLevel === undefined && !hasExplicitModel && !hasThinkingEntry && defaultRoleSpec.explicitThinkingLevel) {
|
|
@@ -705,14 +714,10 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
|
|
705
714
|
|
|
706
715
|
// Fall back to settings default
|
|
707
716
|
if (thinkingLevel === undefined) {
|
|
708
|
-
thinkingLevel = settings.get("defaultThinkingLevel")
|
|
717
|
+
thinkingLevel = settings.get("defaultThinkingLevel");
|
|
709
718
|
}
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
if (!model || !model.reasoning) {
|
|
713
|
-
thinkingLevel = "off";
|
|
714
|
-
} else if (thinkingLevel === "xhigh" && !supportsXhigh(model)) {
|
|
715
|
-
thinkingLevel = "high";
|
|
719
|
+
if (model) {
|
|
720
|
+
thinkingLevel = resolveThinkingLevelForModel(model, thinkingLevel);
|
|
716
721
|
}
|
|
717
722
|
|
|
718
723
|
let skills: Skill[];
|
|
@@ -1246,9 +1251,9 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
|
|
1246
1251
|
};
|
|
1247
1252
|
|
|
1248
1253
|
const toolNamesFromRegistry = Array.from(toolRegistry.keys());
|
|
1249
|
-
const requestedToolNames = options.toolNames ?? toolNamesFromRegistry;
|
|
1254
|
+
const requestedToolNames = options.toolNames?.map(name => name.toLowerCase()) ?? toolNamesFromRegistry;
|
|
1250
1255
|
const normalizedRequested = requestedToolNames.filter(name => toolRegistry.has(name));
|
|
1251
|
-
const includeExitPlanMode =
|
|
1256
|
+
const includeExitPlanMode = requestedToolNames.includes("exit_plan_mode");
|
|
1252
1257
|
const initialToolNames = includeExitPlanMode
|
|
1253
1258
|
? normalizedRequested
|
|
1254
1259
|
: normalizedRequested.filter(name => name !== "exit_plan_mode");
|
|
@@ -1343,12 +1348,13 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
|
|
1343
1348
|
const openaiWebsocketSetting = settings.get("providers.openaiWebsockets") ?? "auto";
|
|
1344
1349
|
const preferOpenAICodexWebsockets =
|
|
1345
1350
|
openaiWebsocketSetting === "on" ? true : openaiWebsocketSetting === "off" ? false : undefined;
|
|
1351
|
+
const serviceTierSetting = settings.get("serviceTier");
|
|
1346
1352
|
|
|
1347
1353
|
agent = new Agent({
|
|
1348
1354
|
initialState: {
|
|
1349
1355
|
systemPrompt,
|
|
1350
1356
|
model,
|
|
1351
|
-
thinkingLevel,
|
|
1357
|
+
thinkingLevel: toReasoningEffort(thinkingLevel),
|
|
1352
1358
|
tools: initialTools,
|
|
1353
1359
|
},
|
|
1354
1360
|
convertToLlm: convertToLlmFinal,
|
|
@@ -1368,6 +1374,7 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
|
|
1368
1374
|
minP: settings.get("minP") >= 0 ? settings.get("minP") : undefined,
|
|
1369
1375
|
presencePenalty: settings.get("presencePenalty") >= 0 ? settings.get("presencePenalty") : undefined,
|
|
1370
1376
|
repetitionPenalty: settings.get("repetitionPenalty") >= 0 ? settings.get("repetitionPenalty") : undefined,
|
|
1377
|
+
serviceTier: serviceTierSetting === "none" ? undefined : serviceTierSetting,
|
|
1371
1378
|
kimiApiFormat: settings.get("providers.kimiApiFormat") ?? "anthropic",
|
|
1372
1379
|
preferWebsockets: preferOpenAICodexWebsockets,
|
|
1373
1380
|
getToolContext: tc => toolContextStore.getContext(tc),
|
|
@@ -1418,6 +1425,7 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
|
|
1418
1425
|
|
|
1419
1426
|
session = new AgentSession({
|
|
1420
1427
|
agent,
|
|
1428
|
+
thinkingLevel,
|
|
1421
1429
|
sessionManager,
|
|
1422
1430
|
settings,
|
|
1423
1431
|
scopedModels: options.scopedModels,
|