@amsterdamdatalabs/enact-extensions 0.1.1 → 0.1.5
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 +4 -3
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/install.d.ts +82 -1
- package/dist/install.d.ts.map +1 -1
- package/dist/install.js +187 -35
- package/dist/install.js.map +1 -1
- package/dist/internal/codex.d.ts.map +1 -1
- package/dist/internal/codex.js +7 -1
- package/dist/internal/codex.js.map +1 -1
- package/dist/internal/platform.d.ts +8 -0
- package/dist/internal/platform.d.ts.map +1 -1
- package/dist/internal/platform.js +46 -2
- package/dist/internal/platform.js.map +1 -1
- package/dist/provision.d.ts +30 -0
- package/dist/provision.d.ts.map +1 -0
- package/dist/provision.js +202 -0
- package/dist/provision.js.map +1 -0
- package/dist/validate/index.d.ts +23 -0
- package/dist/validate/index.d.ts.map +1 -1
- package/dist/validate/index.js +80 -0
- package/dist/validate/index.js.map +1 -1
- package/extensions/enact-context/.agents/plugin.json +40 -0
- package/extensions/enact-context/.mcp.json +8 -0
- package/extensions/enact-context/README.md +25 -0
- package/extensions/enact-context/assets/icon.png +0 -0
- package/extensions/enact-context/assets/logo.png +0 -0
- package/extensions/enact-context/hooks/hooks.json +105 -0
- package/extensions/enact-context/skills/enact-context/SKILL.md +149 -0
- package/extensions/enact-context/skills/enact-context/scripts/install.sh +69 -0
- package/extensions/enact-factory/.agents/plugin.json +42 -0
- package/extensions/enact-factory/.mcp.json +8 -0
- package/extensions/enact-factory/assets/icon.png +0 -0
- package/extensions/enact-factory/assets/logo.png +0 -0
- package/extensions/enact-factory/hooks/user-prompt-submit.mjs +67 -0
- package/extensions/enact-factory/skills/testing-strategy/SKILL.md +167 -0
- package/extensions/enact-factory/skills/workitem-triage/SKILL.md +22 -0
- package/extensions/enact-operator/.agents/plugin.json +57 -0
- package/extensions/enact-operator/.app.json +3 -0
- package/extensions/enact-operator/.mcp.json +10 -0
- package/extensions/enact-operator/_taxonomy.md +86 -0
- package/extensions/enact-operator/agents/README.md +5 -0
- package/extensions/enact-operator/agents/architect.toml +25 -0
- package/extensions/enact-operator/agents/code-reviewer.toml +24 -0
- package/extensions/enact-operator/agents/critic.toml +30 -0
- package/extensions/enact-operator/agents/executor.toml +24 -0
- package/extensions/enact-operator/agents/explore.toml +23 -0
- package/extensions/enact-operator/agents/planner.toml +24 -0
- package/extensions/enact-operator/agents/verifier.toml +24 -0
- package/extensions/enact-operator/assets/icon.png +0 -0
- package/extensions/enact-operator/assets/logo.png +0 -0
- package/extensions/enact-operator/commands/doctor.md +39 -0
- package/extensions/enact-operator/commands/setup.md +51 -0
- package/extensions/enact-operator/hooks/hooks.json +126 -0
- package/extensions/enact-operator/skills/_variants.md +44 -0
- package/extensions/enact-operator/skills/ai-slop-cleaner/SKILL.md +50 -0
- package/extensions/enact-operator/skills/analyze/SKILL.md +91 -0
- package/extensions/enact-operator/skills/ask/SKILL.md +47 -0
- package/extensions/enact-operator/skills/autopilot/SKILL.md +170 -0
- package/extensions/enact-operator/skills/autoresearch-goal/SKILL.md +79 -0
- package/extensions/enact-operator/skills/cancel/SKILL.md +99 -0
- package/extensions/enact-operator/skills/configure-notifications/SKILL.md +77 -0
- package/extensions/enact-operator/skills/deep-interview/SKILL.md +80 -0
- package/extensions/enact-operator/skills/doctor/SKILL.md +48 -0
- package/extensions/enact-operator/skills/hud/SKILL.md +49 -0
- package/extensions/enact-operator/skills/hyperplan/SKILL.md +47 -0
- package/extensions/enact-operator/skills/plan/SKILL.md +78 -0
- package/extensions/enact-operator/skills/ralph/SKILL.md +201 -0
- package/extensions/enact-operator/skills/ralph/gemini.md +18 -0
- package/extensions/enact-operator/skills/ralplan/SKILL.md +151 -0
- package/extensions/enact-operator/skills/remove-deadcode/SKILL.md +45 -0
- package/extensions/enact-operator/skills/research/SKILL.md +74 -0
- package/extensions/enact-operator/skills/review/SKILL.md +58 -0
- package/extensions/enact-operator/skills/security-research/SKILL.md +54 -0
- package/extensions/enact-operator/skills/setup/SKILL.md +91 -0
- package/extensions/enact-operator/skills/setup/scripts/install.sh +50 -0
- package/extensions/enact-operator/skills/skill/SKILL.md +82 -0
- package/extensions/enact-operator/skills/tdd/SKILL.md +59 -0
- package/extensions/enact-operator/skills/team/SKILL.md +199 -0
- package/extensions/enact-operator/skills/trace/SKILL.md +41 -0
- package/extensions/enact-operator/skills/ultragoal/SKILL.md +99 -0
- package/extensions/enact-operator/skills/ultraqa/SKILL.md +113 -0
- package/extensions/enact-operator/skills/ultrawork/SKILL.md +145 -0
- package/extensions/enact-operator/skills/ultrawork/planner.md +28 -0
- package/extensions/enact-operator/skills/wiki/SKILL.md +41 -0
- package/extensions/enact-operator/skills/work-with-workitem/SKILL.md +51 -0
- package/extensions/enact-wiki/.agents/plugin.json +42 -0
- package/extensions/enact-wiki/.mcp.json +15 -0
- package/extensions/enact-wiki/README.md +44 -0
- package/extensions/enact-wiki/assets/icon.png +0 -0
- package/extensions/enact-wiki/assets/logo.png +0 -0
- package/extensions/enact-wiki/skills/document-parser/SKILL.md +17 -0
- package/extensions/enact-wiki/skills/document-parser/scripts/parse.sh +60 -0
- package/extensions/enact-wiki/skills/document-parser/skill.json +9 -0
- package/extensions/enact-wiki/skills/enact-wiki/SKILL.md +30 -0
- package/extensions/enact-wiki/skills/enact-wiki/references/ingest.md +62 -0
- package/extensions/enact-wiki/skills/enact-wiki/references/manage.md +34 -0
- package/extensions/enact-wiki/skills/enact-wiki/references/query.md +59 -0
- package/extensions/enact-wiki/skills/search-lab/SKILL.md +57 -0
- package/extensions/enact-wiki/skills/search-lab/scripts/analyze.ts +23 -0
- package/package.json +1 -1
- package/scripts/enact-extensions.mjs +79 -12
- package/scripts/lib/hooks.mjs +352 -0
- package/scripts/lib/ledger.mjs +4 -3
- package/scripts/lib/provision-mcp.mjs +12 -365
- package/scripts/lib/run-install.mjs +87 -5
- package/scripts/lib/run-prune.mjs +73 -0
- package/scripts/lib/run-sync.mjs +9 -1
- package/scripts/lib/run-uninstall.mjs +26 -2
- package/scripts/lib/run-validate.mjs +10 -1
- package/scripts/lib/serve.mjs +19 -1
- package/scripts/version-bump.sh +463 -0
- package/spec/codex.json +1 -11
package/README.md
CHANGED
|
@@ -103,7 +103,7 @@ node scripts/enact-extensions.mjs serve --port 43217 --open
|
|
|
103
103
|
Published from `@amsterdamdatalabs/enact-extensions`. Path defaults to **cwd**:
|
|
104
104
|
|
|
105
105
|
```bash
|
|
106
|
-
cd
|
|
106
|
+
cd extensions/enact-factory
|
|
107
107
|
enact-extensions validate
|
|
108
108
|
enact-extensions sync
|
|
109
109
|
```
|
|
@@ -152,11 +152,12 @@ enact-extensions/ # @amsterdamdatalabs/enact-extensions packa
|
|
|
152
152
|
└── extensions/ # self-contained plugin bundles
|
|
153
153
|
├── plugin-dev/ # plugin authoring toolkit
|
|
154
154
|
├── cmux/ devops/ dev-state/ # first-party skill bundles
|
|
155
|
-
|
|
155
|
+
├── enact-context/ enact-factory/ enact-operator/
|
|
156
|
+
└── net-revenue-management/ # product and platform bundles
|
|
156
157
|
```
|
|
157
158
|
|
|
158
159
|
## enact-os integration
|
|
159
160
|
|
|
160
161
|
`enact-os` submodules **this** repo at `enact-extensions/` for manifest tooling, and separately submodules the product packages (`enact-context`, `enact-factory`, `enact-operator`, `enact-wiki`) at top level. Factory and config paths in `enact-os/config.toml` target each product package by its top-level path.
|
|
161
162
|
|
|
162
|
-
|
|
163
|
+
Host plugin delivery now lives in this repo for the shipped bundles under `extensions/`, including `enact-context`, `enact-factory`, and `enact-operator`. Product runtimes still live in their own repos; use `enact-extensions install <name> --platform <surface>` for host registration, while repo-local commands such as `enact-factory setup` or `enact-factory plugins delivery` persist local runtime state.
|
package/dist/index.d.ts
CHANGED
|
@@ -6,9 +6,11 @@ export { defaultCursorHome } from "./internal/cursor.js";
|
|
|
6
6
|
export { MANIFEST_BY_PLATFORM, MANIFEST_FIELDS, manifestRelPath, DEFAULT_TARGETS, DEFAULT_PATHS, } from "./internal/platform.js";
|
|
7
7
|
export { defaultCodexHome, defaultEnactHome, ensureMarketplace, ensureMcpServer, isPluginEnabled, readCodexConfig, readCodexConfigProbe, resolveCodexInstallHomes, removeMcpServer, removePluginConfig, setPluginEnabled, writeCodexConfig, } from "./internal/codex.js";
|
|
8
8
|
export { createEnactManifest, deriveClaudeManifest, deriveCodexManifest, deriveCursorManifest, deriveManifest, resolveTargets, scaffoldPlugin, syncPlatformManifests, manifestForPlatform, } from "./create/index.js";
|
|
9
|
-
export { validateEnactManifest, assertEnactManifest, validateClaudeManifest, validateCodexManifest, validateCursorManifest, validateManifest, validatePluginManifest, validatePluginBundle, validatePluginBundleFromCanonical, checkComponentPaths, checkPluginBundleComponentPaths, checkPluginBundleComponentPathsFromCanonical, readManifestFile, } from "./validate/index.js";
|
|
9
|
+
export { validateEnactManifest, assertEnactManifest, validateClaudeManifest, validateCodexManifest, validateCursorManifest, validateManifest, validatePluginManifest, validatePluginBundle, validatePluginBundleFromCanonical, checkComponentPaths, checkPluginBundleComponentPaths, checkPluginBundleComponentPathsFromCanonical, checkHookEvents, assertSupportedHookEvents, SUPPORTED_HOOK_EVENTS, readManifestFile, } from "./validate/index.js";
|
|
10
10
|
export type { PluginValidationReport } from "./validate/index.js";
|
|
11
11
|
export type { ScaffoldOptions } from "./create/index.js";
|
|
12
|
-
export { installCodexPluginBundle, installPluginBundle, installClaudePluginBundle, installCursorPluginBundle, installSharedPluginBundle, defaultSharedHome, uninstallCodexPluginBundle, uninstallClaudePluginBundle, uninstallCursorPluginBundle, uninstallSharedPluginBundle, } from "./install.js";
|
|
13
|
-
export type { CodexPluginInstallOptions, CodexPluginInstallResult, MultiCodexPluginInstallOptions, MultiCodexPluginInstallResult, ClaudePluginInstallOptions, ClaudePluginInstallResult, CursorPluginInstallOptions, CursorPluginInstallResult, SharedPluginInstallOptions, SharedPluginInstallResult, CodexPluginUninstallOptions, CodexPluginUninstallResult, ClaudePluginUninstallOptions, ClaudePluginUninstallResult, CursorPluginUninstallOptions, CursorPluginUninstallResult, SharedPluginUninstallOptions, SharedPluginUninstallResult, } from "./install.js";
|
|
12
|
+
export { installCodexPluginBundle, installCodexPluginBundleWithProvision, installPluginBundle, installPluginBundleWithProvision, installClaudePluginBundle, installClaudePluginBundleWithProvision, installCursorPluginBundle, installSharedPluginBundle, codexMarketplaceRoot, codexMarketplacePath, codexMarketplacePluginPath, codexInstalledPluginPath, codexPluginCacheRoot, codexPluginCachePath, readCodexPluginManifest, claudeMarketplaceDir, claudeInstalledPluginPath, claudeKnownMarketplacesPath, readClaudePluginManifest, codexPluginStatus, claudePluginStatus, setInstalledCodexPluginEnabled, runCodexPluginsDoctor, runClaudePluginsDoctor, defaultSharedHome, uninstallCodexPluginBundle, uninstallClaudePluginBundle, uninstallCursorPluginBundle, uninstallSharedPluginBundle, } from "./install.js";
|
|
13
|
+
export type { CodexPluginInstallOptions, CodexPluginInstallResult, CodexPluginInstallWithProvisionOptions, CodexPluginInstallWithProvisionResult, MultiCodexPluginInstallOptions, MultiCodexPluginInstallResult, MultiCodexPluginInstallWithProvisionOptions, MultiCodexPluginInstallWithProvisionResult, CodexPluginDoctorReport, CodexInstalledPluginStatus, ClaudePluginInstallOptions, ClaudePluginInstallResult, ClaudePluginInstallWithProvisionOptions, ClaudePluginInstallWithProvisionResult, ClaudePluginDoctorReport, ClaudeInstalledPluginStatus, CursorPluginInstallOptions, CursorPluginInstallResult, SharedPluginInstallOptions, SharedPluginInstallResult, CodexPluginUninstallOptions, CodexPluginUninstallResult, ClaudePluginUninstallOptions, ClaudePluginUninstallResult, CursorPluginUninstallOptions, CursorPluginUninstallResult, SharedPluginUninstallOptions, SharedPluginUninstallResult, } from "./install.js";
|
|
14
|
+
export type { McpServerDefinition, ProvisionExec, ProvisionExecResult, ProvisionMcpOptions, ProvisionMcpResult, } from "./provision.js";
|
|
15
|
+
export { readMcpServers, provisionMcp, summarizeProvision, } from "./provision.js";
|
|
14
16
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,QAAQ,EACR,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,GACX,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7E,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,eAAe,EACf,aAAa,GACd,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,wBAAwB,EACxB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,cAAc,EACd,cAAc,EACd,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EAChB,sBAAsB,EACtB,oBAAoB,EACpB,iCAAiC,EACjC,mBAAmB,EACnB,+BAA+B,EAC/B,4CAA4C,EAC5C,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAE7B,YAAY,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAClE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,EACzB,iBAAiB,EACjB,0BAA0B,EAC1B,2BAA2B,EAC3B,2BAA2B,EAC3B,2BAA2B,GAC5B,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,yBAAyB,EACzB,wBAAwB,EACxB,8BAA8B,EAC9B,6BAA6B,EAC7B,0BAA0B,EAC1B,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,EACzB,2BAA2B,EAC3B,0BAA0B,EAC1B,4BAA4B,EAC5B,2BAA2B,EAC3B,4BAA4B,EAC5B,2BAA2B,EAC3B,4BAA4B,EAC5B,2BAA2B,GAC5B,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -4,6 +4,7 @@ export { defaultCursorHome } from "./internal/cursor.js";
|
|
|
4
4
|
export { MANIFEST_BY_PLATFORM, MANIFEST_FIELDS, manifestRelPath, DEFAULT_TARGETS, DEFAULT_PATHS, } from "./internal/platform.js";
|
|
5
5
|
export { defaultCodexHome, defaultEnactHome, ensureMarketplace, ensureMcpServer, isPluginEnabled, readCodexConfig, readCodexConfigProbe, resolveCodexInstallHomes, removeMcpServer, removePluginConfig, setPluginEnabled, writeCodexConfig, } from "./internal/codex.js";
|
|
6
6
|
export { createEnactManifest, deriveClaudeManifest, deriveCodexManifest, deriveCursorManifest, deriveManifest, resolveTargets, scaffoldPlugin, syncPlatformManifests, manifestForPlatform, } from "./create/index.js";
|
|
7
|
-
export { validateEnactManifest, assertEnactManifest, validateClaudeManifest, validateCodexManifest, validateCursorManifest, validateManifest, validatePluginManifest, validatePluginBundle, validatePluginBundleFromCanonical, checkComponentPaths, checkPluginBundleComponentPaths, checkPluginBundleComponentPathsFromCanonical, readManifestFile, } from "./validate/index.js";
|
|
8
|
-
export { installCodexPluginBundle, installPluginBundle, installClaudePluginBundle, installCursorPluginBundle, installSharedPluginBundle, defaultSharedHome, uninstallCodexPluginBundle, uninstallClaudePluginBundle, uninstallCursorPluginBundle, uninstallSharedPluginBundle, } from "./install.js";
|
|
7
|
+
export { validateEnactManifest, assertEnactManifest, validateClaudeManifest, validateCodexManifest, validateCursorManifest, validateManifest, validatePluginManifest, validatePluginBundle, validatePluginBundleFromCanonical, checkComponentPaths, checkPluginBundleComponentPaths, checkPluginBundleComponentPathsFromCanonical, checkHookEvents, assertSupportedHookEvents, SUPPORTED_HOOK_EVENTS, readManifestFile, } from "./validate/index.js";
|
|
8
|
+
export { installCodexPluginBundle, installCodexPluginBundleWithProvision, installPluginBundle, installPluginBundleWithProvision, installClaudePluginBundle, installClaudePluginBundleWithProvision, installCursorPluginBundle, installSharedPluginBundle, codexMarketplaceRoot, codexMarketplacePath, codexMarketplacePluginPath, codexInstalledPluginPath, codexPluginCacheRoot, codexPluginCachePath, readCodexPluginManifest, claudeMarketplaceDir, claudeInstalledPluginPath, claudeKnownMarketplacesPath, readClaudePluginManifest, codexPluginStatus, claudePluginStatus, setInstalledCodexPluginEnabled, runCodexPluginsDoctor, runClaudePluginsDoctor, defaultSharedHome, uninstallCodexPluginBundle, uninstallClaudePluginBundle, uninstallCursorPluginBundle, uninstallSharedPluginBundle, } from "./install.js";
|
|
9
|
+
export { readMcpServers, provisionMcp, summarizeProvision, } from "./provision.js";
|
|
9
10
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7E,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,eAAe,EACf,aAAa,GACd,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,wBAAwB,EACxB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,cAAc,EACd,cAAc,EACd,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EAChB,sBAAsB,EACtB,oBAAoB,EACpB,iCAAiC,EACjC,mBAAmB,EACnB,+BAA+B,EAC/B,4CAA4C,EAC5C,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,EACzB,iBAAiB,EACjB,0BAA0B,EAC1B,2BAA2B,EAC3B,2BAA2B,EAC3B,2BAA2B,GAC5B,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7E,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,eAAe,EACf,aAAa,GACd,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,wBAAwB,EACxB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,cAAc,EACd,cAAc,EACd,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EAChB,sBAAsB,EACtB,oBAAoB,EACpB,iCAAiC,EACjC,mBAAmB,EACnB,+BAA+B,EAC/B,4CAA4C,EAC5C,eAAe,EACf,yBAAyB,EACzB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EACL,wBAAwB,EACxB,qCAAqC,EACrC,mBAAmB,EACnB,gCAAgC,EAChC,yBAAyB,EACzB,sCAAsC,EACtC,yBAAyB,EACzB,yBAAyB,EACzB,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAC1B,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,EACpB,yBAAyB,EACzB,2BAA2B,EAC3B,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,EAClB,8BAA8B,EAC9B,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,0BAA0B,EAC1B,2BAA2B,EAC3B,2BAA2B,EAC3B,2BAA2B,GAC5B,MAAM,cAAc,CAAC;AAsCtB,OAAO,EACL,cAAc,EACd,YAAY,EACZ,kBAAkB,GACnB,MAAM,gBAAgB,CAAC"}
|
package/dist/install.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { SyncResult } from "./internal/types.js";
|
|
1
|
+
import type { PluginManifest, SyncResult } from "./internal/types.js";
|
|
2
|
+
import type { ProvisionExec, ProvisionMcpResult } from "./provision.js";
|
|
2
3
|
export interface CodexPluginInstallOptions {
|
|
3
4
|
pluginRoot: string;
|
|
4
5
|
codexHome?: string;
|
|
@@ -26,6 +27,41 @@ export interface MultiCodexPluginInstallResult {
|
|
|
26
27
|
codexHomes: string[];
|
|
27
28
|
results: CodexPluginInstallResult[];
|
|
28
29
|
}
|
|
30
|
+
export interface CodexPluginDoctorReport {
|
|
31
|
+
configPlugins: string[];
|
|
32
|
+
marketplaceConfigured: boolean;
|
|
33
|
+
marketplaceRoot: string;
|
|
34
|
+
marketplacePath: string;
|
|
35
|
+
marketplacePlugins: string[];
|
|
36
|
+
installedPlugins: string[];
|
|
37
|
+
warnings: string[];
|
|
38
|
+
}
|
|
39
|
+
export interface CodexInstalledPluginStatus {
|
|
40
|
+
name: string;
|
|
41
|
+
enabled: boolean;
|
|
42
|
+
installed: boolean;
|
|
43
|
+
cachedVersions: string[];
|
|
44
|
+
manifest: PluginManifest | null;
|
|
45
|
+
pluginConfigKey: string;
|
|
46
|
+
marketplaceName: string;
|
|
47
|
+
installedPluginPath: string;
|
|
48
|
+
marketplacePluginPath: string;
|
|
49
|
+
cacheRoot: string;
|
|
50
|
+
}
|
|
51
|
+
export interface CodexPluginInstallWithProvisionOptions extends CodexPluginInstallOptions {
|
|
52
|
+
noProvision?: boolean;
|
|
53
|
+
provisionExec?: ProvisionExec;
|
|
54
|
+
}
|
|
55
|
+
export interface CodexPluginInstallWithProvisionResult extends CodexPluginInstallResult {
|
|
56
|
+
provision: ProvisionMcpResult[];
|
|
57
|
+
}
|
|
58
|
+
export interface MultiCodexPluginInstallWithProvisionOptions extends MultiCodexPluginInstallOptions {
|
|
59
|
+
noProvision?: boolean;
|
|
60
|
+
provisionExec?: ProvisionExec;
|
|
61
|
+
}
|
|
62
|
+
export interface MultiCodexPluginInstallWithProvisionResult extends MultiCodexPluginInstallResult {
|
|
63
|
+
provision: ProvisionMcpResult[];
|
|
64
|
+
}
|
|
29
65
|
export interface ClaudePluginInstallOptions {
|
|
30
66
|
pluginRoot: string;
|
|
31
67
|
claudeHome?: string;
|
|
@@ -41,6 +77,32 @@ export interface ClaudePluginInstallResult {
|
|
|
41
77
|
refreshedPaths: string[];
|
|
42
78
|
syncResults: SyncResult[];
|
|
43
79
|
}
|
|
80
|
+
export interface ClaudePluginDoctorReport {
|
|
81
|
+
marketplaceName: string;
|
|
82
|
+
marketplaceDir: string;
|
|
83
|
+
knownMarketplacesPath: string;
|
|
84
|
+
marketplaceRegistered: boolean;
|
|
85
|
+
marketplacePlugins: string[];
|
|
86
|
+
installedPlugins: string[];
|
|
87
|
+
warnings: string[];
|
|
88
|
+
}
|
|
89
|
+
export interface ClaudeInstalledPluginStatus {
|
|
90
|
+
name: string;
|
|
91
|
+
installed: boolean;
|
|
92
|
+
manifest: PluginManifest | null;
|
|
93
|
+
marketplaceName: string;
|
|
94
|
+
marketplaceDir: string;
|
|
95
|
+
installedPluginPath: string;
|
|
96
|
+
knownMarketplaceRegistered: boolean;
|
|
97
|
+
knownMarketplacesPath: string;
|
|
98
|
+
}
|
|
99
|
+
export interface ClaudePluginInstallWithProvisionOptions extends ClaudePluginInstallOptions {
|
|
100
|
+
noProvision?: boolean;
|
|
101
|
+
provisionExec?: ProvisionExec;
|
|
102
|
+
}
|
|
103
|
+
export interface ClaudePluginInstallWithProvisionResult extends ClaudePluginInstallResult {
|
|
104
|
+
provision: ProvisionMcpResult[];
|
|
105
|
+
}
|
|
44
106
|
export interface CursorPluginInstallOptions {
|
|
45
107
|
pluginRoot: string;
|
|
46
108
|
cursorHome?: string;
|
|
@@ -53,9 +115,28 @@ export interface CursorPluginInstallResult {
|
|
|
53
115
|
refreshedPaths: string[];
|
|
54
116
|
syncResults: SyncResult[];
|
|
55
117
|
}
|
|
118
|
+
export declare function codexMarketplaceRoot(codexHome: string, marketplaceName?: string): string;
|
|
119
|
+
export declare function codexMarketplacePath(codexHome: string, marketplaceName?: string): string;
|
|
120
|
+
export declare function codexMarketplacePluginPath(codexHome: string, marketplaceName: string, pluginName: string): string;
|
|
121
|
+
export declare function codexInstalledPluginPath(codexHome: string, pluginName: string): string;
|
|
122
|
+
export declare function codexPluginCachePath(codexHome: string, marketplaceName: string, pluginName: string, version: string): string;
|
|
123
|
+
export declare function codexPluginCacheRoot(codexHome: string, marketplaceName: string, pluginName: string): string;
|
|
124
|
+
export declare function readCodexPluginManifest(pluginRoot: string): PluginManifest | null;
|
|
125
|
+
export declare function claudeMarketplaceDir(claudeHome: string, marketplaceName?: string): string;
|
|
126
|
+
export declare function claudeInstalledPluginPath(claudeHome: string, marketplaceName: string, pluginName: string): string;
|
|
127
|
+
export declare function claudeKnownMarketplacesPath(claudeHome: string): string;
|
|
128
|
+
export declare function readClaudePluginManifest(pluginRoot: string): PluginManifest | null;
|
|
56
129
|
export declare function installCodexPluginBundle(options: CodexPluginInstallOptions): CodexPluginInstallResult;
|
|
57
130
|
export declare function installPluginBundle(options: MultiCodexPluginInstallOptions): MultiCodexPluginInstallResult;
|
|
131
|
+
export declare function installCodexPluginBundleWithProvision(options: CodexPluginInstallWithProvisionOptions): CodexPluginInstallWithProvisionResult;
|
|
132
|
+
export declare function installPluginBundleWithProvision(options: MultiCodexPluginInstallWithProvisionOptions): MultiCodexPluginInstallWithProvisionResult;
|
|
133
|
+
export declare function codexPluginStatus(codexHome: string, pluginName: string, marketplaceName?: string): CodexInstalledPluginStatus;
|
|
134
|
+
export declare function setInstalledCodexPluginEnabled(codexHome: string, pluginName: string, enabled: boolean, marketplaceName?: string): CodexInstalledPluginStatus;
|
|
135
|
+
export declare function runCodexPluginsDoctor(codexHome?: string, marketplaceName?: string): CodexPluginDoctorReport;
|
|
58
136
|
export declare function installClaudePluginBundle(options: ClaudePluginInstallOptions): ClaudePluginInstallResult;
|
|
137
|
+
export declare function installClaudePluginBundleWithProvision(options: ClaudePluginInstallWithProvisionOptions): ClaudePluginInstallWithProvisionResult;
|
|
138
|
+
export declare function claudePluginStatus(claudeHome: string, pluginName: string, marketplaceName?: string): ClaudeInstalledPluginStatus;
|
|
139
|
+
export declare function runClaudePluginsDoctor(claudeHome?: string, marketplaceName?: string): ClaudePluginDoctorReport;
|
|
59
140
|
export declare function installCursorPluginBundle(options: CursorPluginInstallOptions): CursorPluginInstallResult;
|
|
60
141
|
export interface CodexPluginUninstallOptions {
|
|
61
142
|
codexHome?: string;
|
package/dist/install.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
|
package/dist/install.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import { cpSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
1
|
+
import { cpSync, existsSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { dirname, join, resolve } from "node:path";
|
|
3
3
|
import { homedir } from "node:os";
|
|
4
|
-
import { defaultCodexHome, ensureMarketplace, readCodexConfig, removePluginConfig, resolveCodexInstallHomes, setPluginEnabled, writeCodexConfig, } from "./internal/codex.js";
|
|
4
|
+
import { defaultCodexHome, ensureMarketplace, isPluginEnabled, readCodexConfig, removePluginConfig, resolveCodexInstallHomes, setPluginEnabled, writeCodexConfig, } from "./internal/codex.js";
|
|
5
5
|
import { manifestForPlatform } from "./create/index.js";
|
|
6
|
+
import { PROJECTION_COMPONENT_FIELDS } from "./internal/platform.js";
|
|
6
7
|
import { checkComponentPaths, readManifestFile, validateClaudeManifest, validateCodexManifest, validateCursorManifest, } from "./validate/index.js";
|
|
7
|
-
import { defaultClaudeHome, registerLocalMarketplace } from "./internal/claude.js";
|
|
8
|
+
import { defaultClaudeHome, readKnownMarketplaces, registerLocalMarketplace } from "./internal/claude.js";
|
|
8
9
|
import { defaultCursorHome } from "./internal/cursor.js";
|
|
10
|
+
import { provisionMcp } from "./provision.js";
|
|
9
11
|
function readJson(path, fallback) {
|
|
10
12
|
if (!existsSync(path))
|
|
11
13
|
return fallback;
|
|
@@ -15,14 +17,19 @@ function writeJson(path, value) {
|
|
|
15
17
|
mkdirSync(dirname(path), { recursive: true });
|
|
16
18
|
writeFileSync(path, `${JSON.stringify(value, null, 2)}\n`, "utf8");
|
|
17
19
|
}
|
|
18
|
-
function pathFieldsFromManifest(manifest) {
|
|
19
|
-
const fields = [
|
|
20
|
+
function pathFieldsFromManifest(platform, manifest) {
|
|
21
|
+
const fields = PROJECTION_COMPONENT_FIELDS[platform];
|
|
20
22
|
const results = [];
|
|
21
23
|
for (const field of fields) {
|
|
22
24
|
const value = manifest[field];
|
|
23
25
|
if (typeof value === "string" && value.trim())
|
|
24
26
|
results.push(value);
|
|
25
27
|
}
|
|
28
|
+
if (platform === "cursor") {
|
|
29
|
+
const logo = manifest.logo;
|
|
30
|
+
if (typeof logo === "string" && logo.trim())
|
|
31
|
+
results.push(logo);
|
|
32
|
+
}
|
|
26
33
|
const iface = manifest.interface;
|
|
27
34
|
if (iface && typeof iface === "object" && !Array.isArray(iface)) {
|
|
28
35
|
for (const field of ["composerIcon", "logo"]) {
|
|
@@ -33,9 +40,9 @@ function pathFieldsFromManifest(manifest) {
|
|
|
33
40
|
}
|
|
34
41
|
return results;
|
|
35
42
|
}
|
|
36
|
-
function normalizedProjectionEntries(manifest, platformDir) {
|
|
43
|
+
function normalizedProjectionEntries(platform, manifest, platformDir) {
|
|
37
44
|
const entries = new Set([platformDir, "README.md"]);
|
|
38
|
-
for (const raw of pathFieldsFromManifest(manifest)) {
|
|
45
|
+
for (const raw of pathFieldsFromManifest(platform, manifest)) {
|
|
39
46
|
const cleaned = raw.replace(/^\.\//, "").replace(/\/+$/, "");
|
|
40
47
|
if (!cleaned || cleaned.startsWith("../"))
|
|
41
48
|
continue;
|
|
@@ -51,10 +58,10 @@ function normalizedProjectionEntries(manifest, platformDir) {
|
|
|
51
58
|
}
|
|
52
59
|
return [...entries];
|
|
53
60
|
}
|
|
54
|
-
function projectBundle(sourceRoot, targetRoot, manifest, platformDir) {
|
|
61
|
+
function projectBundle(sourceRoot, targetRoot, platform, manifest, platformDir) {
|
|
55
62
|
rmSync(targetRoot, { recursive: true, force: true });
|
|
56
63
|
mkdirSync(targetRoot, { recursive: true });
|
|
57
|
-
for (const entry of normalizedProjectionEntries(manifest, platformDir)) {
|
|
64
|
+
for (const entry of normalizedProjectionEntries(platform, manifest, platformDir)) {
|
|
58
65
|
const sourcePath = resolve(sourceRoot, entry);
|
|
59
66
|
if (!existsSync(sourcePath))
|
|
60
67
|
continue;
|
|
@@ -91,21 +98,41 @@ function stringField(manifest, key) {
|
|
|
91
98
|
const value = manifest[key];
|
|
92
99
|
return typeof value === "string" && value.trim() ? value : undefined;
|
|
93
100
|
}
|
|
94
|
-
function
|
|
101
|
+
export function codexMarketplaceRoot(codexHome, marketplaceName = "enact-os-plugins") {
|
|
95
102
|
return join(codexHome, "marketplaces", marketplaceName);
|
|
96
103
|
}
|
|
97
|
-
function
|
|
98
|
-
return join(
|
|
104
|
+
export function codexMarketplacePath(codexHome, marketplaceName = "enact-os-plugins") {
|
|
105
|
+
return join(codexMarketplaceRoot(codexHome, marketplaceName), ".agents", "plugins", "marketplace.json");
|
|
99
106
|
}
|
|
100
|
-
function
|
|
101
|
-
return join(
|
|
107
|
+
export function codexMarketplacePluginPath(codexHome, marketplaceName, pluginName) {
|
|
108
|
+
return join(codexMarketplaceRoot(codexHome, marketplaceName), "plugins", pluginName);
|
|
102
109
|
}
|
|
103
|
-
function
|
|
110
|
+
export function codexInstalledPluginPath(codexHome, pluginName) {
|
|
104
111
|
return join(codexHome, "plugins", pluginName);
|
|
105
112
|
}
|
|
106
|
-
function
|
|
113
|
+
export function codexPluginCachePath(codexHome, marketplaceName, pluginName, version) {
|
|
107
114
|
return join(codexHome, "plugins", "cache", marketplaceName, pluginName, version);
|
|
108
115
|
}
|
|
116
|
+
export function codexPluginCacheRoot(codexHome, marketplaceName, pluginName) {
|
|
117
|
+
return join(codexHome, "plugins", "cache", marketplaceName, pluginName);
|
|
118
|
+
}
|
|
119
|
+
export function readCodexPluginManifest(pluginRoot) {
|
|
120
|
+
const manifestPath = join(pluginRoot, ".codex-plugin", "plugin.json");
|
|
121
|
+
return readJson(manifestPath, null);
|
|
122
|
+
}
|
|
123
|
+
export function claudeMarketplaceDir(claudeHome, marketplaceName = "enact-os-plugins") {
|
|
124
|
+
return join(claudeHome, "plugins", "marketplaces", marketplaceName);
|
|
125
|
+
}
|
|
126
|
+
export function claudeInstalledPluginPath(claudeHome, marketplaceName, pluginName) {
|
|
127
|
+
return join(claudeMarketplaceDir(claudeHome, marketplaceName), "plugins", pluginName);
|
|
128
|
+
}
|
|
129
|
+
export function claudeKnownMarketplacesPath(claudeHome) {
|
|
130
|
+
return join(claudeHome, "plugins", "known_marketplaces.json");
|
|
131
|
+
}
|
|
132
|
+
export function readClaudePluginManifest(pluginRoot) {
|
|
133
|
+
const manifestPath = join(pluginRoot, ".claude-plugin", "plugin.json");
|
|
134
|
+
return readJson(manifestPath, null);
|
|
135
|
+
}
|
|
109
136
|
function marketplaceDisplayName(marketplaceName) {
|
|
110
137
|
return marketplaceName
|
|
111
138
|
.split("-")
|
|
@@ -123,15 +150,10 @@ function categoryFrom(manifest) {
|
|
|
123
150
|
return "Developer Tools";
|
|
124
151
|
}
|
|
125
152
|
function manifestForCodexInstall(manifest) {
|
|
126
|
-
|
|
127
|
-
if (name !== "enact-operator" && name !== "enact-extensions")
|
|
128
|
-
return manifest;
|
|
129
|
-
const clone = { ...manifest };
|
|
130
|
-
delete clone.hooks;
|
|
131
|
-
return clone;
|
|
153
|
+
return manifest;
|
|
132
154
|
}
|
|
133
155
|
function upsertMarketplaceEntry(codexHome, marketplaceName, manifest, pluginName) {
|
|
134
|
-
const path =
|
|
156
|
+
const path = codexMarketplacePath(codexHome, marketplaceName);
|
|
135
157
|
const current = readJson(path, {
|
|
136
158
|
name: marketplaceName,
|
|
137
159
|
interface: { displayName: marketplaceDisplayName(marketplaceName) },
|
|
@@ -177,7 +199,7 @@ export function installCodexPluginBundle(options) {
|
|
|
177
199
|
const pluginConfigKey = `${name}@${marketplaceName}`;
|
|
178
200
|
const config = readCodexConfig(codexHome);
|
|
179
201
|
ensureMarketplace(config, marketplaceName, {
|
|
180
|
-
source:
|
|
202
|
+
source: codexMarketplaceRoot(codexHome, marketplaceName),
|
|
181
203
|
source_type: "local",
|
|
182
204
|
});
|
|
183
205
|
if (options.enable !== false) {
|
|
@@ -185,12 +207,12 @@ export function installCodexPluginBundle(options) {
|
|
|
185
207
|
}
|
|
186
208
|
const configPath = writeCodexConfig(codexHome, config);
|
|
187
209
|
const mktPath = upsertMarketplaceEntry(codexHome, marketplaceName, installManifest, name);
|
|
188
|
-
const mktPluginPath =
|
|
189
|
-
const installedPath =
|
|
190
|
-
const cachePath =
|
|
191
|
-
projectBundle(options.pluginRoot, mktPluginPath, installManifest, ".codex-plugin");
|
|
192
|
-
projectBundle(options.pluginRoot, installedPath, installManifest, ".codex-plugin");
|
|
193
|
-
projectBundle(options.pluginRoot, cachePath, installManifest, ".codex-plugin");
|
|
210
|
+
const mktPluginPath = codexMarketplacePluginPath(codexHome, marketplaceName, name);
|
|
211
|
+
const installedPath = codexInstalledPluginPath(codexHome, name);
|
|
212
|
+
const cachePath = codexPluginCachePath(codexHome, marketplaceName, name, version);
|
|
213
|
+
projectBundle(options.pluginRoot, mktPluginPath, "codex", installManifest, ".codex-plugin");
|
|
214
|
+
projectBundle(options.pluginRoot, installedPath, "codex", installManifest, ".codex-plugin");
|
|
215
|
+
projectBundle(options.pluginRoot, cachePath, "codex", installManifest, ".codex-plugin");
|
|
194
216
|
return {
|
|
195
217
|
name,
|
|
196
218
|
version,
|
|
@@ -216,6 +238,83 @@ export function installPluginBundle(options) {
|
|
|
216
238
|
}));
|
|
217
239
|
return { codexHomes, results };
|
|
218
240
|
}
|
|
241
|
+
export function installCodexPluginBundleWithProvision(options) {
|
|
242
|
+
const result = installCodexPluginBundle(options);
|
|
243
|
+
const provision = provisionMcp(options.pluginRoot, {
|
|
244
|
+
noProvision: options.noProvision,
|
|
245
|
+
exec: options.provisionExec,
|
|
246
|
+
});
|
|
247
|
+
return {
|
|
248
|
+
...result,
|
|
249
|
+
provision,
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
export function installPluginBundleWithProvision(options) {
|
|
253
|
+
const result = installPluginBundle(options);
|
|
254
|
+
const provision = provisionMcp(options.pluginRoot, {
|
|
255
|
+
noProvision: options.noProvision,
|
|
256
|
+
exec: options.provisionExec,
|
|
257
|
+
});
|
|
258
|
+
return {
|
|
259
|
+
...result,
|
|
260
|
+
provision,
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
export function codexPluginStatus(codexHome, pluginName, marketplaceName = "enact-os-plugins") {
|
|
264
|
+
const pluginConfigKey = `${pluginName}@${marketplaceName}`;
|
|
265
|
+
const installedPath = codexInstalledPluginPath(codexHome, pluginName);
|
|
266
|
+
const cacheRoot = codexPluginCacheRoot(codexHome, marketplaceName, pluginName);
|
|
267
|
+
const config = readCodexConfig(codexHome);
|
|
268
|
+
const cachedVersions = existsSync(cacheRoot)
|
|
269
|
+
? readdirSync(cacheRoot, { withFileTypes: true }).filter((entry) => entry.isDirectory()).map((entry) => entry.name).sort()
|
|
270
|
+
: [];
|
|
271
|
+
const manifest = existsSync(installedPath) ? readCodexPluginManifest(installedPath) : null;
|
|
272
|
+
return {
|
|
273
|
+
name: pluginName,
|
|
274
|
+
enabled: isPluginEnabled(config, pluginConfigKey),
|
|
275
|
+
installed: existsSync(installedPath),
|
|
276
|
+
cachedVersions,
|
|
277
|
+
manifest,
|
|
278
|
+
pluginConfigKey,
|
|
279
|
+
marketplaceName,
|
|
280
|
+
installedPluginPath: installedPath,
|
|
281
|
+
marketplacePluginPath: codexMarketplacePluginPath(codexHome, marketplaceName, pluginName),
|
|
282
|
+
cacheRoot,
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
export function setInstalledCodexPluginEnabled(codexHome, pluginName, enabled, marketplaceName = "enact-os-plugins") {
|
|
286
|
+
const config = readCodexConfig(codexHome);
|
|
287
|
+
setPluginEnabled(config, `${pluginName}@${marketplaceName}`, enabled);
|
|
288
|
+
writeCodexConfig(codexHome, config);
|
|
289
|
+
return codexPluginStatus(codexHome, pluginName, marketplaceName);
|
|
290
|
+
}
|
|
291
|
+
export function runCodexPluginsDoctor(codexHome = defaultCodexHome(), marketplaceName = "enact-os-plugins") {
|
|
292
|
+
const config = readCodexConfig(codexHome);
|
|
293
|
+
const marketplace = readJson(codexMarketplacePath(codexHome, marketplaceName), {
|
|
294
|
+
name: marketplaceName,
|
|
295
|
+
interface: { displayName: marketplaceDisplayName(marketplaceName) },
|
|
296
|
+
plugins: [],
|
|
297
|
+
});
|
|
298
|
+
const installedPluginsDir = join(codexMarketplaceRoot(codexHome, marketplaceName), "plugins");
|
|
299
|
+
const installedPlugins = existsSync(installedPluginsDir)
|
|
300
|
+
? readdirSync(installedPluginsDir, { withFileTypes: true }).filter((entry) => entry.isDirectory()).map((entry) => entry.name)
|
|
301
|
+
: [];
|
|
302
|
+
const warnings = [];
|
|
303
|
+
for (const entry of marketplace.plugins) {
|
|
304
|
+
if (!installedPlugins.includes(entry.name) && isPluginEnabled(config, `${entry.name}@${marketplaceName}`)) {
|
|
305
|
+
warnings.push(`plugin ${entry.name} enabled in config but not installed locally`);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
return {
|
|
309
|
+
configPlugins: Object.keys(config.plugins ?? {}).sort(),
|
|
310
|
+
marketplaceConfigured: Boolean(config.marketplaces?.[marketplaceName]),
|
|
311
|
+
marketplaceRoot: codexMarketplaceRoot(codexHome, marketplaceName),
|
|
312
|
+
marketplacePath: codexMarketplacePath(codexHome, marketplaceName),
|
|
313
|
+
marketplacePlugins: marketplace.plugins.map((plugin) => plugin.name).sort(),
|
|
314
|
+
installedPlugins: installedPlugins.sort(),
|
|
315
|
+
warnings,
|
|
316
|
+
};
|
|
317
|
+
}
|
|
219
318
|
export function installClaudePluginBundle(options) {
|
|
220
319
|
const claudeHome = options.claudeHome ?? defaultClaudeHome();
|
|
221
320
|
const marketplaceName = options.marketplaceName ?? "enact-os-plugins";
|
|
@@ -232,7 +331,7 @@ export function installClaudePluginBundle(options) {
|
|
|
232
331
|
const version = stringField(claudeManifest, "version") ?? "0.0.0";
|
|
233
332
|
const marketplaceDir = join(claudeHome, "plugins", "marketplaces", marketplaceName);
|
|
234
333
|
const installedPath = join(marketplaceDir, "plugins", name);
|
|
235
|
-
projectBundle(options.pluginRoot, installedPath, claudeManifest, ".claude-plugin");
|
|
334
|
+
projectBundle(options.pluginRoot, installedPath, "claude", claudeManifest, ".claude-plugin");
|
|
236
335
|
registerLocalMarketplace(claudeHome, marketplaceName, marketplaceDir);
|
|
237
336
|
return {
|
|
238
337
|
name,
|
|
@@ -244,6 +343,59 @@ export function installClaudePluginBundle(options) {
|
|
|
244
343
|
syncResults: [],
|
|
245
344
|
};
|
|
246
345
|
}
|
|
346
|
+
export function installClaudePluginBundleWithProvision(options) {
|
|
347
|
+
const result = installClaudePluginBundle(options);
|
|
348
|
+
const provision = provisionMcp(options.pluginRoot, {
|
|
349
|
+
noProvision: options.noProvision,
|
|
350
|
+
exec: options.provisionExec,
|
|
351
|
+
});
|
|
352
|
+
return {
|
|
353
|
+
...result,
|
|
354
|
+
provision,
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
export function claudePluginStatus(claudeHome, pluginName, marketplaceName = "enact-os-plugins") {
|
|
358
|
+
const marketplaceDir = claudeMarketplaceDir(claudeHome, marketplaceName);
|
|
359
|
+
const knownMarketplaces = readKnownMarketplaces(claudeHome);
|
|
360
|
+
const installedPath = claudeInstalledPluginPath(claudeHome, marketplaceName, pluginName);
|
|
361
|
+
const manifest = existsSync(installedPath) ? readClaudePluginManifest(installedPath) : null;
|
|
362
|
+
return {
|
|
363
|
+
name: pluginName,
|
|
364
|
+
installed: existsSync(installedPath),
|
|
365
|
+
manifest,
|
|
366
|
+
marketplaceName,
|
|
367
|
+
marketplaceDir,
|
|
368
|
+
installedPluginPath: installedPath,
|
|
369
|
+
knownMarketplaceRegistered: Boolean(knownMarketplaces[marketplaceName]),
|
|
370
|
+
knownMarketplacesPath: claudeKnownMarketplacesPath(claudeHome),
|
|
371
|
+
};
|
|
372
|
+
}
|
|
373
|
+
export function runClaudePluginsDoctor(claudeHome = defaultClaudeHome(), marketplaceName = "enact-os-plugins") {
|
|
374
|
+
const marketplaceDir = claudeMarketplaceDir(claudeHome, marketplaceName);
|
|
375
|
+
const knownMarketplaces = readKnownMarketplaces(claudeHome);
|
|
376
|
+
const installedPluginsDir = join(marketplaceDir, "plugins");
|
|
377
|
+
const installedPlugins = existsSync(installedPluginsDir)
|
|
378
|
+
? readdirSync(installedPluginsDir, { withFileTypes: true })
|
|
379
|
+
.filter((entry) => entry.isDirectory())
|
|
380
|
+
.map((entry) => entry.name)
|
|
381
|
+
: [];
|
|
382
|
+
const warnings = [];
|
|
383
|
+
if (!knownMarketplaces[marketplaceName] && installedPlugins.length > 0) {
|
|
384
|
+
warnings.push(`marketplace ${marketplaceName} has installed plugins but is not registered in known_marketplaces.json`);
|
|
385
|
+
}
|
|
386
|
+
if (knownMarketplaces[marketplaceName] && !existsSync(marketplaceDir)) {
|
|
387
|
+
warnings.push(`marketplace ${marketplaceName} registered in known_marketplaces.json but install directory is missing`);
|
|
388
|
+
}
|
|
389
|
+
return {
|
|
390
|
+
marketplaceName,
|
|
391
|
+
marketplaceDir,
|
|
392
|
+
knownMarketplacesPath: claudeKnownMarketplacesPath(claudeHome),
|
|
393
|
+
marketplaceRegistered: Boolean(knownMarketplaces[marketplaceName]),
|
|
394
|
+
marketplacePlugins: installedPlugins.slice().sort(),
|
|
395
|
+
installedPlugins: installedPlugins.sort(),
|
|
396
|
+
warnings,
|
|
397
|
+
};
|
|
398
|
+
}
|
|
247
399
|
export function installCursorPluginBundle(options) {
|
|
248
400
|
const cursorHome = options.cursorHome ?? defaultCursorHome();
|
|
249
401
|
// Per-surface manifest derived IN MEMORY; install never writes to source.
|
|
@@ -258,7 +410,7 @@ export function installCursorPluginBundle(options) {
|
|
|
258
410
|
}
|
|
259
411
|
const version = stringField(cursorManifest, "version") ?? "0.0.0";
|
|
260
412
|
const installedPath = join(cursorHome, "plugins", "local", name);
|
|
261
|
-
projectBundle(options.pluginRoot, installedPath, cursorManifest, ".cursor-plugin");
|
|
413
|
+
projectBundle(options.pluginRoot, installedPath, "cursor", cursorManifest, ".cursor-plugin");
|
|
262
414
|
return {
|
|
263
415
|
name,
|
|
264
416
|
version,
|
|
@@ -285,7 +437,7 @@ function assertWithinBase(base, target) {
|
|
|
285
437
|
* Other plugin entries are preserved.
|
|
286
438
|
*/
|
|
287
439
|
function removeMarketplaceEntry(codexHome, marketplaceName, pluginName) {
|
|
288
|
-
const path =
|
|
440
|
+
const path = codexMarketplacePath(codexHome, marketplaceName);
|
|
289
441
|
if (!existsSync(path))
|
|
290
442
|
return;
|
|
291
443
|
const current = readJson(path, { name: marketplaceName, plugins: [] });
|
|
@@ -308,8 +460,8 @@ export function uninstallCodexPluginBundle(name, options = {}) {
|
|
|
308
460
|
const codexHome = options.codexHome ?? defaultCodexHome();
|
|
309
461
|
const mktName = options.marketplaceName ?? "enact-os-plugins";
|
|
310
462
|
const pluginConfigKey = `${name}@${mktName}`;
|
|
311
|
-
const installedPath =
|
|
312
|
-
const mktPluginPath =
|
|
463
|
+
const installedPath = codexInstalledPluginPath(codexHome, name);
|
|
464
|
+
const mktPluginPath = codexMarketplacePluginPath(codexHome, mktName, name);
|
|
313
465
|
// Cache dir is versioned; remove the entire <cache>/<marketplace>/<name>/ subtree
|
|
314
466
|
const cacheDirForPlugin = join(codexHome, "plugins", "cache", mktName, name);
|
|
315
467
|
const noop = !existsSync(installedPath) &&
|