@a1st/aix-core 0.0.3
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/dist/backup.d.ts +12 -0
- package/dist/backup.d.ts.map +1 -0
- package/dist/backup.js +70 -0
- package/dist/backup.js.map +1 -0
- package/dist/cache/cleanup.d.ts +14 -0
- package/dist/cache/cleanup.d.ts.map +1 -0
- package/dist/cache/cleanup.js +61 -0
- package/dist/cache/cleanup.js.map +1 -0
- package/dist/cache/clear.d.ts +10 -0
- package/dist/cache/clear.d.ts.map +1 -0
- package/dist/cache/clear.js +30 -0
- package/dist/cache/clear.js.map +1 -0
- package/dist/cache/index.d.ts +5 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +5 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/paths.d.ts +57 -0
- package/dist/cache/paths.d.ts.map +1 -0
- package/dist/cache/paths.js +86 -0
- package/dist/cache/paths.js.map +1 -0
- package/dist/cache/status.d.ts +21 -0
- package/dist/cache/status.d.ts.map +1 -0
- package/dist/cache/status.js +67 -0
- package/dist/cache/status.js.map +1 -0
- package/dist/discovery.d.ts +14 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +96 -0
- package/dist/discovery.js.map +1 -0
- package/dist/editors/adapters/base.d.ts +101 -0
- package/dist/editors/adapters/base.d.ts.map +1 -0
- package/dist/editors/adapters/base.js +399 -0
- package/dist/editors/adapters/base.js.map +1 -0
- package/dist/editors/adapters/claude-code.d.ts +27 -0
- package/dist/editors/adapters/claude-code.d.ts.map +1 -0
- package/dist/editors/adapters/claude-code.js +46 -0
- package/dist/editors/adapters/claude-code.js.map +1 -0
- package/dist/editors/adapters/codex.d.ts +30 -0
- package/dist/editors/adapters/codex.d.ts.map +1 -0
- package/dist/editors/adapters/codex.js +56 -0
- package/dist/editors/adapters/codex.js.map +1 -0
- package/dist/editors/adapters/cursor.d.ts +23 -0
- package/dist/editors/adapters/cursor.d.ts.map +1 -0
- package/dist/editors/adapters/cursor.js +39 -0
- package/dist/editors/adapters/cursor.js.map +1 -0
- package/dist/editors/adapters/index.d.ts +8 -0
- package/dist/editors/adapters/index.d.ts.map +1 -0
- package/dist/editors/adapters/index.js +8 -0
- package/dist/editors/adapters/index.js.map +1 -0
- package/dist/editors/adapters/vscode.d.ts +23 -0
- package/dist/editors/adapters/vscode.d.ts.map +1 -0
- package/dist/editors/adapters/vscode.js +36 -0
- package/dist/editors/adapters/vscode.js.map +1 -0
- package/dist/editors/adapters/windsurf.d.ts +23 -0
- package/dist/editors/adapters/windsurf.d.ts.map +1 -0
- package/dist/editors/adapters/windsurf.js +38 -0
- package/dist/editors/adapters/windsurf.js.map +1 -0
- package/dist/editors/adapters/zed.d.ts +29 -0
- package/dist/editors/adapters/zed.d.ts.map +1 -0
- package/dist/editors/adapters/zed.js +61 -0
- package/dist/editors/adapters/zed.js.map +1 -0
- package/dist/editors/import.d.ts +31 -0
- package/dist/editors/import.d.ts.map +1 -0
- package/dist/editors/import.js +271 -0
- package/dist/editors/import.js.map +1 -0
- package/dist/editors/index.d.ts +6 -0
- package/dist/editors/index.d.ts.map +1 -0
- package/dist/editors/index.js +4 -0
- package/dist/editors/index.js.map +1 -0
- package/dist/editors/install.d.ts +33 -0
- package/dist/editors/install.d.ts.map +1 -0
- package/dist/editors/install.js +186 -0
- package/dist/editors/install.js.map +1 -0
- package/dist/editors/strategies/claude-code/hooks.d.ts +13 -0
- package/dist/editors/strategies/claude-code/hooks.d.ts.map +1 -0
- package/dist/editors/strategies/claude-code/hooks.js +61 -0
- package/dist/editors/strategies/claude-code/hooks.js.map +1 -0
- package/dist/editors/strategies/claude-code/index.d.ts +5 -0
- package/dist/editors/strategies/claude-code/index.d.ts.map +1 -0
- package/dist/editors/strategies/claude-code/index.js +5 -0
- package/dist/editors/strategies/claude-code/index.js.map +1 -0
- package/dist/editors/strategies/claude-code/mcp.d.ts +10 -0
- package/dist/editors/strategies/claude-code/mcp.d.ts.map +1 -0
- package/dist/editors/strategies/claude-code/mcp.js +17 -0
- package/dist/editors/strategies/claude-code/mcp.js.map +1 -0
- package/dist/editors/strategies/claude-code/prompts.d.ts +18 -0
- package/dist/editors/strategies/claude-code/prompts.d.ts.map +1 -0
- package/dist/editors/strategies/claude-code/prompts.js +42 -0
- package/dist/editors/strategies/claude-code/prompts.js.map +1 -0
- package/dist/editors/strategies/claude-code/rules.d.ts +17 -0
- package/dist/editors/strategies/claude-code/rules.d.ts.map +1 -0
- package/dist/editors/strategies/claude-code/rules.js +61 -0
- package/dist/editors/strategies/claude-code/rules.js.map +1 -0
- package/dist/editors/strategies/codex/index.d.ts +4 -0
- package/dist/editors/strategies/codex/index.d.ts.map +1 -0
- package/dist/editors/strategies/codex/index.js +4 -0
- package/dist/editors/strategies/codex/index.js.map +1 -0
- package/dist/editors/strategies/codex/mcp.d.ts +18 -0
- package/dist/editors/strategies/codex/mcp.d.ts.map +1 -0
- package/dist/editors/strategies/codex/mcp.js +93 -0
- package/dist/editors/strategies/codex/mcp.js.map +1 -0
- package/dist/editors/strategies/codex/prompts.d.ts +37 -0
- package/dist/editors/strategies/codex/prompts.d.ts.map +1 -0
- package/dist/editors/strategies/codex/prompts.js +82 -0
- package/dist/editors/strategies/codex/prompts.js.map +1 -0
- package/dist/editors/strategies/codex/rules.d.ts +17 -0
- package/dist/editors/strategies/codex/rules.d.ts.map +1 -0
- package/dist/editors/strategies/codex/rules.js +35 -0
- package/dist/editors/strategies/codex/rules.js.map +1 -0
- package/dist/editors/strategies/cursor/hooks.d.ts +13 -0
- package/dist/editors/strategies/cursor/hooks.d.ts.map +1 -0
- package/dist/editors/strategies/cursor/hooks.js +54 -0
- package/dist/editors/strategies/cursor/hooks.js.map +1 -0
- package/dist/editors/strategies/cursor/index.d.ts +4 -0
- package/dist/editors/strategies/cursor/index.d.ts.map +1 -0
- package/dist/editors/strategies/cursor/index.js +4 -0
- package/dist/editors/strategies/cursor/index.js.map +1 -0
- package/dist/editors/strategies/cursor/prompts.d.ts +18 -0
- package/dist/editors/strategies/cursor/prompts.d.ts.map +1 -0
- package/dist/editors/strategies/cursor/prompts.js +67 -0
- package/dist/editors/strategies/cursor/prompts.js.map +1 -0
- package/dist/editors/strategies/cursor/rules.d.ts +17 -0
- package/dist/editors/strategies/cursor/rules.d.ts.map +1 -0
- package/dist/editors/strategies/cursor/rules.js +41 -0
- package/dist/editors/strategies/cursor/rules.js.map +1 -0
- package/dist/editors/strategies/index.d.ts +9 -0
- package/dist/editors/strategies/index.d.ts.map +1 -0
- package/dist/editors/strategies/index.js +10 -0
- package/dist/editors/strategies/index.js.map +1 -0
- package/dist/editors/strategies/shared/global-mcp.d.ts +74 -0
- package/dist/editors/strategies/shared/global-mcp.d.ts.map +1 -0
- package/dist/editors/strategies/shared/global-mcp.js +85 -0
- package/dist/editors/strategies/shared/global-mcp.js.map +1 -0
- package/dist/editors/strategies/shared/index.d.ts +8 -0
- package/dist/editors/strategies/shared/index.d.ts.map +1 -0
- package/dist/editors/strategies/shared/index.js +8 -0
- package/dist/editors/strategies/shared/index.js.map +1 -0
- package/dist/editors/strategies/shared/native-skills.d.ts +19 -0
- package/dist/editors/strategies/shared/native-skills.d.ts.map +1 -0
- package/dist/editors/strategies/shared/native-skills.js +72 -0
- package/dist/editors/strategies/shared/native-skills.js.map +1 -0
- package/dist/editors/strategies/shared/no-hooks.d.ts +13 -0
- package/dist/editors/strategies/shared/no-hooks.d.ts.map +1 -0
- package/dist/editors/strategies/shared/no-hooks.js +19 -0
- package/dist/editors/strategies/shared/no-hooks.js.map +1 -0
- package/dist/editors/strategies/shared/no-mcp.d.ts +16 -0
- package/dist/editors/strategies/shared/no-mcp.d.ts.map +1 -0
- package/dist/editors/strategies/shared/no-mcp.js +21 -0
- package/dist/editors/strategies/shared/no-mcp.js.map +1 -0
- package/dist/editors/strategies/shared/no-prompts.d.ts +17 -0
- package/dist/editors/strategies/shared/no-prompts.d.ts.map +1 -0
- package/dist/editors/strategies/shared/no-prompts.js +24 -0
- package/dist/editors/strategies/shared/no-prompts.js.map +1 -0
- package/dist/editors/strategies/shared/pointer-skills.d.ts +17 -0
- package/dist/editors/strategies/shared/pointer-skills.d.ts.map +1 -0
- package/dist/editors/strategies/shared/pointer-skills.js +72 -0
- package/dist/editors/strategies/shared/pointer-skills.js.map +1 -0
- package/dist/editors/strategies/shared/standard-mcp.d.ts +16 -0
- package/dist/editors/strategies/shared/standard-mcp.d.ts.map +1 -0
- package/dist/editors/strategies/shared/standard-mcp.js +68 -0
- package/dist/editors/strategies/shared/standard-mcp.js.map +1 -0
- package/dist/editors/strategies/types.d.ts +126 -0
- package/dist/editors/strategies/types.d.ts.map +1 -0
- package/dist/editors/strategies/types.js +2 -0
- package/dist/editors/strategies/types.js.map +1 -0
- package/dist/editors/strategies/vscode/index.d.ts +4 -0
- package/dist/editors/strategies/vscode/index.d.ts.map +1 -0
- package/dist/editors/strategies/vscode/index.js +4 -0
- package/dist/editors/strategies/vscode/index.js.map +1 -0
- package/dist/editors/strategies/vscode/mcp.d.ts +17 -0
- package/dist/editors/strategies/vscode/mcp.d.ts.map +1 -0
- package/dist/editors/strategies/vscode/mcp.js +85 -0
- package/dist/editors/strategies/vscode/mcp.js.map +1 -0
- package/dist/editors/strategies/vscode/prompts.d.ts +18 -0
- package/dist/editors/strategies/vscode/prompts.d.ts.map +1 -0
- package/dist/editors/strategies/vscode/prompts.js +81 -0
- package/dist/editors/strategies/vscode/prompts.js.map +1 -0
- package/dist/editors/strategies/vscode/rules.d.ts +17 -0
- package/dist/editors/strategies/vscode/rules.d.ts.map +1 -0
- package/dist/editors/strategies/vscode/rules.js +38 -0
- package/dist/editors/strategies/vscode/rules.js.map +1 -0
- package/dist/editors/strategies/windsurf/hooks.d.ts +13 -0
- package/dist/editors/strategies/windsurf/hooks.d.ts.map +1 -0
- package/dist/editors/strategies/windsurf/hooks.js +61 -0
- package/dist/editors/strategies/windsurf/hooks.js.map +1 -0
- package/dist/editors/strategies/windsurf/index.d.ts +6 -0
- package/dist/editors/strategies/windsurf/index.d.ts.map +1 -0
- package/dist/editors/strategies/windsurf/index.js +6 -0
- package/dist/editors/strategies/windsurf/index.js.map +1 -0
- package/dist/editors/strategies/windsurf/mcp.d.ts +8 -0
- package/dist/editors/strategies/windsurf/mcp.d.ts.map +1 -0
- package/dist/editors/strategies/windsurf/mcp.js +99 -0
- package/dist/editors/strategies/windsurf/mcp.js.map +1 -0
- package/dist/editors/strategies/windsurf/prompts.d.ts +18 -0
- package/dist/editors/strategies/windsurf/prompts.d.ts.map +1 -0
- package/dist/editors/strategies/windsurf/prompts.js +68 -0
- package/dist/editors/strategies/windsurf/prompts.js.map +1 -0
- package/dist/editors/strategies/windsurf/rules.d.ts +17 -0
- package/dist/editors/strategies/windsurf/rules.d.ts.map +1 -0
- package/dist/editors/strategies/windsurf/rules.js +55 -0
- package/dist/editors/strategies/windsurf/rules.js.map +1 -0
- package/dist/editors/strategies/windsurf/skills.d.ts +9 -0
- package/dist/editors/strategies/windsurf/skills.d.ts.map +1 -0
- package/dist/editors/strategies/windsurf/skills.js +11 -0
- package/dist/editors/strategies/windsurf/skills.js.map +1 -0
- package/dist/editors/strategies/zed/index.d.ts +4 -0
- package/dist/editors/strategies/zed/index.d.ts.map +1 -0
- package/dist/editors/strategies/zed/index.js +4 -0
- package/dist/editors/strategies/zed/index.js.map +1 -0
- package/dist/editors/strategies/zed/mcp.d.ts +17 -0
- package/dist/editors/strategies/zed/mcp.d.ts.map +1 -0
- package/dist/editors/strategies/zed/mcp.js +68 -0
- package/dist/editors/strategies/zed/mcp.js.map +1 -0
- package/dist/editors/strategies/zed/prompts.d.ts +18 -0
- package/dist/editors/strategies/zed/prompts.d.ts.map +1 -0
- package/dist/editors/strategies/zed/prompts.js +25 -0
- package/dist/editors/strategies/zed/prompts.js.map +1 -0
- package/dist/editors/strategies/zed/rules.d.ts +17 -0
- package/dist/editors/strategies/zed/rules.d.ts.map +1 -0
- package/dist/editors/strategies/zed/rules.js +33 -0
- package/dist/editors/strategies/zed/rules.js.map +1 -0
- package/dist/editors/types.d.ts +164 -0
- package/dist/editors/types.d.ts.map +1 -0
- package/dist/editors/types.js +2 -0
- package/dist/editors/types.js.map +1 -0
- package/dist/env/ci.d.ts +6 -0
- package/dist/env/ci.d.ts.map +1 -0
- package/dist/env/ci.js +22 -0
- package/dist/env/ci.js.map +1 -0
- package/dist/env/index.d.ts +2 -0
- package/dist/env/index.d.ts.map +1 -0
- package/dist/env/index.js +2 -0
- package/dist/env/index.js.map +1 -0
- package/dist/errors.d.ts +44 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +68 -0
- package/dist/errors.js.map +1 -0
- package/dist/format-error.d.ts +18 -0
- package/dist/format-error.d.ts.map +1 -0
- package/dist/format-error.js +113 -0
- package/dist/format-error.js.map +1 -0
- package/dist/fs/safe-rm.d.ts +20 -0
- package/dist/fs/safe-rm.d.ts.map +1 -0
- package/dist/fs/safe-rm.js +129 -0
- package/dist/fs/safe-rm.js.map +1 -0
- package/dist/git-loader.d.ts +21 -0
- package/dist/git-loader.d.ts.map +1 -0
- package/dist/git-loader.js +61 -0
- package/dist/git-loader.js.map +1 -0
- package/dist/global/comparison.d.ts +16 -0
- package/dist/global/comparison.d.ts.map +1 -0
- package/dist/global/comparison.js +52 -0
- package/dist/global/comparison.js.map +1 -0
- package/dist/global/index.d.ts +5 -0
- package/dist/global/index.d.ts.map +1 -0
- package/dist/global/index.js +4 -0
- package/dist/global/index.js.map +1 -0
- package/dist/global/processor.d.ts +26 -0
- package/dist/global/processor.d.ts.map +1 -0
- package/dist/global/processor.js +318 -0
- package/dist/global/processor.js.map +1 -0
- package/dist/global/tracking.d.ts +109 -0
- package/dist/global/tracking.d.ts.map +1 -0
- package/dist/global/tracking.js +193 -0
- package/dist/global/tracking.js.map +1 -0
- package/dist/global/types.d.ts +54 -0
- package/dist/global/types.d.ts.map +1 -0
- package/dist/global/types.js +2 -0
- package/dist/global/types.js.map +1 -0
- package/dist/import-writer.d.ts +37 -0
- package/dist/import-writer.d.ts.map +1 -0
- package/dist/import-writer.js +129 -0
- package/dist/import-writer.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/inheritance.d.ts +9 -0
- package/dist/inheritance.d.ts.map +1 -0
- package/dist/inheritance.js +133 -0
- package/dist/inheritance.js.map +1 -0
- package/dist/json.d.ts +75 -0
- package/dist/json.d.ts.map +1 -0
- package/dist/json.js +123 -0
- package/dist/json.js.map +1 -0
- package/dist/loader.d.ts +35 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +147 -0
- package/dist/loader.js.map +1 -0
- package/dist/mcp/env.d.ts +28 -0
- package/dist/mcp/env.d.ts.map +1 -0
- package/dist/mcp/env.js +47 -0
- package/dist/mcp/env.js.map +1 -0
- package/dist/mcp/index.d.ts +4 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +4 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/normalize.d.ts +33 -0
- package/dist/mcp/normalize.d.ts.map +1 -0
- package/dist/mcp/normalize.js +29 -0
- package/dist/mcp/normalize.js.map +1 -0
- package/dist/mcp/templates.d.ts +18 -0
- package/dist/mcp/templates.d.ts.map +1 -0
- package/dist/mcp/templates.js +66 -0
- package/dist/mcp/templates.js.map +1 -0
- package/dist/merge.d.ts +29 -0
- package/dist/merge.d.ts.map +1 -0
- package/dist/merge.js +154 -0
- package/dist/merge.js.map +1 -0
- package/dist/npm/index.d.ts +2 -0
- package/dist/npm/index.d.ts.map +1 -0
- package/dist/npm/index.js +2 -0
- package/dist/npm/index.js.map +1 -0
- package/dist/npm/resolve.d.ts +16 -0
- package/dist/npm/resolve.d.ts.map +1 -0
- package/dist/npm/resolve.js +42 -0
- package/dist/npm/resolve.js.map +1 -0
- package/dist/prompts/index.d.ts +2 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +2 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/loader.d.ts +23 -0
- package/dist/prompts/loader.d.ts.map +1 -0
- package/dist/prompts/loader.js +115 -0
- package/dist/prompts/loader.js.map +1 -0
- package/dist/remote-loader.d.ts +29 -0
- package/dist/remote-loader.d.ts.map +1 -0
- package/dist/remote-loader.js +208 -0
- package/dist/remote-loader.js.map +1 -0
- package/dist/rules/index.d.ts +6 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +6 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/interpolate.d.ts +27 -0
- package/dist/rules/interpolate.d.ts.map +1 -0
- package/dist/rules/interpolate.js +48 -0
- package/dist/rules/interpolate.js.map +1 -0
- package/dist/rules/loader.d.ts +27 -0
- package/dist/rules/loader.d.ts.map +1 -0
- package/dist/rules/loader.js +94 -0
- package/dist/rules/loader.js.map +1 -0
- package/dist/rules/merger.d.ts +37 -0
- package/dist/rules/merger.d.ts.map +1 -0
- package/dist/rules/merger.js +93 -0
- package/dist/rules/merger.js.map +1 -0
- package/dist/rules/skill-rules.d.ts +13 -0
- package/dist/rules/skill-rules.d.ts.map +1 -0
- package/dist/rules/skill-rules.js +70 -0
- package/dist/rules/skill-rules.js.map +1 -0
- package/dist/rules/utils.d.ts +36 -0
- package/dist/rules/utils.d.ts.map +1 -0
- package/dist/rules/utils.js +82 -0
- package/dist/rules/utils.js.map +1 -0
- package/dist/skills/cache.d.ts +10 -0
- package/dist/skills/cache.d.ts.map +1 -0
- package/dist/skills/cache.js +20 -0
- package/dist/skills/cache.js.map +1 -0
- package/dist/skills/index.d.ts +9 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +9 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/parser.d.ts +6 -0
- package/dist/skills/parser.d.ts.map +1 -0
- package/dist/skills/parser.js +28 -0
- package/dist/skills/parser.js.map +1 -0
- package/dist/skills/reference-parser.d.ts +23 -0
- package/dist/skills/reference-parser.d.ts.map +1 -0
- package/dist/skills/reference-parser.js +162 -0
- package/dist/skills/reference-parser.js.map +1 -0
- package/dist/skills/resolve.d.ts +21 -0
- package/dist/skills/resolve.d.ts.map +1 -0
- package/dist/skills/resolve.js +43 -0
- package/dist/skills/resolve.js.map +1 -0
- package/dist/skills/resolvers/git.d.ts +8 -0
- package/dist/skills/resolvers/git.d.ts.map +1 -0
- package/dist/skills/resolvers/git.js +43 -0
- package/dist/skills/resolvers/git.js.map +1 -0
- package/dist/skills/resolvers/local.d.ts +7 -0
- package/dist/skills/resolvers/local.d.ts.map +1 -0
- package/dist/skills/resolvers/local.js +16 -0
- package/dist/skills/resolvers/local.js.map +1 -0
- package/dist/skills/resolvers/npm.d.ts +12 -0
- package/dist/skills/resolvers/npm.d.ts.map +1 -0
- package/dist/skills/resolvers/npm.js +28 -0
- package/dist/skills/resolvers/npm.js.map +1 -0
- package/dist/skills/validate.d.ts +11 -0
- package/dist/skills/validate.d.ts.map +1 -0
- package/dist/skills/validate.js +43 -0
- package/dist/skills/validate.js.map +1 -0
- package/dist/updater.d.ts +23 -0
- package/dist/updater.d.ts.map +1 -0
- package/dist/updater.js +100 -0
- package/dist/updater.js.map +1 -0
- package/dist/url-parsing.d.ts +121 -0
- package/dist/url-parsing.d.ts.map +1 -0
- package/dist/url-parsing.js +199 -0
- package/dist/url-parsing.js.map +1 -0
- package/package.json +41 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { McpServerConfig } from '@a1st/aix-schema';
|
|
2
|
+
import type { EditorName } from '../editors/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* A request to modify global configuration.
|
|
5
|
+
*/
|
|
6
|
+
export interface GlobalChangeRequest {
|
|
7
|
+
/** Editor this change applies to */
|
|
8
|
+
editor: EditorName;
|
|
9
|
+
/** Type of global config */
|
|
10
|
+
type: 'mcp' | 'prompt';
|
|
11
|
+
/** Name of the config item (e.g., MCP server name, prompt name) */
|
|
12
|
+
name: string;
|
|
13
|
+
/** Action to perform */
|
|
14
|
+
action: 'add' | 'skip';
|
|
15
|
+
/** Reason for skipping (if action is 'skip') */
|
|
16
|
+
skipReason?: string;
|
|
17
|
+
/** Path to global config file */
|
|
18
|
+
globalPath: string;
|
|
19
|
+
/** The new config to add (for MCP) */
|
|
20
|
+
mcpConfig?: McpServerConfig;
|
|
21
|
+
/** The new content to add (for prompts) */
|
|
22
|
+
promptContent?: string;
|
|
23
|
+
/** Existing config if it already exists */
|
|
24
|
+
existingMcpConfig?: McpServerConfig;
|
|
25
|
+
/** Existing content if it already exists */
|
|
26
|
+
existingPromptContent?: string;
|
|
27
|
+
/** Whether configs match (no action needed) */
|
|
28
|
+
configsMatch?: boolean;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Result of processing global changes.
|
|
32
|
+
*/
|
|
33
|
+
export interface GlobalChangeResult {
|
|
34
|
+
/** Changes that were applied */
|
|
35
|
+
applied: GlobalChangeRequest[];
|
|
36
|
+
/** Changes that were skipped */
|
|
37
|
+
skipped: GlobalChangeRequest[];
|
|
38
|
+
/** Warnings generated during processing */
|
|
39
|
+
warnings: string[];
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Options for processing global changes.
|
|
43
|
+
*/
|
|
44
|
+
export interface GlobalChangeOptions {
|
|
45
|
+
/** If true, skip all global changes without prompting */
|
|
46
|
+
skipGlobal?: boolean;
|
|
47
|
+
/** If true, apply all global changes without prompting (for testing) */
|
|
48
|
+
autoConfirm?: boolean;
|
|
49
|
+
/** Project root path for tracking */
|
|
50
|
+
projectPath: string;
|
|
51
|
+
/** Dry run - don't actually write files */
|
|
52
|
+
dryRun?: boolean;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/global/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACjC,oCAAoC;IACpC,MAAM,EAAE,UAAU,CAAC;IACnB,4BAA4B;IAC5B,IAAI,EAAE,KAAK,GAAG,QAAQ,CAAC;IACvB,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC;IACvB,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,2CAA2C;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2CAA2C;IAC3C,iBAAiB,CAAC,EAAE,eAAe,CAAC;IACpC,4CAA4C;IAC5C,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,+CAA+C;IAC/C,YAAY,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAChC,gCAAgC;IAChC,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,gCAAgC;IAChC,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACjC,yDAAyD;IACzD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,wEAAwE;IACxE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,MAAM,CAAC,EAAE,OAAO,CAAC;CACnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/global/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { EditorName } from './editors/types.js';
|
|
2
|
+
export interface WrittenImports {
|
|
3
|
+
rules: Record<string, string>;
|
|
4
|
+
prompts: Record<string, string>;
|
|
5
|
+
}
|
|
6
|
+
export interface ImportContent {
|
|
7
|
+
rules: string[];
|
|
8
|
+
prompts: Record<string, string>;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Write imported content to staging directory and return path references.
|
|
12
|
+
* Files are written to `.aix/.tmp/import-staging/<editor>/` and path references
|
|
13
|
+
* point to the final location `.aix/imported/<editor>/`.
|
|
14
|
+
*
|
|
15
|
+
* @param projectRoot - The project root directory
|
|
16
|
+
* @param editor - The source editor name
|
|
17
|
+
* @param content - The imported content (rules and prompts)
|
|
18
|
+
* @returns Path references for rules and prompts (relative to project root)
|
|
19
|
+
*/
|
|
20
|
+
export declare function writeImportedContent(projectRoot: string, editor: EditorName, content: ImportContent): Promise<WrittenImports>;
|
|
21
|
+
/**
|
|
22
|
+
* Commit staged import: backup existing, move staging to final location, cleanup.
|
|
23
|
+
* This should be called after ai.json has been successfully written.
|
|
24
|
+
*
|
|
25
|
+
* @param projectRoot - The project root directory
|
|
26
|
+
* @param editor - The source editor name
|
|
27
|
+
*/
|
|
28
|
+
export declare function commitImport(projectRoot: string, editor: EditorName): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Rollback import: delete staging, restore backup if exists.
|
|
31
|
+
* This should be called if ai.json write or any subsequent step fails.
|
|
32
|
+
*
|
|
33
|
+
* @param projectRoot - The project root directory
|
|
34
|
+
* @param editor - The source editor name
|
|
35
|
+
*/
|
|
36
|
+
export declare function rollbackImport(projectRoot: string, editor: EditorName): Promise<void>;
|
|
37
|
+
//# sourceMappingURL=import-writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-writer.d.ts","sourceRoot":"","sources":["../src/import-writer.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrD,MAAM,WAAW,cAAc;IAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,aAAa;IAC3B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAyBD;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CACvC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,aAAa,GACtB,OAAO,CAAC,cAAc,CAAC,CAsCzB;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAkCzF;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAiC3F"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { mkdir, writeFile, rm, rename, access, constants } from 'node:fs/promises';
|
|
2
|
+
import { join } from 'pathe';
|
|
3
|
+
import { getImportedEditorDir, getImportStagingDir, getImportBackupDir, } from './cache/paths.js';
|
|
4
|
+
import { safeRm } from './fs/safe-rm.js';
|
|
5
|
+
/**
|
|
6
|
+
* Sanitize a string for use as a filename.
|
|
7
|
+
*/
|
|
8
|
+
function sanitizeFileName(name) {
|
|
9
|
+
return name
|
|
10
|
+
.toLowerCase()
|
|
11
|
+
.replace(/[^a-z0-9-]/g, '-')
|
|
12
|
+
.replace(/-+/g, '-')
|
|
13
|
+
.replace(/^-|-$/g, '');
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Check if a directory exists.
|
|
17
|
+
*/
|
|
18
|
+
async function dirExists(path) {
|
|
19
|
+
try {
|
|
20
|
+
await access(path, constants.F_OK);
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Write imported content to staging directory and return path references.
|
|
29
|
+
* Files are written to `.aix/.tmp/import-staging/<editor>/` and path references
|
|
30
|
+
* point to the final location `.aix/imported/<editor>/`.
|
|
31
|
+
*
|
|
32
|
+
* @param projectRoot - The project root directory
|
|
33
|
+
* @param editor - The source editor name
|
|
34
|
+
* @param content - The imported content (rules and prompts)
|
|
35
|
+
* @returns Path references for rules and prompts (relative to project root)
|
|
36
|
+
*/
|
|
37
|
+
export async function writeImportedContent(projectRoot, editor, content) {
|
|
38
|
+
const stagingDir = join(getImportStagingDir(projectRoot), editor), stagingRulesDir = join(stagingDir, 'rules'), stagingPromptsDir = join(stagingDir, 'prompts'), result = { rules: {}, prompts: {} };
|
|
39
|
+
// Clean any existing staging for this editor
|
|
40
|
+
await safeRm(stagingDir, { force: true });
|
|
41
|
+
// Create staging directories
|
|
42
|
+
await mkdir(stagingRulesDir, { recursive: true });
|
|
43
|
+
await mkdir(stagingPromptsDir, { recursive: true });
|
|
44
|
+
// Build rule write operations
|
|
45
|
+
const ruleWrites = content.rules.map((ruleContent, i) => {
|
|
46
|
+
const name = `imported-rule-${i + 1}`, fileName = `${sanitizeFileName(name)}.md`, stagingPath = join(stagingRulesDir, fileName), relativePath = `./.aix/imported/${editor}/rules/${fileName}`;
|
|
47
|
+
result.rules[name] = relativePath;
|
|
48
|
+
return writeFile(stagingPath, ruleContent, 'utf-8');
|
|
49
|
+
});
|
|
50
|
+
// Build prompt write operations
|
|
51
|
+
const promptWrites = Object.entries(content.prompts).map(([name, promptContent]) => {
|
|
52
|
+
const fileName = `${sanitizeFileName(name)}.md`, stagingPath = join(stagingPromptsDir, fileName), relativePath = `./.aix/imported/${editor}/prompts/${fileName}`;
|
|
53
|
+
result.prompts[name] = relativePath;
|
|
54
|
+
return writeFile(stagingPath, promptContent, 'utf-8');
|
|
55
|
+
});
|
|
56
|
+
// Execute all writes in parallel
|
|
57
|
+
await Promise.all([...ruleWrites, ...promptWrites]);
|
|
58
|
+
return result;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Commit staged import: backup existing, move staging to final location, cleanup.
|
|
62
|
+
* This should be called after ai.json has been successfully written.
|
|
63
|
+
*
|
|
64
|
+
* @param projectRoot - The project root directory
|
|
65
|
+
* @param editor - The source editor name
|
|
66
|
+
*/
|
|
67
|
+
export async function commitImport(projectRoot, editor) {
|
|
68
|
+
const stagingDir = join(getImportStagingDir(projectRoot), editor), finalDir = getImportedEditorDir(projectRoot, editor), backupDir = join(getImportBackupDir(projectRoot), editor);
|
|
69
|
+
// If staging directory doesn't exist, nothing was staged - skip commit
|
|
70
|
+
if (!(await dirExists(stagingDir))) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
// Clean any existing backup for this editor
|
|
74
|
+
await safeRm(backupDir, { force: true });
|
|
75
|
+
// If final directory exists, move it to backup
|
|
76
|
+
if (await dirExists(finalDir)) {
|
|
77
|
+
await mkdir(getImportBackupDir(projectRoot), { recursive: true });
|
|
78
|
+
await rename(finalDir, backupDir);
|
|
79
|
+
}
|
|
80
|
+
// Move staging to final location
|
|
81
|
+
await mkdir(join(projectRoot, '.aix', 'imported'), { recursive: true });
|
|
82
|
+
await rename(stagingDir, finalDir);
|
|
83
|
+
// Clean up backup (success path)
|
|
84
|
+
await safeRm(backupDir, { force: true });
|
|
85
|
+
// Clean up empty staging parent if no other editors are staged
|
|
86
|
+
const stagingParent = getImportStagingDir(projectRoot);
|
|
87
|
+
try {
|
|
88
|
+
await rm(stagingParent, { recursive: false });
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
// Directory not empty or doesn't exist, that's fine
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Rollback import: delete staging, restore backup if exists.
|
|
96
|
+
* This should be called if ai.json write or any subsequent step fails.
|
|
97
|
+
*
|
|
98
|
+
* @param projectRoot - The project root directory
|
|
99
|
+
* @param editor - The source editor name
|
|
100
|
+
*/
|
|
101
|
+
export async function rollbackImport(projectRoot, editor) {
|
|
102
|
+
const stagingDir = join(getImportStagingDir(projectRoot), editor), finalDir = getImportedEditorDir(projectRoot, editor), backupDir = join(getImportBackupDir(projectRoot), editor);
|
|
103
|
+
// Delete staging directory
|
|
104
|
+
await safeRm(stagingDir, { force: true });
|
|
105
|
+
// If backup exists, restore it
|
|
106
|
+
if (await dirExists(backupDir)) {
|
|
107
|
+
// Remove any partial final directory
|
|
108
|
+
await safeRm(finalDir, { force: true });
|
|
109
|
+
// Restore backup
|
|
110
|
+
await rename(backupDir, finalDir);
|
|
111
|
+
}
|
|
112
|
+
// Clean up empty staging parent
|
|
113
|
+
const stagingParent = getImportStagingDir(projectRoot);
|
|
114
|
+
try {
|
|
115
|
+
await rm(stagingParent, { recursive: false });
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
// Directory not empty or doesn't exist, that's fine
|
|
119
|
+
}
|
|
120
|
+
// Clean up empty backup parent
|
|
121
|
+
const backupParent = getImportBackupDir(projectRoot);
|
|
122
|
+
try {
|
|
123
|
+
await rm(backupParent, { recursive: false });
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
// Directory not empty or doesn't exist, that's fine
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=import-writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-writer.js","sourceRoot":"","sources":["../src/import-writer.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export * from './errors.js';
|
|
2
|
+
export * from './format-error.js';
|
|
3
|
+
export * from './discovery.js';
|
|
4
|
+
export * from './inheritance.js';
|
|
5
|
+
export * from './json.js';
|
|
6
|
+
export * from './loader.js';
|
|
7
|
+
export * from './updater.js';
|
|
8
|
+
export * from './backup.js';
|
|
9
|
+
export * from './cache/index.js';
|
|
10
|
+
export * from './skills/index.js';
|
|
11
|
+
export * from './mcp/index.js';
|
|
12
|
+
export * from './rules/index.js';
|
|
13
|
+
export * from './editors/index.js';
|
|
14
|
+
export * from './url-parsing.js';
|
|
15
|
+
export * from './remote-loader.js';
|
|
16
|
+
export * from './merge.js';
|
|
17
|
+
export * from './prompts/index.js';
|
|
18
|
+
export * from './npm/index.js';
|
|
19
|
+
export * from './import-writer.js';
|
|
20
|
+
export * from './global/index.js';
|
|
21
|
+
export * from './env/index.js';
|
|
22
|
+
export { safeRm, UnsafePathError } from './fs/safe-rm.js';
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export * from './errors.js';
|
|
2
|
+
export * from './format-error.js';
|
|
3
|
+
export * from './discovery.js';
|
|
4
|
+
export * from './inheritance.js';
|
|
5
|
+
export * from './json.js';
|
|
6
|
+
export * from './loader.js';
|
|
7
|
+
export * from './updater.js';
|
|
8
|
+
export * from './backup.js';
|
|
9
|
+
export * from './cache/index.js';
|
|
10
|
+
export * from './skills/index.js';
|
|
11
|
+
export * from './mcp/index.js';
|
|
12
|
+
export * from './rules/index.js';
|
|
13
|
+
export * from './editors/index.js';
|
|
14
|
+
export * from './url-parsing.js';
|
|
15
|
+
export * from './remote-loader.js';
|
|
16
|
+
export * from './merge.js';
|
|
17
|
+
export * from './prompts/index.js';
|
|
18
|
+
export * from './npm/index.js';
|
|
19
|
+
export * from './import-writer.js';
|
|
20
|
+
export * from './global/index.js';
|
|
21
|
+
export * from './env/index.js';
|
|
22
|
+
export { safeRm, UnsafePathError } from './fs/safe-rm.js';
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AiJsonConfig } from '@a1st/aix-schema';
|
|
2
|
+
export interface ResolveOptions {
|
|
3
|
+
baseDir: string;
|
|
4
|
+
visited?: Set<string>;
|
|
5
|
+
/** Whether the baseDir is a remote URL (for resolving relative extends) */
|
|
6
|
+
isRemote?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function resolveExtends(config: Record<string, unknown>, options: ResolveOptions): Promise<AiJsonConfig>;
|
|
9
|
+
//# sourceMappingURL=inheritance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inheritance.d.ts","sourceRoot":"","sources":["../src/inheritance.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,WAAW,cAAc;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAsB,cAAc,CACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,cAAc,GACvB,OAAO,CAAC,YAAY,CAAC,CA6BvB"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { resolve, dirname } from 'pathe';
|
|
2
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { downloadTemplate } from 'giget';
|
|
5
|
+
import { parseJsonc } from '@a1st/aix-schema';
|
|
6
|
+
import { parseConfigContent } from './discovery.js';
|
|
7
|
+
import { CircularDependencyError, ConfigParseError, RemoteFetchError } from './errors.js';
|
|
8
|
+
import { convertBlobToRawUrl, isLocalPath } from './url-parsing.js';
|
|
9
|
+
import { deepMergeJson } from './json.js';
|
|
10
|
+
export async function resolveExtends(config, options) {
|
|
11
|
+
const { baseDir, visited = new Set(), isRemote = false } = options;
|
|
12
|
+
if (!config.extends) {
|
|
13
|
+
return config;
|
|
14
|
+
}
|
|
15
|
+
const extendsValue = config.extends, extendsList = Array.isArray(extendsValue) ? extendsValue : [extendsValue];
|
|
16
|
+
let merged = {};
|
|
17
|
+
// Process extends sequentially - order matters for proper inheritance chain
|
|
18
|
+
for (const extendPath of extendsList) {
|
|
19
|
+
if (typeof extendPath !== 'string') {
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
// eslint-disable-next-line no-await-in-loop -- Sequential: inheritance chain order matters
|
|
23
|
+
const resolvedConfig = await resolveExtendsPath(extendPath, baseDir, visited, isRemote);
|
|
24
|
+
merged = deepMergeJson(merged, resolvedConfig, { resolver: aiJsonMergeResolver });
|
|
25
|
+
}
|
|
26
|
+
const { extends: _, ...currentConfig } = config;
|
|
27
|
+
merged = deepMergeJson(merged, currentConfig, { resolver: aiJsonMergeResolver });
|
|
28
|
+
return merged;
|
|
29
|
+
}
|
|
30
|
+
async function resolveExtendsPath(extendPath, baseDir, visited, isRemote) {
|
|
31
|
+
// If base is a remote URL and extend is a relative path, resolve as remote URL
|
|
32
|
+
if (isRemote && isRelativePath(extendPath)) {
|
|
33
|
+
return resolveRemoteExtends(new URL(extendPath, baseDir).href, visited);
|
|
34
|
+
}
|
|
35
|
+
if (isLocalPath(extendPath)) {
|
|
36
|
+
return resolveLocalExtends(extendPath, baseDir, visited);
|
|
37
|
+
}
|
|
38
|
+
if (isGitPath(extendPath)) {
|
|
39
|
+
return resolveGitExtends(extendPath, visited);
|
|
40
|
+
}
|
|
41
|
+
return resolveNpmExtends(extendPath, visited);
|
|
42
|
+
}
|
|
43
|
+
function isRelativePath(path) {
|
|
44
|
+
return path.startsWith('./') || path.startsWith('../');
|
|
45
|
+
}
|
|
46
|
+
function isGitPath(path) {
|
|
47
|
+
return (path.startsWith('github:') ||
|
|
48
|
+
path.startsWith('gitlab:') ||
|
|
49
|
+
path.startsWith('bitbucket:') ||
|
|
50
|
+
path.startsWith('https://'));
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Resolve extends from a remote URL (fetch the file directly).
|
|
54
|
+
*/
|
|
55
|
+
async function resolveRemoteExtends(url, visited) {
|
|
56
|
+
if (visited.has(url)) {
|
|
57
|
+
throw new CircularDependencyError([...visited, url]);
|
|
58
|
+
}
|
|
59
|
+
visited.add(url);
|
|
60
|
+
const rawUrl = convertBlobToRawUrl(url);
|
|
61
|
+
let content;
|
|
62
|
+
try {
|
|
63
|
+
const response = await fetch(rawUrl);
|
|
64
|
+
if (!response.ok) {
|
|
65
|
+
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
66
|
+
}
|
|
67
|
+
content = await response.text();
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
71
|
+
throw new RemoteFetchError(url, message);
|
|
72
|
+
}
|
|
73
|
+
const result = parseJsonc(content);
|
|
74
|
+
if (result.errors.length > 0) {
|
|
75
|
+
throw new ConfigParseError(`Parse error: ${result.errors[0]?.message}`, url);
|
|
76
|
+
}
|
|
77
|
+
const parsed = result.data, newBaseUrl = rawUrl.substring(0, rawUrl.lastIndexOf('/') + 1);
|
|
78
|
+
return resolveExtends(parsed, { baseDir: newBaseUrl, visited, isRemote: true });
|
|
79
|
+
}
|
|
80
|
+
async function resolveLocalExtends(extendPath, baseDir, visited) {
|
|
81
|
+
const absolutePath = resolve(baseDir, extendPath);
|
|
82
|
+
if (visited.has(absolutePath)) {
|
|
83
|
+
throw new CircularDependencyError([...visited, absolutePath]);
|
|
84
|
+
}
|
|
85
|
+
if (!existsSync(absolutePath)) {
|
|
86
|
+
throw new ConfigParseError(`Extended config not found: ${extendPath}`, absolutePath);
|
|
87
|
+
}
|
|
88
|
+
visited.add(absolutePath);
|
|
89
|
+
const content = readFileSync(absolutePath, 'utf-8'), parsed = parseConfigContent(content), newBaseDir = dirname(absolutePath);
|
|
90
|
+
return resolveExtends(parsed, { baseDir: newBaseDir, visited });
|
|
91
|
+
}
|
|
92
|
+
async function resolveGitExtends(extendPath, visited) {
|
|
93
|
+
if (visited.has(extendPath)) {
|
|
94
|
+
throw new CircularDependencyError([...visited, extendPath]);
|
|
95
|
+
}
|
|
96
|
+
visited.add(extendPath);
|
|
97
|
+
const { dir } = await downloadTemplate(extendPath, {
|
|
98
|
+
force: false,
|
|
99
|
+
cwd: process.cwd(),
|
|
100
|
+
});
|
|
101
|
+
const configPath = resolve(dir, 'ai.json');
|
|
102
|
+
if (!existsSync(configPath)) {
|
|
103
|
+
throw new ConfigParseError(`No ai.json found in git repository: ${extendPath}`, configPath);
|
|
104
|
+
}
|
|
105
|
+
const content = readFileSync(configPath, 'utf-8'), parsed = parseConfigContent(content);
|
|
106
|
+
return resolveExtends(parsed, { baseDir: dir, visited });
|
|
107
|
+
}
|
|
108
|
+
async function resolveNpmExtends(packageName, visited) {
|
|
109
|
+
if (visited.has(packageName)) {
|
|
110
|
+
throw new CircularDependencyError([...visited, packageName]);
|
|
111
|
+
}
|
|
112
|
+
visited.add(packageName);
|
|
113
|
+
try {
|
|
114
|
+
// Use ESM-compatible import.meta.resolve to find the package
|
|
115
|
+
const resolvedUrl = import.meta.resolve(`${packageName}/ai.json`, `file://${process.cwd()}/`);
|
|
116
|
+
const packagePath = fileURLToPath(resolvedUrl);
|
|
117
|
+
const content = readFileSync(packagePath, 'utf-8'), parsed = parseConfigContent(content), baseDir = dirname(packagePath);
|
|
118
|
+
return resolveExtends(parsed, { baseDir, visited });
|
|
119
|
+
}
|
|
120
|
+
catch (_error) {
|
|
121
|
+
throw new ConfigParseError(`Failed to resolve npm package: ${packageName}. Make sure it's installed.`, packageName);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Merge resolver for ai.json inheritance. Skips the `extends` key since it's handled separately.
|
|
126
|
+
*/
|
|
127
|
+
function aiJsonMergeResolver({ key }) {
|
|
128
|
+
if (key === 'extends') {
|
|
129
|
+
return 'keep';
|
|
130
|
+
}
|
|
131
|
+
return undefined;
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=inheritance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inheritance.js","sourceRoot":"","sources":["../src/inheritance.ts"],"names":[],"mappings":"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"}
|
package/dist/json.d.ts
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strategy for how to handle a merge conflict at a specific key.
|
|
3
|
+
* - `merge`: Recursively merge objects, replace primitives/arrays (default behavior)
|
|
4
|
+
* - `replace`: Use the new value entirely, don't recurse into objects
|
|
5
|
+
* - `keep`: Keep the old value, ignore the new value
|
|
6
|
+
*/
|
|
7
|
+
export type MergeStrategy = 'merge' | 'replace' | 'keep';
|
|
8
|
+
/**
|
|
9
|
+
* Context provided to the merge resolver function.
|
|
10
|
+
*/
|
|
11
|
+
export interface MergeContext {
|
|
12
|
+
/** The current key being merged */
|
|
13
|
+
key: string;
|
|
14
|
+
/** The path of keys leading to this value (not including current key) */
|
|
15
|
+
path: string[];
|
|
16
|
+
/** The existing value (may be undefined if key doesn't exist in base) */
|
|
17
|
+
oldValue: unknown;
|
|
18
|
+
/** The incoming value to merge */
|
|
19
|
+
newValue: unknown;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Function that determines the merge strategy for a specific key. Return undefined to use default
|
|
23
|
+
* behavior (merge objects, replace primitives/arrays).
|
|
24
|
+
*/
|
|
25
|
+
export type MergeResolver = (context: MergeContext) => MergeStrategy | undefined;
|
|
26
|
+
/**
|
|
27
|
+
* Options for deepMergeJson.
|
|
28
|
+
*/
|
|
29
|
+
export interface DeepMergeOptions {
|
|
30
|
+
/** Custom resolver to determine merge strategy per-key */
|
|
31
|
+
resolver?: MergeResolver;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Deep merge two JSON objects. By default:
|
|
35
|
+
* - Objects are recursively merged
|
|
36
|
+
* - Arrays and primitives are replaced (new value wins)
|
|
37
|
+
*
|
|
38
|
+
* Use the `resolver` option to customize merge behavior per-key.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```ts
|
|
42
|
+
* // Default behavior
|
|
43
|
+
* deepMergeJson({ a: { x: 1 } }, { a: { y: 2 } })
|
|
44
|
+
* // => { a: { x: 1, y: 2 } }
|
|
45
|
+
*
|
|
46
|
+
* // With custom resolver - replace entire object at specific path
|
|
47
|
+
* deepMergeJson(base, override, {
|
|
48
|
+
* resolver: ({ path }) => path[0] === 'servers' ? 'replace' : undefined
|
|
49
|
+
* })
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
export declare function deepMergeJson(base: Record<string, unknown>, override: Record<string, unknown>, options?: DeepMergeOptions): Record<string, unknown>;
|
|
53
|
+
/**
|
|
54
|
+
* Create a merge resolver that replaces values at specific paths. Paths are matched by joining with
|
|
55
|
+
* dots, e.g., `['mcpServers', '*']` matches any key under `mcpServers`.
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```ts
|
|
59
|
+
* // Replace entire MCP server objects instead of merging them
|
|
60
|
+
* const resolver = createPathResolver({
|
|
61
|
+
* 'mcpServers.*': 'replace',
|
|
62
|
+
* 'context_servers.*': 'replace',
|
|
63
|
+
* });
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export declare function createPathResolver(rules: Record<string, MergeStrategy>): MergeResolver;
|
|
67
|
+
/**
|
|
68
|
+
* Pre-built merge resolver for MCP config files. Replaces entire server objects instead of merging
|
|
69
|
+
* them, since a server definition from aix should completely override any existing definition with
|
|
70
|
+
* the same name.
|
|
71
|
+
*
|
|
72
|
+
* Works with both standard MCP format (`mcpServers.*`) and Zed format (`context_servers.*`).
|
|
73
|
+
*/
|
|
74
|
+
export declare const mcpConfigMergeResolver: MergeResolver;
|
|
75
|
+
//# sourceMappingURL=json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../src/json.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC1B,mCAAmC;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,yEAAyE;IACzE,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,yEAAyE;IACzE,QAAQ,EAAE,OAAO,CAAC;IAClB,kCAAkC;IAClC,QAAQ,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,YAAY,KAAK,aAAa,GAAG,SAAS,CAAC;AAEjF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC9B,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,aAAa,CAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,OAAO,GAAE,gBAAqB,GAC9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzB;AAoED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,aAAa,CAkBtF;AAkBD;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,EAAE,aAGnC,CAAC"}
|