@oh-my-pi/cli 0.8.2 → 0.9.0

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
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <img src="assets/banner.png?q" alt="Oh My Pi" >
2
+ <img src="https://raw.githubusercontent.com/can1357/oh-my-pi/main/assets/banner.png" alt="Oh My Pi" >
3
3
  </p>
4
4
 
5
5
  <p align="center">
@@ -21,6 +21,7 @@
21
21
  | Plugin | Description |
22
22
  | -------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
23
23
  | **[@oh-my-pi/subagents](https://npmjs.com/package/@oh-my-pi/subagents)** | Task delegation with specialized sub-agents (task, planner, explore, reviewer) |
24
+ | **[@oh-my-pi/lsp](https://npmjs.com/package/@oh-my-pi/lsp)** | Language Server Protocol for code intelligence, diagnostics, and refactoring |
24
25
  | **[@oh-my-pi/anthropic-websearch](https://npmjs.com/package/@oh-my-pi/anthropic-websearch)** | Claude web search using Anthropic's built-in web_search tool |
25
26
  | **[@oh-my-pi/exa](https://npmjs.com/package/@oh-my-pi/exa)** | Exa AI-powered web search, company/people lookup, and websets |
26
27
  | **[@oh-my-pi/perplexity](https://npmjs.com/package/@oh-my-pi/perplexity)** | Perplexity AI search with Sonar models (fast and pro) |
package/dist/cli.js CHANGED
@@ -233,6 +233,12 @@ function getPackageJsonPath(global = true) {
233
233
  function getPluginsJsonPath() {
234
234
  return join(getProjectPiDir(), "plugins.json");
235
235
  }
236
+ function getAgentDir(global = true) {
237
+ if (global) {
238
+ return join(PI_CONFIG_DIR, "agent");
239
+ }
240
+ return join(getProjectPiDir(), "agent");
241
+ }
236
242
  function resolveScope(options) {
237
243
  if (options.global) {
238
244
  return true;
@@ -3670,13 +3676,13 @@ __export(exports_lockfile, {
3670
3676
  createLockFile: () => createLockFile,
3671
3677
  LOCKFILE_VERSION: () => LOCKFILE_VERSION
3672
3678
  });
3673
- import { existsSync as existsSync6 } from "fs";
3679
+ import { existsSync as existsSync7 } from "fs";
3674
3680
  import { open, readFile as readFile3, rename, unlink } from "fs/promises";
3675
- import { dirname as dirname4, join as join6 } from "path";
3681
+ import { dirname as dirname4, join as join7 } from "path";
3676
3682
  async function loadLockFile(global2 = true) {
3677
3683
  const path = global2 ? GLOBAL_LOCK_FILE : PROJECT_PLUGINS_LOCK;
3678
3684
  try {
3679
- if (!existsSync6(path))
3685
+ if (!existsSync7(path))
3680
3686
  return null;
3681
3687
  const data = await readFile3(path, "utf-8");
3682
3688
  const parsed = JSON.parse(data);
@@ -3733,7 +3739,7 @@ async function releaseLockfileLock(lockfilePath) {
3733
3739
  }
3734
3740
  async function saveLockFile(lockFile, global2 = true) {
3735
3741
  const path = global2 ? GLOBAL_LOCK_FILE : PROJECT_PLUGINS_LOCK;
3736
- const tempPath = join6(dirname4(path), `.omp-lockfile-${process.pid}-${Date.now()}.tmp`);
3742
+ const tempPath = join7(dirname4(path), `.omp-lockfile-${process.pid}-${Date.now()}.tmp`);
3737
3743
  const handle = await open(tempPath, "w");
3738
3744
  let handleClosed = false;
3739
3745
  try {
@@ -3762,7 +3768,7 @@ async function validateOrRegenerateLockFile(global2 = true) {
3762
3768
  return existing;
3763
3769
  }
3764
3770
  const path = global2 ? GLOBAL_LOCK_FILE : PROJECT_PLUGINS_LOCK;
3765
- if (existsSync6(path)) {
3771
+ if (existsSync7(path)) {
3766
3772
  console.log(source_default.yellow(`Regenerating corrupted lock file: ${path}`));
3767
3773
  }
3768
3774
  return createLockFile();
@@ -6565,9 +6571,9 @@ Provide instructions for the agent here.
6565
6571
  }
6566
6572
 
6567
6573
  // src/commands/doctor.ts
6568
- import { existsSync as existsSync5 } from "fs";
6574
+ import { existsSync as existsSync6 } from "fs";
6569
6575
  import { readFile as readFile2 } from "fs/promises";
6570
- import { isAbsolute as isAbsolute3, join as join5, relative as relative3, resolve as resolve5 } from "path";
6576
+ import { isAbsolute as isAbsolute3, join as join6, relative as relative3, resolve as resolve5 } from "path";
6571
6577
  import { createInterface } from "readline";
6572
6578
 
6573
6579
  // src/conflicts.ts
@@ -6687,14 +6693,162 @@ function formatConflicts(conflicts) {
6687
6693
  });
6688
6694
  }
6689
6695
 
6696
+ // src/loader.ts
6697
+ import { existsSync as existsSync4, mkdirSync, readFileSync, writeFileSync } from "fs";
6698
+ import { join as join4 } from "path";
6699
+ init_paths();
6700
+ async function getPluginInfo(global) {
6701
+ const pkgJsonPath = getPackageJsonPath(global);
6702
+ if (!existsSync4(pkgJsonPath))
6703
+ return new Map;
6704
+ const pkgJson = JSON.parse(readFileSync(pkgJsonPath, "utf-8"));
6705
+ const deps = { ...pkgJson.dependencies, ...pkgJson.devDependencies };
6706
+ const plugins = new Map;
6707
+ for (const pluginName of Object.keys(deps)) {
6708
+ const pluginPkgJson = await readPluginPackageJson(pluginName, global);
6709
+ if (!pluginPkgJson?.omp)
6710
+ continue;
6711
+ const info = {};
6712
+ if (pluginPkgJson.omp.tools) {
6713
+ info.tools = `${pluginName}/${pluginPkgJson.omp.tools}`;
6714
+ }
6715
+ if (pluginPkgJson.omp.runtime) {
6716
+ info.runtime = `${pluginName}/${pluginPkgJson.omp.runtime}`;
6717
+ }
6718
+ if (info.tools || info.runtime) {
6719
+ plugins.set(pluginName, info);
6720
+ }
6721
+ }
6722
+ return plugins;
6723
+ }
6724
+ async function writeLoader(global = true) {
6725
+ const agentDir = getAgentDir(global);
6726
+ const ompDir = join4(agentDir, "tools", "omp");
6727
+ mkdirSync(ompDir, { recursive: true });
6728
+ const plugins = await getPluginInfo(global);
6729
+ const toolPaths = [...plugins.values()].filter((p) => p.tools).map((p) => `"${p.tools}"`);
6730
+ const runtimeRedirects = [];
6731
+ for (const [name, info] of plugins) {
6732
+ if (info.runtime) {
6733
+ const storeName = name.replace(/\//g, "__");
6734
+ runtimeRedirects.push(` ["${info.runtime}", "${storeName}.json"]`);
6735
+ }
6736
+ }
6737
+ const source = `/**
6738
+ * OMP Tool Loader
6739
+ *
6740
+ * Auto-generated by omp. Do not edit.
6741
+ */
6742
+
6743
+ import * as fs from "node:fs";
6744
+ import * as path from "node:path";
6745
+ import { fileURLToPath } from "node:url";
6746
+ import type { CustomToolFactory, CustomAgentTool } from "@mariozechner/pi-coding-agent";
6747
+
6748
+ // ============================================================================
6749
+ // Tool registry (regenerated on plugin install/uninstall)
6750
+ // ============================================================================
6751
+
6752
+ const toolPaths = [
6753
+ ${toolPaths.map((p) => ` ${p}`).join(`,
6754
+ `)}
6755
+ ];
6756
+
6757
+ // Runtime config: [moduleSpecifier, storeFilename]
6758
+ const runtimeConfigs: [string, string][] = [
6759
+ ${runtimeRedirects.join(`,
6760
+ `)}
6761
+ ];
6762
+
6763
+ // ============================================================================
6764
+ // Bootstrap: Patch module resolution and load runtime configs from store
6765
+ // ============================================================================
6766
+
6767
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
6768
+ const piDir = path.resolve(__dirname, "../../.."); // ~/.pi
6769
+ const pluginNodeModules = path.join(piDir, "plugins/node_modules");
6770
+ const storeDir = path.join(piDir, "plugins/store");
6771
+
6772
+ // Ensure store directory exists
6773
+ fs.mkdirSync(storeDir, { recursive: true });
6774
+
6775
+ if (fs.existsSync(pluginNodeModules)) {
6776
+ try {
6777
+ const Module = await import("node:module");
6778
+ const ModuleClass = (Module as any).default?.Module || (Module as any).Module;
6779
+
6780
+ // Patch _nodeModulePaths to include plugins/node_modules
6781
+ if (ModuleClass?._nodeModulePaths) {
6782
+ const original = ModuleClass._nodeModulePaths;
6783
+ ModuleClass._nodeModulePaths = (from: string) => {
6784
+ const paths = original(from);
6785
+ if (!paths.includes(pluginNodeModules)) {
6786
+ paths.push(pluginNodeModules);
6787
+ }
6788
+ return paths;
6789
+ };
6790
+ }
6791
+ } catch (e) {
6792
+ console.error("omp-loader: Failed to patch module resolution:", e);
6793
+ }
6794
+ }
6795
+
6796
+ // Load runtime configs: import module, read store, assign to module cache
6797
+ for (const [moduleSpec, storeFile] of runtimeConfigs) {
6798
+ try {
6799
+ const runtime = await import(moduleSpec);
6800
+ const storePath = path.join(storeDir, storeFile);
6801
+
6802
+ if (fs.existsSync(storePath)) {
6803
+ const storeData = JSON.parse(fs.readFileSync(storePath, "utf-8"));
6804
+ Object.assign(runtime.default, storeData);
6805
+ }
6806
+ } catch {
6807
+ // Module not found or store read failed - skip
6808
+ }
6809
+ }
6810
+
6811
+ // ============================================================================
6812
+ // Tool loader factory
6813
+ // ============================================================================
6814
+
6815
+ const factory: CustomToolFactory = async (pi) => {
6816
+ const allTools: CustomAgentTool[] = [];
6817
+
6818
+ for (const toolPath of toolPaths) {
6819
+ try {
6820
+ const module = await import(toolPath);
6821
+ const pluginFactory = module.default as CustomToolFactory;
6822
+
6823
+ if (typeof pluginFactory !== "function") {
6824
+ console.error(\`omp-loader: \${toolPath} does not export a factory function\`);
6825
+ continue;
6826
+ }
6827
+
6828
+ const result = await pluginFactory(pi);
6829
+ const resultTools = Array.isArray(result) ? result : [result];
6830
+ allTools.push(...resultTools);
6831
+ } catch (e) {
6832
+ console.error(\`omp-loader: Failed to load \${toolPath}:\`, e);
6833
+ }
6834
+ }
6835
+
6836
+ return allTools;
6837
+ };
6838
+
6839
+ export default factory;
6840
+ `;
6841
+ writeFileSync(join4(ompDir, "index.ts"), source, "utf-8");
6842
+ }
6843
+
6690
6844
  // src/commands/doctor.ts
6691
6845
  init_paths();
6692
6846
 
6693
6847
  // src/symlinks.ts
6694
- import { existsSync as existsSync4, lstatSync, readFileSync, writeFileSync } from "fs";
6848
+ import { existsSync as existsSync5, lstatSync, readFileSync as readFileSync2, writeFileSync as writeFileSync2 } from "fs";
6695
6849
  import { copyFile, lstat, mkdir as mkdir3, readlink, rm as rm2, symlink } from "fs/promises";
6696
6850
  import { platform } from "os";
6697
- import { dirname as dirname3, isAbsolute as isAbsolute2, join as join4, relative as relative2, resolve as resolve4 } from "path";
6851
+ import { dirname as dirname3, isAbsolute as isAbsolute2, join as join5, relative as relative2, resolve as resolve4 } from "path";
6698
6852
  init_output();
6699
6853
  init_paths();
6700
6854
  init_source();
@@ -6754,9 +6908,9 @@ async function createPluginSymlinks(pluginName, pkgJson, global = true, verbose
6754
6908
  continue;
6755
6909
  }
6756
6910
  try {
6757
- const src = join4(sourceDir, entry.src);
6758
- const dest = join4(baseDir, entry.dest);
6759
- if (!existsSync4(src)) {
6911
+ const src = join5(sourceDir, entry.src);
6912
+ const dest = join5(baseDir, entry.dest);
6913
+ if (!existsSync5(src)) {
6760
6914
  result.errors.push(`Source not found: ${entry.src}`);
6761
6915
  if (verbose) {
6762
6916
  log(source_default.yellow(` \u26A0 Source not found: ${entry.src}`));
@@ -6765,7 +6919,7 @@ async function createPluginSymlinks(pluginName, pkgJson, global = true, verbose
6765
6919
  }
6766
6920
  await mkdir3(dirname3(dest), { recursive: true });
6767
6921
  if (entry.copy) {
6768
- if (!existsSync4(dest)) {
6922
+ if (!existsSync5(dest)) {
6769
6923
  await copyFile(src, dest);
6770
6924
  result.created.push(entry.dest);
6771
6925
  if (verbose) {
@@ -6823,7 +6977,7 @@ async function createPluginSymlinks(pluginName, pkgJson, global = true, verbose
6823
6977
  }
6824
6978
  } catch (err) {
6825
6979
  const error = err;
6826
- const msg = `Failed to install ${entry.dest}: ${formatPermissionError2(error, join4(baseDir, entry.dest))}`;
6980
+ const msg = `Failed to install ${entry.dest}: ${formatPermissionError2(error, join5(baseDir, entry.dest))}`;
6827
6981
  result.errors.push(msg);
6828
6982
  if (verbose) {
6829
6983
  log(source_default.red(` \u2717 ${msg}`));
@@ -6833,10 +6987,9 @@ async function createPluginSymlinks(pluginName, pkgJson, global = true, verbose
6833
6987
  }
6834
6988
  }
6835
6989
  }
6836
- if (enabledFeatures !== undefined) {
6837
- const runtimeEntry = installEntries.find((e) => e.copy && e.dest.endsWith("runtime.json"));
6838
- if (runtimeEntry) {
6839
- const runtimePath = join4(baseDir, runtimeEntry.dest);
6990
+ if (enabledFeatures !== undefined && pkgJson.omp?.runtime) {
6991
+ const runtimePath = getRuntimeConfigPath(pkgJson, global);
6992
+ if (runtimePath) {
6840
6993
  await writeRuntimeConfig(runtimePath, { features: enabledFeatures }, verbose);
6841
6994
  }
6842
6995
  }
@@ -6844,7 +6997,7 @@ async function createPluginSymlinks(pluginName, pkgJson, global = true, verbose
6844
6997
  }
6845
6998
  function readRuntimeConfig(runtimePath) {
6846
6999
  try {
6847
- const content = readFileSync(runtimePath, "utf-8");
7000
+ const content = readFileSync2(runtimePath, "utf-8");
6848
7001
  return JSON.parse(content);
6849
7002
  } catch (err) {
6850
7003
  const error = err;
@@ -6856,12 +7009,16 @@ function readRuntimeConfig(runtimePath) {
6856
7009
  }
6857
7010
  async function writeRuntimeConfig(runtimePath, config, verbose = false) {
6858
7011
  try {
7012
+ const storeDir = dirname3(runtimePath);
7013
+ if (!existsSync5(storeDir)) {
7014
+ await mkdir3(storeDir, { recursive: true });
7015
+ }
6859
7016
  const existing = readRuntimeConfig(runtimePath);
6860
7017
  const merged = {
6861
7018
  features: config.features ?? existing.features ?? [],
6862
7019
  options: { ...existing.options, ...config.options }
6863
7020
  };
6864
- writeFileSync(runtimePath, `${JSON.stringify(merged, null, 2)}
7021
+ writeFileSync2(runtimePath, `${JSON.stringify(merged, null, 2)}
6865
7022
  `);
6866
7023
  if (verbose) {
6867
7024
  log(source_default.dim(` Updated: ${runtimePath}`));
@@ -6874,12 +7031,16 @@ async function writeRuntimeConfig(runtimePath, config, verbose = false) {
6874
7031
  }
6875
7032
  }
6876
7033
  }
7034
+ function getStoreDir(global = true) {
7035
+ const pluginsDir = global ? PLUGINS_DIR : getProjectPiDir();
7036
+ return join5(pluginsDir, "store");
7037
+ }
6877
7038
  function getRuntimeConfigPath(pkgJson, global = true) {
6878
- const entries = getInstallEntries(pkgJson);
6879
- const runtimeEntry = entries.find((e) => e.copy && e.dest.endsWith("runtime.json"));
6880
- if (!runtimeEntry)
7039
+ if (!pkgJson.omp?.runtime)
6881
7040
  return null;
6882
- return join4(getBaseDir(global), runtimeEntry.dest);
7041
+ const storeDir = getStoreDir(global);
7042
+ const storeName = pkgJson.name.replace(/\//g, "__");
7043
+ return join5(storeDir, `${storeName}.json`);
6883
7044
  }
6884
7045
  async function removePluginSymlinks(_pluginName, pkgJson, global = true, verbose = true) {
6885
7046
  const result = {
@@ -6901,9 +7062,9 @@ async function removePluginSymlinks(_pluginName, pkgJson, global = true, verbose
6901
7062
  }
6902
7063
  continue;
6903
7064
  }
6904
- const dest = join4(baseDir, entry.dest);
7065
+ const dest = join5(baseDir, entry.dest);
6905
7066
  try {
6906
- if (existsSync4(dest)) {
7067
+ if (existsSync5(dest)) {
6907
7068
  const stats = lstatSync(dest);
6908
7069
  if (entry.copy) {
6909
7070
  await rm2(dest, { force: true });
@@ -6957,9 +7118,9 @@ async function checkPluginSymlinks(pluginName, pkgJson, global = true) {
6957
7118
  result.broken.push(entry.dest);
6958
7119
  continue;
6959
7120
  }
6960
- const src = join4(sourceDir, entry.src);
6961
- const dest = join4(baseDir, entry.dest);
6962
- if (!existsSync4(dest)) {
7121
+ const src = join5(sourceDir, entry.src);
7122
+ const dest = join5(baseDir, entry.dest);
7123
+ if (!existsSync5(dest)) {
6963
7124
  result.missing.push(entry.dest);
6964
7125
  continue;
6965
7126
  }
@@ -6975,7 +7136,7 @@ async function checkPluginSymlinks(pluginName, pkgJson, global = true) {
6975
7136
  }
6976
7137
  if (stats.isSymbolicLink()) {
6977
7138
  const target = await readlink(dest);
6978
- if (existsSync4(src) && resolve4(target) === resolve4(src)) {
7139
+ if (existsSync5(src) && resolve4(target) === resolve4(src)) {
6979
7140
  result.valid.push(entry.dest);
6980
7141
  } else {
6981
7142
  result.broken.push(entry.dest);
@@ -7076,7 +7237,7 @@ async function runDoctor(options = {}) {
7076
7237
  console.log(source_default.blue(`Running health checks...
7077
7238
  `));
7078
7239
  const pluginsDir = isGlobal ? PLUGINS_DIR : ".pi";
7079
- if (!existsSync5(pluginsDir)) {
7240
+ if (!existsSync6(pluginsDir)) {
7080
7241
  results.push({
7081
7242
  check: "Plugins directory",
7082
7243
  status: "warning",
@@ -7091,7 +7252,7 @@ async function runDoctor(options = {}) {
7091
7252
  });
7092
7253
  }
7093
7254
  const packageJsonPath = isGlobal ? GLOBAL_PACKAGE_JSON : getPluginsJsonPath();
7094
- if (!existsSync5(packageJsonPath)) {
7255
+ if (!existsSync6(packageJsonPath)) {
7095
7256
  results.push({
7096
7257
  check: "Package manifest",
7097
7258
  status: "warning",
@@ -7106,7 +7267,7 @@ async function runDoctor(options = {}) {
7106
7267
  });
7107
7268
  }
7108
7269
  const nodeModules = getNodeModulesDir(isGlobal);
7109
- if (!existsSync5(nodeModules)) {
7270
+ if (!existsSync6(nodeModules)) {
7110
7271
  results.push({
7111
7272
  check: "Node modules",
7112
7273
  status: "warning",
@@ -7237,7 +7398,7 @@ async function runDoctor(options = {}) {
7237
7398
  }
7238
7399
  const schemaErrors = [];
7239
7400
  for (const name of Object.keys(pluginsJson.plugins)) {
7240
- const pkgPath = join5(nodeModules, name, "package.json");
7401
+ const pkgPath = join6(nodeModules, name, "package.json");
7241
7402
  try {
7242
7403
  const raw = await readFile2(pkgPath, "utf-8");
7243
7404
  let parsed;
@@ -7483,6 +7644,7 @@ Conflicts cannot be auto-fixed. Please resolve manually:`));
7483
7644
  console.log(source_default.dim(` - ${conflict}`));
7484
7645
  }
7485
7646
  }
7647
+ await writeLoader(isGlobal);
7486
7648
  if (fixedAnything) {
7487
7649
  console.log(source_default.green(`
7488
7650
  \u2713 Fixes applied. Run 'omp doctor' again to verify.`));
@@ -7544,6 +7706,7 @@ async function enablePlugin(name, options = {}) {
7544
7706
  }
7545
7707
  throw saveErr;
7546
7708
  }
7709
+ await writeLoader(isGlobal);
7547
7710
  if (options.json) {
7548
7711
  console.log(JSON.stringify({ name, enabled: true }, null, 2));
7549
7712
  } else {
@@ -9493,9 +9656,9 @@ async function initProject(options = {}) {
9493
9656
 
9494
9657
  // src/commands/install.ts
9495
9658
  import { execFileSync as execFileSync2 } from "child_process";
9496
- import { existsSync as existsSync7 } from "fs";
9659
+ import { existsSync as existsSync8 } from "fs";
9497
9660
  import { cp, mkdir as mkdir5, readFile as readFile4, rm as rm3 } from "fs/promises";
9498
- import { basename, join as join7, resolve as resolve7 } from "path";
9661
+ import { basename, join as join8, resolve as resolve7 } from "path";
9499
9662
  import { createInterface as createInterface3 } from "readline";
9500
9663
  init_lockfile();
9501
9664
  init_npm();
@@ -9945,14 +10108,14 @@ Installing ${pkgSpec}...`));
9945
10108
  dryRunOps.push({
9946
10109
  type: "copy",
9947
10110
  description: `Copy ${entry.src} to ${entry.dest}`,
9948
- path: join7(baseDir, entry.dest),
10111
+ path: join8(baseDir, entry.dest),
9949
10112
  target: entry.src
9950
10113
  });
9951
10114
  } else {
9952
10115
  dryRunOps.push({
9953
10116
  type: "symlink",
9954
10117
  description: `Symlink ${entry.dest} \u2192 ${entry.src}`,
9955
- path: join7(baseDir, entry.dest),
10118
+ path: join8(baseDir, entry.dest),
9956
10119
  target: entry.src
9957
10120
  });
9958
10121
  }
@@ -9964,7 +10127,7 @@ Installing ${pkgSpec}...`));
9964
10127
  dryRunOps.push({
9965
10128
  type: "symlink",
9966
10129
  description: `Symlink from ${depName}: ${entry.dest} \u2192 ${entry.src}`,
9967
- path: join7(baseDir, entry.dest),
10130
+ path: join8(baseDir, entry.dest),
9968
10131
  target: `${depName}/${entry.src}`
9969
10132
  });
9970
10133
  }
@@ -10192,7 +10355,7 @@ Installing ${pkgSpec}...`));
10192
10355
  const baseDir = isGlobal ? PI_CONFIG_DIR : getProjectPiDir();
10193
10356
  for (const dest of createdSymlinks) {
10194
10357
  try {
10195
- await rm3(join7(baseDir, dest), { force: true, recursive: true });
10358
+ await rm3(join8(baseDir, dest), { force: true, recursive: true });
10196
10359
  } catch {}
10197
10360
  }
10198
10361
  }
@@ -10215,6 +10378,9 @@ Installing ${pkgSpec}...`));
10215
10378
  }
10216
10379
  const successful = results.filter((r) => r.success);
10217
10380
  const failed = results.filter((r) => !r.success);
10381
+ if (!options.dryRun && successful.length > 0) {
10382
+ await writeLoader(isGlobal);
10383
+ }
10218
10384
  log();
10219
10385
  if (options.dryRun) {
10220
10386
  log(source_default.cyan(`\u2713 Dry-run complete: ${successful.length} plugin(s) would be installed`));
@@ -10236,10 +10402,10 @@ Installing ${pkgSpec}...`));
10236
10402
  }
10237
10403
  async function installLocalPlugin(localPath, isGlobal, options) {
10238
10404
  if (localPath.startsWith("~")) {
10239
- localPath = join7(process.env.HOME || "", localPath.slice(1));
10405
+ localPath = join8(process.env.HOME || "", localPath.slice(1));
10240
10406
  }
10241
10407
  localPath = resolve7(localPath);
10242
- if (!existsSync7(localPath)) {
10408
+ if (!existsSync8(localPath)) {
10243
10409
  log(source_default.red(`Error: Path does not exist: ${localPath}`));
10244
10410
  process.exitCode = 1;
10245
10411
  return {
@@ -10252,13 +10418,13 @@ async function installLocalPlugin(localPath, isGlobal, options) {
10252
10418
  const _prefix = isGlobal ? PLUGINS_DIR : getProjectPiDir();
10253
10419
  const nodeModules = getNodeModulesDir(isGlobal);
10254
10420
  try {
10255
- const localPkgJsonPath = join7(localPath, "package.json");
10421
+ const localPkgJsonPath = join8(localPath, "package.json");
10256
10422
  let pkgJson;
10257
- if (existsSync7(localPkgJsonPath)) {
10423
+ if (existsSync8(localPkgJsonPath)) {
10258
10424
  pkgJson = JSON.parse(await readFile4(localPkgJsonPath, "utf-8"));
10259
10425
  } else {
10260
- const ompJsonPath = join7(localPath, "omp.json");
10261
- if (existsSync7(ompJsonPath)) {
10426
+ const ompJsonPath = join8(localPath, "omp.json");
10427
+ if (existsSync8(ompJsonPath)) {
10262
10428
  const ompJson = JSON.parse(await readFile4(ompJsonPath, "utf-8"));
10263
10429
  pkgJson = {
10264
10430
  name: ompJson.name || basename(localPath),
@@ -10278,7 +10444,7 @@ async function installLocalPlugin(localPath, isGlobal, options) {
10278
10444
  }
10279
10445
  }
10280
10446
  const pluginName = pkgJson.name;
10281
- const pluginDir = join7(nodeModules, pluginName);
10447
+ const pluginDir = join8(nodeModules, pluginName);
10282
10448
  const intraDupes = detectIntraPluginDuplicates(pkgJson);
10283
10449
  if (intraDupes.length > 0) {
10284
10450
  log(source_default.red(`
@@ -10309,14 +10475,14 @@ Error: Plugin has duplicate destinations:`));
10309
10475
  dryRunOps.push({
10310
10476
  type: "copy",
10311
10477
  description: `Copy ${entry.src} to ${entry.dest}`,
10312
- path: join7(baseDir, entry.dest),
10478
+ path: join8(baseDir, entry.dest),
10313
10479
  target: entry.src
10314
10480
  });
10315
10481
  } else {
10316
10482
  dryRunOps.push({
10317
10483
  type: "symlink",
10318
10484
  description: `Symlink ${entry.dest} \u2192 ${entry.src}`,
10319
- path: join7(baseDir, entry.dest),
10485
+ path: join8(baseDir, entry.dest),
10320
10486
  target: entry.src
10321
10487
  });
10322
10488
  }
@@ -10337,7 +10503,7 @@ Error: Plugin has duplicate destinations:`));
10337
10503
  log(source_default.blue(`
10338
10504
  Installing ${pluginName} from ${localPath}...`));
10339
10505
  await mkdir5(nodeModules, { recursive: true });
10340
- if (existsSync7(pluginDir)) {
10506
+ if (existsSync8(pluginDir)) {
10341
10507
  await rm3(pluginDir, { recursive: true, force: true });
10342
10508
  }
10343
10509
  await cp(localPath, pluginDir, { recursive: true });
@@ -10371,7 +10537,7 @@ Installing ${pluginName} from ${localPath}...`));
10371
10537
  const baseDir = isGlobal ? PI_CONFIG_DIR : getProjectPiDir();
10372
10538
  for (const entry of pkgJson.omp.install) {
10373
10539
  try {
10374
- await rm3(join7(baseDir, entry.dest), { force: true, recursive: true });
10540
+ await rm3(join8(baseDir, entry.dest), { force: true, recursive: true });
10375
10541
  } catch {}
10376
10542
  }
10377
10543
  }
@@ -10393,9 +10559,9 @@ Installing ${pluginName} from ${localPath}...`));
10393
10559
  }
10394
10560
 
10395
10561
  // src/commands/link.ts
10396
- import { existsSync as existsSync8, lstatSync as lstatSync2 } from "fs";
10562
+ import { existsSync as existsSync9, lstatSync as lstatSync2 } from "fs";
10397
10563
  import { mkdir as mkdir6, readFile as readFile5, rm as rm4, symlink as symlink2, writeFile as writeFile4 } from "fs/promises";
10398
- import { basename as basename2, dirname as dirname5, join as join8, resolve as resolve8 } from "path";
10564
+ import { basename as basename2, dirname as dirname5, join as join9, resolve as resolve8 } from "path";
10399
10565
  import { createInterface as createInterface4 } from "readline";
10400
10566
  init_paths();
10401
10567
  init_source();
@@ -10416,18 +10582,18 @@ async function linkPlugin(localPath, options = {}) {
10416
10582
  const isGlobal = resolveScope(options);
10417
10583
  const nodeModules = getNodeModulesDir(isGlobal);
10418
10584
  if (localPath.startsWith("~")) {
10419
- localPath = join8(process.env.HOME || "", localPath.slice(1));
10585
+ localPath = join9(process.env.HOME || "", localPath.slice(1));
10420
10586
  }
10421
10587
  localPath = resolve8(localPath);
10422
- if (!existsSync8(localPath)) {
10588
+ if (!existsSync9(localPath)) {
10423
10589
  console.log(source_default.red(`Error: Path does not exist: ${localPath}`));
10424
10590
  process.exitCode = 1;
10425
10591
  return;
10426
10592
  }
10427
10593
  let pkgJson;
10428
- const localPkgJsonPath = join8(localPath, "package.json");
10429
- const localOmpJsonPath = join8(localPath, "omp.json");
10430
- if (existsSync8(localPkgJsonPath)) {
10594
+ const localPkgJsonPath = join9(localPath, "package.json");
10595
+ const localOmpJsonPath = join9(localPath, "omp.json");
10596
+ if (existsSync9(localPkgJsonPath)) {
10431
10597
  try {
10432
10598
  pkgJson = JSON.parse(await readFile5(localPkgJsonPath, "utf-8"));
10433
10599
  } catch (err) {
@@ -10435,7 +10601,7 @@ async function linkPlugin(localPath, options = {}) {
10435
10601
  process.exitCode = 1;
10436
10602
  return;
10437
10603
  }
10438
- } else if (existsSync8(localOmpJsonPath)) {
10604
+ } else if (existsSync9(localOmpJsonPath)) {
10439
10605
  let ompJson;
10440
10606
  try {
10441
10607
  ompJson = JSON.parse(await readFile5(localOmpJsonPath, "utf-8"));
@@ -10480,7 +10646,7 @@ async function linkPlugin(localPath, options = {}) {
10480
10646
  process.exitCode = 1;
10481
10647
  return;
10482
10648
  }
10483
- const pluginDir = join8(nodeModules, pluginName);
10649
+ const pluginDir = join9(nodeModules, pluginName);
10484
10650
  const pluginsJson = await loadPluginsJson(isGlobal);
10485
10651
  if (pluginsJson.plugins[pluginName]) {
10486
10652
  const existingSpec = pluginsJson.plugins[pluginName];
@@ -10502,7 +10668,7 @@ async function linkPlugin(localPath, options = {}) {
10502
10668
  try {
10503
10669
  console.log(source_default.blue(`Linking ${localPath}...`));
10504
10670
  await mkdir6(dirname5(pluginDir), { recursive: true });
10505
- if (existsSync8(pluginDir)) {
10671
+ if (existsSync9(pluginDir)) {
10506
10672
  const stat = lstatSync2(pluginDir);
10507
10673
  const isSymlink = stat.isSymbolicLink();
10508
10674
  if (!isSymlink) {
@@ -10546,6 +10712,7 @@ Delete this and proceed with linking? [y/N] `), (ans) => {
10546
10712
  if (pkgJson.omp?.install?.length) {
10547
10713
  await createPluginSymlinks(pluginName, pkgJson, isGlobal);
10548
10714
  }
10715
+ await writeLoader(isGlobal);
10549
10716
  console.log(source_default.green(`
10550
10717
  \u2713 Linked "${pluginName}"${pkgJson.version ? ` v${pkgJson.version}` : ""} (development mode)`));
10551
10718
  console.log(source_default.dim(" Changes to the source will be reflected immediately"));
@@ -10854,9 +11021,9 @@ Search failed: ${error2.message}`));
10854
11021
  }
10855
11022
 
10856
11023
  // src/commands/uninstall.ts
10857
- import { existsSync as existsSync9 } from "fs";
11024
+ import { existsSync as existsSync10 } from "fs";
10858
11025
  import { rm as rm5 } from "fs/promises";
10859
- import { join as join9 } from "path";
11026
+ import { join as join10 } from "path";
10860
11027
  import { createInterface as createInterface5 } from "readline";
10861
11028
  init_npm();
10862
11029
  init_paths();
@@ -10874,8 +11041,8 @@ async function uninstallPlugin(name, options = {}) {
10874
11041
  }
10875
11042
  const pkgJsonPreview = await readPluginPackageJson(name, isGlobal);
10876
11043
  const itemsToDelete = [];
10877
- const pluginDir = join9(nodeModules, name);
10878
- if (existsSync9(pluginDir)) {
11044
+ const pluginDir = join10(nodeModules, name);
11045
+ if (existsSync10(pluginDir)) {
10879
11046
  itemsToDelete.push(pluginDir);
10880
11047
  }
10881
11048
  if (pkgJsonPreview?.omp?.install) {
@@ -10883,8 +11050,8 @@ async function uninstallPlugin(name, options = {}) {
10883
11050
  for (const entry of pkgJsonPreview.omp.install) {
10884
11051
  const dest = typeof entry === "string" ? entry : entry.dest;
10885
11052
  if (dest) {
10886
- const destPath = join9(baseDir, dest);
10887
- if (existsSync9(destPath)) {
11053
+ const destPath = join10(baseDir, dest);
11054
+ if (existsSync10(destPath)) {
10888
11055
  itemsToDelete.push(destPath);
10889
11056
  }
10890
11057
  }
@@ -11016,8 +11183,8 @@ The following files are not symlinks and were not removed:`));
11016
11183
  try {
11017
11184
  await npmUninstall([name], prefix);
11018
11185
  } catch (_err) {
11019
- const pluginDir2 = join9(nodeModules, name);
11020
- if (existsSync9(pluginDir2)) {
11186
+ const pluginDir2 = join10(nodeModules, name);
11187
+ if (existsSync10(pluginDir2)) {
11021
11188
  await rm5(pluginDir2, { recursive: true, force: true });
11022
11189
  }
11023
11190
  }
@@ -11041,7 +11208,7 @@ The following files are not symlinks and were not removed:`));
11041
11208
 
11042
11209
  // src/commands/update.ts
11043
11210
  import { rm as rm6 } from "fs/promises";
11044
- import { join as join10 } from "path";
11211
+ import { join as join11 } from "path";
11045
11212
  init_npm();
11046
11213
  init_output();
11047
11214
  init_paths();
@@ -11103,7 +11270,7 @@ async function updatePlugin(name, options = {}) {
11103
11270
  dryRunOps.push({
11104
11271
  type: "symlink-remove",
11105
11272
  description: `Remove symlink: ${entry.dest}`,
11106
- path: join10(baseDir, entry.dest)
11273
+ path: join11(baseDir, entry.dest)
11107
11274
  });
11108
11275
  }
11109
11276
  }
@@ -11120,7 +11287,7 @@ async function updatePlugin(name, options = {}) {
11120
11287
  dryRunOps.push({
11121
11288
  type: "symlink-create",
11122
11289
  description: `Create symlink: ${entry.dest} \u2192 ${entry.src}`,
11123
- path: join10(baseDir, entry.dest)
11290
+ path: join11(baseDir, entry.dest)
11124
11291
  });
11125
11292
  }
11126
11293
  }
@@ -11188,7 +11355,7 @@ async function updatePlugin(name, options = {}) {
11188
11355
  const newDests = new Set(newEntries.map((e) => e.dest));
11189
11356
  for (const oldEntry of oldEntries) {
11190
11357
  if (!newDests.has(oldEntry.dest)) {
11191
- const dest = join10(baseDir, oldEntry.dest);
11358
+ const dest = join11(baseDir, oldEntry.dest);
11192
11359
  try {
11193
11360
  await rm6(dest, { force: true });
11194
11361
  log(source_default.dim(` Removed orphaned: ${oldEntry.dest}`));
@@ -11211,6 +11378,9 @@ async function updatePlugin(name, options = {}) {
11211
11378
  }
11212
11379
  }
11213
11380
  const updated = results.filter((r) => r.from !== r.to);
11381
+ if (results.length > 0) {
11382
+ await writeLoader(isGlobal);
11383
+ }
11214
11384
  log();
11215
11385
  log(source_default.dim(`Updated: ${updated.length}, Already latest: ${results.length - updated.length}`));
11216
11386
  if (options.json) {
@@ -11248,9 +11418,9 @@ async function updatePlugin(name, options = {}) {
11248
11418
  }
11249
11419
 
11250
11420
  // src/commands/why.ts
11251
- import { existsSync as existsSync10, lstatSync as lstatSync3 } from "fs";
11421
+ import { existsSync as existsSync11, lstatSync as lstatSync3 } from "fs";
11252
11422
  import { readlink as readlink2 } from "fs/promises";
11253
- import { isAbsolute as isAbsolute4, join as join11, relative as relative4, resolve as resolve9 } from "path";
11423
+ import { isAbsolute as isAbsolute4, join as join12, relative as relative4, resolve as resolve9 } from "path";
11254
11424
  init_paths();
11255
11425
  init_source();
11256
11426
  function isPathWithinBase3(basePath, targetPath) {
@@ -11289,14 +11459,14 @@ async function whyFile(filePath, options = {}) {
11289
11459
  if (!relativePath.startsWith("agent/")) {
11290
11460
  const withAgent = `agent/${relativePath}`;
11291
11461
  if (isPathWithinBase3(baseDir, withAgent)) {
11292
- const fullWithAgent = join11(baseDir, withAgent);
11293
- if (existsSync10(fullWithAgent)) {
11462
+ const fullWithAgent = join12(baseDir, withAgent);
11463
+ if (existsSync11(fullWithAgent)) {
11294
11464
  relativePath = withAgent;
11295
11465
  }
11296
11466
  }
11297
11467
  }
11298
- const fullPath = join11(baseDir, relativePath);
11299
- if (!existsSync10(fullPath)) {
11468
+ const fullPath = join12(baseDir, relativePath);
11469
+ if (!existsSync11(fullPath)) {
11300
11470
  console.log(source_default.yellow(`File not found: ${fullPath}`));
11301
11471
  process.exitCode = 1;
11302
11472
  return;
@@ -11336,7 +11506,7 @@ async function whyFile(filePath, options = {}) {
11336
11506
  console.log(source_default.dim(" It may have been manually created or the symlink was replaced."));
11337
11507
  console.log(source_default.dim(` Expected to be installed by: ${result.plugin}`));
11338
11508
  } else {
11339
- const expectedSrc = join11(getPluginSourceDir(result.plugin, isGlobal), result.entry.src);
11509
+ const expectedSrc = join12(getPluginSourceDir(result.plugin, isGlobal), result.entry.src);
11340
11510
  const resolvedTarget = resolve9(fullPath, "..", target);
11341
11511
  if (resolvedTarget !== expectedSrc) {
11342
11512
  console.log(source_default.yellow("\u26A0 Symlink target does not match expected source"));
@@ -11397,7 +11567,7 @@ var {
11397
11567
  } = import__.default;
11398
11568
 
11399
11569
  // src/cli.ts
11400
- program.name("omp").description("Oh My Pi - Plugin manager for pi configuration").version("0.8.2");
11570
+ program.name("omp").description("Oh My Pi - Plugin manager for pi configuration").version("0.9.0");
11401
11571
  program.command("install [packages...]").alias("i").description("Install plugin(s). No args = install from plugins.json").addHelpText("after", `
11402
11572
  Examples:
11403
11573
  $ omp install @oh-my-pi/subagents # Install from npm (all features)
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAyBA,MAAM,WAAW,aAAa;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;CACd;AAkGD;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmf1E"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,aAAa;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;CACd;AAkGD;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsf1E"}
@@ -1 +1 @@
1
- {"version":3,"file":"enable.d.ts","sourceRoot":"","sources":["../../src/commands/enable.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,oBAAoB;IACpC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0ElG;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkEnG"}
1
+ {"version":3,"file":"enable.d.ts","sourceRoot":"","sources":["../../src/commands/enable.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,oBAAoB;IACpC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6ElG;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkEnG"}
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAOA,OAAO,EAKN,KAAK,YAAY,EACjB,KAAK,iBAAiB,EAGtB,MAAM,eAAe,CAAC;AAQvB;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC1B,2BAA2B;IAC3B,WAAW,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAwC5E;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC9B,OAAO,EAAE,iBAAiB,EAC1B,SAAS,EAAE,iBAAiB,EAC5B,cAAc,EAAE,YAAY,GAAG,SAAS,EACxC,WAAW,EAAE,OAAO,GAClB;IAAE,eAAe,EAAE,MAAM,EAAE,CAAC;IAAC,aAAa,EAAE,YAAY,GAAG,SAAS,CAAA;CAAE,CAwExE;AAuFD;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,WAAW,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE3E,MAAM,WAAW,cAAc;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;CACxC;AA6ID;;;GAGG;AACH,wBAAsB,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4qBpG"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAQA,OAAO,EAKN,KAAK,YAAY,EACjB,KAAK,iBAAiB,EAGtB,MAAM,eAAe,CAAC;AAQvB;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC1B,2BAA2B;IAC3B,WAAW,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAwC5E;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC9B,OAAO,EAAE,iBAAiB,EAC1B,SAAS,EAAE,iBAAiB,EAC5B,cAAc,EAAE,YAAY,GAAG,SAAS,EACxC,WAAW,EAAE,OAAO,GAClB;IAAE,eAAe,EAAE,MAAM,EAAE,CAAC;IAAC,aAAa,EAAE,YAAY,GAAG,SAAS,CAAA;CAAE,CAwExE;AAuFD;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,WAAW,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE3E,MAAM,WAAW,cAAc;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;CACxC;AA6ID;;;GAGG;AACH,wBAAsB,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAirBpG"}
@@ -1 +1 @@
1
- {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../src/commands/link.ts"],"names":[],"mappings":"AAwBA,MAAM,WAAW,WAAW;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;CACd;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmL5F"}
1
+ {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../src/commands/link.ts"],"names":[],"mappings":"AAyBA,MAAM,WAAW,WAAW;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;CACd;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsL5F"}
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,aAAa;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB;AAWD;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2Q5F"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,aAAa;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB;AAWD;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiR5F"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * OMP Tool Loader Generator
3
+ *
4
+ * Generates ~/.pi/agent/tools/omp/index.ts with hardcoded tool paths.
5
+ * No symlinks needed - tools are imported directly from node_modules.
6
+ */
7
+ /**
8
+ * Write the OMP loader with hardcoded tool paths and runtime redirects
9
+ */
10
+ export declare function writeLoader(global?: boolean): Promise<void>;
11
+ /**
12
+ * Check if the OMP loader exists
13
+ */
14
+ export declare function loaderExists(global?: boolean): boolean;
15
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA4CH;;GAEG;AACH,wBAAsB,WAAW,CAAC,MAAM,UAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA2H9D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,UAAO,GAAG,OAAO,CAGnD"}
@@ -40,6 +40,10 @@ export interface OmpFeature {
40
40
  export interface OmpField {
41
41
  /** Top-level install entries (always installed, not feature-gated) */
42
42
  install?: OmpInstallEntry[];
43
+ /** Path to tools factory (relative to package root, e.g. "tools" or "tools/index.ts") */
44
+ tools?: string;
45
+ /** Path to runtime config JSON (relative to package root, e.g. "tools/runtime.json") */
46
+ runtime?: string;
43
47
  /** Top-level runtime variables (always available) */
44
48
  variables?: Record<string, OmpVariable>;
45
49
  /** Named features with their own install entries and variables */
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
@@ -37,13 +37,19 @@ export declare function createPluginSymlinks(pluginName: string, pkgJson: Plugin
37
37
  */
38
38
  export declare function readRuntimeConfig(runtimePath: string): PluginRuntimeConfig;
39
39
  /**
40
- * Write runtime.json config to a plugin's installed location
40
+ * Write runtime config to the store location
41
41
  */
42
42
  export declare function writeRuntimeConfig(runtimePath: string, config: PluginRuntimeConfig, verbose?: boolean): Promise<void>;
43
43
  /**
44
- * Get the path to a plugin's runtime.json in the installed location
44
+ * Get the path to a plugin's runtime config in the store
45
+ * Uses the omp.runtime field from package.json
46
+ * Store path: ~/.pi/plugins/store/@scope__name.json
45
47
  */
46
48
  export declare function getRuntimeConfigPath(pkgJson: PluginPackageJson, global?: boolean): string | null;
49
+ /**
50
+ * Get the default runtime config path in node_modules (for copying defaults)
51
+ */
52
+ export declare function getDefaultRuntimeConfigPath(pkgJson: PluginPackageJson, global?: boolean): string | null;
47
53
  /**
48
54
  * Remove symlinks and copied files for a plugin's omp.install entries
49
55
  */
@@ -1 +1 @@
1
- {"version":3,"file":"symlinks.d.ts","sourceRoot":"","sources":["../src/symlinks.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAMzG;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,eAAe,EAAE,CAE/E;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE,CAEnH;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAEvE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,MAAM,EAAE,CAIjF;AAuCD,MAAM,WAAW,aAAa;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACpC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACzC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,iBAAiB,EAC1B,MAAM,UAAO,EACb,OAAO,UAAO,EACd,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EAC9B,eAAe,CAAC,EAAE,MAAM,EAAE,GACxB,OAAO,CAAC,aAAa,CAAC,CA6IxB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,mBAAmB,CAa1E;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACvC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,mBAAmB,EAC3B,OAAO,UAAQ,GACb,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAO,GAAG,MAAM,GAAG,IAAI,CAK7F;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACzC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,iBAAiB,EAC1B,MAAM,UAAO,EACb,OAAO,UAAO,GACZ,OAAO,CAAC,oBAAoB,CAAC,CAsE/B;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACxC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,iBAAiB,EAC1B,MAAM,UAAO,GACX,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA4DnE;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACxC,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAC9C,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAWxB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACvC,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAChD,MAAM,UAAO,GACX,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAE,GAAG,IAAI,CAAC,CAsB5D"}
1
+ {"version":3,"file":"symlinks.d.ts","sourceRoot":"","sources":["../src/symlinks.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAMzG;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,eAAe,EAAE,CAE/E;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE,CAEnH;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAEvE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,MAAM,EAAE,CAIjF;AAuCD,MAAM,WAAW,aAAa;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACpC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACzC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,iBAAiB,EAC1B,MAAM,UAAO,EACb,OAAO,UAAO,EACd,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EAC9B,eAAe,CAAC,EAAE,MAAM,EAAE,GACxB,OAAO,CAAC,aAAa,CAAC,CA4IxB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,mBAAmB,CAa1E;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACvC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,mBAAmB,EAC3B,OAAO,UAAQ,GACb,OAAO,CAAC,IAAI,CAAC,CAyBf;AAUD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAO,GAAG,MAAM,GAAG,IAAI,CAM7F;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAO,GAAG,MAAM,GAAG,IAAI,CAMpG;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACzC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,iBAAiB,EAC1B,MAAM,UAAO,EACb,OAAO,UAAO,GACZ,OAAO,CAAC,oBAAoB,CAAC,CAsE/B;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACxC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,iBAAiB,EAC1B,MAAM,UAAO,GACX,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA4DnE;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACxC,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAC9C,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAWxB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACvC,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAChD,MAAM,UAAO,GACX,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAE,GAAG,IAAI,CAAC,CAsB5D"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oh-my-pi/cli",
3
- "version": "0.8.2",
3
+ "version": "0.9.0",
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",