@oh-my-pi/cli 1.3.375 → 1.3.377

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/README.md CHANGED
@@ -27,9 +27,10 @@
27
27
  | ---------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | ------------------------------------------------------------------------------ |
28
28
  | [![npm](https://img.shields.io/badge/npm-FF4F84?style=flat&logo=npm&logoColor=white)](https://npmjs.com/package/@oh-my-pi/subagents) | **[subagents](./plugins/subagents)** | Task delegation with specialized sub-agents (task, planner, explore, reviewer) |
29
29
  | [![npm](https://img.shields.io/badge/npm-31D6FF?style=flat&logo=npm&logoColor=white)](https://npmjs.com/package/@oh-my-pi/lsp) | **[lsp](./plugins/lsp)** | Language Server Protocol for code intelligence, diagnostics, and refactoring |
30
- | [![npm](https://img.shields.io/badge/npm-00E1B3?style=flat&logo=npm&logoColor=white)](https://npmjs.com/package/@oh-my-pi/anthropic-websearch) | **[anthropic-websearch](./plugins/anthropic-websearch)** | Claude web search using Anthropic's built-in web_search tool |
30
+ | [![npm](https://img.shields.io/badge/npm-00E1B3?style=flat&logo=npm&logoColor=white)](https://npmjs.com/package/@oh-my-pi/basics) | **[basics](./plugins/basics)** | Essential tools: rg (ripgrep), glob (fd), replace-all (sd), ast (ast-grep) |
31
31
  | [![npm](https://img.shields.io/badge/npm-FF9638?style=flat&logo=npm&logoColor=white)](https://npmjs.com/package/@oh-my-pi/exa) | **[exa](./plugins/exa)** | Exa AI-powered web search, company/people lookup, and websets |
32
32
  | [![npm](https://img.shields.io/badge/npm-BDFF4F?style=flat&logo=npm&logoColor=222)](https://npmjs.com/package/@oh-my-pi/perplexity) | **[perplexity](./plugins/perplexity)** | Perplexity AI search with Sonar models (fast and pro) |
33
+ | [![npm](https://img.shields.io/badge/npm-A855F7?style=flat&logo=npm&logoColor=white)](https://npmjs.com/package/@oh-my-pi/anthropic-websearch) | **[anthropic-websearch](./plugins/anthropic-websearch)** | Claude web search using Anthropic's built-in web_search tool |
33
34
  | [![npm](https://img.shields.io/badge/npm-D7A6FF?style=flat&logo=npm&logoColor=222)](https://npmjs.com/package/@oh-my-pi/user-prompt) | **[user-prompt](./plugins/user-prompt)** | Interactive user prompting for gathering input during execution |
34
35
  | [![npm](https://img.shields.io/badge/npm-4FF1FF?style=flat&logo=npm&logoColor=222)](https://npmjs.com/package/@oh-my-pi/init) | **[init](./plugins/init)** | `/init` command to generate AGENTS.md documentation for a codebase |
35
36
  | [![npm](https://img.shields.io/badge/npm-FFD16C?style=flat&logo=npm&logoColor=222)](https://npmjs.com/package/@oh-my-pi/metal-theme) | **[metal-theme](./plugins/metal-theme)** | A metal theme 🤘 |
package/dist/cli.js CHANGED
@@ -12681,6 +12681,28 @@ if (fs.existsSync(pluginNodeModules)) {
12681
12681
  }
12682
12682
  }
12683
12683
 
12684
+ // Deep merge: recursively merge source into target, preserving nested defaults
12685
+ function deepMerge(target: Record<string, unknown>, source: Record<string, unknown>): void {
12686
+ for (const key of Object.keys(source)) {
12687
+ const sourceVal = source[key];
12688
+ const targetVal = target[key];
12689
+
12690
+ // Both are plain objects (not null, not array) -> recurse
12691
+ if (
12692
+ sourceVal !== null &&
12693
+ targetVal !== null &&
12694
+ typeof sourceVal === "object" &&
12695
+ typeof targetVal === "object" &&
12696
+ !Array.isArray(sourceVal) &&
12697
+ !Array.isArray(targetVal)
12698
+ ) {
12699
+ deepMerge(targetVal as Record<string, unknown>, sourceVal as Record<string, unknown>);
12700
+ } else {
12701
+ target[key] = sourceVal;
12702
+ }
12703
+ }
12704
+ }
12705
+
12684
12706
  // Runtime config: [moduleSpecifier, storeFilename]
12685
12707
  const runtimeConfigs: [string, string][] = [
12686
12708
  ${runtimeRedirects.join(`,
@@ -12697,13 +12719,13 @@ for (const [moduleSpec, storeFile] of runtimeConfigs) {
12697
12719
  // Start with global store
12698
12720
  if (fs.existsSync(globalStorePath)) {
12699
12721
  const globalData = JSON.parse(fs.readFileSync(globalStorePath, "utf-8"));
12700
- Object.assign(runtime.default, globalData);
12722
+ deepMerge(runtime.default, globalData);
12701
12723
  }
12702
12724
 
12703
12725
  // Merge project store (takes precedence)
12704
12726
  if (fs.existsSync(projectStorePath)) {
12705
12727
  const projectData = JSON.parse(fs.readFileSync(projectStorePath, "utf-8"));
12706
- Object.assign(runtime.default, projectData);
12728
+ deepMerge(runtime.default, projectData);
12707
12729
  }
12708
12730
  } catch {
12709
12731
  // Module not found or store read failed - skip
@@ -16878,13 +16900,15 @@ var CONVERTIBLE_EXTENSIONS = new Set([
16878
16900
  ".wav",
16879
16901
  ".ogg"
16880
16902
  ]);
16903
+ var isWindows2 = process.platform === "win32";
16881
16904
  function exec2(cmd, args, options) {
16882
16905
  const timeout = (options?.timeout ?? DEFAULT_TIMEOUT) * 1000;
16883
16906
  const result = spawnSync(cmd, args, {
16884
16907
  encoding: options?.input instanceof Buffer ? "buffer" : "utf-8",
16885
16908
  timeout,
16886
16909
  maxBuffer: MAX_BYTES2,
16887
- input: options?.input
16910
+ input: options?.input,
16911
+ shell: true
16888
16912
  });
16889
16913
  return {
16890
16914
  stdout: result.stdout?.toString() ?? "",
@@ -16893,9 +16917,8 @@ function exec2(cmd, args, options) {
16893
16917
  };
16894
16918
  }
16895
16919
  function hasCommand(cmd) {
16896
- const isWindows2 = process.platform === "win32";
16897
16920
  const checkCmd = isWindows2 ? "where" : "which";
16898
- const result = spawnSync(checkCmd, [cmd], { encoding: "utf-8", shell: isWindows2 });
16921
+ const result = spawnSync(checkCmd, [cmd], { encoding: "utf-8", shell: true });
16899
16922
  return result.status === 0;
16900
16923
  }
16901
16924
  function getOrigin(url) {
@@ -1 +1 @@
1
- {"version":3,"file":"render-web.d.ts","sourceRoot":"","sources":["../../src/commands/render-web.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,gBAAgB;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;CAClB;AAoqDD;;GAEG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwC1F"}
1
+ {"version":3,"file":"render-web.d.ts","sourceRoot":"","sources":["../../src/commands/render-web.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,gBAAgB;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;CAClB;AAuqDD;;GAEG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwC1F"}
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAoRH;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAIjD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAG1C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAG1C;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA0SH;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAIjD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAG1C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAG1C;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oh-my-pi/cli",
3
- "version": "1.3.375",
3
+ "version": "1.3.377",
4
4
  "description": "Plugin manager for pi - install and manage pi config plugins from git repos",
5
5
  "type": "module",
6
6
  "main": "./dist/cli.js",