@codemieai/code 0.0.33 → 0.0.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +78 -7
- package/bin/codemie-claude-acp.js +21 -0
- package/bin/codemie-opencode.js +11 -0
- package/bin/codemie.js +13 -0
- package/dist/agents/codemie-code/agent.d.ts +38 -4
- package/dist/agents/codemie-code/agent.d.ts.map +1 -1
- package/dist/agents/codemie-code/agent.js +333 -178
- package/dist/agents/codemie-code/agent.js.map +1 -1
- package/dist/agents/codemie-code/index.d.ts +2 -1
- package/dist/agents/codemie-code/index.d.ts.map +1 -1
- package/dist/agents/codemie-code/index.js +36 -7
- package/dist/agents/codemie-code/index.js.map +1 -1
- package/dist/agents/codemie-code/prompts.d.ts +12 -5
- package/dist/agents/codemie-code/prompts.d.ts.map +1 -1
- package/dist/agents/codemie-code/prompts.js +53 -6
- package/dist/agents/codemie-code/prompts.js.map +1 -1
- package/dist/agents/codemie-code/toolMetadata.d.ts.map +1 -1
- package/dist/agents/codemie-code/toolMetadata.js +9 -8
- package/dist/agents/codemie-code/toolMetadata.js.map +1 -1
- package/dist/agents/codemie-code/tools/assistant-invocation.d.ts +47 -0
- package/dist/agents/codemie-code/tools/assistant-invocation.d.ts.map +1 -0
- package/dist/agents/codemie-code/tools/assistant-invocation.js +129 -0
- package/dist/agents/codemie-code/tools/assistant-invocation.js.map +1 -0
- package/dist/agents/codemie-code/tools/index.d.ts +70 -4
- package/dist/agents/codemie-code/tools/index.d.ts.map +1 -1
- package/dist/agents/codemie-code/tools/index.js +57 -44
- package/dist/agents/codemie-code/tools/index.js.map +1 -1
- package/dist/agents/codemie-code/tools/planning.d.ts +6 -5
- package/dist/agents/codemie-code/tools/planning.d.ts.map +1 -1
- package/dist/agents/codemie-code/tools/planning.js +12 -10
- package/dist/agents/codemie-code/tools/planning.js.map +1 -1
- package/dist/agents/codemie-code/types.d.ts +27 -3
- package/dist/agents/codemie-code/types.d.ts.map +1 -1
- package/dist/agents/codemie-code/types.js +24 -0
- package/dist/agents/codemie-code/types.js.map +1 -1
- package/dist/agents/codemie-code/ui/autocomplete.d.ts +98 -0
- package/dist/agents/codemie-code/ui/autocomplete.d.ts.map +1 -0
- package/dist/agents/codemie-code/ui/autocomplete.js +145 -0
- package/dist/agents/codemie-code/ui/autocomplete.js.map +1 -0
- package/dist/agents/codemie-code/ui/keyHandlers.d.ts +112 -0
- package/dist/agents/codemie-code/ui/keyHandlers.d.ts.map +1 -0
- package/dist/agents/codemie-code/ui/keyHandlers.js +415 -0
- package/dist/agents/codemie-code/ui/keyHandlers.js.map +1 -0
- package/dist/agents/codemie-code/ui/mentions.d.ts +86 -0
- package/dist/agents/codemie-code/ui/mentions.d.ts.map +1 -0
- package/dist/agents/codemie-code/ui/mentions.js +122 -0
- package/dist/agents/codemie-code/ui/mentions.js.map +1 -0
- package/dist/agents/codemie-code/ui/terminalCodes.d.ts +38 -0
- package/dist/agents/codemie-code/ui/terminalCodes.d.ts.map +1 -0
- package/dist/agents/codemie-code/ui/terminalCodes.js +42 -0
- package/dist/agents/codemie-code/ui/terminalCodes.js.map +1 -0
- package/dist/agents/codemie-code/ui/todoPanel.d.ts.map +1 -1
- package/dist/agents/codemie-code/ui/todoPanel.js +3 -4
- package/dist/agents/codemie-code/ui/todoPanel.js.map +1 -1
- package/dist/agents/codemie-code/ui.d.ts +8 -7
- package/dist/agents/codemie-code/ui.d.ts.map +1 -1
- package/dist/agents/codemie-code/ui.js +87 -145
- package/dist/agents/codemie-code/ui.js.map +1 -1
- package/dist/agents/core/AgentCLI.d.ts +5 -0
- package/dist/agents/core/AgentCLI.d.ts.map +1 -1
- package/dist/agents/core/AgentCLI.js +25 -1
- package/dist/agents/core/AgentCLI.js.map +1 -1
- package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
- package/dist/agents/core/BaseAgentAdapter.js +90 -27
- package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
- package/dist/agents/core/extension/BaseExtensionInstaller.d.ts +7 -1
- package/dist/agents/core/extension/BaseExtensionInstaller.d.ts.map +1 -1
- package/dist/agents/core/extension/BaseExtensionInstaller.js +58 -15
- package/dist/agents/core/extension/BaseExtensionInstaller.js.map +1 -1
- package/dist/agents/core/session/BaseSessionAdapter.d.ts +25 -0
- package/dist/agents/core/session/BaseSessionAdapter.d.ts.map +1 -1
- package/dist/agents/core/session/discovery-types.d.ts +53 -0
- package/dist/agents/core/session/discovery-types.d.ts.map +1 -0
- package/dist/agents/core/session/discovery-types.js +8 -0
- package/dist/agents/core/session/discovery-types.js.map +1 -0
- package/dist/agents/core/types.d.ts +62 -0
- package/dist/agents/core/types.d.ts.map +1 -1
- package/dist/agents/plugins/claude/claude-acp.plugin.d.ts +27 -0
- package/dist/agents/plugins/claude/claude-acp.plugin.d.ts.map +1 -0
- package/dist/agents/plugins/claude/claude-acp.plugin.js +63 -0
- package/dist/agents/plugins/claude/claude-acp.plugin.js.map +1 -0
- package/dist/agents/plugins/claude/claude-message-types.d.ts +1 -0
- package/dist/agents/plugins/claude/claude-message-types.d.ts.map +1 -1
- package/dist/agents/plugins/claude/claude.plugin.d.ts +44 -1
- package/dist/agents/plugins/claude/claude.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/claude/claude.plugin.js +263 -12
- package/dist/agents/plugins/claude/claude.plugin.js.map +1 -1
- package/dist/agents/plugins/claude/claude.session.d.ts.map +1 -1
- package/dist/agents/plugins/claude/claude.session.js +14 -7
- package/dist/agents/plugins/claude/claude.session.js.map +1 -1
- package/dist/agents/plugins/claude/plugin/.claude-plugin/plugin.json +1 -1
- package/dist/agents/plugins/claude/plugin/README.md +40 -2
- package/dist/agents/plugins/claude/plugin/claude-templates/README.md +5 -5
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/CLAUDE.md.template +177 -436
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/agents/code-review-agent-template.md.template +49 -82
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/agents/refactor-cleaner-agent.md.template +337 -0
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/agents/solution-architect-agent.md.template +129 -419
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/agents/unit-tester-agent.md.template +146 -693
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/api/api-patterns.md.template +110 -138
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/architecture/architecture.md.template +197 -0
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/data/database-patterns.md.template +171 -91
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/development/development-practices.md.template +219 -131
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/security/security-practices.md.template +223 -98
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/standards/code-quality.md.template +131 -95
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/testing/testing-patterns.md.template +247 -75
- package/dist/agents/plugins/claude/plugin/commands/README.md +133 -0
- package/dist/agents/plugins/claude/plugin/commands/codemie-init.md +336 -544
- package/dist/agents/plugins/claude/plugin/commands/codemie-subagents.md +233 -504
- package/dist/agents/plugins/claude/plugin/commands/memory-add.md +311 -30
- package/dist/agents/plugins/claude/plugin/commands/memory-refresh.md +218 -39
- package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.d.ts.map +1 -1
- package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js +43 -8
- package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js.map +1 -1
- package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.d.ts.map +1 -1
- package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.js +68 -40
- package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.js.map +1 -1
- package/dist/agents/plugins/gemini/gemini.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/gemini/gemini.plugin.js +0 -3
- package/dist/agents/plugins/gemini/gemini.plugin.js.map +1 -1
- package/dist/agents/plugins/opencode/index.d.ts +8 -0
- package/dist/agents/plugins/opencode/index.d.ts.map +1 -0
- package/dist/agents/plugins/opencode/index.js +12 -0
- package/dist/agents/plugins/opencode/index.js.map +1 -0
- package/dist/agents/plugins/opencode/opencode-message-types.d.ts +207 -0
- package/dist/agents/plugins/opencode/opencode-message-types.d.ts.map +1 -0
- package/dist/agents/plugins/opencode/opencode-message-types.js +59 -0
- package/dist/agents/plugins/opencode/opencode-message-types.js.map +1 -0
- package/dist/agents/plugins/opencode/opencode-model-configs.d.ts +65 -0
- package/dist/agents/plugins/opencode/opencode-model-configs.d.ts.map +1 -0
- package/dist/agents/plugins/opencode/opencode-model-configs.js +184 -0
- package/dist/agents/plugins/opencode/opencode-model-configs.js.map +1 -0
- package/dist/agents/plugins/opencode/opencode.paths.d.ts +62 -0
- package/dist/agents/plugins/opencode/opencode.paths.d.ts.map +1 -0
- package/dist/agents/plugins/opencode/opencode.paths.js +148 -0
- package/dist/agents/plugins/opencode/opencode.paths.js.map +1 -0
- package/dist/agents/plugins/opencode/opencode.plugin.d.ts +35 -0
- package/dist/agents/plugins/opencode/opencode.plugin.d.ts.map +1 -0
- package/dist/agents/plugins/opencode/opencode.plugin.js +338 -0
- package/dist/agents/plugins/opencode/opencode.plugin.js.map +1 -0
- package/dist/agents/plugins/opencode/opencode.session.d.ts +77 -0
- package/dist/agents/plugins/opencode/opencode.session.d.ts.map +1 -0
- package/dist/agents/plugins/opencode/opencode.session.js +424 -0
- package/dist/agents/plugins/opencode/opencode.session.js.map +1 -0
- package/dist/agents/plugins/opencode/opencode.storage-utils.d.ts +25 -0
- package/dist/agents/plugins/opencode/opencode.storage-utils.d.ts.map +1 -0
- package/dist/agents/plugins/opencode/opencode.storage-utils.js +96 -0
- package/dist/agents/plugins/opencode/opencode.storage-utils.js.map +1 -0
- package/dist/agents/plugins/opencode/session/processors/opencode.conversations-processor.d.ts +30 -0
- package/dist/agents/plugins/opencode/session/processors/opencode.conversations-processor.d.ts.map +1 -0
- package/dist/agents/plugins/opencode/session/processors/opencode.conversations-processor.js +116 -0
- package/dist/agents/plugins/opencode/session/processors/opencode.conversations-processor.js.map +1 -0
- package/dist/agents/plugins/opencode/session/processors/opencode.metrics-processor.d.ts +102 -0
- package/dist/agents/plugins/opencode/session/processors/opencode.metrics-processor.d.ts.map +1 -0
- package/dist/agents/plugins/opencode/session/processors/opencode.metrics-processor.js +584 -0
- package/dist/agents/plugins/opencode/session/processors/opencode.metrics-processor.js.map +1 -0
- package/dist/agents/registry.d.ts +1 -1
- package/dist/agents/registry.d.ts.map +1 -1
- package/dist/agents/registry.js +5 -1
- package/dist/agents/registry.js.map +1 -1
- package/dist/cli/commands/assistants/chat.d.ts +11 -0
- package/dist/cli/commands/assistants/chat.d.ts.map +1 -0
- package/dist/cli/commands/assistants/chat.js +201 -0
- package/dist/cli/commands/assistants/chat.js.map +1 -0
- package/dist/cli/commands/assistants/constants.d.ts +81 -0
- package/dist/cli/commands/assistants/constants.d.ts.map +1 -0
- package/dist/cli/commands/assistants/constants.js +75 -0
- package/dist/cli/commands/assistants/constants.js.map +1 -0
- package/dist/cli/commands/assistants/generators/claude-agent-generator.d.ts +26 -0
- package/dist/cli/commands/assistants/generators/claude-agent-generator.d.ts.map +1 -0
- package/dist/cli/commands/assistants/generators/claude-agent-generator.js +115 -0
- package/dist/cli/commands/assistants/generators/claude-agent-generator.js.map +1 -0
- package/dist/cli/commands/assistants/index.d.ts +11 -0
- package/dist/cli/commands/assistants/index.d.ts.map +1 -0
- package/dist/cli/commands/assistants/index.js +28 -0
- package/dist/cli/commands/assistants/index.js.map +1 -0
- package/dist/cli/commands/assistants/list.d.ts +11 -0
- package/dist/cli/commands/assistants/list.d.ts.map +1 -0
- package/dist/cli/commands/assistants/list.js +323 -0
- package/dist/cli/commands/assistants/list.js.map +1 -0
- package/dist/cli/commands/doctor/checks/AgentsCheck.d.ts +5 -0
- package/dist/cli/commands/doctor/checks/AgentsCheck.d.ts.map +1 -1
- package/dist/cli/commands/doctor/checks/AgentsCheck.js +29 -0
- package/dist/cli/commands/doctor/checks/AgentsCheck.js.map +1 -1
- package/dist/cli/commands/install.d.ts.map +1 -1
- package/dist/cli/commands/install.js +104 -13
- package/dist/cli/commands/install.js.map +1 -1
- package/dist/cli/commands/opencode-metrics.d.ts +13 -0
- package/dist/cli/commands/opencode-metrics.d.ts.map +1 -0
- package/dist/cli/commands/opencode-metrics.js +200 -0
- package/dist/cli/commands/opencode-metrics.js.map +1 -0
- package/dist/cli/commands/self-update.d.ts +3 -0
- package/dist/cli/commands/self-update.d.ts.map +1 -0
- package/dist/cli/commands/self-update.js +55 -0
- package/dist/cli/commands/self-update.js.map +1 -0
- package/dist/cli/commands/setup.d.ts.map +1 -1
- package/dist/cli/commands/setup.js +113 -0
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/commands/skill.d.ts +6 -0
- package/dist/cli/commands/skill.d.ts.map +1 -0
- package/dist/cli/commands/skill.js +196 -0
- package/dist/cli/commands/skill.js.map +1 -0
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +34 -6
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +12 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/env/types.d.ts +13 -0
- package/dist/env/types.d.ts.map +1 -1
- package/dist/env/types.js +1 -1
- package/dist/env/types.js.map +1 -1
- package/dist/migrations/003-remove-hooks-node.migration.d.ts +22 -0
- package/dist/migrations/003-remove-hooks-node.migration.d.ts.map +1 -0
- package/dist/migrations/003-remove-hooks-node.migration.js +103 -0
- package/dist/migrations/003-remove-hooks-node.migration.js.map +1 -0
- package/dist/migrations/index.d.ts +1 -0
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/migrations/index.js +1 -1
- package/dist/migrations/index.js.map +1 -1
- package/dist/providers/plugins/sso/sso.http-client.js +2 -2
- package/dist/providers/plugins/sso/sso.http-client.js.map +1 -1
- package/dist/providers/plugins/sso/sso.setup-steps.d.ts.map +1 -1
- package/dist/providers/plugins/sso/sso.setup-steps.js +14 -10
- package/dist/providers/plugins/sso/sso.setup-steps.js.map +1 -1
- package/dist/skills/core/SkillDiscovery.d.ts +83 -0
- package/dist/skills/core/SkillDiscovery.d.ts.map +1 -0
- package/dist/skills/core/SkillDiscovery.js +237 -0
- package/dist/skills/core/SkillDiscovery.js.map +1 -0
- package/dist/skills/core/SkillManager.d.ts +86 -0
- package/dist/skills/core/SkillManager.d.ts.map +1 -0
- package/dist/skills/core/SkillManager.js +155 -0
- package/dist/skills/core/SkillManager.js.map +1 -0
- package/dist/skills/core/types.d.ts +120 -0
- package/dist/skills/core/types.d.ts.map +1 -0
- package/dist/skills/core/types.js +20 -0
- package/dist/skills/core/types.js.map +1 -0
- package/dist/skills/index.d.ts +12 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +12 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/utils/content-loader.d.ts +25 -0
- package/dist/skills/utils/content-loader.d.ts.map +1 -0
- package/dist/skills/utils/content-loader.js +161 -0
- package/dist/skills/utils/content-loader.js.map +1 -0
- package/dist/skills/utils/frontmatter.d.ts +60 -0
- package/dist/skills/utils/frontmatter.d.ts.map +1 -0
- package/dist/skills/utils/frontmatter.js +114 -0
- package/dist/skills/utils/frontmatter.js.map +1 -0
- package/dist/skills/utils/pattern-matcher.d.ts +60 -0
- package/dist/skills/utils/pattern-matcher.d.ts.map +1 -0
- package/dist/skills/utils/pattern-matcher.js +97 -0
- package/dist/skills/utils/pattern-matcher.js.map +1 -0
- package/dist/utils/auth.d.ts +22 -0
- package/dist/utils/auth.d.ts.map +1 -0
- package/dist/utils/auth.js +50 -0
- package/dist/utils/auth.js.map +1 -0
- package/dist/utils/cli-updater.d.ts +70 -0
- package/dist/utils/cli-updater.d.ts.map +1 -0
- package/dist/utils/cli-updater.js +339 -0
- package/dist/utils/cli-updater.js.map +1 -0
- package/dist/utils/config.d.ts +6 -1
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +13 -0
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/installation-detector.d.ts +22 -0
- package/dist/utils/installation-detector.d.ts.map +1 -0
- package/dist/utils/installation-detector.js +49 -0
- package/dist/utils/installation-detector.js.map +1 -0
- package/dist/utils/native-installer.d.ts +49 -0
- package/dist/utils/native-installer.d.ts.map +1 -0
- package/dist/utils/native-installer.js +225 -0
- package/dist/utils/native-installer.js.map +1 -0
- package/dist/utils/processes.js +1 -1
- package/dist/utils/profile.d.ts +2 -0
- package/dist/utils/profile.d.ts.map +1 -1
- package/dist/utils/profile.js +5 -0
- package/dist/utils/profile.js.map +1 -1
- package/dist/utils/sdk-client.d.ts +15 -0
- package/dist/utils/sdk-client.d.ts.map +1 -0
- package/dist/utils/sdk-client.js +92 -0
- package/dist/utils/sdk-client.js.map +1 -0
- package/dist/utils/version-utils.d.ts +50 -0
- package/dist/utils/version-utils.d.ts.map +1 -0
- package/dist/utils/version-utils.js +92 -0
- package/dist/utils/version-utils.js.map +1 -0
- package/package.json +11 -3
- package/scripts/copy-mr-skill-to-global.ts +252 -0
- package/scripts/demo-hooks.sh +125 -0
- package/scripts/test-hooks.sh +196 -0
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/INDEX.md +0 -205
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/TEMPLATE_SIZES.md +0 -74
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/architecture/layered-architecture.md.template +0 -143
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/architecture/project-structure.md.template +0 -127
- package/dist/agents/plugins/claude/plugin/commands/codemie-pr.md +0 -25
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Native installer utilities for platform-specific agent installation
|
|
3
|
+
* Used for Claude Code native installation management
|
|
4
|
+
*/
|
|
5
|
+
import { exec } from './processes.js';
|
|
6
|
+
import { AgentInstallationError } from './errors.js';
|
|
7
|
+
import { logger } from './logger.js';
|
|
8
|
+
import { sanitizeLogArgs, sanitizeValue } from './security.js';
|
|
9
|
+
import { isValidSemanticVersion } from './version-utils.js';
|
|
10
|
+
/**
|
|
11
|
+
* Detect current platform
|
|
12
|
+
* @returns Platform identifier: 'macOS' | 'windows' | 'linux'
|
|
13
|
+
*/
|
|
14
|
+
function detectPlatform() {
|
|
15
|
+
const platform = process.platform;
|
|
16
|
+
if (platform === 'darwin') {
|
|
17
|
+
return 'macOS';
|
|
18
|
+
}
|
|
19
|
+
else if (platform === 'win32') {
|
|
20
|
+
return 'windows';
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
// Assume Linux for all other platforms (linux, freebsd, etc.)
|
|
24
|
+
return 'linux';
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Build installer command for the detected platform
|
|
29
|
+
*
|
|
30
|
+
* @param agentName - Agent name for error messages
|
|
31
|
+
* @param installerUrls - Platform-specific installer URLs
|
|
32
|
+
* @param version - Optional version to install
|
|
33
|
+
* @param platform - Detected platform
|
|
34
|
+
* @param installFlags - Additional flags to pass to installer (e.g., ['--force'])
|
|
35
|
+
* @returns Command string to execute
|
|
36
|
+
*/
|
|
37
|
+
function buildInstallerCommand(agentName, installerUrls, version, platform, installFlags) {
|
|
38
|
+
// Validate installer URLs are HTTPS (security requirement)
|
|
39
|
+
const url = installerUrls[platform];
|
|
40
|
+
if (!url.startsWith('https://')) {
|
|
41
|
+
throw new AgentInstallationError(agentName, `Installer URL must use HTTPS: ${url}`);
|
|
42
|
+
}
|
|
43
|
+
// SECURITY: Validate version string to prevent command injection
|
|
44
|
+
// Only allow semantic versions or special channels (latest, stable)
|
|
45
|
+
if (version) {
|
|
46
|
+
const allowedChannels = ['latest', 'stable'];
|
|
47
|
+
const isValidChannel = allowedChannels.includes(version.toLowerCase());
|
|
48
|
+
const isValidVersion = isValidSemanticVersion(version);
|
|
49
|
+
if (!isValidChannel && !isValidVersion) {
|
|
50
|
+
throw new AgentInstallationError(agentName, `Invalid version format: "${version}". Expected semantic version (e.g., "2.0.30"), "latest", or "stable".`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// SECURITY: Validate install flags against whitelist
|
|
54
|
+
// Only allow known safe flags to prevent command injection
|
|
55
|
+
const allowedFlags = ['--force', '--silent', '--yes', '-y', '-f', '--no-progress'];
|
|
56
|
+
if (installFlags && installFlags.length > 0) {
|
|
57
|
+
for (const flag of installFlags) {
|
|
58
|
+
if (!allowedFlags.includes(flag)) {
|
|
59
|
+
throw new AgentInstallationError(agentName, `Invalid install flag: "${flag}". Allowed flags: ${allowedFlags.join(', ')}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// Build platform-specific command
|
|
64
|
+
if (platform === 'windows') {
|
|
65
|
+
// Windows CMD command (simpler and more universal than PowerShell)
|
|
66
|
+
// Download install.cmd, execute with args, then delete
|
|
67
|
+
const versionArg = version ? ` ${version}` : '';
|
|
68
|
+
const flagsArg = installFlags && installFlags.length > 0 ? ` ${installFlags.join(' ')}` : '';
|
|
69
|
+
return `curl -fsSL ${url} -o install.cmd && install.cmd${versionArg}${flagsArg} && del install.cmd`;
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
// macOS/Linux shell script command
|
|
73
|
+
const versionArg = version ? ` -s -- ${version}` : '';
|
|
74
|
+
const scriptFlags = installFlags && installFlags.length > 0 ? ` ${installFlags.join(' ')}` : '';
|
|
75
|
+
return `curl -fsSL ${url} | bash${versionArg}${scriptFlags}`;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Verify installation by running the verify command
|
|
80
|
+
* On Windows, retries with backoff to allow PATH updates to propagate
|
|
81
|
+
*
|
|
82
|
+
* @param verifyCommand - Command to verify (e.g., 'claude')
|
|
83
|
+
* @param retries - Number of retry attempts (default: 3 on Windows, 1 on Unix)
|
|
84
|
+
* @returns Installed version string or null if verification failed
|
|
85
|
+
*/
|
|
86
|
+
async function verifyInstallation(verifyCommand, retries) {
|
|
87
|
+
// Windows requires more retries due to PATH refresh delays
|
|
88
|
+
// Unix also benefits from 2 retries (network-mounted home dirs, slow filesystems)
|
|
89
|
+
const isWindows = process.platform === 'win32';
|
|
90
|
+
const maxRetries = retries ?? (isWindows ? 3 : 2);
|
|
91
|
+
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
92
|
+
try {
|
|
93
|
+
logger.debug(`Verifying installation (attempt ${attempt}/${maxRetries})`, { command: verifyCommand });
|
|
94
|
+
// Run version check command (e.g., 'claude --version')
|
|
95
|
+
const result = await exec(verifyCommand, ['--version'], {
|
|
96
|
+
timeout: 5000, // 5 second timeout for version check
|
|
97
|
+
});
|
|
98
|
+
if (result.code === 0 && result.stdout) {
|
|
99
|
+
// Parse version from output (usually first line, may have 'v' prefix)
|
|
100
|
+
const versionMatch = result.stdout.trim().match(/v?(\d+\.\d+\.\d+)/);
|
|
101
|
+
if (versionMatch) {
|
|
102
|
+
logger.debug('Installation verified successfully', {
|
|
103
|
+
version: versionMatch[1],
|
|
104
|
+
attempt,
|
|
105
|
+
});
|
|
106
|
+
return versionMatch[1];
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
logger.debug(`Installation verification attempt ${attempt} failed`, ...sanitizeLogArgs({ error, attempt, maxRetries }));
|
|
112
|
+
}
|
|
113
|
+
// Wait before retry (exponential backoff with cap: 1s, 2s, 4s max)
|
|
114
|
+
// Gives Windows time to update PATH without excessive wait
|
|
115
|
+
if (attempt < maxRetries) {
|
|
116
|
+
const delayMs = Math.min(Math.pow(2, attempt - 1) * 1000, 4000);
|
|
117
|
+
logger.debug(`Waiting ${delayMs}ms before retry (exponential backoff)...`);
|
|
118
|
+
await new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// All retries failed
|
|
122
|
+
logger.debug('Installation verification failed after all retries', {
|
|
123
|
+
command: verifyCommand,
|
|
124
|
+
attempts: maxRetries,
|
|
125
|
+
});
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Install agent using native platform installer
|
|
130
|
+
* Detects platform and executes appropriate installation script
|
|
131
|
+
*
|
|
132
|
+
* @param agentName - Agent name for logging (e.g., 'claude')
|
|
133
|
+
* @param installerUrls - Platform-specific installer URLs
|
|
134
|
+
* @param version - Version to install (e.g., '2.0.30', 'latest', 'stable', or undefined)
|
|
135
|
+
* @param options - Installation options (timeout, env, etc.)
|
|
136
|
+
* @returns Installation result with success status and installed version
|
|
137
|
+
* @throws {AgentInstallationError} If installation fails
|
|
138
|
+
*
|
|
139
|
+
* @example
|
|
140
|
+
* await installNativeAgent('claude', {
|
|
141
|
+
* macOS: 'https://claude.ai/install.sh',
|
|
142
|
+
* windows: 'https://claude.ai/install.ps1',
|
|
143
|
+
* linux: 'https://claude.ai/install.sh'
|
|
144
|
+
* }, '2.0.30');
|
|
145
|
+
*/
|
|
146
|
+
export async function installNativeAgent(agentName, installerUrls, version, options) {
|
|
147
|
+
const platform = detectPlatform();
|
|
148
|
+
const timeout = options?.timeout || 300000; // 5 minute default timeout
|
|
149
|
+
logger.debug('Starting native agent installation', {
|
|
150
|
+
agentName,
|
|
151
|
+
platform,
|
|
152
|
+
version: version || 'latest',
|
|
153
|
+
});
|
|
154
|
+
try {
|
|
155
|
+
// Build installer command
|
|
156
|
+
const command = buildInstallerCommand(agentName, installerUrls, version, platform, options?.installFlags);
|
|
157
|
+
logger.debug('Executing installer command', {
|
|
158
|
+
agentName,
|
|
159
|
+
platform,
|
|
160
|
+
// Don't log full command (may contain sensitive URLs)
|
|
161
|
+
});
|
|
162
|
+
// Execute installer
|
|
163
|
+
const result = await exec(command, [], {
|
|
164
|
+
timeout,
|
|
165
|
+
env: options?.env,
|
|
166
|
+
shell: true, // Required for piped commands (curl | bash)
|
|
167
|
+
});
|
|
168
|
+
// Check if installation succeeded
|
|
169
|
+
if (result.code !== 0) {
|
|
170
|
+
// SECURITY: Sanitize output before including in error message
|
|
171
|
+
// Installer scripts might echo sensitive environment variables
|
|
172
|
+
const sanitizedOutput = sanitizeValue(result.stderr || result.stdout);
|
|
173
|
+
throw new AgentInstallationError(agentName, `Installer exited with code ${result.code}. Output: ${sanitizedOutput}`);
|
|
174
|
+
}
|
|
175
|
+
logger.debug('Installer completed successfully', {
|
|
176
|
+
agentName,
|
|
177
|
+
platform,
|
|
178
|
+
});
|
|
179
|
+
// Verify installation if verify command provided
|
|
180
|
+
let installedVersion = null;
|
|
181
|
+
if (options?.verifyCommand) {
|
|
182
|
+
logger.debug('Verifying installation', {
|
|
183
|
+
agentName,
|
|
184
|
+
verifyCommand: options.verifyCommand,
|
|
185
|
+
});
|
|
186
|
+
installedVersion = await verifyInstallation(options.verifyCommand);
|
|
187
|
+
if (!installedVersion) {
|
|
188
|
+
// Add platform-specific context for troubleshooting
|
|
189
|
+
const isWindows = platform === 'windows';
|
|
190
|
+
const troubleshootingHint = isWindows
|
|
191
|
+
? 'On Windows, you may need to restart your terminal/PowerShell/CMD to refresh PATH.'
|
|
192
|
+
: 'Verify that the command is in your PATH.';
|
|
193
|
+
logger.warn('Installation verification failed', {
|
|
194
|
+
agentName,
|
|
195
|
+
verifyCommand: options.verifyCommand,
|
|
196
|
+
platform,
|
|
197
|
+
hint: troubleshootingHint,
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
logger.debug('Installation verified', {
|
|
202
|
+
agentName,
|
|
203
|
+
installedVersion,
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
// SECURITY: Sanitize output before returning
|
|
208
|
+
// Prevents exposure of sensitive data in logs or UI
|
|
209
|
+
const sanitizedOutput = sanitizeValue(result.stdout || result.stderr || '');
|
|
210
|
+
return {
|
|
211
|
+
success: true,
|
|
212
|
+
installedVersion,
|
|
213
|
+
output: sanitizedOutput,
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
catch (error) {
|
|
217
|
+
// If it's already an AgentInstallationError, rethrow
|
|
218
|
+
if (error instanceof AgentInstallationError) {
|
|
219
|
+
throw error;
|
|
220
|
+
}
|
|
221
|
+
// Wrap other errors
|
|
222
|
+
throw new AgentInstallationError(agentName, `Failed to install: ${error instanceof Error ? error.message : String(error)}`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=native-installer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-installer.js","sourceRoot":"","sources":["../../src/utils/native-installer.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/processes.js
CHANGED
|
@@ -77,7 +77,7 @@ export async function getCommandPath(command) {
|
|
|
77
77
|
*/
|
|
78
78
|
export async function installGlobal(packageName, options = {}) {
|
|
79
79
|
const packageSpec = options.version ? `${packageName}@${options.version}` : packageName;
|
|
80
|
-
const timeout = options.timeout ??
|
|
80
|
+
const timeout = options.timeout ?? 300000; // 5 minutes default
|
|
81
81
|
logger.info(`Installing ${packageSpec} globally...`);
|
|
82
82
|
try {
|
|
83
83
|
const isWindows = os.platform() === 'win32';
|
package/dist/utils/profile.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type ErrorContext } from './errors.js';
|
|
2
|
+
import type { CodemieAssistant } from '../env/types.js';
|
|
2
3
|
/**
|
|
3
4
|
* Authentication status for display
|
|
4
5
|
*/
|
|
@@ -15,6 +16,7 @@ export declare function renderProfileInfo(config: {
|
|
|
15
16
|
provider?: string;
|
|
16
17
|
model?: string;
|
|
17
18
|
codeMieUrl?: string;
|
|
19
|
+
codemieAssistants?: CodemieAssistant[];
|
|
18
20
|
authStatus?: AuthStatusDisplay;
|
|
19
21
|
agent?: string;
|
|
20
22
|
cliVersion?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/utils/profile.ts"],"names":[],"mappings":"AACA,OAAO,EAA8B,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/utils/profile.ts"],"names":[],"mappings":"AACA,OAAO,EAA8B,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAE5E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACvC,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,GAAG,MAAM,CAgFT;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,OAAO,EACd,cAAc,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,EACxC,OAAO,GAAE;IACP,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;CACpC,GACL,IAAI,CAuDN"}
|
package/dist/utils/profile.js
CHANGED
|
@@ -35,6 +35,11 @@ export function renderProfileInfo(config) {
|
|
|
35
35
|
if (config.codeMieUrl) {
|
|
36
36
|
outputLines.push(formatRow('CodeMie URL', config.codeMieUrl));
|
|
37
37
|
}
|
|
38
|
+
if (config.codemieAssistants && config.codemieAssistants.length > 0) {
|
|
39
|
+
const count = config.codemieAssistants.length;
|
|
40
|
+
const assistantsText = `${count} assistant${count === 1 ? '' : 's'} registered`;
|
|
41
|
+
outputLines.push(formatRow('Assistants', assistantsText, chalk.cyan));
|
|
42
|
+
}
|
|
38
43
|
// Auth status inline
|
|
39
44
|
if (config.authStatus) {
|
|
40
45
|
const { authenticated, expiresAt, apiUrl } = config.authStatus;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/utils/profile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,0BAA0B,EAAqB,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/utils/profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CodeMie SDK Client Utilities
|
|
3
|
+
*
|
|
4
|
+
* Shared utilities for initializing and working with CodeMieClient
|
|
5
|
+
*/
|
|
6
|
+
import { CodeMieClient } from 'codemie-sdk';
|
|
7
|
+
/**
|
|
8
|
+
* Get authenticated CodeMieClient instance
|
|
9
|
+
*
|
|
10
|
+
* @param quiet - Suppress spinner and status messages
|
|
11
|
+
* @returns Initialized CodeMieClient instance
|
|
12
|
+
* @throws ConfigurationError if setup is incomplete or credentials are invalid
|
|
13
|
+
*/
|
|
14
|
+
export declare function getCodemieClient(quiet?: boolean): Promise<CodeMieClient>;
|
|
15
|
+
//# sourceMappingURL=sdk-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk-client.d.ts","sourceRoot":"","sources":["../../src/utils/sdk-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAO5C;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,UAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,CAuF5E"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CodeMie SDK Client Utilities
|
|
3
|
+
*
|
|
4
|
+
* Shared utilities for initializing and working with CodeMieClient
|
|
5
|
+
*/
|
|
6
|
+
import ora from 'ora';
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
import { CodeMieClient } from 'codemie-sdk';
|
|
9
|
+
import { CodeMieSSO } from '../providers/plugins/sso/sso.auth.js';
|
|
10
|
+
import { ConfigLoader } from './config.js';
|
|
11
|
+
import { ConfigurationError } from './errors.js';
|
|
12
|
+
import { logger } from './logger.js';
|
|
13
|
+
/**
|
|
14
|
+
* Get authenticated CodeMieClient instance
|
|
15
|
+
*
|
|
16
|
+
* @param quiet - Suppress spinner and status messages
|
|
17
|
+
* @returns Initialized CodeMieClient instance
|
|
18
|
+
* @throws ConfigurationError if setup is incomplete or credentials are invalid
|
|
19
|
+
*/
|
|
20
|
+
export async function getCodemieClient(quiet = false) {
|
|
21
|
+
let spinner;
|
|
22
|
+
if (!quiet) {
|
|
23
|
+
spinner = ora('Loading configuration...').start();
|
|
24
|
+
}
|
|
25
|
+
// 1. Load configuration
|
|
26
|
+
let config;
|
|
27
|
+
try {
|
|
28
|
+
config = await ConfigLoader.load();
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
if (spinner) {
|
|
32
|
+
spinner.fail(chalk.red('Failed to load configuration'));
|
|
33
|
+
}
|
|
34
|
+
throw new ConfigurationError('No configuration found. Please run "codemie setup" first.');
|
|
35
|
+
}
|
|
36
|
+
// 2. Get stored SSO credentials
|
|
37
|
+
if (spinner) {
|
|
38
|
+
spinner.text = 'Retrieving authentication credentials...';
|
|
39
|
+
}
|
|
40
|
+
const ssoAuth = new CodeMieSSO();
|
|
41
|
+
// Use codeMieUrl for credential lookup, not baseUrl (which may be proxied)
|
|
42
|
+
const credentialLookupUrl = config.codeMieUrl || config.baseUrl;
|
|
43
|
+
logger.debug('Attempting to retrieve SSO credentials', {
|
|
44
|
+
baseUrl: config.baseUrl,
|
|
45
|
+
credentialLookupUrl,
|
|
46
|
+
hasBaseUrl: !!config.baseUrl
|
|
47
|
+
});
|
|
48
|
+
const credentials = await ssoAuth.getStoredCredentials(credentialLookupUrl);
|
|
49
|
+
logger.debug('SSO credentials retrieval result', {
|
|
50
|
+
hasCredentials: !!credentials,
|
|
51
|
+
hasCookies: !!credentials?.cookies,
|
|
52
|
+
hasApiUrl: !!credentials?.apiUrl
|
|
53
|
+
});
|
|
54
|
+
if (!credentials?.cookies || !credentials.apiUrl) {
|
|
55
|
+
if (spinner) {
|
|
56
|
+
spinner.fail(chalk.red('No valid SSO credentials found'));
|
|
57
|
+
}
|
|
58
|
+
logger.error('SSO credentials not found or incomplete', {
|
|
59
|
+
credentials: credentials ? 'exists but incomplete' : 'not found',
|
|
60
|
+
baseUrl: config.baseUrl
|
|
61
|
+
});
|
|
62
|
+
throw new ConfigurationError('SSO authentication required. Please run "codemie setup" with SSO provider first.');
|
|
63
|
+
}
|
|
64
|
+
logger.debug('Retrieved SSO credentials', {
|
|
65
|
+
apiUrl: credentials.apiUrl,
|
|
66
|
+
hasCookies: !!credentials.cookies
|
|
67
|
+
});
|
|
68
|
+
// 3. Initialize CodeMie SDK client with cookies
|
|
69
|
+
if (spinner) {
|
|
70
|
+
spinner.text = 'Initializing SDK...';
|
|
71
|
+
}
|
|
72
|
+
try {
|
|
73
|
+
const client = new CodeMieClient({
|
|
74
|
+
codemie_api_domain: credentials.apiUrl,
|
|
75
|
+
cookies: credentials.cookies,
|
|
76
|
+
verify_ssl: false
|
|
77
|
+
});
|
|
78
|
+
logger.debug('CodeMieClient created with cookies', { apiUrl: credentials.apiUrl });
|
|
79
|
+
if (spinner) {
|
|
80
|
+
spinner.succeed(chalk.green('Connected to CodeMie'));
|
|
81
|
+
}
|
|
82
|
+
return client;
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
if (spinner) {
|
|
86
|
+
spinner.fail(chalk.red('Failed to initialize SDK'));
|
|
87
|
+
}
|
|
88
|
+
logger.error('SDK initialization failed', { error });
|
|
89
|
+
throw new ConfigurationError('Failed to initialize CodeMie SDK. Please verify your setup.');
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=sdk-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk-client.js","sourceRoot":"","sources":["../../src/utils/sdk-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Version comparison utilities for semantic versioning
|
|
3
|
+
* Used for Claude Code version management
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Semantic version components
|
|
7
|
+
*/
|
|
8
|
+
export interface SemanticVersion {
|
|
9
|
+
major: number;
|
|
10
|
+
minor: number;
|
|
11
|
+
patch: number;
|
|
12
|
+
raw: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Parse semantic version string into comparable components
|
|
16
|
+
*
|
|
17
|
+
* @param version - Version string (e.g., '2.0.30')
|
|
18
|
+
* @returns Version components { major, minor, patch, raw }
|
|
19
|
+
* @throws {Error} If version string is invalid
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* parseSemanticVersion('2.0.30') // Returns { major: 2, minor: 0, patch: 30, raw: '2.0.30' }
|
|
23
|
+
*/
|
|
24
|
+
export declare function parseSemanticVersion(version: string): SemanticVersion;
|
|
25
|
+
/**
|
|
26
|
+
* Check if version string is valid semantic version
|
|
27
|
+
*
|
|
28
|
+
* @param version - Version string to validate
|
|
29
|
+
* @returns true if valid semantic version
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* isValidSemanticVersion('2.0.30') // true
|
|
33
|
+
* isValidSemanticVersion('v2.0.30') // true
|
|
34
|
+
* isValidSemanticVersion('invalid') // false
|
|
35
|
+
*/
|
|
36
|
+
export declare function isValidSemanticVersion(version: string): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Compare two semantic versions
|
|
39
|
+
*
|
|
40
|
+
* @param version1 - First version string (e.g., '2.0.30')
|
|
41
|
+
* @param version2 - Second version string (e.g., '2.0.45')
|
|
42
|
+
* @returns -1 if v1 < v2, 0 if equal, 1 if v1 > v2
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* compareVersions('2.0.30', '2.0.45') // Returns -1
|
|
46
|
+
* compareVersions('2.0.45', '2.0.30') // Returns 1
|
|
47
|
+
* compareVersions('2.0.30', '2.0.30') // Returns 0
|
|
48
|
+
*/
|
|
49
|
+
export declare function compareVersions(version1: string, version2: string): number;
|
|
50
|
+
//# sourceMappingURL=version-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-utils.d.ts","sourceRoot":"","sources":["../../src/utils/version-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACZ;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAmBrE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAO/D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAoC1E"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Version comparison utilities for semantic versioning
|
|
3
|
+
* Used for Claude Code version management
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Parse semantic version string into comparable components
|
|
7
|
+
*
|
|
8
|
+
* @param version - Version string (e.g., '2.0.30')
|
|
9
|
+
* @returns Version components { major, minor, patch, raw }
|
|
10
|
+
* @throws {Error} If version string is invalid
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* parseSemanticVersion('2.0.30') // Returns { major: 2, minor: 0, patch: 30, raw: '2.0.30' }
|
|
14
|
+
*/
|
|
15
|
+
export function parseSemanticVersion(version) {
|
|
16
|
+
// Remove 'v' prefix if present
|
|
17
|
+
const cleanVersion = version.trim().replace(/^v/, '');
|
|
18
|
+
// Match semantic version pattern: major.minor.patch
|
|
19
|
+
const match = cleanVersion.match(/^(\d+)\.(\d+)\.(\d+)$/);
|
|
20
|
+
if (!match) {
|
|
21
|
+
throw new Error(`Invalid semantic version format: "${version}". Expected format: major.minor.patch (e.g., "2.0.30")`);
|
|
22
|
+
}
|
|
23
|
+
return {
|
|
24
|
+
major: parseInt(match[1], 10),
|
|
25
|
+
minor: parseInt(match[2], 10),
|
|
26
|
+
patch: parseInt(match[3], 10),
|
|
27
|
+
raw: version,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Check if version string is valid semantic version
|
|
32
|
+
*
|
|
33
|
+
* @param version - Version string to validate
|
|
34
|
+
* @returns true if valid semantic version
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* isValidSemanticVersion('2.0.30') // true
|
|
38
|
+
* isValidSemanticVersion('v2.0.30') // true
|
|
39
|
+
* isValidSemanticVersion('invalid') // false
|
|
40
|
+
*/
|
|
41
|
+
export function isValidSemanticVersion(version) {
|
|
42
|
+
try {
|
|
43
|
+
parseSemanticVersion(version);
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Compare two semantic versions
|
|
52
|
+
*
|
|
53
|
+
* @param version1 - First version string (e.g., '2.0.30')
|
|
54
|
+
* @param version2 - Second version string (e.g., '2.0.45')
|
|
55
|
+
* @returns -1 if v1 < v2, 0 if equal, 1 if v1 > v2
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* compareVersions('2.0.30', '2.0.45') // Returns -1
|
|
59
|
+
* compareVersions('2.0.45', '2.0.30') // Returns 1
|
|
60
|
+
* compareVersions('2.0.30', '2.0.30') // Returns 0
|
|
61
|
+
*/
|
|
62
|
+
export function compareVersions(version1, version2) {
|
|
63
|
+
// Handle special channel names (treat as highest version)
|
|
64
|
+
const isSpecialChannel = (v) => ['latest', 'stable'].includes(v.toLowerCase());
|
|
65
|
+
if (isSpecialChannel(version1) && isSpecialChannel(version2)) {
|
|
66
|
+
return 0; // Both special channels, consider equal
|
|
67
|
+
}
|
|
68
|
+
if (isSpecialChannel(version1)) {
|
|
69
|
+
return 1; // v1 is latest/stable, higher than any specific version
|
|
70
|
+
}
|
|
71
|
+
if (isSpecialChannel(version2)) {
|
|
72
|
+
return -1; // v2 is latest/stable, higher than v1
|
|
73
|
+
}
|
|
74
|
+
// Parse both versions
|
|
75
|
+
const v1 = parseSemanticVersion(version1);
|
|
76
|
+
const v2 = parseSemanticVersion(version2);
|
|
77
|
+
// Compare major version
|
|
78
|
+
if (v1.major !== v2.major) {
|
|
79
|
+
return v1.major < v2.major ? -1 : 1;
|
|
80
|
+
}
|
|
81
|
+
// Compare minor version
|
|
82
|
+
if (v1.minor !== v2.minor) {
|
|
83
|
+
return v1.minor < v2.minor ? -1 : 1;
|
|
84
|
+
}
|
|
85
|
+
// Compare patch version
|
|
86
|
+
if (v1.patch !== v2.patch) {
|
|
87
|
+
return v1.patch < v2.patch ? -1 : 1;
|
|
88
|
+
}
|
|
89
|
+
// Versions are equal
|
|
90
|
+
return 0;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=version-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-utils.js","sourceRoot":"","sources":["../../src/utils/version-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IACnD,+BAA+B;IAC/B,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAEtD,oDAAoD;IACpD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAE1D,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACd,qCAAqC,OAAO,wDAAwD,CACpG,CAAC;IACH,CAAC;IAED,OAAO;QACN,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC7B,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC7B,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC7B,GAAG,EAAE,OAAO;KACZ,CAAC;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACrD,IAAI,CAAC;QACJ,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,QAAgB;IACjE,0DAA0D;IAC1D,MAAM,gBAAgB,GAAG,CAAC,CAAS,EAAW,EAAE,CAC/C,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAEhD,IAAI,gBAAgB,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9D,OAAO,CAAC,CAAC,CAAC,wCAAwC;IACnD,CAAC;IACD,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,CAAC,CAAC,wDAAwD;IACnE,CAAC;IACD,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,CAAC,CAAC,CAAC,sCAAsC;IAClD,CAAC;IAED,sBAAsB;IACtB,MAAM,EAAE,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,EAAE,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAE1C,wBAAwB;IACxB,IAAI,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,wBAAwB;IACxB,IAAI,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,wBAAwB;IACxB,IAAI,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,qBAAqB;IACrB,OAAO,CAAC,CAAC;AACV,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codemieai/code",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.35",
|
|
4
4
|
"description": "Unified AI coding assistant CLI - Manage Claude Code, Gemini & custom agents. Multi-provider support (OpenAI, Azure, LiteLLM, SSO). Built-in LangGraph agent with file operations & git integration.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -9,7 +9,9 @@
|
|
|
9
9
|
"codemie": "./bin/codemie.js",
|
|
10
10
|
"codemie-code": "./bin/agent-executor.js",
|
|
11
11
|
"codemie-claude": "./bin/codemie-claude.js",
|
|
12
|
-
"codemie-
|
|
12
|
+
"codemie-claude-acp": "./bin/codemie-claude-acp.js",
|
|
13
|
+
"codemie-gemini": "./bin/codemie-gemini.js",
|
|
14
|
+
"codemie-opencode": "./bin/codemie-opencode.js"
|
|
13
15
|
},
|
|
14
16
|
"files": [
|
|
15
17
|
"dist",
|
|
@@ -20,7 +22,7 @@
|
|
|
20
22
|
"LICENSE"
|
|
21
23
|
],
|
|
22
24
|
"scripts": {
|
|
23
|
-
"build": "tsc && npm run copy-plugin",
|
|
25
|
+
"build": "tsc && tsc-alias && npm run copy-plugin",
|
|
24
26
|
"copy-plugin": "node scripts/copy-plugins.js",
|
|
25
27
|
"dev": "tsc --watch",
|
|
26
28
|
"test": "vitest",
|
|
@@ -110,10 +112,13 @@
|
|
|
110
112
|
"@langchain/openai": "^1.1.0",
|
|
111
113
|
"chalk": "^5.3.0",
|
|
112
114
|
"cli-table3": "^0.6.5",
|
|
115
|
+
"codemie-sdk": "^0.1.318",
|
|
113
116
|
"commander": "^11.1.0",
|
|
114
117
|
"cors": "^2.8.5",
|
|
118
|
+
"dedent": "^1.7.1",
|
|
115
119
|
"dotenv": "^16.3.1",
|
|
116
120
|
"express": "^5.1.0",
|
|
121
|
+
"fast-glob": "^3.3.2",
|
|
117
122
|
"http-proxy-agent": "^7.0.2",
|
|
118
123
|
"https-proxy-agent": "^7.0.5",
|
|
119
124
|
"inquirer": "^9.2.12",
|
|
@@ -122,6 +127,7 @@
|
|
|
122
127
|
"open": "^8.4.2",
|
|
123
128
|
"ora": "^7.0.1",
|
|
124
129
|
"strip-ansi": "^7.1.2",
|
|
130
|
+
"yaml": "^2.3.4",
|
|
125
131
|
"zod": "^4.1.12"
|
|
126
132
|
},
|
|
127
133
|
"devDependencies": {
|
|
@@ -129,6 +135,7 @@
|
|
|
129
135
|
"@commitlint/config-conventional": "^20.2.0",
|
|
130
136
|
"@eslint/js": "^9.38.0",
|
|
131
137
|
"@types/cors": "^2.8.19",
|
|
138
|
+
"@types/dedent": "^0.7.2",
|
|
132
139
|
"@types/express": "^5.0.5",
|
|
133
140
|
"@types/inquirer": "^9.0.7",
|
|
134
141
|
"@types/node": "^20.10.5",
|
|
@@ -138,6 +145,7 @@
|
|
|
138
145
|
"eslint": "^9.38.0",
|
|
139
146
|
"husky": "^9.1.7",
|
|
140
147
|
"lint-staged": "^16.2.7",
|
|
148
|
+
"tsc-alias": "^1.8.16",
|
|
141
149
|
"typescript": "^5.3.3",
|
|
142
150
|
"vitest": "^4.0.10"
|
|
143
151
|
},
|