@claudetools/cli 0.13.13 → 0.13.15
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/__tests__/factories.d.ts +173 -0
- package/dist/__tests__/factories.d.ts.map +1 -0
- package/dist/__tests__/factories.js +150 -0
- package/dist/__tests__/factories.js.map +1 -0
- package/dist/__tests__/helpers.d.ts +36 -0
- package/dist/__tests__/helpers.d.ts.map +1 -0
- package/dist/__tests__/helpers.js +52 -0
- package/dist/__tests__/helpers.js.map +1 -0
- package/dist/analytics/index.d.ts +14 -0
- package/dist/analytics/index.d.ts.map +1 -0
- package/dist/analytics/index.js +259 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics/session.d.ts +17 -0
- package/dist/analytics/session.d.ts.map +1 -0
- package/dist/analytics/session.js +130 -0
- package/dist/analytics/session.js.map +1 -0
- package/dist/analytics/token-tracker.d.ts +48 -0
- package/dist/analytics/token-tracker.d.ts.map +1 -0
- package/dist/analytics/token-tracker.js +269 -0
- package/dist/analytics/token-tracker.js.map +1 -0
- package/dist/analytics/tracker.d.ts +33 -0
- package/dist/analytics/tracker.d.ts.map +1 -0
- package/dist/analytics/tracker.js +210 -0
- package/dist/analytics/tracker.js.map +1 -0
- package/dist/api-keys/index.d.ts +15 -0
- package/dist/api-keys/index.d.ts.map +1 -0
- package/dist/api-keys/index.js +228 -0
- package/dist/api-keys/index.js.map +1 -0
- package/dist/auth/config.d.ts +15 -0
- package/dist/auth/config.d.ts.map +1 -0
- package/dist/auth/config.js +67 -0
- package/dist/auth/config.js.map +1 -0
- package/dist/auth/index.d.ts +8 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +299 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/keychain.d.ts +21 -0
- package/dist/auth/keychain.d.ts.map +1 -0
- package/dist/auth/keychain.js +256 -0
- package/dist/auth/keychain.js.map +1 -0
- package/dist/billing/index.d.ts +7 -0
- package/dist/billing/index.d.ts.map +1 -0
- package/dist/billing/index.js +233 -0
- package/dist/billing/index.js.map +1 -0
- package/dist/cli.js +291 -43
- package/dist/cli.js.map +1 -1
- package/dist/commands/hook.d.ts +12 -0
- package/dist/commands/hook.d.ts.map +1 -0
- package/dist/commands/hook.js +190 -0
- package/dist/commands/hook.js.map +1 -0
- package/dist/commands/keys.d.ts +4 -0
- package/dist/commands/keys.d.ts.map +1 -0
- package/dist/commands/keys.js +43 -0
- package/dist/commands/keys.js.map +1 -0
- package/dist/commands/mcp.d.ts +4 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +43 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/project.d.ts +4 -0
- package/dist/commands/project.d.ts.map +1 -0
- package/dist/commands/project.js +68 -0
- package/dist/commands/project.js.map +1 -0
- package/dist/commands/skill.d.ts +4 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +37 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/stacks.d.ts +4 -0
- package/dist/commands/stacks.d.ts.map +1 -0
- package/dist/commands/stacks.js +103 -0
- package/dist/commands/stacks.js.map +1 -0
- package/dist/commands/stats.d.ts +4 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +6 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/sync.d.ts +4 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +60 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/update.d.ts +4 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +63 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/daemon/client.d.ts +107 -0
- package/dist/daemon/client.d.ts.map +1 -0
- package/dist/daemon/client.js +250 -0
- package/dist/daemon/client.js.map +1 -0
- package/dist/daemon/health.d.ts +38 -0
- package/dist/daemon/health.d.ts.map +1 -0
- package/dist/daemon/health.js +212 -0
- package/dist/daemon/health.js.map +1 -0
- package/dist/daemon/index.d.ts +34 -0
- package/dist/daemon/index.d.ts.map +1 -0
- package/dist/daemon/index.js +197 -0
- package/dist/daemon/index.js.map +1 -0
- package/dist/daemon/protocol.d.ts +144 -0
- package/dist/daemon/protocol.d.ts.map +1 -0
- package/dist/daemon/protocol.js +5 -0
- package/dist/daemon/protocol.js.map +1 -0
- package/dist/gamification/index.d.ts +13 -0
- package/dist/gamification/index.d.ts.map +1 -0
- package/dist/gamification/index.js +120 -0
- package/dist/gamification/index.js.map +1 -0
- package/dist/gamification/types.d.ts +34 -0
- package/dist/gamification/types.d.ts.map +1 -0
- package/dist/gamification/types.js +5 -0
- package/dist/gamification/types.js.map +1 -0
- package/dist/hooks/index.d.ts +65 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +403 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/lib/api.d.ts +29 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +213 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/browser.d.ts +6 -0
- package/dist/lib/browser.d.ts.map +1 -0
- package/dist/lib/browser.js +14 -0
- package/dist/lib/browser.js.map +1 -0
- package/dist/lib/channel-config.d.ts +10 -0
- package/dist/lib/channel-config.d.ts.map +1 -0
- package/dist/lib/channel-config.js +48 -0
- package/dist/lib/channel-config.js.map +1 -0
- package/dist/lib/command-runner.d.ts +16 -0
- package/dist/lib/command-runner.d.ts.map +1 -0
- package/dist/lib/command-runner.js +59 -0
- package/dist/lib/command-runner.js.map +1 -0
- package/dist/lib/command-utils.d.ts +22 -0
- package/dist/lib/command-utils.d.ts.map +1 -0
- package/dist/lib/command-utils.js +88 -0
- package/dist/lib/command-utils.js.map +1 -0
- package/dist/lib/error-handler.d.ts +13 -0
- package/dist/lib/error-handler.d.ts.map +1 -0
- package/dist/lib/error-handler.js +70 -0
- package/dist/lib/error-handler.js.map +1 -0
- package/dist/lib/errors.d.ts +35 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +70 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/exit.d.ts +10 -0
- package/dist/lib/exit.d.ts.map +1 -0
- package/dist/lib/exit.js +21 -0
- package/dist/lib/exit.js.map +1 -0
- package/dist/lib/formatters.d.ts +65 -0
- package/dist/lib/formatters.d.ts.map +1 -0
- package/dist/lib/formatters.js +180 -0
- package/dist/lib/formatters.js.map +1 -0
- package/dist/lib/hybrid-data.d.ts +47 -0
- package/dist/lib/hybrid-data.d.ts.map +1 -0
- package/dist/lib/hybrid-data.js +326 -0
- package/dist/lib/hybrid-data.js.map +1 -0
- package/dist/lib/local-store.d.ts +113 -0
- package/dist/lib/local-store.d.ts.map +1 -0
- package/dist/lib/local-store.js +220 -0
- package/dist/lib/local-store.js.map +1 -0
- package/dist/lib/machine-id.d.ts +8 -0
- package/dist/lib/machine-id.d.ts.map +1 -0
- package/dist/lib/machine-id.js +39 -0
- package/dist/lib/machine-id.js.map +1 -0
- package/dist/lib/network.d.ts +15 -0
- package/dist/lib/network.d.ts.map +1 -0
- package/dist/lib/network.js +46 -0
- package/dist/lib/network.js.map +1 -0
- package/dist/lib/theme.d.ts +77 -0
- package/dist/lib/theme.d.ts.map +1 -0
- package/dist/lib/theme.js +137 -0
- package/dist/lib/theme.js.map +1 -0
- package/dist/lib/tool-availability.d.ts +13 -0
- package/dist/lib/tool-availability.d.ts.map +1 -0
- package/dist/lib/tool-availability.js +48 -0
- package/dist/lib/tool-availability.js.map +1 -0
- package/dist/lib/update-checker.d.ts +21 -0
- package/dist/lib/update-checker.d.ts.map +1 -0
- package/dist/lib/update-checker.js +110 -0
- package/dist/lib/update-checker.js.map +1 -0
- package/dist/lib/validation.d.ts +30 -0
- package/dist/lib/validation.d.ts.map +1 -0
- package/dist/lib/validation.js +82 -0
- package/dist/lib/validation.js.map +1 -0
- package/dist/lib/validators.d.ts +18 -0
- package/dist/lib/validators.d.ts.map +1 -0
- package/dist/lib/validators.js +30 -0
- package/dist/lib/validators.js.map +1 -0
- package/dist/marketplace/api.d.ts +24 -0
- package/dist/marketplace/api.d.ts.map +1 -0
- package/dist/marketplace/api.js +92 -0
- package/dist/marketplace/api.js.map +1 -0
- package/dist/marketplace/index.d.ts +13 -0
- package/dist/marketplace/index.d.ts.map +1 -0
- package/dist/marketplace/index.js +155 -0
- package/dist/marketplace/index.js.map +1 -0
- package/dist/marketplace/installer.d.ts +18 -0
- package/dist/marketplace/installer.d.ts.map +1 -0
- package/dist/marketplace/installer.js +184 -0
- package/dist/marketplace/installer.js.map +1 -0
- package/dist/mcp/api.d.ts +93 -0
- package/dist/mcp/api.d.ts.map +1 -0
- package/dist/mcp/api.js +106 -0
- package/dist/mcp/api.js.map +1 -0
- package/dist/mcp/config.d.ts +72 -0
- package/dist/mcp/config.d.ts.map +1 -0
- package/dist/mcp/config.js +156 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/index.d.ts +54 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +381 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/prompt.clean.d.ts +25 -0
- package/dist/mcp/prompt.clean.d.ts.map +1 -0
- package/dist/mcp/prompt.clean.js +206 -0
- package/dist/mcp/prompt.clean.js.map +1 -0
- package/dist/mcp/prompt.d.ts +52 -0
- package/dist/mcp/prompt.d.ts.map +1 -0
- package/dist/mcp/prompt.js +210 -0
- package/dist/mcp/prompt.js.map +1 -0
- package/dist/mcp/secrets.clean.d.ts +18 -0
- package/dist/mcp/secrets.clean.d.ts.map +1 -0
- package/dist/mcp/secrets.clean.js +357 -0
- package/dist/mcp/secrets.clean.js.map +1 -0
- package/dist/mcp/secrets.d.ts +46 -0
- package/dist/mcp/secrets.d.ts.map +1 -0
- package/dist/mcp/secrets.js +339 -0
- package/dist/mcp/secrets.js.map +1 -0
- package/dist/memory/index.d.ts +14 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +98 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/onboard/agents-md-builder.d.ts.map +1 -1
- package/dist/onboard/agents-md-builder.js +45 -0
- package/dist/onboard/agents-md-builder.js.map +1 -1
- package/dist/onboard/claude-inference.d.ts.map +1 -1
- package/dist/onboard/claude-inference.js +15 -4
- package/dist/onboard/claude-inference.js.map +1 -1
- package/dist/onboard/context7-fetcher.d.ts +1 -1
- package/dist/onboard/context7-fetcher.d.ts.map +1 -1
- package/dist/onboard/context7-fetcher.js +50 -16
- package/dist/onboard/context7-fetcher.js.map +1 -1
- package/dist/onboard/docs-builder.d.ts.map +1 -1
- package/dist/onboard/docs-builder.js +523 -50
- package/dist/onboard/docs-builder.js.map +1 -1
- package/dist/onboard/index.d.ts.map +1 -1
- package/dist/onboard/index.js +74 -25
- package/dist/onboard/index.js.map +1 -1
- package/dist/onboard/stack-detector.d.ts.map +1 -1
- package/dist/onboard/stack-detector.js +5 -55
- package/dist/onboard/stack-detector.js.map +1 -1
- package/dist/project/constants.d.ts +21 -0
- package/dist/project/constants.d.ts.map +1 -0
- package/dist/project/constants.js +21 -0
- package/dist/project/constants.js.map +1 -0
- package/dist/project/format.d.ts +16 -0
- package/dist/project/format.d.ts.map +1 -0
- package/dist/project/format.js +40 -0
- package/dist/project/format.js.map +1 -0
- package/dist/project/git.d.ts +28 -0
- package/dist/project/git.d.ts.map +1 -0
- package/dist/project/git.js +93 -0
- package/dist/project/git.js.map +1 -0
- package/dist/project/index.d.ts +36 -0
- package/dist/project/index.d.ts.map +1 -0
- package/dist/project/index.js +272 -0
- package/dist/project/index.js.map +1 -0
- package/dist/project/mapper.d.ts +27 -0
- package/dist/project/mapper.d.ts.map +1 -0
- package/dist/project/mapper.js +64 -0
- package/dist/project/mapper.js.map +1 -0
- package/dist/project/storage.d.ts +71 -0
- package/dist/project/storage.d.ts.map +1 -0
- package/dist/project/storage.js +274 -0
- package/dist/project/storage.js.map +1 -0
- package/dist/project/sync-bridge.d.ts +33 -0
- package/dist/project/sync-bridge.d.ts.map +1 -0
- package/dist/project/sync-bridge.js +155 -0
- package/dist/project/sync-bridge.js.map +1 -0
- package/dist/project/types.d.ts +107 -0
- package/dist/project/types.d.ts.map +1 -0
- package/dist/project/types.js +77 -0
- package/dist/project/types.js.map +1 -0
- package/dist/publish/index.d.ts +4 -0
- package/dist/publish/index.d.ts.map +1 -0
- package/dist/publish/index.js +92 -0
- package/dist/publish/index.js.map +1 -0
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +29 -10
- package/dist/setup.js.map +1 -1
- package/dist/skills/index.d.ts +51 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +509 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/stacks/check.d.ts +2 -0
- package/dist/stacks/check.d.ts.map +1 -0
- package/dist/stacks/check.js +144 -0
- package/dist/stacks/check.js.map +1 -0
- package/dist/stacks/diff.d.ts +11 -0
- package/dist/stacks/diff.d.ts.map +1 -0
- package/dist/stacks/diff.js +123 -0
- package/dist/stacks/diff.js.map +1 -0
- package/dist/stacks/index.d.ts +17 -0
- package/dist/stacks/index.d.ts.map +1 -0
- package/dist/stacks/index.js +525 -0
- package/dist/stacks/index.js.map +1 -0
- package/dist/stacks/index.refactored.d.ts.map +1 -0
- package/dist/stacks/index.refactored.js.map +1 -0
- package/dist/stacks/io.d.ts +11 -0
- package/dist/stacks/io.d.ts.map +1 -0
- package/dist/stacks/io.js +179 -0
- package/dist/stacks/io.js.map +1 -0
- package/dist/stacks/rollback.d.ts +5 -0
- package/dist/stacks/rollback.d.ts.map +1 -0
- package/dist/stacks/rollback.js +162 -0
- package/dist/stacks/rollback.js.map +1 -0
- package/dist/stacks/types.d.ts +70 -0
- package/dist/stacks/types.d.ts.map +1 -0
- package/dist/stacks/types.js +6 -0
- package/dist/stacks/types.js.map +1 -0
- package/dist/stacks/utils.d.ts +9 -0
- package/dist/stacks/utils.d.ts.map +1 -0
- package/dist/stacks/utils.js +11 -0
- package/dist/stacks/utils.js.map +1 -0
- package/dist/start/index.d.ts +23 -0
- package/dist/start/index.d.ts.map +1 -0
- package/dist/start/index.js +386 -0
- package/dist/start/index.js.map +1 -0
- package/dist/sync/index.d.ts +49 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +207 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync-engine/__tests__/test-helpers.d.ts +14 -0
- package/dist/sync-engine/__tests__/test-helpers.d.ts.map +1 -0
- package/dist/sync-engine/__tests__/test-helpers.js +73 -0
- package/dist/sync-engine/__tests__/test-helpers.js.map +1 -0
- package/dist/sync-engine/client.d.ts +128 -0
- package/dist/sync-engine/client.d.ts.map +1 -0
- package/dist/sync-engine/client.js +289 -0
- package/dist/sync-engine/client.js.map +1 -0
- package/dist/sync-engine/health.d.ts +38 -0
- package/dist/sync-engine/health.d.ts.map +1 -0
- package/dist/sync-engine/health.js +259 -0
- package/dist/sync-engine/health.js.map +1 -0
- package/dist/sync-engine/index.d.ts +34 -0
- package/dist/sync-engine/index.d.ts.map +1 -0
- package/dist/sync-engine/index.js +197 -0
- package/dist/sync-engine/index.js.map +1 -0
- package/dist/sync-engine/protocol.d.ts +153 -0
- package/dist/sync-engine/protocol.d.ts.map +1 -0
- package/dist/sync-engine/protocol.js +5 -0
- package/dist/sync-engine/protocol.js.map +1 -0
- package/dist/tasks/index.d.ts +14 -0
- package/dist/tasks/index.d.ts.map +1 -0
- package/dist/tasks/index.js +109 -0
- package/dist/tasks/index.js.map +1 -0
- package/dist/team/index.d.ts +12 -0
- package/dist/team/index.d.ts.map +1 -0
- package/dist/team/index.js +151 -0
- package/dist/team/index.js.map +1 -0
- package/dist/updater.d.ts +5 -5
- package/dist/updater.d.ts.map +1 -1
- package/dist/updater.js +24 -88
- package/dist/updater.js.map +1 -1
- package/dist/usage/index.d.ts +10 -0
- package/dist/usage/index.d.ts.map +1 -0
- package/dist/usage/index.js +104 -0
- package/dist/usage/index.js.map +1 -0
- package/dist/webhooks/index.d.ts +7 -0
- package/dist/webhooks/index.d.ts.map +1 -0
- package/dist/webhooks/index.js +81 -0
- package/dist/webhooks/index.js.map +1 -0
- package/package.json +26 -15
- package/scripts/postinstall.js +282 -0
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
// =============================================================================
|
|
3
|
+
// Color Theme System
|
|
4
|
+
// =============================================================================
|
|
5
|
+
// Semantic color system with NO_COLOR / FORCE_COLOR support
|
|
6
|
+
// Respects environment variables per ECMA-48 spec
|
|
7
|
+
// Detect color support from environment
|
|
8
|
+
const noColor = process.env.NO_COLOR !== undefined ||
|
|
9
|
+
process.env.CLICOLOR === '0';
|
|
10
|
+
const forceColor = process.env.FORCE_COLOR;
|
|
11
|
+
// If NO_COLOR is set, override chalk's detection
|
|
12
|
+
if (noColor) {
|
|
13
|
+
chalk.level = 0;
|
|
14
|
+
}
|
|
15
|
+
else if (forceColor) {
|
|
16
|
+
// FORCE_COLOR: 0=none, 1=basic, 2=256, 3=truecolor
|
|
17
|
+
const level = parseInt(forceColor, 10);
|
|
18
|
+
if (level >= 0 && level <= 3) {
|
|
19
|
+
chalk.level = level;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
// =============================================================================
|
|
23
|
+
// Semantic Colors
|
|
24
|
+
// =============================================================================
|
|
25
|
+
export const theme = {
|
|
26
|
+
// Status colors
|
|
27
|
+
success: chalk.green,
|
|
28
|
+
error: chalk.red,
|
|
29
|
+
warning: chalk.yellow,
|
|
30
|
+
info: chalk.blue,
|
|
31
|
+
muted: chalk.dim,
|
|
32
|
+
highlight: chalk.cyan,
|
|
33
|
+
brand: chalk.magenta,
|
|
34
|
+
// Text formatting
|
|
35
|
+
bold: chalk.bold,
|
|
36
|
+
dim: chalk.dim,
|
|
37
|
+
// Structural colors
|
|
38
|
+
header: chalk.bold,
|
|
39
|
+
subheader: chalk.dim,
|
|
40
|
+
command: chalk.cyan,
|
|
41
|
+
placeholder: chalk.yellow,
|
|
42
|
+
code: chalk.cyan,
|
|
43
|
+
// Status symbols (always shown, even without color)
|
|
44
|
+
symbols: {
|
|
45
|
+
success: '✓',
|
|
46
|
+
error: '✗',
|
|
47
|
+
warning: '⚠',
|
|
48
|
+
info: 'ℹ',
|
|
49
|
+
pending: '●',
|
|
50
|
+
arrow: '▸',
|
|
51
|
+
dot: '·',
|
|
52
|
+
bullet: '•',
|
|
53
|
+
},
|
|
54
|
+
// Formatted status messages
|
|
55
|
+
ok: (msg) => `${chalk.green('✓')} ${msg}`,
|
|
56
|
+
fail: (msg) => `${chalk.red('✗')} ${msg}`,
|
|
57
|
+
warn: (msg) => `${chalk.yellow('⚠')} ${msg}`,
|
|
58
|
+
step: (msg) => `${chalk.blue('▸')} ${msg}`,
|
|
59
|
+
// Utility functions
|
|
60
|
+
colorSupport: chalk.level > 0,
|
|
61
|
+
termWidth: process.stdout.columns || 80,
|
|
62
|
+
};
|
|
63
|
+
// =============================================================================
|
|
64
|
+
// Helper Functions
|
|
65
|
+
// =============================================================================
|
|
66
|
+
/**
|
|
67
|
+
* Format a header with consistent styling
|
|
68
|
+
*/
|
|
69
|
+
export function formatHeader(text) {
|
|
70
|
+
return chalk.bold(text);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Format a subheader with consistent styling
|
|
74
|
+
*/
|
|
75
|
+
export function formatSubheader(text) {
|
|
76
|
+
return chalk.dim(text);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Format a command example
|
|
80
|
+
*/
|
|
81
|
+
export function formatCommand(cmd) {
|
|
82
|
+
return chalk.cyan(cmd);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Format a placeholder (e.g., <name>, [options])
|
|
86
|
+
*/
|
|
87
|
+
export function formatPlaceholder(text) {
|
|
88
|
+
return chalk.yellow(text);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Format an error message with symbol
|
|
92
|
+
*/
|
|
93
|
+
export function formatError(msg, code) {
|
|
94
|
+
const prefix = chalk.red('✗');
|
|
95
|
+
const codeStr = code ? chalk.dim(`[${code}]`) : '';
|
|
96
|
+
return `${prefix} ${codeStr}${codeStr ? ' ' : ''}${msg}`;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Format a success message with symbol
|
|
100
|
+
*/
|
|
101
|
+
export function formatSuccess(msg) {
|
|
102
|
+
return `${chalk.green('✓')} ${msg}`;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Format a warning message with symbol
|
|
106
|
+
*/
|
|
107
|
+
export function formatWarning(msg) {
|
|
108
|
+
return `${chalk.yellow('⚠')} ${msg}`;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Format an info message with symbol
|
|
112
|
+
*/
|
|
113
|
+
export function formatInfo(msg) {
|
|
114
|
+
return `${chalk.blue('ℹ')} ${msg}`;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Format a step/progress message with arrow
|
|
118
|
+
*/
|
|
119
|
+
export function formatStep(msg) {
|
|
120
|
+
return `${chalk.blue('▸')} ${msg}`;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Get terminal width for responsive output
|
|
124
|
+
*/
|
|
125
|
+
export function getTermWidth() {
|
|
126
|
+
return process.stdout.columns || 80;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Truncate text to fit terminal width
|
|
130
|
+
*/
|
|
131
|
+
export function truncate(text, maxWidth) {
|
|
132
|
+
const width = maxWidth || getTermWidth();
|
|
133
|
+
if (text.length <= width)
|
|
134
|
+
return text;
|
|
135
|
+
return text.slice(0, width - 3) + '...';
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/lib/theme.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check if Claude CLI is available (memoized)
|
|
3
|
+
*/
|
|
4
|
+
export declare function isClaudeCliAvailable(): boolean;
|
|
5
|
+
/**
|
|
6
|
+
* Check if mcp-cli is available (memoized)
|
|
7
|
+
*/
|
|
8
|
+
export declare function isMcpCliAvailable(): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Reset cached availability (for testing)
|
|
11
|
+
*/
|
|
12
|
+
export declare function resetAvailabilityCache(): void;
|
|
13
|
+
//# sourceMappingURL=tool-availability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-availability.d.ts","sourceRoot":"","sources":["../../src/lib/tool-availability.ts"],"names":[],"mappings":"AAWA;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAW9C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAW3C;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAG7C"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// Tool Availability Checks
|
|
3
|
+
// =============================================================================
|
|
4
|
+
// Shared utilities for checking CLI tool availability
|
|
5
|
+
import { execSync } from 'child_process';
|
|
6
|
+
// Cached availability results
|
|
7
|
+
let cachedClaudeCliAvailable = undefined;
|
|
8
|
+
let cachedMcpCliAvailable = undefined;
|
|
9
|
+
/**
|
|
10
|
+
* Check if Claude CLI is available (memoized)
|
|
11
|
+
*/
|
|
12
|
+
export function isClaudeCliAvailable() {
|
|
13
|
+
if (cachedClaudeCliAvailable !== undefined) {
|
|
14
|
+
return cachedClaudeCliAvailable;
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
execSync('claude --version', { encoding: 'utf-8', stdio: 'pipe', timeout: 5000 });
|
|
18
|
+
cachedClaudeCliAvailable = true;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
cachedClaudeCliAvailable = false;
|
|
22
|
+
}
|
|
23
|
+
return cachedClaudeCliAvailable;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Check if mcp-cli is available (memoized)
|
|
27
|
+
*/
|
|
28
|
+
export function isMcpCliAvailable() {
|
|
29
|
+
if (cachedMcpCliAvailable !== undefined) {
|
|
30
|
+
return cachedMcpCliAvailable;
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
execSync('mcp-cli --help', { encoding: 'utf-8', stdio: 'pipe', timeout: 5000 });
|
|
34
|
+
cachedMcpCliAvailable = true;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
cachedMcpCliAvailable = false;
|
|
38
|
+
}
|
|
39
|
+
return cachedMcpCliAvailable;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Reset cached availability (for testing)
|
|
43
|
+
*/
|
|
44
|
+
export function resetAvailabilityCache() {
|
|
45
|
+
cachedClaudeCliAvailable = undefined;
|
|
46
|
+
cachedMcpCliAvailable = undefined;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=tool-availability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-availability.js","sourceRoot":"","sources":["../../src/lib/tool-availability.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,2BAA2B;AAC3B,gFAAgF;AAChF,sDAAsD;AAEtD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,8BAA8B;AAC9B,IAAI,wBAAwB,GAAwB,SAAS,CAAC;AAC9D,IAAI,qBAAqB,GAAwB,SAAS,CAAC;AAE3D;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,wBAAwB,KAAK,SAAS,EAAE,CAAC;QAC3C,OAAO,wBAAwB,CAAC;IAClC,CAAC;IACD,IAAI,CAAC;QACH,QAAQ,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAClF,wBAAwB,GAAG,IAAI,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,wBAAwB,GAAG,KAAK,CAAC;IACnC,CAAC;IACD,OAAO,wBAAwB,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,IAAI,qBAAqB,KAAK,SAAS,EAAE,CAAC;QACxC,OAAO,qBAAqB,CAAC;IAC/B,CAAC;IACD,IAAI,CAAC;QACH,QAAQ,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAChF,qBAAqB,GAAG,IAAI,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,qBAAqB,GAAG,KAAK,CAAC;IAChC,CAAC;IACD,OAAO,qBAAqB,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,wBAAwB,GAAG,SAAS,CAAC;IACrC,qBAAqB,GAAG,SAAS,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type ReleaseChannel } from './channel-config.js';
|
|
2
|
+
export interface UpdateCheckResult {
|
|
3
|
+
currentVersion: string;
|
|
4
|
+
latestVersion: string;
|
|
5
|
+
channel: ReleaseChannel;
|
|
6
|
+
updateAvailable: boolean;
|
|
7
|
+
}
|
|
8
|
+
/** Compare two semver strings. Returns true if `latest` is newer than `current`. */
|
|
9
|
+
export declare function isNewerVersion(current: string, latest: string): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Check the npm registry for available updates.
|
|
12
|
+
* Uses a 24h file cache to avoid hitting the registry on every CLI invocation.
|
|
13
|
+
* Returns null if the check fails (offline, timeout, etc.).
|
|
14
|
+
*/
|
|
15
|
+
export declare function checkForUpdate(currentVersion: string): Promise<UpdateCheckResult | null>;
|
|
16
|
+
/**
|
|
17
|
+
* Get the version for a specific dist-tag from cached or fresh registry data.
|
|
18
|
+
* Used by the update command to resolve a target version.
|
|
19
|
+
*/
|
|
20
|
+
export declare function getVersionForTag(distTag: string): Promise<string | null>;
|
|
21
|
+
//# sourceMappingURL=update-checker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-checker.d.ts","sourceRoot":"","sources":["../../src/lib/update-checker.ts"],"names":[],"mappings":"AASA,OAAO,EAA0B,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAQjF,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,cAAc,CAAA;IACvB,eAAe,EAAE,OAAO,CAAA;CACzB;AAOD,oFAAoF;AACpF,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAWvE;AA8CD;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAsBnC;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQxB"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// Update Checker
|
|
3
|
+
// =============================================================================
|
|
4
|
+
// Non-blocking npm registry check with 24-hour file cache.
|
|
5
|
+
// Fetches dist-tags from the npm registry and caches the result to disk.
|
|
6
|
+
import { readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
import { homedir } from 'node:os';
|
|
9
|
+
import { getChannel, getDistTag } from './channel-config.js';
|
|
10
|
+
const PACKAGE_NAME = '@claudetools/cli';
|
|
11
|
+
const REGISTRY_URL = `https://registry.npmjs.org/${PACKAGE_NAME}`;
|
|
12
|
+
const CACHE_DIR = join(homedir(), '.config', 'claudetools');
|
|
13
|
+
const CACHE_FILE = join(CACHE_DIR, 'update-check.json');
|
|
14
|
+
const CACHE_TTL_MS = 24 * 60 * 60 * 1000; // 24 hours
|
|
15
|
+
/** Compare two semver strings. Returns true if `latest` is newer than `current`. */
|
|
16
|
+
export function isNewerVersion(current, latest) {
|
|
17
|
+
const currentParts = current.replace(/^v/, '').split('.').map(Number);
|
|
18
|
+
const latestParts = latest.replace(/^v/, '').split('.').map(Number);
|
|
19
|
+
for (let i = 0; i < 3; i++) {
|
|
20
|
+
const curr = currentParts[i] || 0;
|
|
21
|
+
const lat = latestParts[i] || 0;
|
|
22
|
+
if (lat > curr)
|
|
23
|
+
return true;
|
|
24
|
+
if (lat < curr)
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
function readCache() {
|
|
30
|
+
try {
|
|
31
|
+
const raw = readFileSync(CACHE_FILE, 'utf-8');
|
|
32
|
+
const cached = JSON.parse(raw);
|
|
33
|
+
if (Date.now() - cached.timestamp < CACHE_TTL_MS && cached.distTags) {
|
|
34
|
+
return cached;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// Cache miss or corrupt — will re-fetch
|
|
39
|
+
}
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
function writeCache(distTags) {
|
|
43
|
+
try {
|
|
44
|
+
mkdirSync(CACHE_DIR, { recursive: true });
|
|
45
|
+
const cached = { timestamp: Date.now(), distTags };
|
|
46
|
+
writeFileSync(CACHE_FILE, JSON.stringify(cached, null, 2) + '\n', 'utf-8');
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// Non-critical — cache write failure is fine
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/** Fetch dist-tags from npm registry (with 5s timeout). */
|
|
53
|
+
async function fetchDistTags() {
|
|
54
|
+
try {
|
|
55
|
+
const controller = new AbortController();
|
|
56
|
+
const timeout = setTimeout(() => controller.abort(), 5000);
|
|
57
|
+
const response = await fetch(REGISTRY_URL, {
|
|
58
|
+
headers: { Accept: 'application/vnd.npm.install-v1+json' },
|
|
59
|
+
signal: controller.signal,
|
|
60
|
+
});
|
|
61
|
+
clearTimeout(timeout);
|
|
62
|
+
if (!response.ok)
|
|
63
|
+
return null;
|
|
64
|
+
const body = (await response.json());
|
|
65
|
+
return body['dist-tags'] ?? null;
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Check the npm registry for available updates.
|
|
73
|
+
* Uses a 24h file cache to avoid hitting the registry on every CLI invocation.
|
|
74
|
+
* Returns null if the check fails (offline, timeout, etc.).
|
|
75
|
+
*/
|
|
76
|
+
export async function checkForUpdate(currentVersion) {
|
|
77
|
+
// Try cache first
|
|
78
|
+
const cached = readCache();
|
|
79
|
+
const distTags = cached?.distTags ?? (await fetchDistTags());
|
|
80
|
+
if (!distTags)
|
|
81
|
+
return null;
|
|
82
|
+
// Write to cache if we fetched fresh
|
|
83
|
+
if (!cached)
|
|
84
|
+
writeCache(distTags);
|
|
85
|
+
const channel = getChannel();
|
|
86
|
+
const distTag = getDistTag();
|
|
87
|
+
const latestVersion = distTags[distTag];
|
|
88
|
+
if (!latestVersion)
|
|
89
|
+
return null;
|
|
90
|
+
return {
|
|
91
|
+
currentVersion,
|
|
92
|
+
latestVersion,
|
|
93
|
+
channel,
|
|
94
|
+
updateAvailable: isNewerVersion(currentVersion, latestVersion),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Get the version for a specific dist-tag from cached or fresh registry data.
|
|
99
|
+
* Used by the update command to resolve a target version.
|
|
100
|
+
*/
|
|
101
|
+
export async function getVersionForTag(distTag) {
|
|
102
|
+
const cached = readCache();
|
|
103
|
+
const distTags = cached?.distTags ?? (await fetchDistTags());
|
|
104
|
+
if (!distTags)
|
|
105
|
+
return null;
|
|
106
|
+
if (!cached)
|
|
107
|
+
writeCache(distTags);
|
|
108
|
+
return distTags[distTag] ?? null;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=update-checker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-checker.js","sourceRoot":"","sources":["../../src/lib/update-checker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validate stack name format
|
|
3
|
+
* Stack names must be lowercase alphanumeric with hyphens, 1-50 characters
|
|
4
|
+
*/
|
|
5
|
+
export declare function validateStackName(name: string): {
|
|
6
|
+
valid: boolean;
|
|
7
|
+
error?: string;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Validate and normalize a project path
|
|
11
|
+
* Prevents path traversal attacks and ensures path is within expected boundaries
|
|
12
|
+
*/
|
|
13
|
+
export declare function validateProjectPath(inputPath: string, basePath?: string): {
|
|
14
|
+
valid: boolean;
|
|
15
|
+
normalizedPath: string;
|
|
16
|
+
error?: string;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Basic runtime type check for API response structure
|
|
20
|
+
*/
|
|
21
|
+
export declare function isValidApiResponse<T>(response: unknown, requiredFields: string[]): response is T;
|
|
22
|
+
/**
|
|
23
|
+
* Validate API response has expected structure
|
|
24
|
+
*/
|
|
25
|
+
export declare function validateApiResponse<T>(response: unknown, requiredFields: string[]): {
|
|
26
|
+
valid: boolean;
|
|
27
|
+
data?: T;
|
|
28
|
+
error?: string;
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/lib/validation.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAiBlF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,GAChB;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CA6B5D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,QAAQ,EAAE,OAAO,EACjB,cAAc,EAAE,MAAM,EAAE,GACvB,QAAQ,IAAI,CAAC,CAYf;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,QAAQ,EAAE,OAAO,EACjB,cAAc,EAAE,MAAM,EAAE,GACvB;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAY9C"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// Input Validation Utilities
|
|
3
|
+
// =============================================================================
|
|
4
|
+
// Runtime validation for user inputs and API responses
|
|
5
|
+
import { resolve, relative } from 'path';
|
|
6
|
+
/**
|
|
7
|
+
* Validate stack name format
|
|
8
|
+
* Stack names must be lowercase alphanumeric with hyphens, 1-50 characters
|
|
9
|
+
*/
|
|
10
|
+
export function validateStackName(name) {
|
|
11
|
+
if (!name || typeof name !== 'string') {
|
|
12
|
+
return { valid: false, error: 'Stack name is required' };
|
|
13
|
+
}
|
|
14
|
+
if (name.length > 50) {
|
|
15
|
+
return { valid: false, error: 'Stack name must be 50 characters or less' };
|
|
16
|
+
}
|
|
17
|
+
if (!/^[a-z0-9-]{1,50}$/.test(name)) {
|
|
18
|
+
return {
|
|
19
|
+
valid: false,
|
|
20
|
+
error: 'Stack name must be lowercase alphanumeric with hyphens only (e.g., my-stack-1)',
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
return { valid: true };
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Validate and normalize a project path
|
|
27
|
+
* Prevents path traversal attacks and ensures path is within expected boundaries
|
|
28
|
+
*/
|
|
29
|
+
export function validateProjectPath(inputPath, basePath) {
|
|
30
|
+
if (!inputPath || typeof inputPath !== 'string') {
|
|
31
|
+
return { valid: false, normalizedPath: '', error: 'Path is required' };
|
|
32
|
+
}
|
|
33
|
+
// Resolve to absolute path
|
|
34
|
+
const normalizedPath = resolve(inputPath);
|
|
35
|
+
// If basePath provided, ensure the path doesn't escape it
|
|
36
|
+
if (basePath) {
|
|
37
|
+
const resolvedBase = resolve(basePath);
|
|
38
|
+
const relativePath = relative(resolvedBase, normalizedPath);
|
|
39
|
+
// Check if path tries to escape base directory
|
|
40
|
+
if (relativePath.startsWith('..') || resolve(resolvedBase, relativePath) !== normalizedPath) {
|
|
41
|
+
return {
|
|
42
|
+
valid: false,
|
|
43
|
+
normalizedPath: '',
|
|
44
|
+
error: 'Path traversal not allowed',
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// Check for suspicious patterns even without basePath
|
|
49
|
+
if (inputPath.includes('\0')) {
|
|
50
|
+
return { valid: false, normalizedPath: '', error: 'Invalid path characters' };
|
|
51
|
+
}
|
|
52
|
+
return { valid: true, normalizedPath };
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Basic runtime type check for API response structure
|
|
56
|
+
*/
|
|
57
|
+
export function isValidApiResponse(response, requiredFields) {
|
|
58
|
+
if (typeof response !== 'object' || response === null) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
for (const field of requiredFields) {
|
|
62
|
+
if (!(field in response)) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Validate API response has expected structure
|
|
70
|
+
*/
|
|
71
|
+
export function validateApiResponse(response, requiredFields) {
|
|
72
|
+
if (typeof response !== 'object' || response === null) {
|
|
73
|
+
return { valid: false, error: 'Invalid response: expected object' };
|
|
74
|
+
}
|
|
75
|
+
for (const field of requiredFields) {
|
|
76
|
+
if (!(field in response)) {
|
|
77
|
+
return { valid: false, error: `Invalid response: missing field '${field}'` };
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return { valid: true, data: response };
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/lib/validation.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,6BAA6B;AAC7B,gFAAgF;AAChF,uDAAuD;AAEvD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAEzC;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC;IAC3D,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QACrB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,0CAA0C,EAAE,CAAC;IAC7E,CAAC;IAED,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,gFAAgF;SACxF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,SAAiB,EACjB,QAAiB;IAEjB,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;IACzE,CAAC;IAED,2BAA2B;IAC3B,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAE1C,0DAA0D;IAC1D,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;QAE5D,+CAA+C;QAC/C,IAAI,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,YAAY,EAAE,YAAY,CAAC,KAAK,cAAc,EAAE,CAAC;YAC5F,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,cAAc,EAAE,EAAE;gBAClB,KAAK,EAAE,4BAA4B;aACpC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,sDAAsD;IACtD,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC;IAChF,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,QAAiB,EACjB,cAAwB;IAExB,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;QACnC,IAAI,CAAC,CAAC,KAAK,IAAI,QAAQ,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAAiB,EACjB,cAAwB;IAExB,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAC;IACtE,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;QACnC,IAAI,CAAC,CAAC,KAAK,IAAI,QAAQ,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,oCAAoC,KAAK,GAAG,EAAE,CAAC;QAC/E,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,QAAa,EAAE,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { UserConfig } from '../auth/config.js';
|
|
2
|
+
export declare class ValidationError extends Error {
|
|
3
|
+
constructor(message: string);
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Validates that a value is not falsy, throws ValidationError if it is
|
|
7
|
+
* @param value Value to check
|
|
8
|
+
* @param name Name of the value for error messages
|
|
9
|
+
* @returns The validated value
|
|
10
|
+
*/
|
|
11
|
+
export declare function required<T>(value: T | undefined | null, name: string): T;
|
|
12
|
+
/**
|
|
13
|
+
* Validates that config has an active team, throws ValidationError if not
|
|
14
|
+
* @param config User configuration
|
|
15
|
+
* @returns The active team slug
|
|
16
|
+
*/
|
|
17
|
+
export declare function requireActiveTeam(config: UserConfig): string;
|
|
18
|
+
//# sourceMappingURL=validators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/lib/validators.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,CAKxE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAK5D"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export class ValidationError extends Error {
|
|
2
|
+
constructor(message) {
|
|
3
|
+
super(message);
|
|
4
|
+
this.name = 'ValidationError';
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Validates that a value is not falsy, throws ValidationError if it is
|
|
9
|
+
* @param value Value to check
|
|
10
|
+
* @param name Name of the value for error messages
|
|
11
|
+
* @returns The validated value
|
|
12
|
+
*/
|
|
13
|
+
export function required(value, name) {
|
|
14
|
+
if (!value) {
|
|
15
|
+
throw new ValidationError(`${name} is required`);
|
|
16
|
+
}
|
|
17
|
+
return value;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Validates that config has an active team, throws ValidationError if not
|
|
21
|
+
* @param config User configuration
|
|
22
|
+
* @returns The active team slug
|
|
23
|
+
*/
|
|
24
|
+
export function requireActiveTeam(config) {
|
|
25
|
+
if (!config.activeTeam) {
|
|
26
|
+
throw new ValidationError('No active team selected');
|
|
27
|
+
}
|
|
28
|
+
return config.activeTeam;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=validators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/lib/validators.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAI,KAA2B,EAAE,IAAY;IACnE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,eAAe,CAAC,GAAG,IAAI,cAAc,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAkB;IAClD,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,IAAI,eAAe,CAAC,yBAAyB,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,MAAM,CAAC,UAAU,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface Extension {
|
|
2
|
+
id: string;
|
|
3
|
+
slug: string;
|
|
4
|
+
name: string;
|
|
5
|
+
type: 'skill' | 'agent' | 'hook' | 'mcp-server';
|
|
6
|
+
description: string;
|
|
7
|
+
author: {
|
|
8
|
+
id: string;
|
|
9
|
+
name: string;
|
|
10
|
+
};
|
|
11
|
+
downloads: number;
|
|
12
|
+
createdAt: string;
|
|
13
|
+
updatedAt: string;
|
|
14
|
+
content?: string;
|
|
15
|
+
config?: Record<string, unknown>;
|
|
16
|
+
}
|
|
17
|
+
export interface SearchResult {
|
|
18
|
+
extensions: Extension[];
|
|
19
|
+
total: number;
|
|
20
|
+
}
|
|
21
|
+
export declare function searchExtensions(query?: string, type?: string, limit?: number): Promise<SearchResult>;
|
|
22
|
+
export declare function getExtension(typeOrSlug: string, slug?: string): Promise<Extension>;
|
|
23
|
+
export declare function trackDownload(slug: string): Promise<void>;
|
|
24
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/marketplace/api.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,YAAY,CAAC;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE;QACN,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACf;AA6CD,wBAAsB,gBAAgB,CACpC,KAAK,CAAC,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,EACb,KAAK,SAAK,GACT,OAAO,CAAC,YAAY,CAAC,CAevB;AAED,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAsCxF;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAO/D"}
|