@code-yeongyu/senpi 2026.7.9 → 2026.7.10
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 +37 -1
- package/README.md +1 -1
- package/dist/cli/args.js +3 -3
- 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/core/agent-session.d.ts +18 -3
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +153 -36
- package/dist/core/agent-session.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 +54 -79
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/extensions/builtin/goal/continuation.js +1 -1
- package/dist/core/extensions/builtin/goal/continuation.js.map +1 -1
- package/dist/core/extensions/builtin/goal/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/index.js +1 -0
- package/dist/core/extensions/builtin/goal/index.js.map +1 -1
- package/dist/core/extensions/builtin/import-repro.d.ts.map +1 -1
- package/dist/core/extensions/builtin/import-repro.js +100 -6
- package/dist/core/extensions/builtin/import-repro.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/connection.d.ts +1 -0
- package/dist/core/extensions/builtin/mcp/connection.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/connection.js +15 -0
- package/dist/core/extensions/builtin/mcp/connection.js.map +1 -1
- package/dist/core/extensions/builtin/mcp/service.d.ts.map +1 -1
- package/dist/core/extensions/builtin/mcp/service.js +3 -1
- package/dist/core/extensions/builtin/mcp/service.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 +4 -3
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +30 -24
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +23 -3
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.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 +20 -3
- package/dist/core/model-registry.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/resource-loader.d.ts +2 -2
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +6 -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 +9 -2
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +11 -2
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +5 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +8 -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/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -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 +1 -0
- package/dist/main.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 +272 -24
- package/dist/modes/interactive/components/config-selector.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 +5 -2
- 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 +16 -6
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +2 -0
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +10 -0
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +10 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +261 -37
- package/dist/modes/interactive/interactive-mode.js.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 +6 -6
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +3 -3
- package/dist/modes/rpc/rpc-client.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 +64 -17
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/utils/clipboard-image.js +1 -1
- package/dist/utils/clipboard-image.js.map +1 -1
- package/docs/extensions.md +33 -9
- package/docs/models.md +4 -4
- package/docs/packages.md +7 -10
- package/docs/rpc.md +13 -3
- package/docs/sdk.md +22 -0
- package/docs/settings.md +1 -0
- package/docs/usage.md +1 -1
- 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/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- 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/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/examples/sdk/README.md +1 -1
- package/node_modules/@code-yeongyu/senpi-codemode/package.json +3 -3
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +37 -2
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-repo.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-repo.js +2 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-repo.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-storage.d.ts +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-storage.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-storage.js +7 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-storage.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.d.ts +18 -4
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.js +72 -37
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts +2 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/index.d.ts +2 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/index.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/index.js +2 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/index.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/package.json +2 -2
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.js +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/transform-messages.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/transform-messages.js +4 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/transform-messages.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +446 -195
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.models.d.ts +84 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.models.js +72 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot.models.js +4 -4
- package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.d.ts +63 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.js +54 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai.models.d.ts +84 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai.models.js +72 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.d.ts +138 -63
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.js +136 -76
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/vercel-ai-gateway.models.d.ts +77 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/vercel-ai-gateway.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/vercel-ai-gateway.models.js +72 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/vercel-ai-gateway.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-ams.models.d.ts +0 -44
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-ams.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-ams.models.js +9 -45
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-ams.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-cn.models.d.ts +0 -44
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-cn.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-cn.models.js +9 -45
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-cn.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-sgp.models.d.ts +0 -44
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-sgp.models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-sgp.models.js +9 -45
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-sgp.models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/retry.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js +3 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/package.json +1 -1
- package/node_modules/@earendil-works/pi-pty/package.json +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.js +22 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/package.json +1 -1
- package/package.json +7 -8
- package/npm-shrinkwrap.json +0 -3479
|
@@ -583,6 +583,20 @@ function applyPatterns(allPaths, patterns, baseDir) {
|
|
|
583
583
|
}
|
|
584
584
|
return new Set(result);
|
|
585
585
|
}
|
|
586
|
+
function applyAutoloadDisabledPatterns(allPaths, patterns, baseDir) {
|
|
587
|
+
const result = new Map();
|
|
588
|
+
for (const pattern of patterns) {
|
|
589
|
+
const target = pattern.slice(pattern.startsWith("+") || pattern.startsWith("-") || pattern.startsWith("!") ? 1 : 0);
|
|
590
|
+
const enabled = !pattern.startsWith("-") && !pattern.startsWith("!");
|
|
591
|
+
const exact = pattern.startsWith("+") || pattern.startsWith("-");
|
|
592
|
+
for (const filePath of allPaths) {
|
|
593
|
+
if (exact ? matchesAnyExactPattern(filePath, [target], baseDir) : matchesAnyPattern(filePath, [target], baseDir)) {
|
|
594
|
+
result.set(filePath, enabled);
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
return result;
|
|
599
|
+
}
|
|
586
600
|
export class DefaultPackageManager {
|
|
587
601
|
constructor(options) {
|
|
588
602
|
this.cwd = resolvePath(options.cwd);
|
|
@@ -959,57 +973,67 @@ export class DefaultPackageManager {
|
|
|
959
973
|
for (const { pkg, scope } of sources) {
|
|
960
974
|
const sourceStr = typeof pkg === "string" ? pkg : pkg.source;
|
|
961
975
|
const filter = typeof pkg === "object" ? pkg : undefined;
|
|
962
|
-
const
|
|
976
|
+
const deltaBase = this.findAutoloadDeltaBase(pkg, scope, sources);
|
|
977
|
+
const resolvedSource = deltaBase?.source ?? sourceStr;
|
|
978
|
+
const resolvedScope = deltaBase?.scope ?? scope;
|
|
979
|
+
const parsed = this.parseSource(resolvedSource);
|
|
963
980
|
const metadata = { source: sourceStr, scope, origin: "package" };
|
|
964
981
|
if (parsed.type === "local") {
|
|
965
|
-
const baseDir = this.getBaseDirForScope(
|
|
982
|
+
const baseDir = this.getBaseDirForScope(resolvedScope);
|
|
966
983
|
this.resolveLocalExtensionSource(parsed, accumulator, filter, metadata, baseDir);
|
|
967
984
|
continue;
|
|
968
985
|
}
|
|
969
986
|
const installMissing = async () => {
|
|
970
|
-
if (isOfflineModeEnabled())
|
|
987
|
+
if (isOfflineModeEnabled())
|
|
971
988
|
return false;
|
|
972
|
-
}
|
|
973
989
|
if (!onMissing) {
|
|
974
|
-
await this.installParsedSource(parsed,
|
|
990
|
+
await this.installParsedSource(parsed, resolvedScope);
|
|
975
991
|
return true;
|
|
976
992
|
}
|
|
977
|
-
const action = await onMissing(
|
|
993
|
+
const action = await onMissing(resolvedSource);
|
|
978
994
|
if (action === "skip")
|
|
979
995
|
return false;
|
|
980
996
|
if (action === "error")
|
|
981
|
-
throw new Error(`Missing source: ${
|
|
982
|
-
await this.installParsedSource(parsed,
|
|
997
|
+
throw new Error(`Missing source: ${resolvedSource}`);
|
|
998
|
+
await this.installParsedSource(parsed, resolvedScope);
|
|
983
999
|
return true;
|
|
984
1000
|
};
|
|
985
1001
|
if (parsed.type === "npm") {
|
|
986
|
-
let installedPath = this.getNpmInstallPath(parsed,
|
|
1002
|
+
let installedPath = this.getNpmInstallPath(parsed, resolvedScope);
|
|
987
1003
|
const needsInstall = !existsSync(installedPath) || !(await this.installedNpmMatchesConfiguredVersion(parsed, installedPath));
|
|
988
1004
|
if (needsInstall) {
|
|
989
1005
|
const installed = await installMissing();
|
|
990
1006
|
if (!installed)
|
|
991
1007
|
continue;
|
|
992
|
-
installedPath = this.getNpmInstallPath(parsed,
|
|
1008
|
+
installedPath = this.getNpmInstallPath(parsed, resolvedScope);
|
|
993
1009
|
}
|
|
994
1010
|
metadata.baseDir = installedPath;
|
|
995
1011
|
this.collectPackageResources(installedPath, accumulator, filter, metadata);
|
|
996
1012
|
continue;
|
|
997
1013
|
}
|
|
998
1014
|
if (parsed.type === "git") {
|
|
999
|
-
const installedPath = this.getGitInstallPath(parsed,
|
|
1015
|
+
const installedPath = this.getGitInstallPath(parsed, resolvedScope);
|
|
1000
1016
|
if (!existsSync(installedPath)) {
|
|
1001
1017
|
const installed = await installMissing();
|
|
1002
1018
|
if (!installed)
|
|
1003
1019
|
continue;
|
|
1004
1020
|
}
|
|
1005
|
-
else if (
|
|
1006
|
-
await this.refreshTemporaryGitSource(parsed,
|
|
1021
|
+
else if (resolvedScope === "temporary" && !parsed.pinned && !isOfflineModeEnabled()) {
|
|
1022
|
+
await this.refreshTemporaryGitSource(parsed, resolvedSource);
|
|
1007
1023
|
}
|
|
1008
1024
|
metadata.baseDir = installedPath;
|
|
1009
1025
|
this.collectPackageResources(installedPath, accumulator, filter, metadata);
|
|
1010
1026
|
}
|
|
1011
1027
|
}
|
|
1012
1028
|
}
|
|
1029
|
+
findAutoloadDeltaBase(pkg, scope, sources) {
|
|
1030
|
+
if (scope !== "project" || typeof pkg !== "object" || pkg.autoload !== false)
|
|
1031
|
+
return undefined;
|
|
1032
|
+
const identity = this.getPackageIdentity(pkg.source, scope);
|
|
1033
|
+
const userEntry = sources.find((entry) => entry.scope === "user" &&
|
|
1034
|
+
this.getPackageIdentity(this.getPackageSourceString(entry.pkg), "user") === identity);
|
|
1035
|
+
return userEntry ? { source: this.getPackageSourceString(userEntry.pkg), scope: "user" } : undefined;
|
|
1036
|
+
}
|
|
1013
1037
|
resolveLocalExtensionSource(source, accumulator, filter, metadata, baseDir) {
|
|
1014
1038
|
const resolved = this.resolvePathFromBase(source.path, baseDir);
|
|
1015
1039
|
if (!existsSync(resolved)) {
|
|
@@ -1351,25 +1375,30 @@ export class DefaultPackageManager {
|
|
|
1351
1375
|
}
|
|
1352
1376
|
/**
|
|
1353
1377
|
* Dedupe packages: if same package identity appears in both global and project,
|
|
1354
|
-
* keep only the project one (project wins).
|
|
1378
|
+
* keep only the project one (project wins). A project entry with autoload=false
|
|
1379
|
+
* is a delta over the global entry, so both are kept (delta first).
|
|
1355
1380
|
*/
|
|
1356
1381
|
dedupePackages(packages) {
|
|
1382
|
+
const result = [];
|
|
1357
1383
|
const seen = new Map();
|
|
1358
1384
|
for (const entry of packages) {
|
|
1359
|
-
const
|
|
1360
|
-
const
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1385
|
+
const identity = this.getPackageIdentity(this.getPackageSourceString(entry.pkg), entry.scope);
|
|
1386
|
+
const index = seen.get(identity);
|
|
1387
|
+
if (index === undefined) {
|
|
1388
|
+
seen.set(identity, result.length);
|
|
1389
|
+
result.push(entry);
|
|
1390
|
+
continue;
|
|
1391
|
+
}
|
|
1392
|
+
const existing = result[index];
|
|
1393
|
+
if (existing?.scope === "project" && entry.scope === "user") {
|
|
1394
|
+
if (typeof existing.pkg === "object" && existing.pkg.autoload === false)
|
|
1395
|
+
result.push(entry);
|
|
1364
1396
|
}
|
|
1365
|
-
else if (entry.scope === "project"
|
|
1366
|
-
|
|
1367
|
-
seen.set(identity, entry);
|
|
1397
|
+
else if (entry.scope === "project") {
|
|
1398
|
+
result[index] = entry;
|
|
1368
1399
|
}
|
|
1369
|
-
// If existing is project and new is global, keep existing (project)
|
|
1370
|
-
// If both are same scope, keep first one
|
|
1371
1400
|
}
|
|
1372
|
-
return
|
|
1401
|
+
return result;
|
|
1373
1402
|
}
|
|
1374
1403
|
parseNpmSpec(spec) {
|
|
1375
1404
|
const match = spec.match(/^(@?[^@]+(?:\/[^@]+)?)(?:@(.+))?$/);
|
|
@@ -1706,7 +1735,10 @@ export class DefaultPackageManager {
|
|
|
1706
1735
|
for (const resourceType of RESOURCE_TYPES) {
|
|
1707
1736
|
const patterns = filter[resourceType];
|
|
1708
1737
|
const target = this.getTargetMap(accumulator, resourceType);
|
|
1709
|
-
if (
|
|
1738
|
+
if (filter.autoload === false) {
|
|
1739
|
+
this.applyPackageDeltaFilter(packageRoot, patterns ?? [], resourceType, target, metadata);
|
|
1740
|
+
}
|
|
1741
|
+
else if (patterns !== undefined) {
|
|
1710
1742
|
this.applyPackageFilter(packageRoot, patterns, resourceType, target, metadata);
|
|
1711
1743
|
}
|
|
1712
1744
|
else {
|
|
@@ -1769,6 +1801,16 @@ export class DefaultPackageManager {
|
|
|
1769
1801
|
this.addResource(target, f, metadata, enabled);
|
|
1770
1802
|
}
|
|
1771
1803
|
}
|
|
1804
|
+
applyPackageDeltaFilter(packageRoot, userPatterns, resourceType, target, metadata) {
|
|
1805
|
+
if (userPatterns.length === 0) {
|
|
1806
|
+
return;
|
|
1807
|
+
}
|
|
1808
|
+
const { allFiles } = this.collectManifestFiles(packageRoot, resourceType);
|
|
1809
|
+
const enabledByUser = applyAutoloadDisabledPatterns(allFiles, userPatterns, packageRoot);
|
|
1810
|
+
for (const [filePath, enabled] of enabledByUser) {
|
|
1811
|
+
this.addResource(target, filePath, metadata, enabled);
|
|
1812
|
+
}
|
|
1813
|
+
}
|
|
1772
1814
|
/**
|
|
1773
1815
|
* Collect all files from a package for a resource type, applying manifest patterns.
|
|
1774
1816
|
* Returns { allFiles, enabledByManifest } where enabledByManifest is the set of files
|