@oh-my-pi/cli 1.3.376 → 1.3.378

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
@@ -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.376",
3
+ "version": "1.3.378",
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",