@mariozechner/pi-coding-agent 0.55.0 → 0.55.2

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.
Files changed (46) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/README.md +1 -1
  3. package/dist/cli/args.d.ts +1 -0
  4. package/dist/cli/args.d.ts.map +1 -1
  5. package/dist/cli/args.js +5 -0
  6. package/dist/cli/args.js.map +1 -1
  7. package/dist/core/extensions/loader.d.ts.map +1 -1
  8. package/dist/core/extensions/loader.js +15 -3
  9. package/dist/core/extensions/loader.js.map +1 -1
  10. package/dist/core/extensions/runner.d.ts.map +1 -1
  11. package/dist/core/extensions/runner.js +5 -1
  12. package/dist/core/extensions/runner.js.map +1 -1
  13. package/dist/core/extensions/types.d.ts +27 -0
  14. package/dist/core/extensions/types.d.ts.map +1 -1
  15. package/dist/core/extensions/types.js.map +1 -1
  16. package/dist/core/model-registry.d.ts +10 -0
  17. package/dist/core/model-registry.d.ts.map +1 -1
  18. package/dist/core/model-registry.js +21 -2
  19. package/dist/core/model-registry.js.map +1 -1
  20. package/dist/core/package-manager.d.ts.map +1 -1
  21. package/dist/core/package-manager.js +23 -2
  22. package/dist/core/package-manager.js.map +1 -1
  23. package/dist/core/session-manager.d.ts.map +1 -1
  24. package/dist/core/session-manager.js +14 -7
  25. package/dist/core/session-manager.js.map +1 -1
  26. package/dist/main.d.ts.map +1 -1
  27. package/dist/main.js +10 -0
  28. package/dist/main.js.map +1 -1
  29. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  30. package/dist/modes/interactive/interactive-mode.js +9 -2
  31. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  32. package/dist/utils/tools-manager.d.ts.map +1 -1
  33. package/dist/utils/tools-manager.js +63 -19
  34. package/dist/utils/tools-manager.js.map +1 -1
  35. package/docs/custom-provider.md +32 -0
  36. package/docs/extensions.md +17 -0
  37. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  38. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  39. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  40. package/examples/extensions/custom-provider-qwen-cli/package.json +1 -1
  41. package/examples/extensions/subagent/agents.ts +2 -3
  42. package/examples/extensions/with-deps/package-lock.json +2 -2
  43. package/examples/extensions/with-deps/package.json +1 -1
  44. package/package.json +6 -5
  45. package/examples/server-web-client/node_modules/.vite/deps/_metadata.json +0 -8
  46. package/examples/server-web-client/node_modules/.vite/deps/package.json +0 -3
@@ -7,6 +7,13 @@ import ignore from "ignore";
7
7
  import { minimatch } from "minimatch";
8
8
  import { CONFIG_DIR_NAME } from "../config.js";
9
9
  import { parseGitUrl } from "../utils/git.js";
10
+ const NETWORK_TIMEOUT_MS = 10000;
11
+ function isOfflineModeEnabled() {
12
+ const value = process.env.PI_OFFLINE;
13
+ if (!value)
14
+ return false;
15
+ return value === "1" || value.toLowerCase() === "true" || value.toLowerCase() === "yes";
16
+ }
10
17
  const RESOURCE_TYPES = ["extensions", "skills", "prompts", "themes"];
11
18
  const FILE_PATTERNS = {
12
19
  extensions: /\.(ts|js)$/,
@@ -669,6 +676,9 @@ export class DefaultPackageManager {
669
676
  }
670
677
  }
671
678
  async updateSourceForScope(source, scope) {
679
+ if (isOfflineModeEnabled()) {
680
+ return;
681
+ }
672
682
  const parsed = this.parseSource(source);
673
683
  if (parsed.type === "npm") {
674
684
  if (parsed.pinned)
@@ -699,6 +709,9 @@ export class DefaultPackageManager {
699
709
  continue;
700
710
  }
701
711
  const installMissing = async () => {
712
+ if (isOfflineModeEnabled()) {
713
+ return false;
714
+ }
702
715
  if (!onMissing) {
703
716
  await this.installParsedSource(parsed, scope);
704
717
  return true;
@@ -730,7 +743,7 @@ export class DefaultPackageManager {
730
743
  if (!installed)
731
744
  continue;
732
745
  }
733
- else if (scope === "temporary" && !parsed.pinned) {
746
+ else if (scope === "temporary" && !parsed.pinned && !isOfflineModeEnabled()) {
734
747
  await this.refreshTemporaryGitSource(parsed, sourceStr);
735
748
  }
736
749
  metadata.baseDir = installedPath;
@@ -845,6 +858,9 @@ export class DefaultPackageManager {
845
858
  * - For pinned packages: check if installed version matches the pinned version
846
859
  */
847
860
  async npmNeedsUpdate(source, installedPath) {
861
+ if (isOfflineModeEnabled()) {
862
+ return false;
863
+ }
848
864
  const installedVersion = this.getInstalledNpmVersion(installedPath);
849
865
  if (!installedVersion)
850
866
  return true;
@@ -877,7 +893,9 @@ export class DefaultPackageManager {
877
893
  }
878
894
  }
879
895
  async getLatestNpmVersion(packageName) {
880
- const response = await fetch(`https://registry.npmjs.org/${packageName}/latest`);
896
+ const response = await fetch(`https://registry.npmjs.org/${packageName}/latest`, {
897
+ signal: AbortSignal.timeout(NETWORK_TIMEOUT_MS),
898
+ });
881
899
  if (!response.ok)
882
900
  throw new Error(`Failed to fetch npm registry: ${response.status}`);
883
901
  const data = (await response.json());
@@ -998,6 +1016,9 @@ export class DefaultPackageManager {
998
1016
  }
999
1017
  }
1000
1018
  async refreshTemporaryGitSource(source, sourceStr) {
1019
+ if (isOfflineModeEnabled()) {
1020
+ return;
1021
+ }
1001
1022
  try {
1002
1023
  await this.withProgress("pull", sourceStr, `Refreshing ${sourceStr}...`, async () => {
1003
1024
  await this.updateGit(source, "temporary");