@oh-my-pi/cli 0.1.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.
Files changed (89) hide show
  1. package/.github/workflows/ci.yml +32 -0
  2. package/.github/workflows/publish.yml +42 -0
  3. package/CHECK.md +352 -0
  4. package/README.md +224 -0
  5. package/biome.json +29 -0
  6. package/bun.lock +50 -0
  7. package/dist/cli.d.ts +3 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +3941 -0
  10. package/dist/commands/create.d.ts +9 -0
  11. package/dist/commands/create.d.ts.map +1 -0
  12. package/dist/commands/doctor.d.ts +10 -0
  13. package/dist/commands/doctor.d.ts.map +1 -0
  14. package/dist/commands/enable.d.ts +13 -0
  15. package/dist/commands/enable.d.ts.map +1 -0
  16. package/dist/commands/info.d.ts +9 -0
  17. package/dist/commands/info.d.ts.map +1 -0
  18. package/dist/commands/init.d.ts +8 -0
  19. package/dist/commands/init.d.ts.map +1 -0
  20. package/dist/commands/install.d.ts +13 -0
  21. package/dist/commands/install.d.ts.map +1 -0
  22. package/dist/commands/link.d.ts +10 -0
  23. package/dist/commands/link.d.ts.map +1 -0
  24. package/dist/commands/list.d.ts +9 -0
  25. package/dist/commands/list.d.ts.map +1 -0
  26. package/dist/commands/outdated.d.ts +9 -0
  27. package/dist/commands/outdated.d.ts.map +1 -0
  28. package/dist/commands/search.d.ts +9 -0
  29. package/dist/commands/search.d.ts.map +1 -0
  30. package/dist/commands/uninstall.d.ts +9 -0
  31. package/dist/commands/uninstall.d.ts.map +1 -0
  32. package/dist/commands/update.d.ts +9 -0
  33. package/dist/commands/update.d.ts.map +1 -0
  34. package/dist/commands/why.d.ts +9 -0
  35. package/dist/commands/why.d.ts.map +1 -0
  36. package/dist/conflicts.d.ts +21 -0
  37. package/dist/conflicts.d.ts.map +1 -0
  38. package/dist/index.d.ts +20 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/manifest.d.ts +81 -0
  41. package/dist/manifest.d.ts.map +1 -0
  42. package/dist/migrate.d.ts +9 -0
  43. package/dist/migrate.d.ts.map +1 -0
  44. package/dist/npm.d.ts +77 -0
  45. package/dist/npm.d.ts.map +1 -0
  46. package/dist/paths.d.ts +27 -0
  47. package/dist/paths.d.ts.map +1 -0
  48. package/dist/symlinks.d.ts +33 -0
  49. package/dist/symlinks.d.ts.map +1 -0
  50. package/package.json +36 -0
  51. package/plugins/metal-theme/README.md +13 -0
  52. package/plugins/metal-theme/omp.json +8 -0
  53. package/plugins/metal-theme/package.json +14 -0
  54. package/plugins/metal-theme/themes/metal.json +79 -0
  55. package/plugins/subagents/README.md +25 -0
  56. package/plugins/subagents/agents/explore.md +71 -0
  57. package/plugins/subagents/agents/planner.md +51 -0
  58. package/plugins/subagents/agents/reviewer.md +53 -0
  59. package/plugins/subagents/agents/task.md +46 -0
  60. package/plugins/subagents/commands/architect-plan.md +9 -0
  61. package/plugins/subagents/commands/implement-with-critic.md +10 -0
  62. package/plugins/subagents/commands/implement.md +10 -0
  63. package/plugins/subagents/omp.json +15 -0
  64. package/plugins/subagents/package.json +21 -0
  65. package/plugins/subagents/tools/task/index.ts +1019 -0
  66. package/scripts/bump-version.sh +52 -0
  67. package/scripts/publish.sh +35 -0
  68. package/src/cli.ts +167 -0
  69. package/src/commands/create.ts +153 -0
  70. package/src/commands/doctor.ts +217 -0
  71. package/src/commands/enable.ts +105 -0
  72. package/src/commands/info.ts +84 -0
  73. package/src/commands/init.ts +42 -0
  74. package/src/commands/install.ts +327 -0
  75. package/src/commands/link.ts +108 -0
  76. package/src/commands/list.ts +71 -0
  77. package/src/commands/outdated.ts +76 -0
  78. package/src/commands/search.ts +60 -0
  79. package/src/commands/uninstall.ts +73 -0
  80. package/src/commands/update.ts +112 -0
  81. package/src/commands/why.ts +105 -0
  82. package/src/conflicts.ts +84 -0
  83. package/src/index.ts +53 -0
  84. package/src/manifest.ts +212 -0
  85. package/src/migrate.ts +181 -0
  86. package/src/npm.ts +150 -0
  87. package/src/paths.ts +72 -0
  88. package/src/symlinks.ts +199 -0
  89. package/tsconfig.json +24 -0
@@ -0,0 +1,9 @@
1
+ export interface CreateOptions {
2
+ description?: string;
3
+ author?: string;
4
+ }
5
+ /**
6
+ * Scaffold a new plugin from template
7
+ */
8
+ export declare function createPlugin(name: string, options?: CreateOptions): Promise<void>;
9
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2I3F"}
@@ -0,0 +1,10 @@
1
+ export interface DoctorOptions {
2
+ global?: boolean;
3
+ fix?: boolean;
4
+ json?: boolean;
5
+ }
6
+ /**
7
+ * Run health checks on the plugin system
8
+ */
9
+ export declare function runDoctor(options?: DoctorOptions): Promise<void>;
10
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,aAAa;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AASD;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiM1E"}
@@ -0,0 +1,13 @@
1
+ export interface EnableDisableOptions {
2
+ global?: boolean;
3
+ json?: boolean;
4
+ }
5
+ /**
6
+ * Enable a disabled plugin (re-create symlinks)
7
+ */
8
+ export declare function enablePlugin(name: string, options?: EnableDisableOptions): Promise<void>;
9
+ /**
10
+ * Disable a plugin (remove symlinks but keep installed)
11
+ */
12
+ export declare function disablePlugin(name: string, options?: EnableDisableOptions): Promise<void>;
13
+ //# sourceMappingURL=enable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enable.d.ts","sourceRoot":"","sources":["../../src/commands/enable.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,oBAAoB;IACpC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyClG;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8CnG"}
@@ -0,0 +1,9 @@
1
+ export interface InfoOptions {
2
+ json?: boolean;
3
+ versions?: boolean;
4
+ }
5
+ /**
6
+ * Show detailed info about a package before install
7
+ */
8
+ export declare function showInfo(packageName: string, options?: InfoOptions): Promise<void>;
9
+ //# sourceMappingURL=info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwE5F"}
@@ -0,0 +1,8 @@
1
+ export interface InitOptions {
2
+ force?: boolean;
3
+ }
4
+ /**
5
+ * Initialize .pi/plugins.json in current project
6
+ */
7
+ export declare function initProject(options?: InitOptions): Promise<void>;
8
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6B1E"}
@@ -0,0 +1,13 @@
1
+ export interface InstallOptions {
2
+ global?: boolean;
3
+ save?: boolean;
4
+ saveDev?: boolean;
5
+ force?: boolean;
6
+ json?: boolean;
7
+ }
8
+ /**
9
+ * Install plugins from package specifiers
10
+ * omp install [pkg...]
11
+ */
12
+ export declare function installPlugin(packages?: string[], options?: InstallOptions): Promise<void>;
13
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,cAAc;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAiED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiJpG"}
@@ -0,0 +1,10 @@
1
+ export interface LinkOptions {
2
+ name?: string;
3
+ global?: boolean;
4
+ }
5
+ /**
6
+ * Link a local plugin directory for development
7
+ * Creates a symlink in node_modules pointing to the local directory
8
+ */
9
+ export declare function linkPlugin(localPath: string, options?: LinkOptions): Promise<void>;
10
+ //# sourceMappingURL=link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../src/commands/link.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,WAAW;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0F5F"}
@@ -0,0 +1,9 @@
1
+ export interface ListOptions {
2
+ global?: boolean;
3
+ json?: boolean;
4
+ }
5
+ /**
6
+ * List all installed plugins
7
+ */
8
+ export declare function listPlugins(options?: ListOptions): Promise<void>;
9
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2D1E"}
@@ -0,0 +1,9 @@
1
+ export interface OutdatedOptions {
2
+ global?: boolean;
3
+ json?: boolean;
4
+ }
5
+ /**
6
+ * List plugins with newer versions available
7
+ */
8
+ export declare function showOutdated(options?: OutdatedOptions): Promise<void>;
9
+ //# sourceMappingURL=outdated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outdated.d.ts","sourceRoot":"","sources":["../../src/commands/outdated.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,eAAe;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8D/E"}
@@ -0,0 +1,9 @@
1
+ export interface SearchOptions {
2
+ json?: boolean;
3
+ limit?: number;
4
+ }
5
+ /**
6
+ * Search npm for plugins with omp-plugin keyword
7
+ */
8
+ export declare function searchPlugins(query: string, options?: SearchOptions): Promise<void>;
9
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa;IAC7B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgD7F"}
@@ -0,0 +1,9 @@
1
+ export interface UninstallOptions {
2
+ global?: boolean;
3
+ json?: boolean;
4
+ }
5
+ /**
6
+ * Uninstall a plugin
7
+ */
8
+ export declare function uninstallPlugin(name: string, options?: UninstallOptions): Promise<void>;
9
+ //# sourceMappingURL=uninstall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,gBAAgB;IAChC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuDjG"}
@@ -0,0 +1,9 @@
1
+ export interface UpdateOptions {
2
+ global?: boolean;
3
+ json?: boolean;
4
+ }
5
+ /**
6
+ * Update plugin(s) to latest within semver range
7
+ */
8
+ export declare function updatePlugin(name?: string, options?: UpdateOptions): Promise<void>;
9
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,aAAa;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiG5F"}
@@ -0,0 +1,9 @@
1
+ export interface WhyOptions {
2
+ global?: boolean;
3
+ json?: boolean;
4
+ }
5
+ /**
6
+ * Show which plugin installed a file
7
+ */
8
+ export declare function whyFile(filePath: string, options?: WhyOptions): Promise<void>;
9
+ //# sourceMappingURL=why.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"why.d.ts","sourceRoot":"","sources":["../../src/commands/why.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,UAAU;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAwFvF"}
@@ -0,0 +1,21 @@
1
+ import type { PluginPackageJson } from "./manifest.js";
2
+ export interface Conflict {
3
+ dest: string;
4
+ plugins: Array<{
5
+ name: string;
6
+ src: string;
7
+ }>;
8
+ }
9
+ /**
10
+ * Detect conflicts between a new plugin and existing plugins
11
+ */
12
+ export declare function detectConflicts(newPluginName: string, newPkgJson: PluginPackageJson, existingPlugins: Map<string, PluginPackageJson>): Conflict[];
13
+ /**
14
+ * Detect all conflicts among a set of plugins
15
+ */
16
+ export declare function detectAllConflicts(plugins: Map<string, PluginPackageJson>): Conflict[];
17
+ /**
18
+ * Format conflicts for display
19
+ */
20
+ export declare function formatConflicts(conflicts: Conflict[]): string[];
21
+ //# sourceMappingURL=conflicts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conflicts.d.ts","sourceRoot":"","sources":["../src/conflicts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEvD,MAAM,WAAW,QAAQ;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC9B,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,iBAAiB,EAC7B,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAC7C,QAAQ,EAAE,CAgCZ;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAAG,QAAQ,EAAE,CAsBtF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,EAAE,CAK/D"}
@@ -0,0 +1,20 @@
1
+ export { createPlugin } from "./commands/create.js";
2
+ export { runDoctor } from "./commands/doctor.js";
3
+ export { disablePlugin, enablePlugin } from "./commands/enable.js";
4
+ export { showInfo } from "./commands/info.js";
5
+ export { initProject } from "./commands/init.js";
6
+ export { installPlugin } from "./commands/install.js";
7
+ export { linkPlugin } from "./commands/link.js";
8
+ export { listPlugins } from "./commands/list.js";
9
+ export { showOutdated } from "./commands/outdated.js";
10
+ export { searchPlugins } from "./commands/search.js";
11
+ export { uninstallPlugin } from "./commands/uninstall.js";
12
+ export { updatePlugin } from "./commands/update.js";
13
+ export { whyFile } from "./commands/why.js";
14
+ export { detectAllConflicts, detectConflicts, formatConflicts, } from "./conflicts.js";
15
+ export type { OmpField, OmpInstallEntry, PluginPackageJson, PluginsJson, } from "./manifest.js";
16
+ export { getInstalledPlugins, initGlobalPlugins, loadPluginsJson, readPluginPackageJson, savePluginsJson, } from "./manifest.js";
17
+ export { checkMigration, migrateToNpm } from "./migrate.js";
18
+ export { npmInfo, npmInstall, npmOutdated, npmSearch, npmUninstall, npmUpdate, } from "./npm.js";
19
+ export { checkPluginSymlinks, createPluginSymlinks, removePluginSymlinks, } from "./symlinks.js";
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EACN,kBAAkB,EAClB,eAAe,EACf,eAAe,GACf,MAAM,gBAAgB,CAAC;AAGxB,YAAY,EACX,QAAQ,EACR,eAAe,EACf,iBAAiB,EACjB,WAAW,GACX,MAAM,eAAe,CAAC;AAGvB,OAAO,EACN,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,eAAe,GACf,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EACN,OAAO,EACP,UAAU,EACV,WAAW,EACX,SAAS,EACT,YAAY,EACZ,SAAS,GACT,MAAM,UAAU,CAAC;AAClB,OAAO,EACN,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,GACpB,MAAM,eAAe,CAAC"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * OMP field in package.json - defines what files to install
3
+ */
4
+ export interface OmpInstallEntry {
5
+ src: string;
6
+ dest: string;
7
+ }
8
+ export interface OmpField {
9
+ install?: OmpInstallEntry[];
10
+ disabled?: boolean;
11
+ }
12
+ /**
13
+ * Package.json structure for plugins
14
+ */
15
+ export interface PluginPackageJson {
16
+ name: string;
17
+ version: string;
18
+ description?: string;
19
+ keywords?: string[];
20
+ omp?: OmpField;
21
+ dependencies?: Record<string, string>;
22
+ devDependencies?: Record<string, string>;
23
+ files?: string[];
24
+ }
25
+ /**
26
+ * Global/project plugins.json structure
27
+ */
28
+ export interface PluginsJson {
29
+ plugins: Record<string, string>;
30
+ disabled?: string[];
31
+ }
32
+ /**
33
+ * Legacy manifest structure (for migration)
34
+ */
35
+ export interface LegacyPluginInfo {
36
+ type: "github" | "local" | "npm";
37
+ repo?: string;
38
+ package?: string;
39
+ path?: string;
40
+ subdir?: string;
41
+ version?: string;
42
+ linked?: boolean;
43
+ installed: string[];
44
+ installedAt: string;
45
+ }
46
+ export interface LegacyManifest {
47
+ plugins: Record<string, LegacyPluginInfo>;
48
+ }
49
+ /**
50
+ * Initialize the global plugins directory with package.json
51
+ */
52
+ export declare function initGlobalPlugins(): Promise<void>;
53
+ /**
54
+ * Load plugins.json (global or project)
55
+ */
56
+ export declare function loadPluginsJson(global?: boolean): Promise<PluginsJson>;
57
+ /**
58
+ * Save plugins.json (global or project)
59
+ */
60
+ export declare function savePluginsJson(data: PluginsJson, global?: boolean): Promise<void>;
61
+ /**
62
+ * Read a plugin's package.json from node_modules
63
+ */
64
+ export declare function readPluginPackageJson(pluginName: string, global?: boolean): Promise<PluginPackageJson | null>;
65
+ /**
66
+ * Get the source directory for a plugin in node_modules
67
+ */
68
+ export declare function getPluginSourceDir(pluginName: string, global?: boolean): string;
69
+ /**
70
+ * Check if legacy manifest.json exists
71
+ */
72
+ export declare function hasLegacyManifest(): boolean;
73
+ /**
74
+ * Load legacy manifest.json
75
+ */
76
+ export declare function loadLegacyManifest(): Promise<LegacyManifest>;
77
+ /**
78
+ * Get all installed plugins with their info
79
+ */
80
+ export declare function getInstalledPlugins(global?: boolean): Promise<Map<string, PluginPackageJson>>;
81
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAWA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,QAAQ;IACxB,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CAC1C;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAavD;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,MAAM,UAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CA0BzE;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,UAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BrF;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,UAAO,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAiBhH;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,UAAO,GAAG,MAAM,CAG5E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,cAAc,CAAC,CAOlE;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,UAAO,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAYhG"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Check for and prompt migration if legacy manifest exists
3
+ */
4
+ export declare function checkMigration(auto?: boolean): Promise<boolean>;
5
+ /**
6
+ * Migrate from legacy manifest.json to npm-native format
7
+ */
8
+ export declare function migrateToNpm(): Promise<boolean>;
9
+ //# sourceMappingURL=migrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":"AAgCA;;GAEG;AACH,wBAAsB,cAAc,CAAC,IAAI,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAkBnE;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,CA2DrD"}
package/dist/npm.d.ts ADDED
@@ -0,0 +1,77 @@
1
+ export interface NpmPackageInfo {
2
+ name: string;
3
+ version: string;
4
+ description?: string;
5
+ keywords?: string[];
6
+ author?: string | {
7
+ name: string;
8
+ email?: string;
9
+ };
10
+ homepage?: string;
11
+ repository?: {
12
+ type: string;
13
+ url: string;
14
+ } | string;
15
+ versions?: string[];
16
+ "dist-tags"?: Record<string, string>;
17
+ }
18
+ export interface NpmSearchResult {
19
+ name: string;
20
+ version: string;
21
+ description?: string;
22
+ keywords?: string[];
23
+ date?: string;
24
+ author?: {
25
+ name: string;
26
+ };
27
+ }
28
+ /**
29
+ * Execute npm command and return output
30
+ */
31
+ export declare function npmExec(args: string[], cwd?: string): string;
32
+ /**
33
+ * Execute npm command with prefix (for installing to specific directory)
34
+ */
35
+ export declare function npmExecWithPrefix(args: string[], prefix: string): string;
36
+ /**
37
+ * Install packages using npm
38
+ */
39
+ export declare function npmInstall(packages: string[], prefix: string, options?: {
40
+ save?: boolean;
41
+ saveDev?: boolean;
42
+ }): Promise<void>;
43
+ /**
44
+ * Uninstall packages using npm
45
+ */
46
+ export declare function npmUninstall(packages: string[], prefix: string): Promise<void>;
47
+ /**
48
+ * Get package info from npm registry
49
+ */
50
+ export declare function npmInfo(packageName: string): Promise<NpmPackageInfo | null>;
51
+ /**
52
+ * Search npm for packages with a keyword
53
+ */
54
+ export declare function npmSearch(query: string, keyword?: string): Promise<NpmSearchResult[]>;
55
+ /**
56
+ * Check for outdated packages
57
+ */
58
+ export declare function npmOutdated(prefix: string): Promise<Record<string, {
59
+ current: string;
60
+ wanted: string;
61
+ latest: string;
62
+ }>>;
63
+ /**
64
+ * Update packages using npm
65
+ */
66
+ export declare function npmUpdate(packages: string[], prefix: string): Promise<void>;
67
+ /**
68
+ * Get list of installed packages
69
+ */
70
+ export declare function npmList(prefix: string): Promise<Record<string, {
71
+ version: string;
72
+ }>>;
73
+ /**
74
+ * Resolve a package version from the registry
75
+ */
76
+ export declare function resolveVersion(packageName: string, versionRange?: string): Promise<string | null>;
77
+ //# sourceMappingURL=npm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm.d.ts","sourceRoot":"","sources":["../src/npm.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC;IACpD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAO5D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAExE;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC/B,QAAQ,EAAE,MAAM,EAAE,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GACjD,OAAO,CAAC,IAAI,CAAC,CAYf;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpF;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAOjF;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,SAAe,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CASjG;AAED;;GAEG;AACH,wBAAsB,WAAW,CAChC,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAgB9E;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMjF;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAQ1F;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,SAAW,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAGzG"}
@@ -0,0 +1,27 @@
1
+ export declare const PI_CONFIG_DIR: string;
2
+ export declare const PLUGINS_DIR: string;
3
+ export declare const NODE_MODULES_DIR: string;
4
+ export declare const GLOBAL_PACKAGE_JSON: string;
5
+ export declare const GLOBAL_LOCK_FILE: string;
6
+ export declare const LEGACY_MANIFEST_PATH: string;
7
+ export declare const PROJECT_PI_DIR = ".pi";
8
+ export declare const PROJECT_PLUGINS_JSON: string;
9
+ export declare const PROJECT_PLUGINS_LOCK: string;
10
+ export declare const PROJECT_NODE_MODULES: string;
11
+ /**
12
+ * Get the agent directory (where symlinks are installed)
13
+ */
14
+ export declare function getAgentDir(global?: boolean): string;
15
+ /**
16
+ * Get the plugins directory for the given scope
17
+ */
18
+ export declare function getPluginsDir(global?: boolean): string;
19
+ /**
20
+ * Get the node_modules directory for the given scope
21
+ */
22
+ export declare function getNodeModulesDir(global?: boolean): string;
23
+ /**
24
+ * Get the package.json path for the given scope
25
+ */
26
+ export declare function getPackageJsonPath(global?: boolean): string;
27
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,aAAa,QAAyB,CAAC;AAGpD,eAAO,MAAM,WAAW,QAAiC,CAAC;AAG1D,eAAO,MAAM,gBAAgB,QAAoC,CAAC;AAGlE,eAAO,MAAM,mBAAmB,QAAoC,CAAC;AAGrE,eAAO,MAAM,gBAAgB,QAAyC,CAAC;AAGvE,eAAO,MAAM,oBAAoB,QAAqC,CAAC;AAGvE,eAAO,MAAM,cAAc,QAAQ,CAAC;AAGpC,eAAO,MAAM,oBAAoB,QAAuC,CAAC;AAGzE,eAAO,MAAM,oBAAoB,QAA4C,CAAC;AAG9E,eAAO,MAAM,oBAAoB,QAAuC,CAAC;AAEzE;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,UAAO,GAAG,MAAM,CAKjD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,UAAO,GAAG,MAAM,CAKnD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,UAAO,GAAG,MAAM,CAKvD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,UAAO,GAAG,MAAM,CAKxD"}
@@ -0,0 +1,33 @@
1
+ import type { OmpInstallEntry, PluginPackageJson } from "./manifest.js";
2
+ export interface SymlinkResult {
3
+ created: string[];
4
+ errors: string[];
5
+ }
6
+ /**
7
+ * Create symlinks for a plugin's omp.install entries
8
+ */
9
+ export declare function createPluginSymlinks(pluginName: string, pkgJson: PluginPackageJson, global?: boolean, verbose?: boolean): Promise<SymlinkResult>;
10
+ /**
11
+ * Remove symlinks for a plugin's omp.install entries
12
+ */
13
+ export declare function removePluginSymlinks(_pluginName: string, pkgJson: PluginPackageJson, verbose?: boolean): Promise<SymlinkResult>;
14
+ /**
15
+ * Check symlink health for a plugin
16
+ */
17
+ export declare function checkPluginSymlinks(pluginName: string, pkgJson: PluginPackageJson, global?: boolean): Promise<{
18
+ valid: string[];
19
+ broken: string[];
20
+ missing: string[];
21
+ }>;
22
+ /**
23
+ * Get plugin name from an installed symlink destination
24
+ */
25
+ export declare function getPluginForSymlink(dest: string, installedPlugins: Map<string, PluginPackageJson>): Promise<string | null>;
26
+ /**
27
+ * Find all symlinks installed by plugins and trace them back
28
+ */
29
+ export declare function traceInstalledFile(filePath: string, installedPlugins: Map<string, PluginPackageJson>): Promise<{
30
+ plugin: string;
31
+ entry: OmpInstallEntry;
32
+ } | null>;
33
+ //# sourceMappingURL=symlinks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symlinks.d.ts","sourceRoot":"","sources":["../src/symlinks.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAIxE,MAAM,WAAW,aAAa;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACzC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,iBAAiB,EAC1B,MAAM,UAAO,EACb,OAAO,UAAO,GACZ,OAAO,CAAC,aAAa,CAAC,CAkDxB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACzC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,UAAO,GACZ,OAAO,CAAC,aAAa,CAAC,CA4BxB;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,CAoCnE;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,GAC9C,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAE,GAAG,IAAI,CAAC,CAkB5D"}
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "@oh-my-pi/cli",
3
+ "version": "0.1.0",
4
+ "description": "Plugin manager for pi - install and manage pi config plugins from git repos",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "bin": {
9
+ "omp": "./dist/cli.js"
10
+ },
11
+ "scripts": {
12
+ "build": "bun build src/cli.ts --outdir dist --target bun && tsc --emitDeclarationOnly",
13
+ "dev": "bun --watch src/cli.ts",
14
+ "check": "biome check --write . && tsc --noEmit",
15
+ "clean": "rm -rf dist",
16
+ "publish:all": "./scripts/publish.sh",
17
+ "publish:dry": "./scripts/publish.sh --dry-run",
18
+ "version:bump": "./scripts/bump-version.sh"
19
+ },
20
+ "keywords": ["pi", "plugin", "manager", "cli"],
21
+ "author": "",
22
+ "license": "MIT",
23
+ "devDependencies": {
24
+ "@biomejs/biome": "2.3.5",
25
+ "@types/node": "^22.10.5",
26
+ "bun-types": "^1.2.17",
27
+ "typescript": "^5.9.2"
28
+ },
29
+ "dependencies": {
30
+ "commander": "^12.0.0",
31
+ "chalk": "^5.3.0"
32
+ },
33
+ "engines": {
34
+ "bun": ">=1.0.0"
35
+ }
36
+ }
@@ -0,0 +1,13 @@
1
+ # Metal Theme
2
+
3
+ A metal theme for pi.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ omp install oh-my-pi/plugins/metal-theme
9
+ ```
10
+
11
+ ## Contents
12
+
13
+ - `themes/metal.json` - Metal theme configuration
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "metal-theme",
3
+ "version": "0.1.0",
4
+ "description": "Metal theme for pi",
5
+ "install": [
6
+ { "src": "themes/metal.json", "dest": "agent/themes/metal.json" }
7
+ ]
8
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "@oh-my-pi/metal-theme",
3
+ "version": "0.1.0",
4
+ "description": "Metal theme for pi",
5
+ "keywords": ["omp-plugin", "theme", "metal"],
6
+ "author": "",
7
+ "license": "MIT",
8
+ "omp": {
9
+ "install": [
10
+ { "src": "themes/metal.json", "dest": "agent/themes/metal.json" }
11
+ ]
12
+ },
13
+ "files": ["themes"]
14
+ }