@earendil-works/pi-coding-agent 0.80.2 → 0.80.5
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 +115 -1
- package/README.md +3 -2
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +2 -2
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/config-selector.d.ts +4 -2
- package/dist/cli/config-selector.d.ts.map +1 -1
- package/dist/cli/config-selector.js +1 -1
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js +13 -25
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/core/agent-session.d.ts +22 -5
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +133 -50
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +13 -5
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/cache-stats.d.ts +49 -0
- package/dist/core/cache-stats.d.ts.map +1 -0
- package/dist/core/cache-stats.js +101 -0
- package/dist/core/cache-stats.js.map +1 -0
- package/dist/core/compaction/compaction.d.ts +1 -2
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +56 -81
- package/dist/core/compaction/compaction.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/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +10 -0
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +5 -3
- 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 +39 -5
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/http-dispatcher.d.ts.map +1 -1
- package/dist/core/http-dispatcher.js +28 -1
- package/dist/core/http-dispatcher.js.map +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +3 -6
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/model-registry.d.ts +3 -0
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +16 -2
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts +10 -0
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +15 -18
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/package-manager.d.ts +4 -1
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +68 -26
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/provider-attribution.d.ts.map +1 -1
- package/dist/core/provider-attribution.js +0 -10
- package/dist/core/provider-attribution.js.map +1 -1
- package/dist/core/resource-loader.d.ts +2 -2
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +8 -7
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/sdk.d.ts +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +8 -1
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts +21 -2
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +104 -72
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +10 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +27 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/slash-commands.d.ts +1 -0
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +3 -3
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/timings.d.ts +4 -2
- package/dist/core/timings.d.ts.map +1 -1
- package/dist/core/timings.js +24 -14
- package/dist/core/timings.js.map +1 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +20 -5
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +2 -2
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +12 -25
- package/dist/core/tools/read.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts +2 -2
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +17 -4
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +3 -1
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +23 -15
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts +34 -3
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector.js +280 -25
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/custom-entry.d.ts +19 -0
- package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -0
- package/dist/modes/interactive/components/custom-entry.js +52 -0
- package/dist/modes/interactive/components/custom-entry.js.map +1 -0
- package/dist/modes/interactive/components/extension-editor.d.ts +3 -1
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-editor.js +12 -3
- package/dist/modes/interactive/components/extension-editor.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts +4 -0
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +1 -1
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts +3 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js +17 -6
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +4 -0
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +23 -1
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/status-indicator.d.ts +28 -0
- package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -0
- package/dist/modes/interactive/components/status-indicator.js +60 -0
- package/dist/modes/interactive/components/status-indicator.js.map +1 -0
- package/dist/modes/interactive/components/user-message.d.ts +6 -2
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js +19 -6
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +21 -10
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +417 -196
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +1 -1
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +21 -6
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +17 -3
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +20 -1
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +26 -0
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/package-manager-cli.d.ts +2 -2
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +71 -17
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/rpc-entry.d.ts +3 -0
- package/dist/rpc-entry.d.ts.map +1 -0
- package/dist/rpc-entry.js +10 -0
- package/dist/rpc-entry.js.map +1 -0
- package/dist/utils/clipboard-image.d.ts.map +1 -1
- package/dist/utils/clipboard-image.js +1 -1
- package/dist/utils/clipboard-image.js.map +1 -1
- package/dist/utils/image-convert.d.ts +1 -0
- package/dist/utils/image-convert.d.ts.map +1 -1
- package/dist/utils/image-convert.js +21 -15
- package/dist/utils/image-convert.js.map +1 -1
- package/dist/utils/image-process.d.ts +18 -0
- package/dist/utils/image-process.d.ts.map +1 -0
- package/dist/utils/image-process.js +83 -0
- package/dist/utils/image-process.js.map +1 -0
- package/dist/utils/mime.d.ts.map +1 -1
- package/dist/utils/mime.js +41 -0
- package/dist/utils/mime.js.map +1 -1
- package/docs/extensions.md +88 -17
- package/docs/keybindings.md +1 -1
- package/docs/models.md +4 -4
- package/docs/packages.md +2 -2
- package/docs/providers.md +2 -1
- package/docs/rpc.md +71 -3
- package/docs/sdk.md +50 -0
- package/docs/session-format.md +18 -8
- package/docs/settings.md +11 -0
- package/docs/usage.md +3 -3
- package/examples/extensions/README.md +1 -0
- package/examples/extensions/custom-compaction.ts +1 -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/entry-renderer.ts +41 -0
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/handoff.ts +1 -1
- package/examples/extensions/qna.ts +1 -1
- package/examples/extensions/question.ts +1 -0
- package/examples/extensions/reload-runtime.ts +2 -2
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/summarize.ts +1 -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 -1
- package/examples/sdk/README.md +1 -1
- package/npm-shrinkwrap.json +12 -12
- package/package.json +8 -5
|
@@ -582,6 +582,20 @@ function applyPatterns(allPaths, patterns, baseDir) {
|
|
|
582
582
|
}
|
|
583
583
|
return new Set(result);
|
|
584
584
|
}
|
|
585
|
+
function applyAutoloadDisabledPatterns(allPaths, patterns, baseDir) {
|
|
586
|
+
const result = new Map();
|
|
587
|
+
for (const pattern of patterns) {
|
|
588
|
+
const target = pattern.slice(pattern.startsWith("+") || pattern.startsWith("-") || pattern.startsWith("!") ? 1 : 0);
|
|
589
|
+
const enabled = !pattern.startsWith("-") && !pattern.startsWith("!");
|
|
590
|
+
const exact = pattern.startsWith("+") || pattern.startsWith("-");
|
|
591
|
+
for (const filePath of allPaths) {
|
|
592
|
+
if (exact ? matchesAnyExactPattern(filePath, [target], baseDir) : matchesAnyPattern(filePath, [target], baseDir)) {
|
|
593
|
+
result.set(filePath, enabled);
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
return result;
|
|
598
|
+
}
|
|
585
599
|
export class DefaultPackageManager {
|
|
586
600
|
cwd;
|
|
587
601
|
agentDir;
|
|
@@ -964,57 +978,67 @@ export class DefaultPackageManager {
|
|
|
964
978
|
for (const { pkg, scope } of sources) {
|
|
965
979
|
const sourceStr = typeof pkg === "string" ? pkg : pkg.source;
|
|
966
980
|
const filter = typeof pkg === "object" ? pkg : undefined;
|
|
967
|
-
const
|
|
981
|
+
const deltaBase = this.findAutoloadDeltaBase(pkg, scope, sources);
|
|
982
|
+
const resolvedSource = deltaBase?.source ?? sourceStr;
|
|
983
|
+
const resolvedScope = deltaBase?.scope ?? scope;
|
|
984
|
+
const parsed = this.parseSource(resolvedSource);
|
|
968
985
|
const metadata = { source: sourceStr, scope, origin: "package" };
|
|
969
986
|
if (parsed.type === "local") {
|
|
970
|
-
const baseDir = this.getBaseDirForScope(
|
|
987
|
+
const baseDir = this.getBaseDirForScope(resolvedScope);
|
|
971
988
|
this.resolveLocalExtensionSource(parsed, accumulator, filter, metadata, baseDir);
|
|
972
989
|
continue;
|
|
973
990
|
}
|
|
974
991
|
const installMissing = async () => {
|
|
975
|
-
if (isOfflineModeEnabled())
|
|
992
|
+
if (isOfflineModeEnabled())
|
|
976
993
|
return false;
|
|
977
|
-
}
|
|
978
994
|
if (!onMissing) {
|
|
979
|
-
await this.installParsedSource(parsed,
|
|
995
|
+
await this.installParsedSource(parsed, resolvedScope);
|
|
980
996
|
return true;
|
|
981
997
|
}
|
|
982
|
-
const action = await onMissing(
|
|
998
|
+
const action = await onMissing(resolvedSource);
|
|
983
999
|
if (action === "skip")
|
|
984
1000
|
return false;
|
|
985
1001
|
if (action === "error")
|
|
986
|
-
throw new Error(`Missing source: ${
|
|
987
|
-
await this.installParsedSource(parsed,
|
|
1002
|
+
throw new Error(`Missing source: ${resolvedSource}`);
|
|
1003
|
+
await this.installParsedSource(parsed, resolvedScope);
|
|
988
1004
|
return true;
|
|
989
1005
|
};
|
|
990
1006
|
if (parsed.type === "npm") {
|
|
991
|
-
let installedPath = this.getNpmInstallPath(parsed,
|
|
1007
|
+
let installedPath = this.getNpmInstallPath(parsed, resolvedScope);
|
|
992
1008
|
const needsInstall = !existsSync(installedPath) || !(await this.installedNpmMatchesConfiguredVersion(parsed, installedPath));
|
|
993
1009
|
if (needsInstall) {
|
|
994
1010
|
const installed = await installMissing();
|
|
995
1011
|
if (!installed)
|
|
996
1012
|
continue;
|
|
997
|
-
installedPath = this.getNpmInstallPath(parsed,
|
|
1013
|
+
installedPath = this.getNpmInstallPath(parsed, resolvedScope);
|
|
998
1014
|
}
|
|
999
1015
|
metadata.baseDir = installedPath;
|
|
1000
1016
|
this.collectPackageResources(installedPath, accumulator, filter, metadata);
|
|
1001
1017
|
continue;
|
|
1002
1018
|
}
|
|
1003
1019
|
if (parsed.type === "git") {
|
|
1004
|
-
const installedPath = this.getGitInstallPath(parsed,
|
|
1020
|
+
const installedPath = this.getGitInstallPath(parsed, resolvedScope);
|
|
1005
1021
|
if (!existsSync(installedPath)) {
|
|
1006
1022
|
const installed = await installMissing();
|
|
1007
1023
|
if (!installed)
|
|
1008
1024
|
continue;
|
|
1009
1025
|
}
|
|
1010
|
-
else if (
|
|
1011
|
-
await this.refreshTemporaryGitSource(parsed,
|
|
1026
|
+
else if (resolvedScope === "temporary" && !parsed.pinned && !isOfflineModeEnabled()) {
|
|
1027
|
+
await this.refreshTemporaryGitSource(parsed, resolvedSource);
|
|
1012
1028
|
}
|
|
1013
1029
|
metadata.baseDir = installedPath;
|
|
1014
1030
|
this.collectPackageResources(installedPath, accumulator, filter, metadata);
|
|
1015
1031
|
}
|
|
1016
1032
|
}
|
|
1017
1033
|
}
|
|
1034
|
+
findAutoloadDeltaBase(pkg, scope, sources) {
|
|
1035
|
+
if (scope !== "project" || typeof pkg !== "object" || pkg.autoload !== false)
|
|
1036
|
+
return undefined;
|
|
1037
|
+
const identity = this.getPackageIdentity(pkg.source, scope);
|
|
1038
|
+
const userEntry = sources.find((entry) => entry.scope === "user" &&
|
|
1039
|
+
this.getPackageIdentity(this.getPackageSourceString(entry.pkg), "user") === identity);
|
|
1040
|
+
return userEntry ? { source: this.getPackageSourceString(userEntry.pkg), scope: "user" } : undefined;
|
|
1041
|
+
}
|
|
1018
1042
|
resolveLocalExtensionSource(source, accumulator, filter, metadata, baseDir) {
|
|
1019
1043
|
const resolved = this.resolvePathFromBase(source.path, baseDir);
|
|
1020
1044
|
if (!existsSync(resolved)) {
|
|
@@ -1356,25 +1380,30 @@ export class DefaultPackageManager {
|
|
|
1356
1380
|
}
|
|
1357
1381
|
/**
|
|
1358
1382
|
* Dedupe packages: if same package identity appears in both global and project,
|
|
1359
|
-
* keep only the project one (project wins).
|
|
1383
|
+
* keep only the project one (project wins). A project entry with autoload=false
|
|
1384
|
+
* is a delta over the global entry, so both are kept (delta first).
|
|
1360
1385
|
*/
|
|
1361
1386
|
dedupePackages(packages) {
|
|
1387
|
+
const result = [];
|
|
1362
1388
|
const seen = new Map();
|
|
1363
1389
|
for (const entry of packages) {
|
|
1364
|
-
const
|
|
1365
|
-
const
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1390
|
+
const identity = this.getPackageIdentity(this.getPackageSourceString(entry.pkg), entry.scope);
|
|
1391
|
+
const index = seen.get(identity);
|
|
1392
|
+
if (index === undefined) {
|
|
1393
|
+
seen.set(identity, result.length);
|
|
1394
|
+
result.push(entry);
|
|
1395
|
+
continue;
|
|
1396
|
+
}
|
|
1397
|
+
const existing = result[index];
|
|
1398
|
+
if (existing?.scope === "project" && entry.scope === "user") {
|
|
1399
|
+
if (typeof existing.pkg === "object" && existing.pkg.autoload === false)
|
|
1400
|
+
result.push(entry);
|
|
1369
1401
|
}
|
|
1370
|
-
else if (entry.scope === "project"
|
|
1371
|
-
|
|
1372
|
-
seen.set(identity, entry);
|
|
1402
|
+
else if (entry.scope === "project") {
|
|
1403
|
+
result[index] = entry;
|
|
1373
1404
|
}
|
|
1374
|
-
// If existing is project and new is global, keep existing (project)
|
|
1375
|
-
// If both are same scope, keep first one
|
|
1376
1405
|
}
|
|
1377
|
-
return
|
|
1406
|
+
return result;
|
|
1378
1407
|
}
|
|
1379
1408
|
parseNpmSpec(spec) {
|
|
1380
1409
|
const match = spec.match(/^(@?[^@]+(?:\/[^@]+)?)(?:@(.+))?$/);
|
|
@@ -1708,7 +1737,10 @@ export class DefaultPackageManager {
|
|
|
1708
1737
|
for (const resourceType of RESOURCE_TYPES) {
|
|
1709
1738
|
const patterns = filter[resourceType];
|
|
1710
1739
|
const target = this.getTargetMap(accumulator, resourceType);
|
|
1711
|
-
if (
|
|
1740
|
+
if (filter.autoload === false) {
|
|
1741
|
+
this.applyPackageDeltaFilter(packageRoot, patterns ?? [], resourceType, target, metadata);
|
|
1742
|
+
}
|
|
1743
|
+
else if (patterns !== undefined) {
|
|
1712
1744
|
this.applyPackageFilter(packageRoot, patterns, resourceType, target, metadata);
|
|
1713
1745
|
}
|
|
1714
1746
|
else {
|
|
@@ -1771,6 +1803,16 @@ export class DefaultPackageManager {
|
|
|
1771
1803
|
this.addResource(target, f, metadata, enabled);
|
|
1772
1804
|
}
|
|
1773
1805
|
}
|
|
1806
|
+
applyPackageDeltaFilter(packageRoot, userPatterns, resourceType, target, metadata) {
|
|
1807
|
+
if (userPatterns.length === 0) {
|
|
1808
|
+
return;
|
|
1809
|
+
}
|
|
1810
|
+
const { allFiles } = this.collectManifestFiles(packageRoot, resourceType);
|
|
1811
|
+
const enabledByUser = applyAutoloadDisabledPatterns(allFiles, userPatterns, packageRoot);
|
|
1812
|
+
for (const [filePath, enabled] of enabledByUser) {
|
|
1813
|
+
this.addResource(target, filePath, metadata, enabled);
|
|
1814
|
+
}
|
|
1815
|
+
}
|
|
1774
1816
|
/**
|
|
1775
1817
|
* Collect all files from a package for a resource type, applying manifest patterns.
|
|
1776
1818
|
* Returns { allFiles, enabledByManifest } where enabledByManifest is the set of files
|