@mariozechner/pi-coding-agent 0.50.6 → 0.50.8
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 +25 -0
- package/dist/core/agent-session.d.ts +4 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +52 -6
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/extensions/index.d.ts +1 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +15 -1
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +38 -0
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +14 -1
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/keybindings.d.ts +1 -1
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +6 -0
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +8 -1
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +17 -11
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/resource-loader.d.ts +24 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +88 -19
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +1 -0
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts +2 -0
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +2 -0
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +2 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +1 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
- package/dist/modes/interactive/components/daxnuts.js +1 -1
- package/dist/modes/interactive/components/daxnuts.js.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.d.ts +1 -1
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts +1 -0
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +132 -47
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +6 -0
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/utils/clipboard-image.d.ts.map +1 -1
- package/dist/utils/clipboard-image.js +52 -10
- package/dist/utils/clipboard-image.js.map +1 -1
- package/docs/custom-provider.md +2 -1
- package/docs/keybindings.md +8 -0
- package/docs/settings.md +5 -1
- package/examples/extensions/README.md +7 -0
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/custom-provider-qwen-cli/index.ts +345 -0
- package/examples/extensions/custom-provider-qwen-cli/package.json +16 -0
- package/examples/extensions/dynamic-resources/SKILL.md +8 -0
- package/examples/extensions/dynamic-resources/dynamic.json +79 -0
- package/examples/extensions/dynamic-resources/dynamic.md +5 -0
- package/examples/extensions/dynamic-resources/index.ts +15 -0
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/examples/sdk/12-full-control.ts +1 -0
- package/package.json +5 -4
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* Modes use this class and add their own I/O layer on top.
|
|
14
14
|
*/
|
|
15
15
|
import { readFileSync } from "node:fs";
|
|
16
|
-
import { join } from "node:path";
|
|
16
|
+
import { basename, dirname, join } from "node:path";
|
|
17
17
|
import { isContextOverflow, modelsAreEqual, resetApiProviders, supportsXhigh } from "@mariozechner/pi-ai";
|
|
18
18
|
import { getDocsPath } from "../config.js";
|
|
19
19
|
import { theme } from "../modes/interactive/theme/theme.js";
|
|
@@ -937,14 +937,18 @@ export class AgentSession {
|
|
|
937
937
|
/**
|
|
938
938
|
* Set thinking level.
|
|
939
939
|
* Clamps to model capabilities based on available thinking levels.
|
|
940
|
-
* Saves to session and settings.
|
|
940
|
+
* Saves to session and settings only if the level actually changes.
|
|
941
941
|
*/
|
|
942
942
|
setThinkingLevel(level) {
|
|
943
943
|
const availableLevels = this.getAvailableThinkingLevels();
|
|
944
944
|
const effectiveLevel = availableLevels.includes(level) ? level : this._clampThinkingLevel(level, availableLevels);
|
|
945
|
+
// Only persist if actually changing
|
|
946
|
+
const isChanging = effectiveLevel !== this.agent.state.thinkingLevel;
|
|
945
947
|
this.agent.setThinkingLevel(effectiveLevel);
|
|
946
|
-
|
|
947
|
-
|
|
948
|
+
if (isChanging) {
|
|
949
|
+
this.sessionManager.appendThinkingLevelChange(effectiveLevel);
|
|
950
|
+
this.settingsManager.setDefaultThinkingLevel(effectiveLevel);
|
|
951
|
+
}
|
|
948
952
|
}
|
|
949
953
|
/**
|
|
950
954
|
* Cycle to next thinking level.
|
|
@@ -1317,7 +1321,48 @@ export class AgentSession {
|
|
|
1317
1321
|
if (this._extensionRunner) {
|
|
1318
1322
|
this._applyExtensionBindings(this._extensionRunner);
|
|
1319
1323
|
await this._extensionRunner.emit({ type: "session_start" });
|
|
1324
|
+
await this.extendResourcesFromExtensions("startup");
|
|
1325
|
+
}
|
|
1326
|
+
}
|
|
1327
|
+
async extendResourcesFromExtensions(reason) {
|
|
1328
|
+
if (!this._extensionRunner?.hasHandlers("resources_discover")) {
|
|
1329
|
+
return;
|
|
1330
|
+
}
|
|
1331
|
+
const { skillPaths, promptPaths, themePaths } = await this._extensionRunner.emitResourcesDiscover(this._cwd, reason);
|
|
1332
|
+
if (skillPaths.length === 0 && promptPaths.length === 0 && themePaths.length === 0) {
|
|
1333
|
+
return;
|
|
1334
|
+
}
|
|
1335
|
+
const extensionPaths = {
|
|
1336
|
+
skillPaths: this.buildExtensionResourcePaths(skillPaths),
|
|
1337
|
+
promptPaths: this.buildExtensionResourcePaths(promptPaths),
|
|
1338
|
+
themePaths: this.buildExtensionResourcePaths(themePaths),
|
|
1339
|
+
};
|
|
1340
|
+
this._resourceLoader.extendResources(extensionPaths);
|
|
1341
|
+
this._baseSystemPrompt = this._rebuildSystemPrompt(this.getActiveToolNames());
|
|
1342
|
+
this.agent.setSystemPrompt(this._baseSystemPrompt);
|
|
1343
|
+
}
|
|
1344
|
+
buildExtensionResourcePaths(entries) {
|
|
1345
|
+
return entries.map((entry) => {
|
|
1346
|
+
const source = this.getExtensionSourceLabel(entry.extensionPath);
|
|
1347
|
+
const baseDir = entry.extensionPath.startsWith("<") ? undefined : dirname(entry.extensionPath);
|
|
1348
|
+
return {
|
|
1349
|
+
path: entry.path,
|
|
1350
|
+
metadata: {
|
|
1351
|
+
source,
|
|
1352
|
+
scope: "temporary",
|
|
1353
|
+
origin: "top-level",
|
|
1354
|
+
baseDir,
|
|
1355
|
+
},
|
|
1356
|
+
};
|
|
1357
|
+
});
|
|
1358
|
+
}
|
|
1359
|
+
getExtensionSourceLabel(extensionPath) {
|
|
1360
|
+
if (extensionPath.startsWith("<")) {
|
|
1361
|
+
return `extension:${extensionPath.replace(/[<>]/g, "")}`;
|
|
1320
1362
|
}
|
|
1363
|
+
const base = basename(extensionPath);
|
|
1364
|
+
const name = base.replace(/\.(ts|js)$/, "");
|
|
1365
|
+
return `extension:${name}`;
|
|
1321
1366
|
}
|
|
1322
1367
|
_applyExtensionBindings(runner) {
|
|
1323
1368
|
runner.setUIContext(this._extensionUIContext);
|
|
@@ -1482,6 +1527,7 @@ export class AgentSession {
|
|
|
1482
1527
|
this._extensionErrorListener;
|
|
1483
1528
|
if (this._extensionRunner && hasBindings) {
|
|
1484
1529
|
await this._extensionRunner.emit({ type: "session_start" });
|
|
1530
|
+
await this.extendResourcesFromExtensions("reload");
|
|
1485
1531
|
}
|
|
1486
1532
|
}
|
|
1487
1533
|
// =========================================================================
|
|
@@ -1499,8 +1545,8 @@ export class AgentSession {
|
|
|
1499
1545
|
if (isContextOverflow(message, contextWindow))
|
|
1500
1546
|
return false;
|
|
1501
1547
|
const err = message.errorMessage;
|
|
1502
|
-
// Match: overloaded_error, rate limit, 429, 500, 502, 503, 504, service unavailable, connection errors, fetch failed, terminated
|
|
1503
|
-
return /overloaded|rate.?limit|too many requests|429|500|502|503|504|service.?unavailable|server error|internal error|connection.?error|connection.?refused|other side closed|fetch failed|upstream.?connect|reset before headers|terminated/i.test(err);
|
|
1548
|
+
// Match: overloaded_error, rate limit, 429, 500, 502, 503, 504, service unavailable, connection errors, fetch failed, terminated, retry delay exceeded
|
|
1549
|
+
return /overloaded|rate.?limit|too many requests|429|500|502|503|504|service.?unavailable|server error|internal error|connection.?error|connection.?refused|other side closed|fetch failed|upstream.?connect|reset before headers|terminated|retry delay/i.test(err);
|
|
1504
1550
|
}
|
|
1505
1551
|
/**
|
|
1506
1552
|
* Handle retryable errors with exponential backoff.
|