@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,20 @@
|
|
|
1
|
+
import { mkdir } from 'node:fs/promises';
|
|
2
|
+
import { getNpmCacheDir } from '../cache/paths.js';
|
|
3
|
+
import { safeRm } from '../fs/safe-rm.js';
|
|
4
|
+
/**
|
|
5
|
+
* Ensure the npm cache directory exists.
|
|
6
|
+
*/
|
|
7
|
+
export async function ensureNpmCacheDir(projectRoot) {
|
|
8
|
+
const path = getNpmCacheDir(projectRoot);
|
|
9
|
+
await mkdir(path, { recursive: true });
|
|
10
|
+
return path;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Clear the npm skills cache.
|
|
14
|
+
* Note: Git skills cache is managed by giget and not cleared here.
|
|
15
|
+
*/
|
|
16
|
+
export async function clearNpmCache(projectRoot) {
|
|
17
|
+
const cacheDir = getNpmCacheDir(projectRoot);
|
|
18
|
+
await safeRm(cacheDir, { force: true });
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/skills/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,WAAmB;IACxD,MAAM,IAAI,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAEzC,MAAM,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,OAAO,IAAI,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,WAAmB;IACpD,MAAM,QAAQ,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAE7C,MAAM,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { parseSkillMd } from './parser.js';
|
|
2
|
+
export { parseSkillRef, type LocalRef, type GitRef, type NpmRef, type SkillRef, } from './reference-parser.js';
|
|
3
|
+
export { resolveLocal } from './resolvers/local.js';
|
|
4
|
+
export { resolveGit } from './resolvers/git.js';
|
|
5
|
+
export { resolveNpm } from './resolvers/npm.js';
|
|
6
|
+
export { resolveSkill, resolveSkillRef, resolveAllSkills, type SkillResolveOptions } from './resolve.js';
|
|
7
|
+
export { validateSkill, type ValidationResult } from './validate.js';
|
|
8
|
+
export { ensureNpmCacheDir, clearNpmCache } from './cache.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACJ,aAAa,EACb,KAAK,QAAQ,EACb,KAAK,MAAM,EACX,KAAK,MAAM,EACX,KAAK,QAAQ,GACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACzG,OAAO,EAAE,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { parseSkillMd } from './parser.js';
|
|
2
|
+
export { parseSkillRef, } from './reference-parser.js';
|
|
3
|
+
export { resolveLocal } from './resolvers/local.js';
|
|
4
|
+
export { resolveGit } from './resolvers/git.js';
|
|
5
|
+
export { resolveNpm } from './resolvers/npm.js';
|
|
6
|
+
export { resolveSkill, resolveSkillRef, resolveAllSkills } from './resolve.js';
|
|
7
|
+
export { validateSkill } from './validate.js';
|
|
8
|
+
export { ensureNpmCacheDir, clearNpmCache } from './cache.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACJ,aAAa,GAKf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAA4B,MAAM,cAAc,CAAC;AACzG,OAAO,EAAE,aAAa,EAAyB,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/skills/parser.ts"],"names":[],"mappings":"AAGA,OAAO,EAA0B,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAI5E;;GAEG;AACH,wBAAsB,YAAY,CAC/B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,GAC7B,OAAO,CAAC,WAAW,CAAC,CA0BtB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { join } from 'pathe';
|
|
3
|
+
import { parse as parseYaml } from 'yaml';
|
|
4
|
+
import { skillFrontmatterSchema } from '@a1st/aix-schema';
|
|
5
|
+
const FRONTMATTER_REGEX = /^---\n([\s\S]*?)\n---\n([\s\S]*)$/;
|
|
6
|
+
/**
|
|
7
|
+
* Parse a SKILL.md file from a skill directory
|
|
8
|
+
*/
|
|
9
|
+
export async function parseSkillMd(skillPath, source) {
|
|
10
|
+
const skillMdPath = join(skillPath, 'SKILL.md');
|
|
11
|
+
const content = await readFile(skillMdPath, 'utf-8');
|
|
12
|
+
const match = content.match(FRONTMATTER_REGEX);
|
|
13
|
+
if (!match) {
|
|
14
|
+
throw new Error(`Invalid SKILL.md format: missing frontmatter in ${skillMdPath}`);
|
|
15
|
+
}
|
|
16
|
+
const yamlContent = match[1], body = match[2];
|
|
17
|
+
if (!yamlContent || body === undefined) {
|
|
18
|
+
throw new Error(`Invalid SKILL.md format: could not parse frontmatter in ${skillMdPath}`);
|
|
19
|
+
}
|
|
20
|
+
const rawFrontmatter = parseYaml(yamlContent), frontmatter = skillFrontmatterSchema.parse(rawFrontmatter);
|
|
21
|
+
return {
|
|
22
|
+
frontmatter,
|
|
23
|
+
body: body.trim(),
|
|
24
|
+
basePath: skillPath,
|
|
25
|
+
source,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/skills/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAC7B,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAoB,MAAM,kBAAkB,CAAC;AAE5E,MAAM,iBAAiB,GAAG,mCAAmC,CAAC;AAE9D;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAC/B,SAAiB,EACjB,MAA6B;IAE7B,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAErD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAE/C,IAAI,CAAC,KAAK,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,mDAAmD,WAAW,EAAE,CAAC,CAAC;IACrF,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,EACtB,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAEtB,IAAI,CAAC,WAAW,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,2DAA2D,WAAW,EAAE,CAAC,CAAC;IAC7F,CAAC;IAED,MAAM,cAAc,GAAG,SAAS,CAAC,WAAW,CAAY,EAClD,WAAW,GAAG,sBAAsB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAEjE,OAAO;QACJ,WAAW;QACX,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;QACjB,QAAQ,EAAE,SAAS;QACnB,MAAM;KACR,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export type LocalRef = {
|
|
2
|
+
type: 'local';
|
|
3
|
+
path: string;
|
|
4
|
+
};
|
|
5
|
+
export type GitRef = {
|
|
6
|
+
type: 'git';
|
|
7
|
+
url: string;
|
|
8
|
+
ref?: string;
|
|
9
|
+
path?: string;
|
|
10
|
+
};
|
|
11
|
+
export type NpmRef = {
|
|
12
|
+
type: 'npm';
|
|
13
|
+
packageName: string;
|
|
14
|
+
path?: string;
|
|
15
|
+
version?: string;
|
|
16
|
+
};
|
|
17
|
+
export type SkillRef = LocalRef | GitRef | NpmRef;
|
|
18
|
+
/**
|
|
19
|
+
* Parse a skill reference into a structured object.
|
|
20
|
+
* Supports local paths, git shorthand, git objects, and npm package names.
|
|
21
|
+
*/
|
|
22
|
+
export declare function parseSkillRef(name: string, input: unknown): SkillRef;
|
|
23
|
+
//# sourceMappingURL=reference-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reference-parser.d.ts","sourceRoot":"","sources":["../../src/skills/reference-parser.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AACvD,MAAM,MAAM,MAAM,GAAG;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAC/E,MAAM,MAAM,MAAM,GAAG;IAClB,IAAI,EAAE,KAAK,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AACF,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;AA8HlD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,QAAQ,CAgEpE"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check if a string looks like an npm package name (without subpath).
|
|
3
|
+
* Matches: aix-skill-*, @scope/aix-skill-*, or any scoped/unscoped package
|
|
4
|
+
*/
|
|
5
|
+
function isNpmPackageName(str) {
|
|
6
|
+
// Scoped package: @scope/package (exactly two parts)
|
|
7
|
+
if (str.startsWith('@')) {
|
|
8
|
+
const parts = str.split('/');
|
|
9
|
+
return parts.length === 2;
|
|
10
|
+
}
|
|
11
|
+
// aix-skill- prefix (our convention)
|
|
12
|
+
if (str.startsWith('aix-skill-')) {
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
// Any other package name (no path separators, no git prefixes)
|
|
16
|
+
return !str.includes('/') && !str.includes(':') && !str.startsWith('.');
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Parse npm package reference with optional subpath.
|
|
20
|
+
* Requires file extension to distinguish from plain package names.
|
|
21
|
+
*
|
|
22
|
+
* Examples:
|
|
23
|
+
* - "@scope/pkg/rules/style.md" → { packageName: "@scope/pkg", path: "rules/style.md" }
|
|
24
|
+
* - "pkg/prompts/review.md" → { packageName: "pkg", path: "prompts/review.md" }
|
|
25
|
+
* - "@scope/pkg" → { packageName: "@scope/pkg" } (no subpath)
|
|
26
|
+
*/
|
|
27
|
+
function parseNpmWithSubpath(str) {
|
|
28
|
+
// Must have a file extension to be treated as having a subpath
|
|
29
|
+
const hasExtension = /\.[a-z0-9]+$/i.test(str);
|
|
30
|
+
if (str.startsWith('@')) {
|
|
31
|
+
// Scoped: @scope/package or @scope/package/subpath
|
|
32
|
+
const parts = str.split('/');
|
|
33
|
+
if (parts.length < 2) {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
const packageName = `${parts[0]}/${parts[1]}`;
|
|
37
|
+
if (parts.length === 2) {
|
|
38
|
+
return { packageName };
|
|
39
|
+
}
|
|
40
|
+
// Has subpath - only valid if has extension
|
|
41
|
+
if (!hasExtension) {
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
return { packageName, path: parts.slice(2).join('/') };
|
|
45
|
+
}
|
|
46
|
+
// Unscoped: package or package/subpath
|
|
47
|
+
const slashIdx = str.indexOf('/');
|
|
48
|
+
if (slashIdx === -1) {
|
|
49
|
+
return { packageName: str };
|
|
50
|
+
}
|
|
51
|
+
// Has subpath - only valid if has extension
|
|
52
|
+
if (!hasExtension) {
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
packageName: str.slice(0, slashIdx),
|
|
57
|
+
path: str.slice(slashIdx + 1),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Parse git shorthand format: github:user/repo/path#ref or github:user/repo#ref:path
|
|
62
|
+
* Supported providers: github, gitlab
|
|
63
|
+
*
|
|
64
|
+
* Two path formats are supported:
|
|
65
|
+
* 1. Path in repo portion: github:user/repo/subdir/path#ref
|
|
66
|
+
* 2. Path after ref: github:user/repo#ref:subdir/path
|
|
67
|
+
*/
|
|
68
|
+
function parseGitShorthand(input) {
|
|
69
|
+
// Match: github:user/repo or gitlab:user/repo with optional /path and #ref
|
|
70
|
+
const match = input.match(/^(github|gitlab):([^#]+)(?:#(.+))?$/);
|
|
71
|
+
if (!match) {
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
74
|
+
const [, provider, repoPath, refAndPath] = match;
|
|
75
|
+
// Split repo path: user/repo/optional/subpath
|
|
76
|
+
const parts = repoPath?.split('/') ?? [];
|
|
77
|
+
if (parts.length < 2) {
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
const user = parts[0], repo = parts[1], subpathFromRepo = parts.length > 2 ? parts.slice(2).join('/') : undefined;
|
|
81
|
+
// Parse ref and path - supports both #ref and #ref:path formats
|
|
82
|
+
let ref, subpathFromRef;
|
|
83
|
+
if (refAndPath) {
|
|
84
|
+
const colonIdx = refAndPath.indexOf(':');
|
|
85
|
+
if (colonIdx !== -1) {
|
|
86
|
+
// Format: #ref:path
|
|
87
|
+
ref = refAndPath.slice(0, colonIdx);
|
|
88
|
+
subpathFromRef = refAndPath.slice(colonIdx + 1);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
// Format: #ref (no path)
|
|
92
|
+
ref = refAndPath;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Use path from ref portion if present, otherwise from repo portion
|
|
96
|
+
const path = subpathFromRef ?? subpathFromRepo;
|
|
97
|
+
return {
|
|
98
|
+
type: 'git',
|
|
99
|
+
url: `https://${provider}.com/${user}/${repo}`,
|
|
100
|
+
ref,
|
|
101
|
+
path,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Parse a skill reference into a structured object.
|
|
106
|
+
* Supports local paths, git shorthand, git objects, and npm package names.
|
|
107
|
+
*/
|
|
108
|
+
export function parseSkillRef(name, input) {
|
|
109
|
+
// Handle false/disabled skills
|
|
110
|
+
if (input === false) {
|
|
111
|
+
throw new Error(`Skill "${name}" is disabled`);
|
|
112
|
+
}
|
|
113
|
+
if (typeof input === 'string') {
|
|
114
|
+
// Local path
|
|
115
|
+
if (input.startsWith('./') || input.startsWith('/') || input.startsWith('../')) {
|
|
116
|
+
return { type: 'local', path: input };
|
|
117
|
+
}
|
|
118
|
+
// Git shorthand (github:user/repo, gitlab:user/repo)
|
|
119
|
+
const gitRef = parseGitShorthand(input);
|
|
120
|
+
if (gitRef) {
|
|
121
|
+
return gitRef;
|
|
122
|
+
}
|
|
123
|
+
// NPM package (possibly with subpath)
|
|
124
|
+
const npmParsed = parseNpmWithSubpath(input);
|
|
125
|
+
if (npmParsed &&
|
|
126
|
+
(isNpmPackageName(npmParsed.packageName) || npmParsed.packageName.startsWith('@'))) {
|
|
127
|
+
return { type: 'npm', ...npmParsed };
|
|
128
|
+
}
|
|
129
|
+
throw new Error(`Cannot determine skill reference type for "${name}": ${input}`);
|
|
130
|
+
}
|
|
131
|
+
if (typeof input === 'object' && input !== null) {
|
|
132
|
+
const obj = input;
|
|
133
|
+
// Check git first (git objects may also have a path property for subdirectory)
|
|
134
|
+
if ('git' in obj && typeof obj.git === 'string') {
|
|
135
|
+
return {
|
|
136
|
+
type: 'git',
|
|
137
|
+
url: obj.git,
|
|
138
|
+
ref: typeof obj.ref === 'string' ? obj.ref : undefined,
|
|
139
|
+
path: typeof obj.path === 'string' ? obj.path : undefined,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
// NPM package (check before path since npm objects may also have a path property)
|
|
143
|
+
if ('npm' in obj && typeof obj.npm === 'string') {
|
|
144
|
+
return {
|
|
145
|
+
type: 'npm',
|
|
146
|
+
packageName: obj.npm,
|
|
147
|
+
path: typeof obj.path === 'string' ? obj.path : undefined,
|
|
148
|
+
version: typeof obj.version === 'string' ? obj.version : undefined,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
// Local path (only if no git or npm property)
|
|
152
|
+
if ('path' in obj && typeof obj.path === 'string') {
|
|
153
|
+
return { type: 'local', path: obj.path };
|
|
154
|
+
}
|
|
155
|
+
// Handle source wrapper object
|
|
156
|
+
if ('source' in obj) {
|
|
157
|
+
return parseSkillRef(name, obj.source);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
throw new Error(`Invalid skill reference for "${name}": ${JSON.stringify(input)}`);
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=reference-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reference-parser.js","sourceRoot":"","sources":["../../src/skills/reference-parser.ts"],"names":[],"mappings":"AAUA;;;GAGG;AACH,SAAS,gBAAgB,CAAC,GAAW;IAClC,qDAAqD;IACrD,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE7B,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;IAC7B,CAAC;IACD,qCAAqC;IACrC,IAAI,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IACf,CAAC;IACD,+DAA+D;IAC/D,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAC3E,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,mBAAmB,CAAC,GAAW;IACrC,+DAA+D;IAC/D,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE/C,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,mDAAmD;QACnD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE7B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,OAAO,SAAS,CAAC;QACpB,CAAC;QAED,MAAM,WAAW,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAE9C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,EAAE,WAAW,EAAE,CAAC;QAC1B,CAAC;QACD,4CAA4C;QAC5C,IAAI,CAAC,YAAY,EAAE,CAAC;YACjB,OAAO,SAAS,CAAC;QACpB,CAAC;QACD,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IAC1D,CAAC;IAED,uCAAuC;IACvC,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAElC,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;QACnB,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;IAC/B,CAAC;IACD,4CAA4C;IAC5C,IAAI,CAAC,YAAY,EAAE,CAAC;QACjB,OAAO,SAAS,CAAC;IACpB,CAAC;IACD,OAAO;QACJ,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC;QACnC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;KAC/B,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,iBAAiB,CAAC,KAAa;IACrC,2EAA2E;IAC3E,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;IAEjE,IAAI,CAAC,KAAK,EAAE,CAAC;QACV,OAAO,SAAS,CAAC;IACpB,CAAC;IAED,MAAM,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC;IAEjD,8CAA8C;IAC9C,MAAM,KAAK,GAAG,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IAEzC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,SAAS,CAAC;IACpB,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,EACf,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,EACf,eAAe,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEhF,gEAAgE;IAChE,IAAI,GAAuB,EAAE,cAAkC,CAAC;IAEhE,IAAI,UAAU,EAAE,CAAC;QACd,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAEzC,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;YACnB,oBAAoB;YACpB,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YACpC,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QACnD,CAAC;aAAM,CAAC;YACL,yBAAyB;YACzB,GAAG,GAAG,UAAU,CAAC;QACpB,CAAC;IACJ,CAAC;IAED,oEAAoE;IACpE,MAAM,IAAI,GAAG,cAAc,IAAI,eAAe,CAAC;IAE/C,OAAO;QACJ,IAAI,EAAE,KAAK;QACX,GAAG,EAAE,WAAW,QAAQ,QAAQ,IAAI,IAAI,IAAI,EAAE;QAC9C,GAAG;QACH,IAAI;KACN,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,KAAc;IACvD,+BAA+B;IAC/B,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,eAAe,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC7B,aAAa;QACb,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QACzC,CAAC;QACD,qDAAqD;QACrD,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAExC,IAAI,MAAM,EAAE,CAAC;YACV,OAAO,MAAM,CAAC;QACjB,CAAC;QACD,sCAAsC;QACtC,MAAM,SAAS,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAE7C,IACG,SAAS;YACT,CAAC,gBAAgB,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EACnF,CAAC;YACA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,CAAC;QACxC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,8CAA8C,IAAI,MAAM,KAAK,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC/C,MAAM,GAAG,GAAG,KAAgC,CAAC;QAE7C,+EAA+E;QAC/E,IAAI,KAAK,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC/C,OAAO;gBACJ,IAAI,EAAE,KAAK;gBACX,GAAG,EAAE,GAAG,CAAC,GAAG;gBACZ,GAAG,EAAE,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;gBACtD,IAAI,EAAE,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;aAC3D,CAAC;QACL,CAAC;QAED,kFAAkF;QAClF,IAAI,KAAK,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC/C,OAAO;gBACJ,IAAI,EAAE,KAAK;gBACX,WAAW,EAAE,GAAG,CAAC,GAAG;gBACpB,IAAI,EAAE,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;gBACzD,OAAO,EAAE,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;aACpE,CAAC;QACL,CAAC;QAED,8CAA8C;QAC9C,IAAI,MAAM,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACjD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;QAC5C,CAAC;QAED,+BAA+B;QAC/B,IAAI,QAAQ,IAAI,GAAG,EAAE,CAAC;YACnB,OAAO,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACtF,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ParsedSkill } from '@a1st/aix-schema';
|
|
2
|
+
import { type SkillRef } from './reference-parser.js';
|
|
3
|
+
export interface SkillResolveOptions {
|
|
4
|
+
/** Base directory for resolving relative paths */
|
|
5
|
+
baseDir: string;
|
|
6
|
+
/** Project root for npm resolution */
|
|
7
|
+
projectRoot?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Resolve a skill reference to a parsed skill
|
|
11
|
+
*/
|
|
12
|
+
export declare function resolveSkill(name: string, ref: unknown, options: SkillResolveOptions): Promise<ParsedSkill>;
|
|
13
|
+
/**
|
|
14
|
+
* Resolve a parsed skill reference
|
|
15
|
+
*/
|
|
16
|
+
export declare function resolveSkillRef(ref: SkillRef, baseDir: string, projectRoot: string): Promise<ParsedSkill>;
|
|
17
|
+
/**
|
|
18
|
+
* Resolve all skills from a config's skills map
|
|
19
|
+
*/
|
|
20
|
+
export declare function resolveAllSkills(skills: Record<string, unknown>, options: SkillResolveOptions): Promise<Map<string, ParsedSkill>>;
|
|
21
|
+
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/skills/resolve.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAiB,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAKrE,MAAM,WAAW,mBAAmB;IACjC,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAC/B,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,mBAAmB,GAC5B,OAAO,CAAC,WAAW,CAAC,CAKtB;AAED;;GAEG;AACH,wBAAsB,eAAe,CAClC,GAAG,EAAE,QAAQ,EACb,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GACnB,OAAO,CAAC,WAAW,CAAC,CAStB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACnC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,mBAAmB,GAC5B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAoBnC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import pMap from 'p-map';
|
|
2
|
+
import { parseSkillRef } from './reference-parser.js';
|
|
3
|
+
import { resolveLocal } from './resolvers/local.js';
|
|
4
|
+
import { resolveGit } from './resolvers/git.js';
|
|
5
|
+
import { resolveNpm } from './resolvers/npm.js';
|
|
6
|
+
/**
|
|
7
|
+
* Resolve a skill reference to a parsed skill
|
|
8
|
+
*/
|
|
9
|
+
export async function resolveSkill(name, ref, options) {
|
|
10
|
+
const parsed = parseSkillRef(name, ref), projectRoot = options.projectRoot ?? options.baseDir;
|
|
11
|
+
return resolveSkillRef(parsed, options.baseDir, projectRoot);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Resolve a parsed skill reference
|
|
15
|
+
*/
|
|
16
|
+
export async function resolveSkillRef(ref, baseDir, projectRoot) {
|
|
17
|
+
switch (ref.type) {
|
|
18
|
+
case 'local':
|
|
19
|
+
return resolveLocal(ref, baseDir);
|
|
20
|
+
case 'git':
|
|
21
|
+
return resolveGit(ref);
|
|
22
|
+
case 'npm':
|
|
23
|
+
return resolveNpm(ref, projectRoot);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Resolve all skills from a config's skills map
|
|
28
|
+
*/
|
|
29
|
+
export async function resolveAllSkills(skills, options) {
|
|
30
|
+
const entries = Object.entries(skills).filter(([, ref]) => ref !== false);
|
|
31
|
+
const resolved = await pMap(entries, async ([name, ref]) => {
|
|
32
|
+
try {
|
|
33
|
+
const skill = await resolveSkill(name, ref, options);
|
|
34
|
+
return { name, skill };
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
38
|
+
throw new Error(`Failed to resolve skill "${name}": ${message}`, { cause: error });
|
|
39
|
+
}
|
|
40
|
+
}, { concurrency: 5 });
|
|
41
|
+
return new Map(resolved.map(({ name, skill }) => [name, skill]));
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/skills/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,OAAO,CAAC;AAEzB,OAAO,EAAE,aAAa,EAAiB,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAShD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAC/B,IAAY,EACZ,GAAY,EACZ,OAA4B;IAE5B,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,EACjC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAE3D,OAAO,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AAChE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAClC,GAAa,EACb,OAAe,EACf,WAAmB;IAEnB,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,OAAO;YACT,OAAO,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACrC,KAAK,KAAK;YACP,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;QAC1B,KAAK,KAAK;YACP,OAAO,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACvC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACnC,MAA+B,EAC/B,OAA4B;IAE5B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC;IAE1E,MAAM,QAAQ,GAAG,MAAM,IAAI,CACxB,OAAO,EACP,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE;QACnB,IAAI,CAAC;YACF,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YAErD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACd,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAEvE,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,MAAM,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACtF,CAAC;IACJ,CAAC,EACD,EAAE,WAAW,EAAE,CAAC,EAAE,CACpB,CAAC;IAEF,OAAO,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { GitRef } from '../reference-parser.js';
|
|
2
|
+
import type { ParsedSkill } from '@a1st/aix-schema';
|
|
3
|
+
/**
|
|
4
|
+
* Resolve a skill from a git repository.
|
|
5
|
+
* Uses giget for downloading which handles caching internally.
|
|
6
|
+
*/
|
|
7
|
+
export declare function resolveGit(ref: GitRef): Promise<ParsedSkill>;
|
|
8
|
+
//# sourceMappingURL=git.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../../src/skills/resolvers/git.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD;;;GAGG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAgClE"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { downloadTemplate } from 'giget';
|
|
2
|
+
import { join } from 'pathe';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import { parseSkillMd } from '../parser.js';
|
|
5
|
+
/**
|
|
6
|
+
* Resolve a skill from a git repository.
|
|
7
|
+
* Uses giget for downloading which handles caching internally.
|
|
8
|
+
*/
|
|
9
|
+
export async function resolveGit(ref) {
|
|
10
|
+
const cacheKey = createCacheKey(ref), cachePath = join(tmpdir(), 'aix-skills', 'git', cacheKey);
|
|
11
|
+
// Build giget source string
|
|
12
|
+
// giget supports: gh:user/repo, gitlab:user/repo, https://...
|
|
13
|
+
let source = ref.url;
|
|
14
|
+
// Convert https URLs to giget format if needed
|
|
15
|
+
if (source.startsWith('https://github.com/')) {
|
|
16
|
+
source = source.replace('https://github.com/', 'gh:');
|
|
17
|
+
}
|
|
18
|
+
else if (source.startsWith('https://gitlab.com/')) {
|
|
19
|
+
source = source.replace('https://gitlab.com/', 'gitlab:');
|
|
20
|
+
}
|
|
21
|
+
// Add subdirectory path if specified
|
|
22
|
+
if (ref.path) {
|
|
23
|
+
source = `${source}/${ref.path}`;
|
|
24
|
+
}
|
|
25
|
+
// Add ref (branch/tag/commit) if specified
|
|
26
|
+
if (ref.ref) {
|
|
27
|
+
source = `${source}#${ref.ref}`;
|
|
28
|
+
}
|
|
29
|
+
// Download using giget
|
|
30
|
+
await downloadTemplate(source, {
|
|
31
|
+
dir: cachePath,
|
|
32
|
+
force: true,
|
|
33
|
+
});
|
|
34
|
+
return parseSkillMd(cachePath, 'git');
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Create a cache key for a git reference
|
|
38
|
+
*/
|
|
39
|
+
function createCacheKey(ref) {
|
|
40
|
+
const urlHash = Buffer.from(ref.url).toString('base64url').slice(0, 16), refPart = ref.ref ?? 'default', pathPart = ref.path ? `-${ref.path.replace(/\//g, '-')}` : '';
|
|
41
|
+
return `${urlHash}-${refPart}${pathPart}`;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../../src/skills/resolvers/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAI5C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW;IACzC,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,EAC9B,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAEhE,4BAA4B;IAC5B,8DAA8D;IAC9D,IAAI,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC;IAErB,+CAA+C;IAC/C,IAAI,MAAM,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;QAC5C,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;IACzD,CAAC;SAAM,IAAI,MAAM,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACnD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;IAC7D,CAAC;IAED,qCAAqC;IACrC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;IACpC,CAAC;IAED,2CAA2C;IAC3C,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;IACnC,CAAC;IAED,uBAAuB;IACvB,MAAM,gBAAgB,CAAC,MAAM,EAAE;QAC5B,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,IAAI;KACb,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,GAAW;IAChC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EACjE,OAAO,GAAG,GAAG,CAAC,GAAG,IAAI,SAAS,EAC9B,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAEpE,OAAO,GAAG,OAAO,IAAI,OAAO,GAAG,QAAQ,EAAE,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { LocalRef } from '../reference-parser.js';
|
|
2
|
+
import type { ParsedSkill } from '@a1st/aix-schema';
|
|
3
|
+
/**
|
|
4
|
+
* Resolve a skill from a local file path
|
|
5
|
+
*/
|
|
6
|
+
export declare function resolveLocal(ref: LocalRef, baseDir: string): Promise<ParsedSkill>;
|
|
7
|
+
//# sourceMappingURL=local.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../../src/skills/resolvers/local.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD;;GAEG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAWvF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { stat } from 'node:fs/promises';
|
|
2
|
+
import { resolve } from 'pathe';
|
|
3
|
+
import { parseSkillMd } from '../parser.js';
|
|
4
|
+
/**
|
|
5
|
+
* Resolve a skill from a local file path
|
|
6
|
+
*/
|
|
7
|
+
export async function resolveLocal(ref, baseDir) {
|
|
8
|
+
const skillPath = resolve(baseDir, ref.path);
|
|
9
|
+
// Check if path exists and is a directory
|
|
10
|
+
const stats = await stat(skillPath);
|
|
11
|
+
if (!stats.isDirectory()) {
|
|
12
|
+
throw new Error(`Skill path is not a directory: ${skillPath}`);
|
|
13
|
+
}
|
|
14
|
+
return parseSkillMd(skillPath, 'local');
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=local.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.js","sourceRoot":"","sources":["../../../src/skills/resolvers/local.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAI5C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAa,EAAE,OAAe;IAC9D,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAE7C,0CAA0C;IAC1C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC;IAEpC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,kCAAkC,SAAS,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { NpmRef } from '../reference-parser.js';
|
|
2
|
+
import type { ParsedSkill } from '@a1st/aix-schema';
|
|
3
|
+
/**
|
|
4
|
+
* Resolve an npm skill package.
|
|
5
|
+
* Skills are directories containing SKILL.md and supporting files.
|
|
6
|
+
*
|
|
7
|
+
* Resolution modes:
|
|
8
|
+
* - No version: Resolve from project's node_modules only (error if not found)
|
|
9
|
+
* - With version: Auto-install to .aix/.tmp/node_modules cache
|
|
10
|
+
*/
|
|
11
|
+
export declare function resolveNpm(ref: NpmRef, projectRoot: string): Promise<ParsedSkill>;
|
|
12
|
+
//# sourceMappingURL=npm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"npm.d.ts","sourceRoot":"","sources":["../../../src/skills/resolvers/npm.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAmBvF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { join } from 'pathe';
|
|
3
|
+
import { parseSkillMd } from '../parser.js';
|
|
4
|
+
import { resolveNpmPath } from '../../npm/resolve.js';
|
|
5
|
+
/**
|
|
6
|
+
* Resolve an npm skill package.
|
|
7
|
+
* Skills are directories containing SKILL.md and supporting files.
|
|
8
|
+
*
|
|
9
|
+
* Resolution modes:
|
|
10
|
+
* - No version: Resolve from project's node_modules only (error if not found)
|
|
11
|
+
* - With version: Auto-install to .aix/.tmp/node_modules cache
|
|
12
|
+
*/
|
|
13
|
+
export async function resolveNpm(ref, projectRoot) {
|
|
14
|
+
const skillDir = await resolveNpmPath({
|
|
15
|
+
packageName: ref.packageName,
|
|
16
|
+
subpath: ref.path,
|
|
17
|
+
version: ref.version,
|
|
18
|
+
projectRoot,
|
|
19
|
+
});
|
|
20
|
+
// Verify SKILL.md exists in the resolved directory
|
|
21
|
+
const skillMdPath = join(skillDir, 'SKILL.md');
|
|
22
|
+
if (!existsSync(skillMdPath)) {
|
|
23
|
+
throw new Error(`SKILL.md not found in ${skillDir}. ` +
|
|
24
|
+
`Ensure the package exports a skill directory at "${ref.path || '(root)'}".`);
|
|
25
|
+
}
|
|
26
|
+
return parseSkillMd(skillDir, 'npm');
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=npm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"npm.js","sourceRoot":"","sources":["../../../src/skills/resolvers/npm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW,EAAE,WAAmB;IAC9D,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC;QACnC,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,OAAO,EAAE,GAAG,CAAC,IAAI;QACjB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,WAAW;KACb,CAAC,CAAC;IAEH,mDAAmD;IACnD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAE/C,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACZ,yBAAyB,QAAQ,IAAI;YAClC,oDAAoD,GAAG,CAAC,IAAI,IAAI,QAAQ,IAAI,CACjF,CAAC;IACL,CAAC;IAED,OAAO,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ParsedSkill } from '@a1st/aix-schema';
|
|
2
|
+
export interface ValidationResult {
|
|
3
|
+
valid: boolean;
|
|
4
|
+
errors: string[];
|
|
5
|
+
warnings: string[];
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Validate a parsed skill for completeness and correctness
|
|
9
|
+
*/
|
|
10
|
+
export declare function validateSkill(skill: ParsedSkill): Promise<ValidationResult>;
|
|
11
|
+
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/skills/validate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,WAAW,gBAAgB;IAC9B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACrB;AAID;;GAEG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA8CjF"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { access, constants, readdir } from 'node:fs/promises';
|
|
2
|
+
import { join, basename } from 'pathe';
|
|
3
|
+
const OPTIONAL_DIRS = ['scripts', 'references', 'assets'];
|
|
4
|
+
/**
|
|
5
|
+
* Validate a parsed skill for completeness and correctness
|
|
6
|
+
*/
|
|
7
|
+
export async function validateSkill(skill) {
|
|
8
|
+
const errors = [], warnings = [];
|
|
9
|
+
// Validate SKILL.md exists (should already be parsed, but double-check)
|
|
10
|
+
const skillMdPath = join(skill.basePath, 'SKILL.md');
|
|
11
|
+
try {
|
|
12
|
+
await access(skillMdPath, constants.R_OK);
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
errors.push('SKILL.md not found');
|
|
16
|
+
}
|
|
17
|
+
// Validate name matches directory name (warning only)
|
|
18
|
+
const dirName = basename(skill.basePath);
|
|
19
|
+
if (dirName && dirName !== skill.frontmatter.name) {
|
|
20
|
+
warnings.push(`Skill name "${skill.frontmatter.name}" does not match directory name "${dirName}"`);
|
|
21
|
+
}
|
|
22
|
+
// Check optional directories exist if present
|
|
23
|
+
const files = await readdir(skill.basePath), dirsToCheck = OPTIONAL_DIRS.filter((dir) => files.includes(dir)), accessResults = await Promise.all(dirsToCheck.map(async (dir) => {
|
|
24
|
+
try {
|
|
25
|
+
await access(join(skill.basePath, dir), constants.R_OK);
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return `Cannot access ${dir}/ directory`;
|
|
30
|
+
}
|
|
31
|
+
}));
|
|
32
|
+
errors.push(...accessResults.filter((e) => e !== null));
|
|
33
|
+
// Check description quality
|
|
34
|
+
if (skill.frontmatter.description.length < 50) {
|
|
35
|
+
warnings.push('Description is short - consider adding more detail for better AI discovery');
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
valid: errors.length === 0,
|
|
39
|
+
errors,
|
|
40
|
+
warnings,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/skills/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AASvC,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;AAE1D;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAkB;IACnD,MAAM,MAAM,GAAa,EAAE,EACrB,QAAQ,GAAa,EAAE,CAAC;IAE9B,wEAAwE;IACxE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAErD,IAAI,CAAC;QACF,MAAM,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACrC,CAAC;IAED,sDAAsD;IACtD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAEzC,IAAI,OAAO,IAAI,OAAO,KAAK,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QACjD,QAAQ,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,WAAW,CAAC,IAAI,oCAAoC,OAAO,GAAG,CAAC,CAAC;IACtG,CAAC;IAED,8CAA8C;IAC9C,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EACrC,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAChE,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CAC9B,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,IAAI,CAAC;YACF,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;YACxD,OAAO,IAAI,CAAC;QACf,CAAC;QAAC,MAAM,CAAC;YACN,OAAO,iBAAiB,GAAG,aAAa,CAAC;QAC5C,CAAC;IACJ,CAAC,CAAC,CACJ,CAAC;IAER,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IAErE,4BAA4B;IAC5B,IAAI,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QAC7C,QAAQ,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC;IAC/F,CAAC;IAED,OAAO;QACJ,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC1B,MAAM;QACN,QAAQ;KACV,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type AiJsonConfig } from '@a1st/aix-schema';
|
|
2
|
+
export type ConfigUpdater = (config: AiJsonConfig) => AiJsonConfig | Promise<AiJsonConfig>;
|
|
3
|
+
export type LocalConfigUpdater = (config: Partial<AiJsonConfig>) => Partial<AiJsonConfig> | Promise<Partial<AiJsonConfig>>;
|
|
4
|
+
export interface UpdateOptions {
|
|
5
|
+
/** Create a backup before updating (default: true) */
|
|
6
|
+
backup?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function updateConfig(configPath: string, updater: ConfigUpdater, options?: UpdateOptions): Promise<void>;
|
|
9
|
+
/**
|
|
10
|
+
* Update the local config file (ai.local.json).
|
|
11
|
+
* Creates the file if it doesn't exist.
|
|
12
|
+
* @param localPath - Path to ai.local.json (or directory containing it)
|
|
13
|
+
* @param updater - Function to update the config
|
|
14
|
+
* @param options - Update options
|
|
15
|
+
*/
|
|
16
|
+
export declare function updateLocalConfig(localPath: string, updater: LocalConfigUpdater, options?: UpdateOptions): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Get the path to ai.local.json given a base config path.
|
|
19
|
+
* @param configPath - Path to ai.json or directory
|
|
20
|
+
* @returns Path to ai.local.json
|
|
21
|
+
*/
|
|
22
|
+
export declare function getLocalConfigPath(configPath: string): string;
|
|
23
|
+
//# sourceMappingURL=updater.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updater.d.ts","sourceRoot":"","sources":["../src/updater.ts"],"names":[],"mappings":"AAIA,OAAO,EAAiC,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAQpF,MAAM,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,YAAY,KAAK,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;AAC3F,MAAM,MAAM,kBAAkB,GAAG,CAC9B,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,KAC3B,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;AAE5D,MAAM,WAAW,aAAa;IAC3B,sDAAsD;IACtD,MAAM,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,YAAY,CAC/B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,aAAa,EACtB,OAAO,GAAE,aAAkB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAyCf;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACpC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,kBAAkB,EAC3B,OAAO,GAAE,aAAkB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAyCf;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAU7D"}
|