@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
package/dist/json.js
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deep merge two JSON objects. By default:
|
|
3
|
+
* - Objects are recursively merged
|
|
4
|
+
* - Arrays and primitives are replaced (new value wins)
|
|
5
|
+
*
|
|
6
|
+
* Use the `resolver` option to customize merge behavior per-key.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* // Default behavior
|
|
11
|
+
* deepMergeJson({ a: { x: 1 } }, { a: { y: 2 } })
|
|
12
|
+
* // => { a: { x: 1, y: 2 } }
|
|
13
|
+
*
|
|
14
|
+
* // With custom resolver - replace entire object at specific path
|
|
15
|
+
* deepMergeJson(base, override, {
|
|
16
|
+
* resolver: ({ path }) => path[0] === 'servers' ? 'replace' : undefined
|
|
17
|
+
* })
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export function deepMergeJson(base, override, options = {}) {
|
|
21
|
+
return mergeRecursive(base, override, [], options.resolver);
|
|
22
|
+
}
|
|
23
|
+
function mergeRecursive(base, override, path, resolver) {
|
|
24
|
+
const result = { ...base };
|
|
25
|
+
for (const [key, newValue] of Object.entries(override)) {
|
|
26
|
+
const oldValue = result[key], context = { key, path, oldValue, newValue }, strategy = resolver?.(context) ?? getDefaultStrategy(oldValue, newValue);
|
|
27
|
+
switch (strategy) {
|
|
28
|
+
case 'keep':
|
|
29
|
+
// Keep old value, do nothing
|
|
30
|
+
break;
|
|
31
|
+
case 'replace':
|
|
32
|
+
// Replace entirely with new value
|
|
33
|
+
result[key] = newValue;
|
|
34
|
+
break;
|
|
35
|
+
case 'merge':
|
|
36
|
+
default:
|
|
37
|
+
// Default merge behavior
|
|
38
|
+
if (isPlainObject(newValue)) {
|
|
39
|
+
if (isPlainObject(oldValue)) {
|
|
40
|
+
result[key] = mergeRecursive(oldValue, newValue, [...path, key], resolver);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
result[key] = newValue;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
result[key] = newValue;
|
|
48
|
+
}
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return result;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Determine the default merge strategy based on value types.
|
|
56
|
+
*/
|
|
57
|
+
function getDefaultStrategy(oldValue, newValue) {
|
|
58
|
+
// If both are objects, merge them
|
|
59
|
+
if (isPlainObject(oldValue) && isPlainObject(newValue)) {
|
|
60
|
+
return 'merge';
|
|
61
|
+
}
|
|
62
|
+
// Otherwise replace (arrays, primitives, type mismatches)
|
|
63
|
+
return 'replace';
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Check if a value is a plain object (not null, not array).
|
|
67
|
+
*/
|
|
68
|
+
function isPlainObject(value) {
|
|
69
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Create a merge resolver that replaces values at specific paths. Paths are matched by joining with
|
|
73
|
+
* dots, e.g., `['mcpServers', '*']` matches any key under `mcpServers`.
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* ```ts
|
|
77
|
+
* // Replace entire MCP server objects instead of merging them
|
|
78
|
+
* const resolver = createPathResolver({
|
|
79
|
+
* 'mcpServers.*': 'replace',
|
|
80
|
+
* 'context_servers.*': 'replace',
|
|
81
|
+
* });
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
export function createPathResolver(rules) {
|
|
85
|
+
return ({ key, path }) => {
|
|
86
|
+
const fullPath = [...path, key].join('.');
|
|
87
|
+
// Check for exact match first
|
|
88
|
+
if (rules[fullPath]) {
|
|
89
|
+
return rules[fullPath];
|
|
90
|
+
}
|
|
91
|
+
// Check for wildcard matches (e.g., 'mcpServers.*')
|
|
92
|
+
for (const [pattern, strategy] of Object.entries(rules)) {
|
|
93
|
+
if (matchesPattern(fullPath, pattern)) {
|
|
94
|
+
return strategy;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return undefined;
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Match a path against a pattern with wildcard support.
|
|
102
|
+
* - `*` matches any single segment
|
|
103
|
+
* - `**` matches any number of segments (not implemented yet)
|
|
104
|
+
*/
|
|
105
|
+
function matchesPattern(path, pattern) {
|
|
106
|
+
const pathParts = path.split('.'), patternParts = pattern.split('.');
|
|
107
|
+
if (pathParts.length !== patternParts.length) {
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
return patternParts.every((part, i) => part === '*' || part === pathParts[i]);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Pre-built merge resolver for MCP config files. Replaces entire server objects instead of merging
|
|
114
|
+
* them, since a server definition from aix should completely override any existing definition with
|
|
115
|
+
* the same name.
|
|
116
|
+
*
|
|
117
|
+
* Works with both standard MCP format (`mcpServers.*`) and Zed format (`context_servers.*`).
|
|
118
|
+
*/
|
|
119
|
+
export const mcpConfigMergeResolver = createPathResolver({
|
|
120
|
+
'mcpServers.*': 'replace',
|
|
121
|
+
'context_servers.*': 'replace',
|
|
122
|
+
});
|
|
123
|
+
//# sourceMappingURL=json.js.map
|
package/dist/json.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../src/json.ts"],"names":[],"mappings":"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"}
|
package/dist/loader.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type AiJsonConfig } from '@a1st/aix-schema';
|
|
2
|
+
export interface LoadedConfig {
|
|
3
|
+
path: string;
|
|
4
|
+
config: AiJsonConfig;
|
|
5
|
+
source: 'file' | 'package.json' | 'remote';
|
|
6
|
+
/** Warning messages generated during config loading */
|
|
7
|
+
warnings?: string[];
|
|
8
|
+
/** Path to ai.local.json if it was merged */
|
|
9
|
+
localPath?: string;
|
|
10
|
+
/** Whether local overrides were applied */
|
|
11
|
+
hasLocalOverrides?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface LoadConfigOptions {
|
|
14
|
+
/** Explicit path to local config file (existing behavior) */
|
|
15
|
+
explicitPath?: string;
|
|
16
|
+
/** Remote URL, git shorthand, or local path to load config from */
|
|
17
|
+
remoteSource?: string;
|
|
18
|
+
/** Starting directory for discovery and relative path resolution */
|
|
19
|
+
startDir?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Load config from various sources: remote URL, git shorthand, local path, or discovery.
|
|
23
|
+
* @param options - Load options (new API)
|
|
24
|
+
* @param explicitPath - Deprecated: use options.explicitPath instead
|
|
25
|
+
* @param startDir - Deprecated: use options.startDir instead
|
|
26
|
+
*/
|
|
27
|
+
export declare function loadConfig(options?: LoadConfigOptions | string, startDir?: string): Promise<LoadedConfig | undefined>;
|
|
28
|
+
/**
|
|
29
|
+
* Load config or throw if not found.
|
|
30
|
+
* @param options - Load options (new API)
|
|
31
|
+
* @param explicitPath - Deprecated: use options.explicitPath instead
|
|
32
|
+
* @param startDir - Deprecated: use options.startDir instead
|
|
33
|
+
*/
|
|
34
|
+
export declare function requireConfig(options?: LoadConfigOptions | string, startDir?: string): Promise<LoadedConfig>;
|
|
35
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AACA,OAAO,EAAiC,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AASpF,MAAM,WAAW,YAAY;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,QAAQ,CAAC;IAC3C,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAC/B,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAC7B,OAAO,CAAC,EAAE,iBAAiB,GAAG,MAAM,EACpC,QAAQ,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CA4BnC;AAkID;;;;;GAKG;AACH,wBAAsB,aAAa,CAChC,OAAO,CAAC,EAAE,iBAAiB,GAAG,MAAM,EACpC,QAAQ,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,YAAY,CAAC,CAWvB"}
|
package/dist/loader.js
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { dirname } from 'pathe';
|
|
2
|
+
import { parseConfig, parseLocalConfig } from '@a1st/aix-schema';
|
|
3
|
+
import { discoverConfig, parseConfigContent } from './discovery.js';
|
|
4
|
+
import { resolveExtends } from './inheritance.js';
|
|
5
|
+
import { ConfigNotFoundError, ConfigParseError } from './errors.js';
|
|
6
|
+
import { extractValidationIssues, toConfigValidationError } from './format-error.js';
|
|
7
|
+
import { loadFromSource } from './remote-loader.js';
|
|
8
|
+
import { mergeConfigs } from './merge.js';
|
|
9
|
+
/**
|
|
10
|
+
* Load config from various sources: remote URL, git shorthand, local path, or discovery.
|
|
11
|
+
* @param options - Load options (new API)
|
|
12
|
+
* @param explicitPath - Deprecated: use options.explicitPath instead
|
|
13
|
+
* @param startDir - Deprecated: use options.startDir instead
|
|
14
|
+
*/
|
|
15
|
+
export async function loadConfig(options, startDir) {
|
|
16
|
+
// Handle legacy API: loadConfig(explicitPath?, startDir?)
|
|
17
|
+
let opts;
|
|
18
|
+
if (typeof options === 'string' || options === undefined) {
|
|
19
|
+
opts = {
|
|
20
|
+
explicitPath: options,
|
|
21
|
+
startDir: startDir ?? process.cwd(),
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
opts = { startDir: process.cwd(), ...options };
|
|
26
|
+
}
|
|
27
|
+
const { explicitPath, remoteSource, startDir: cwd = process.cwd() } = opts;
|
|
28
|
+
// If remoteSource is provided, load from URL/git/path
|
|
29
|
+
if (remoteSource) {
|
|
30
|
+
return loadFromRemoteSource(remoteSource, cwd);
|
|
31
|
+
}
|
|
32
|
+
// Existing discovery behavior
|
|
33
|
+
const discovered = await discoverConfig(cwd, explicitPath);
|
|
34
|
+
if (!discovered) {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
return loadFromDiscovered(discovered);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Load config from a remote source (URL, git shorthand, or local path).
|
|
41
|
+
*/
|
|
42
|
+
async function loadFromRemoteSource(source, cwd) {
|
|
43
|
+
const remote = await loadFromSource(source, cwd), resolved = await resolveExtends(remote.content, {
|
|
44
|
+
baseDir: remote.baseUrl,
|
|
45
|
+
isRemote: remote.isRemote,
|
|
46
|
+
});
|
|
47
|
+
let validated;
|
|
48
|
+
try {
|
|
49
|
+
validated = parseConfig(resolved);
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
const validationError = toConfigValidationError(error);
|
|
53
|
+
if (validationError) {
|
|
54
|
+
throw validationError;
|
|
55
|
+
}
|
|
56
|
+
throw new ConfigParseError(error instanceof Error ? error.message : String(error), source);
|
|
57
|
+
}
|
|
58
|
+
// Map source type to LoadedConfig source
|
|
59
|
+
const sourceType = remote.source === 'local' ? 'file' : 'remote';
|
|
60
|
+
return {
|
|
61
|
+
path: source,
|
|
62
|
+
config: validated,
|
|
63
|
+
source: sourceType,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Merge local config overrides into a base config.
|
|
68
|
+
* @returns The merged config and whether local overrides were applied
|
|
69
|
+
*/
|
|
70
|
+
function mergeLocalOverrides(baseConfig, localContent, localPath) {
|
|
71
|
+
const localParsed = parseConfigContent(localContent);
|
|
72
|
+
try {
|
|
73
|
+
const localValidated = parseLocalConfig(localParsed);
|
|
74
|
+
return {
|
|
75
|
+
config: mergeConfigs(baseConfig, localValidated),
|
|
76
|
+
hasLocalOverrides: true,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
if (error instanceof Error && 'issues' in error) {
|
|
81
|
+
const zodError = error, issues = extractValidationIssues(zodError, localParsed);
|
|
82
|
+
throw new ConfigParseError('Validation failed', localPath, issues);
|
|
83
|
+
}
|
|
84
|
+
if (error instanceof Error) {
|
|
85
|
+
throw new ConfigParseError(error.message, localPath);
|
|
86
|
+
}
|
|
87
|
+
throw error;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Load config from a discovered local config.
|
|
92
|
+
*/
|
|
93
|
+
async function loadFromDiscovered(discovered) {
|
|
94
|
+
try {
|
|
95
|
+
const parsed = parseConfigContent(discovered.content), baseDir = dirname(discovered.path), resolved = await resolveExtends(parsed, { baseDir });
|
|
96
|
+
let validated = parseConfig(resolved);
|
|
97
|
+
const warnings = [];
|
|
98
|
+
if (discovered.packageJsonAlsoHasAi) {
|
|
99
|
+
warnings.push('Both ai.json and package.json "ai" field exist. Using ai.json (package.json "ai" field is ignored).');
|
|
100
|
+
}
|
|
101
|
+
// Merge local overrides if present
|
|
102
|
+
let localPath;
|
|
103
|
+
let hasLocalOverrides = false;
|
|
104
|
+
if (discovered.localContent) {
|
|
105
|
+
const localFilePath = discovered.localPath ?? 'ai.local.json', merged = mergeLocalOverrides(validated, discovered.localContent, localFilePath);
|
|
106
|
+
validated = merged.config;
|
|
107
|
+
localPath = discovered.localPath;
|
|
108
|
+
hasLocalOverrides = merged.hasLocalOverrides;
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
path: discovered.path,
|
|
112
|
+
config: validated,
|
|
113
|
+
source: discovered.source,
|
|
114
|
+
...(warnings.length > 0 && { warnings }),
|
|
115
|
+
...(localPath && { localPath }),
|
|
116
|
+
...(hasLocalOverrides && { hasLocalOverrides }),
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
const validationError = toConfigValidationError(error);
|
|
121
|
+
if (validationError) {
|
|
122
|
+
throw validationError;
|
|
123
|
+
}
|
|
124
|
+
if (error instanceof ConfigParseError) {
|
|
125
|
+
throw error;
|
|
126
|
+
}
|
|
127
|
+
if (error instanceof Error) {
|
|
128
|
+
throw new ConfigParseError(error.message, discovered.path);
|
|
129
|
+
}
|
|
130
|
+
throw error;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Load config or throw if not found.
|
|
135
|
+
* @param options - Load options (new API)
|
|
136
|
+
* @param explicitPath - Deprecated: use options.explicitPath instead
|
|
137
|
+
* @param startDir - Deprecated: use options.startDir instead
|
|
138
|
+
*/
|
|
139
|
+
export async function requireConfig(options, startDir) {
|
|
140
|
+
const result = await loadConfig(options, startDir);
|
|
141
|
+
if (!result) {
|
|
142
|
+
const searchPath = typeof options === 'string' ? options : (options?.explicitPath ?? options?.remoteSource);
|
|
143
|
+
throw new ConfigNotFoundError(searchPath);
|
|
144
|
+
}
|
|
145
|
+
return result;
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface EnvResolutionOptions {
|
|
2
|
+
env?: Record<string, string | undefined>;
|
|
3
|
+
throwOnMissing?: boolean;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Resolve ${VAR} syntax in a string value
|
|
7
|
+
*/
|
|
8
|
+
export declare function resolveEnvVars(value: string, options?: EnvResolutionOptions): string;
|
|
9
|
+
/**
|
|
10
|
+
* Resolve ${VAR} syntax in all values of an object
|
|
11
|
+
*/
|
|
12
|
+
export declare function resolveEnvObject(obj: Record<string, string>, options?: EnvResolutionOptions): Record<string, string>;
|
|
13
|
+
/**
|
|
14
|
+
* Check if a string contains unresolved ${VAR} references
|
|
15
|
+
*/
|
|
16
|
+
export declare function hasUnresolvedEnvVars(value: string): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Extract all ${VAR} variable names from a string
|
|
19
|
+
*/
|
|
20
|
+
export declare function extractEnvVarNames(value: string): string[];
|
|
21
|
+
/**
|
|
22
|
+
* Validate that all referenced env vars are defined
|
|
23
|
+
*/
|
|
24
|
+
export declare function validateEnvVars(value: string, env?: Record<string, string | undefined>): {
|
|
25
|
+
valid: boolean;
|
|
26
|
+
missing: string[];
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/mcp/env.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,oBAAoB;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,cAAc,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,MAAM,CAexF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC7B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3B,OAAO,GAAE,oBAAyB,GAClC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAIxB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAI1D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC5B,KAAK,EAAE,MAAM,EACb,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GACrD;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAQvC"}
|
package/dist/mcp/env.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
const ENV_VAR_PATTERN = /\$\{([^}]+)\}/g;
|
|
2
|
+
/**
|
|
3
|
+
* Resolve ${VAR} syntax in a string value
|
|
4
|
+
*/
|
|
5
|
+
export function resolveEnvVars(value, options = {}) {
|
|
6
|
+
const env = options.env ?? process.env, throwOnMissing = options.throwOnMissing ?? false;
|
|
7
|
+
return value.replace(ENV_VAR_PATTERN, (match, varName) => {
|
|
8
|
+
const resolved = env[varName];
|
|
9
|
+
if (resolved === undefined) {
|
|
10
|
+
if (throwOnMissing) {
|
|
11
|
+
throw new Error(`Environment variable not found: ${varName}`);
|
|
12
|
+
}
|
|
13
|
+
return match;
|
|
14
|
+
}
|
|
15
|
+
return resolved;
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Resolve ${VAR} syntax in all values of an object
|
|
20
|
+
*/
|
|
21
|
+
export function resolveEnvObject(obj, options = {}) {
|
|
22
|
+
return Object.fromEntries(Object.entries(obj).map(([key, value]) => [key, resolveEnvVars(value, options)]));
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Check if a string contains unresolved ${VAR} references
|
|
26
|
+
*/
|
|
27
|
+
export function hasUnresolvedEnvVars(value) {
|
|
28
|
+
return ENV_VAR_PATTERN.test(value);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Extract all ${VAR} variable names from a string
|
|
32
|
+
*/
|
|
33
|
+
export function extractEnvVarNames(value) {
|
|
34
|
+
const matches = value.matchAll(new RegExp(ENV_VAR_PATTERN.source, 'g'));
|
|
35
|
+
return [...matches].map((m) => m[1]).filter((name) => name !== undefined);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Validate that all referenced env vars are defined
|
|
39
|
+
*/
|
|
40
|
+
export function validateEnvVars(value, env = process.env) {
|
|
41
|
+
const names = extractEnvVarNames(value), missing = names.filter((name) => env[name] === undefined);
|
|
42
|
+
return {
|
|
43
|
+
valid: missing.length === 0,
|
|
44
|
+
missing,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/mcp/env.ts"],"names":[],"mappings":"AAAA,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAOzC;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa,EAAE,UAAgC,EAAE;IAC7E,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAChC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,KAAK,CAAC;IAEvD,OAAO,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,OAAe,EAAE,EAAE;QAC9D,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;QAE9B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC1B,IAAI,cAAc,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,mCAAmC,OAAO,EAAE,CAAC,CAAC;YACjE,CAAC;YACD,OAAO,KAAK,CAAC;QAChB,CAAC;QACD,OAAO,QAAQ,CAAC;IACnB,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC7B,GAA2B,EAC3B,UAAgC,EAAE;IAElC,OAAO,MAAM,CAAC,WAAW,CACtB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAClF,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAC/C,OAAO,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IAExE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;AAC7F,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAC5B,KAAa,EACb,MAA0C,OAAO,CAAC,GAAG;IAErD,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,EACjC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC;IAEhE,OAAO;QACJ,KAAK,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC;QAC3B,OAAO;KACT,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { resolveEnvVars, resolveEnvObject, hasUnresolvedEnvVars, extractEnvVarNames, validateEnvVars, type EnvResolutionOptions, } from './env.js';
|
|
2
|
+
export { serverTemplates, getServerTemplate, listServerTemplates, createFromTemplate, } from './templates.js';
|
|
3
|
+
export { getTransport, type McpTransport, type StdioTransport, type HttpTransport } from './normalize.js';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACJ,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,KAAK,oBAAoB,GAC3B,MAAM,UAAU,CAAC;AAElB,OAAO,EACJ,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,GACpB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { resolveEnvVars, resolveEnvObject, hasUnresolvedEnvVars, extractEnvVarNames, validateEnvVars, } from './env.js';
|
|
2
|
+
export { serverTemplates, getServerTemplate, listServerTemplates, createFromTemplate, } from './templates.js';
|
|
3
|
+
export { getTransport } from './normalize.js';
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACJ,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,GAEjB,MAAM,UAAU,CAAC;AAElB,OAAO,EACJ,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,GACpB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,YAAY,EAA8D,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { McpServerConfig } from '@a1st/aix-schema';
|
|
2
|
+
/**
|
|
3
|
+
* Stdio transport representation (for internal use).
|
|
4
|
+
*/
|
|
5
|
+
export interface StdioTransport {
|
|
6
|
+
type: 'stdio';
|
|
7
|
+
command: string;
|
|
8
|
+
args?: string[];
|
|
9
|
+
env?: Record<string, string>;
|
|
10
|
+
cwd?: string;
|
|
11
|
+
shell?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* HTTP transport representation (for internal use).
|
|
15
|
+
*/
|
|
16
|
+
export interface HttpTransport {
|
|
17
|
+
type: 'http';
|
|
18
|
+
url: string;
|
|
19
|
+
headers?: Record<string, string>;
|
|
20
|
+
timeout?: number;
|
|
21
|
+
validateOrigin?: boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Transport union type (for internal use).
|
|
25
|
+
*/
|
|
26
|
+
export type McpTransport = StdioTransport | HttpTransport;
|
|
27
|
+
/**
|
|
28
|
+
* Extract transport info from an MCP server config.
|
|
29
|
+
* - Stdio: { command: "...", args: [...] }
|
|
30
|
+
* - HTTP: { url: "https://..." }
|
|
31
|
+
*/
|
|
32
|
+
export declare function getTransport(config: McpServerConfig): McpTransport;
|
|
33
|
+
//# sourceMappingURL=normalize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../src/mcp/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,cAAc,GAAG,aAAa,CAAC;AAuB1D;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,YAAY,CAyBlE"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extract transport info from an MCP server config.
|
|
3
|
+
* - Stdio: { command: "...", args: [...] }
|
|
4
|
+
* - HTTP: { url: "https://..." }
|
|
5
|
+
*/
|
|
6
|
+
export function getTransport(config) {
|
|
7
|
+
// Use 'in' check for type narrowing
|
|
8
|
+
if ('command' in config) {
|
|
9
|
+
const stdio = config;
|
|
10
|
+
return {
|
|
11
|
+
type: 'stdio',
|
|
12
|
+
command: stdio.command,
|
|
13
|
+
args: stdio.args,
|
|
14
|
+
env: stdio.env,
|
|
15
|
+
cwd: stdio.cwd,
|
|
16
|
+
shell: stdio.shell,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
// Must be HTTP
|
|
20
|
+
const http = config;
|
|
21
|
+
return {
|
|
22
|
+
type: 'http',
|
|
23
|
+
url: http.url,
|
|
24
|
+
headers: http.headers,
|
|
25
|
+
timeout: http.timeout,
|
|
26
|
+
validateOrigin: http.validateOrigin,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=normalize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/mcp/normalize.ts"],"names":[],"mappings":"AAmDA;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,MAAuB;IACjD,oCAAoC;IACpC,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,MAAqC,CAAC;QAEpD,OAAO;YACJ,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,KAAK,EAAE,KAAK,CAAC,KAAK;SACpB,CAAC;IACL,CAAC;IAED,eAAe;IACf,MAAM,IAAI,GAAG,MAAoC,CAAC;IAElD,OAAO;QACJ,IAAI,EAAE,MAAM;QACZ,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,cAAc,EAAE,IAAI,CAAC,cAAc;KACrC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { McpServerConfig } from '@a1st/aix-schema';
|
|
2
|
+
/**
|
|
3
|
+
* Pre-configured templates for common MCP servers.
|
|
4
|
+
*/
|
|
5
|
+
export declare const serverTemplates: Record<string, Partial<McpServerConfig>>;
|
|
6
|
+
/**
|
|
7
|
+
* Get a server template by name
|
|
8
|
+
*/
|
|
9
|
+
export declare function getServerTemplate(name: string): Partial<McpServerConfig> | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* List all available template names
|
|
12
|
+
*/
|
|
13
|
+
export declare function listServerTemplates(): string[];
|
|
14
|
+
/**
|
|
15
|
+
* Create a server config from a template with overrides
|
|
16
|
+
*/
|
|
17
|
+
export declare function createFromTemplate(templateName: string, overrides?: Partial<McpServerConfig>): McpServerConfig;
|
|
18
|
+
//# sourceMappingURL=templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/mcp/templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,CAiCpE,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,GAAG,SAAS,CAEpF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAE9C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAC/B,YAAY,EAAE,MAAM,EACpB,SAAS,GAAE,OAAO,CAAC,eAAe,CAAM,GACxC,eAAe,CAejB"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pre-configured templates for common MCP servers.
|
|
3
|
+
*/
|
|
4
|
+
export const serverTemplates = {
|
|
5
|
+
github: {
|
|
6
|
+
command: 'npx',
|
|
7
|
+
args: ['@modelcontextprotocol/server-github'],
|
|
8
|
+
env: { GITHUB_TOKEN: '${GITHUB_TOKEN}' },
|
|
9
|
+
},
|
|
10
|
+
filesystem: {
|
|
11
|
+
command: 'npx',
|
|
12
|
+
args: ['@modelcontextprotocol/server-filesystem'],
|
|
13
|
+
},
|
|
14
|
+
postgres: {
|
|
15
|
+
command: 'npx',
|
|
16
|
+
args: ['@modelcontextprotocol/server-postgres'],
|
|
17
|
+
env: { DATABASE_URL: '${DATABASE_URL}' },
|
|
18
|
+
},
|
|
19
|
+
sqlite: {
|
|
20
|
+
command: 'npx',
|
|
21
|
+
args: ['@modelcontextprotocol/server-sqlite'],
|
|
22
|
+
env: { SQLITE_PATH: '${SQLITE_PATH}' },
|
|
23
|
+
},
|
|
24
|
+
memory: {
|
|
25
|
+
command: 'npx',
|
|
26
|
+
args: ['@modelcontextprotocol/server-memory'],
|
|
27
|
+
},
|
|
28
|
+
brave: {
|
|
29
|
+
command: 'npx',
|
|
30
|
+
args: ['@modelcontextprotocol/server-brave-search'],
|
|
31
|
+
env: { BRAVE_API_KEY: '${BRAVE_API_KEY}' },
|
|
32
|
+
},
|
|
33
|
+
puppeteer: {
|
|
34
|
+
command: 'npx',
|
|
35
|
+
args: ['@modelcontextprotocol/server-puppeteer'],
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Get a server template by name
|
|
40
|
+
*/
|
|
41
|
+
export function getServerTemplate(name) {
|
|
42
|
+
return serverTemplates[name];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* List all available template names
|
|
46
|
+
*/
|
|
47
|
+
export function listServerTemplates() {
|
|
48
|
+
return Object.keys(serverTemplates);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Create a server config from a template with overrides
|
|
52
|
+
*/
|
|
53
|
+
export function createFromTemplate(templateName, overrides = {}) {
|
|
54
|
+
const template = serverTemplates[templateName];
|
|
55
|
+
if (!template) {
|
|
56
|
+
throw new Error(`Unknown server template: ${templateName}`);
|
|
57
|
+
}
|
|
58
|
+
if (!('command' in template)) {
|
|
59
|
+
throw new Error(`Template "${templateName}" is missing required 'command' field`);
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
...template,
|
|
63
|
+
...overrides,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/mcp/templates.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAA6C;IACtE,MAAM,EAAE;QACL,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,qCAAqC,CAAC;QAC7C,GAAG,EAAE,EAAE,YAAY,EAAE,iBAAiB,EAAE;KAC1C;IACD,UAAU,EAAE;QACT,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,yCAAyC,CAAC;KACnD;IACD,QAAQ,EAAE;QACP,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,uCAAuC,CAAC;QAC/C,GAAG,EAAE,EAAE,YAAY,EAAE,iBAAiB,EAAE;KAC1C;IACD,MAAM,EAAE;QACL,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,qCAAqC,CAAC;QAC7C,GAAG,EAAE,EAAE,WAAW,EAAE,gBAAgB,EAAE;KACxC;IACD,MAAM,EAAE;QACL,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,qCAAqC,CAAC;KAC/C;IACD,KAAK,EAAE;QACJ,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,2CAA2C,CAAC;QACnD,GAAG,EAAE,EAAE,aAAa,EAAE,kBAAkB,EAAE;KAC5C;IACD,SAAS,EAAE;QACR,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,wCAAwC,CAAC;KAClD;CACH,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC3C,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IAChC,OAAO,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAC/B,YAAoB,EACpB,YAAsC,EAAE;IAExC,MAAM,QAAQ,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;IAE/C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,4BAA4B,YAAY,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,CAAC,CAAC,SAAS,IAAI,QAAQ,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,aAAa,YAAY,uCAAuC,CAAC,CAAC;IACrF,CAAC;IAED,OAAO;QACJ,GAAG,QAAQ;QACX,GAAG,SAAS;KACK,CAAC;AACxB,CAAC"}
|
package/dist/merge.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { AiJsonConfig } from '@a1st/aix-schema';
|
|
2
|
+
/**
|
|
3
|
+
* Valid scopes for filtering config sections.
|
|
4
|
+
*/
|
|
5
|
+
export type ConfigScope = 'rules' | 'mcp' | 'skills' | 'editors' | 'prompts';
|
|
6
|
+
/**
|
|
7
|
+
* Filter a config to only include the specified scopes.
|
|
8
|
+
* @param config - Full config
|
|
9
|
+
* @param scopes - Scopes to include (if empty, returns empty partial)
|
|
10
|
+
* @returns Partial config with only specified sections
|
|
11
|
+
*/
|
|
12
|
+
export declare function filterConfigByScopes(config: AiJsonConfig, scopes: ConfigScope[]): Partial<AiJsonConfig>;
|
|
13
|
+
/**
|
|
14
|
+
* Merge two AiJsonConfig objects. Remote config wins on conflicts.
|
|
15
|
+
*
|
|
16
|
+
* Merge strategy:
|
|
17
|
+
* - `skills`: Object merge by key, replace entire value on key conflict
|
|
18
|
+
* - `rules`: Object merge by key, replace entire value on key conflict
|
|
19
|
+
* - `prompts`: Object merge by key, replace entire value on key conflict
|
|
20
|
+
* - `mcp`: Object merge by key, replace entire value on key conflict
|
|
21
|
+
* - `editors`: Object merge by key, deep merge on key conflict
|
|
22
|
+
* - `$schema`, `extends`: Remote wins
|
|
23
|
+
*
|
|
24
|
+
* @param local - Existing local config
|
|
25
|
+
* @param remote - Remote config to merge in (may be partial if scope-filtered)
|
|
26
|
+
* @returns Merged config
|
|
27
|
+
*/
|
|
28
|
+
export declare function mergeConfigs(local: AiJsonConfig, remote: Partial<AiJsonConfig>): AiJsonConfig;
|
|
29
|
+
//# sourceMappingURL=merge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../src/merge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAA8B,MAAM,kBAAkB,CAAC;AAGjF;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AAE7E;;;;;GAKG;AACH,wBAAgB,oBAAoB,CACjC,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,WAAW,EAAE,GACrB,OAAO,CAAC,YAAY,CAAC,CAsCvB;AAiDD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAyD7F"}
|