@codemieai/code 0.0.33 → 0.0.34
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 +73 -7
- package/bin/codemie-opencode.js +11 -0
- package/dist/agents/codemie-code/agent.d.ts +17 -1
- package/dist/agents/codemie-code/agent.d.ts.map +1 -1
- package/dist/agents/codemie-code/agent.js +62 -3
- package/dist/agents/codemie-code/agent.js.map +1 -1
- package/dist/agents/codemie-code/index.d.ts +1 -0
- package/dist/agents/codemie-code/index.d.ts.map +1 -1
- package/dist/agents/codemie-code/index.js +28 -2
- package/dist/agents/codemie-code/index.js.map +1 -1
- package/dist/agents/codemie-code/prompts.d.ts +12 -3
- package/dist/agents/codemie-code/prompts.d.ts.map +1 -1
- package/dist/agents/codemie-code/prompts.js +25 -5
- package/dist/agents/codemie-code/prompts.js.map +1 -1
- package/dist/agents/codemie-code/types.d.ts +3 -0
- package/dist/agents/codemie-code/types.d.ts.map +1 -1
- package/dist/agents/codemie-code/types.js.map +1 -1
- package/dist/agents/core/AgentCLI.d.ts.map +1 -1
- package/dist/agents/core/AgentCLI.js +3 -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 +33 -0
- package/dist/agents/core/BaseAgentAdapter.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 +45 -0
- package/dist/agents/core/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 +214 -0
- package/dist/agents/plugins/claude/claude.plugin.js.map +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 +232 -503
- 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/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.map +1 -1
- package/dist/agents/registry.js +2 -0
- package/dist/agents/registry.js.map +1 -1
- 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 +86 -7
- 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/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.js +4 -0
- package/dist/cli/index.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/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 +194 -0
- package/dist/utils/native-installer.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 +5 -2
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentsCheck.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/doctor/checks/AgentsCheck.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"AgentsCheck.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/doctor/checks/AgentsCheck.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAExF,qBAAa,WAAY,YAAW,mBAAmB;IACrD,IAAI,SAAsB;IAE1B;;;OAGG;YACW,2BAA2B;IAgBnC,GAAG,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAiCjC,kBAAkB,CACtB,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,EACvC,aAAa,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,GACjD,OAAO,CAAC,iBAAiB,CAAC;CAsC9B"}
|
|
@@ -4,6 +4,22 @@
|
|
|
4
4
|
import { AgentRegistry } from '../../../../agents/registry.js';
|
|
5
5
|
export class AgentsCheck {
|
|
6
6
|
name = 'Installed Agents';
|
|
7
|
+
/**
|
|
8
|
+
* Check if agent was installed via deprecated npm method
|
|
9
|
+
* Returns warning detail if npm install detected, null otherwise
|
|
10
|
+
*/
|
|
11
|
+
async checkDeprecatedInstallation(agent, versionStr) {
|
|
12
|
+
if (agent.getInstallationMethod) {
|
|
13
|
+
const method = await agent.getInstallationMethod();
|
|
14
|
+
if (method === 'npm') {
|
|
15
|
+
return {
|
|
16
|
+
status: 'warn',
|
|
17
|
+
message: `${agent.displayName}${versionStr} - installed via npm (deprecated, use: codemie install claude --supported)`
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
7
23
|
async run() {
|
|
8
24
|
const details = [];
|
|
9
25
|
let success = true;
|
|
@@ -12,6 +28,12 @@ export class AgentsCheck {
|
|
|
12
28
|
for (const agent of installedAgents) {
|
|
13
29
|
const version = await agent.getVersion();
|
|
14
30
|
const versionStr = version ? ` (${version})` : '';
|
|
31
|
+
// Check for deprecated npm installation
|
|
32
|
+
const deprecationWarning = await this.checkDeprecatedInstallation(agent, versionStr);
|
|
33
|
+
if (deprecationWarning) {
|
|
34
|
+
details.push(deprecationWarning);
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
15
37
|
details.push({
|
|
16
38
|
status: 'ok',
|
|
17
39
|
message: `${agent.displayName}${versionStr}`
|
|
@@ -35,6 +57,13 @@ export class AgentsCheck {
|
|
|
35
57
|
onStartItem(`Checking ${agent.displayName}...`);
|
|
36
58
|
const version = await agent.getVersion();
|
|
37
59
|
const versionStr = version ? ` (${version})` : '';
|
|
60
|
+
// Check for deprecated npm installation
|
|
61
|
+
const deprecationWarning = await this.checkDeprecatedInstallation(agent, versionStr);
|
|
62
|
+
if (deprecationWarning) {
|
|
63
|
+
details.push(deprecationWarning);
|
|
64
|
+
onDisplayItem(deprecationWarning);
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
38
67
|
const detail = {
|
|
39
68
|
status: 'ok',
|
|
40
69
|
message: `${agent.displayName}${versionStr}`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentsCheck.js","sourceRoot":"","sources":["../../../../../src/cli/commands/doctor/checks/AgentsCheck.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"AgentsCheck.js","sourceRoot":"","sources":["../../../../../src/cli/commands/doctor/checks/AgentsCheck.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,oBAAoB,IAAI,OAAO,
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,oBAAoB,IAAI,OAAO,CAoO9C"}
|
|
@@ -8,7 +8,9 @@ export function createInstallCommand() {
|
|
|
8
8
|
command
|
|
9
9
|
.description('Install an external AI coding agent or development framework')
|
|
10
10
|
.argument('[name]', 'Agent or framework name to install (run without argument to see available)')
|
|
11
|
-
.
|
|
11
|
+
.argument('[version]', 'Optional: specific version to install (e.g., 2.0.30)')
|
|
12
|
+
.option('--supported', 'Install the latest supported version tested with CodeMie')
|
|
13
|
+
.action(async (name, version, options) => {
|
|
12
14
|
try {
|
|
13
15
|
// If no name provided, show available agents and frameworks
|
|
14
16
|
if (!name) {
|
|
@@ -53,15 +55,92 @@ export function createInstallCommand() {
|
|
|
53
55
|
// Try agent first
|
|
54
56
|
const agent = AgentRegistry.getAgent(name);
|
|
55
57
|
if (agent) {
|
|
56
|
-
//
|
|
58
|
+
// Determine which version to install
|
|
59
|
+
let versionToInstall;
|
|
60
|
+
let actualVersionToInstall; // Resolved version for display
|
|
61
|
+
// Priority: --supported flag > version argument > 'supported' (default for Claude) > undefined (latest)
|
|
62
|
+
if (options?.supported) {
|
|
63
|
+
versionToInstall = 'supported';
|
|
64
|
+
// Resolve 'supported' to actual version for display and comparison
|
|
65
|
+
if (agent.checkVersionCompatibility) {
|
|
66
|
+
const compat = await agent.checkVersionCompatibility();
|
|
67
|
+
actualVersionToInstall = compat.supportedVersion;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
else if (version) {
|
|
71
|
+
versionToInstall = version;
|
|
72
|
+
actualVersionToInstall = version;
|
|
73
|
+
}
|
|
74
|
+
else if (agent.name === 'claude' && agent.checkVersionCompatibility) {
|
|
75
|
+
// Default to supported version for Claude (native installer)
|
|
76
|
+
versionToInstall = 'supported';
|
|
77
|
+
const compat = await agent.checkVersionCompatibility();
|
|
78
|
+
actualVersionToInstall = compat.supportedVersion;
|
|
79
|
+
}
|
|
80
|
+
// Check if already installed with matching version
|
|
57
81
|
if (await agent.isInstalled()) {
|
|
58
|
-
|
|
59
|
-
|
|
82
|
+
const installedVersion = await agent.getVersion();
|
|
83
|
+
// If requesting specific version, check if it matches
|
|
84
|
+
if (actualVersionToInstall && installedVersion) {
|
|
85
|
+
if (installedVersion === actualVersionToInstall) {
|
|
86
|
+
console.log(chalk.blueBright(`${agent.displayName} v${installedVersion} is already installed`));
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
// Different version installed, ask to reinstall
|
|
91
|
+
const versionDisplay = options?.supported ? `${actualVersionToInstall} (supported)` : actualVersionToInstall;
|
|
92
|
+
console.log(chalk.yellow(`${agent.displayName} v${installedVersion} is already installed (requested: ${versionDisplay})`));
|
|
93
|
+
const inquirer = (await import('inquirer')).default;
|
|
94
|
+
const { confirm } = await inquirer.prompt([
|
|
95
|
+
{
|
|
96
|
+
type: 'confirm',
|
|
97
|
+
name: 'confirm',
|
|
98
|
+
message: `Reinstall with version ${versionDisplay}?`,
|
|
99
|
+
default: false,
|
|
100
|
+
},
|
|
101
|
+
]);
|
|
102
|
+
if (!confirm) {
|
|
103
|
+
console.log(chalk.gray('Installation cancelled'));
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
else if (!actualVersionToInstall) {
|
|
109
|
+
// No specific version requested, already installed
|
|
110
|
+
console.log(chalk.blueBright(`${agent.displayName} is already installed`));
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
60
113
|
}
|
|
61
|
-
|
|
114
|
+
// Build installation message
|
|
115
|
+
const isUsingSupported = versionToInstall === 'supported';
|
|
116
|
+
const versionMessage = isUsingSupported && actualVersionToInstall
|
|
117
|
+
? ` v${actualVersionToInstall} (supported version)`
|
|
118
|
+
: actualVersionToInstall
|
|
119
|
+
? ` v${actualVersionToInstall}`
|
|
120
|
+
: '';
|
|
121
|
+
const spinner = ora(`Installing ${agent.displayName}${versionMessage}...`).start();
|
|
62
122
|
try {
|
|
63
|
-
|
|
64
|
-
|
|
123
|
+
// Use installVersion if available and version specified
|
|
124
|
+
if (versionToInstall && agent.installVersion) {
|
|
125
|
+
await agent.installVersion(versionToInstall);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
await agent.install();
|
|
129
|
+
}
|
|
130
|
+
// Get installed version for success message
|
|
131
|
+
const installedVersion = await agent.getVersion();
|
|
132
|
+
const installedVersionStr = installedVersion ? ` v${installedVersion}` : '';
|
|
133
|
+
spinner.succeed(`${agent.displayName}${installedVersionStr} installed successfully`);
|
|
134
|
+
// Show warning if installed version is newer than supported
|
|
135
|
+
if (installedVersion && agent.checkVersionCompatibility) {
|
|
136
|
+
const compat = await agent.checkVersionCompatibility();
|
|
137
|
+
if (compat.isNewer) {
|
|
138
|
+
console.log();
|
|
139
|
+
console.log(chalk.yellow(`⚠️ Note: This version (${installedVersion}) is newer than the supported version (${compat.supportedVersion}).`));
|
|
140
|
+
console.log(chalk.yellow(` You may encounter compatibility issues with the CodeMie backend.`));
|
|
141
|
+
console.log(chalk.yellow(` To install the supported version, run:`), chalk.blueBright(`codemie install ${agent.name} --supported`));
|
|
142
|
+
}
|
|
143
|
+
}
|
|
65
144
|
// Show how to run the newly installed agent
|
|
66
145
|
console.log();
|
|
67
146
|
console.log(chalk.cyan('💡 Next steps:'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/cli/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,oBAAoB;IAClC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC;IAEvC,OAAO;SACJ,WAAW,CAAC,8DAA8D,CAAC;SAC3E,QAAQ,CAAC,QAAQ,EAAE,4EAA4E,CAAC;SAChG,MAAM,CAAC,KAAK,EAAE,IAAa,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/cli/commands/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenCode Metrics CLI Command
|
|
3
|
+
*
|
|
4
|
+
* Trigger OpenCode session processing to extract metrics and write JSONL deltas.
|
|
5
|
+
* Per tech spec Review 13 G1: Provides CLI entry point for Phase 1 metrics extraction.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* codemie opencode-metrics --session <id> # Process specific session
|
|
9
|
+
* codemie opencode-metrics --discover # Discover and process all unprocessed sessions
|
|
10
|
+
*/
|
|
11
|
+
import { Command } from 'commander';
|
|
12
|
+
export declare function createOpencodeMetricsCommand(): Command;
|
|
13
|
+
//# sourceMappingURL=opencode-metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode-metrics.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/opencode-metrics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,4BAA4B,IAAI,OAAO,CAiDtD"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenCode Metrics CLI Command
|
|
3
|
+
*
|
|
4
|
+
* Trigger OpenCode session processing to extract metrics and write JSONL deltas.
|
|
5
|
+
* Per tech spec Review 13 G1: Provides CLI entry point for Phase 1 metrics extraction.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* codemie opencode-metrics --session <id> # Process specific session
|
|
9
|
+
* codemie opencode-metrics --discover # Discover and process all unprocessed sessions
|
|
10
|
+
*/
|
|
11
|
+
import { Command } from 'commander';
|
|
12
|
+
import { join } from 'path';
|
|
13
|
+
import { existsSync, readdirSync } from 'fs';
|
|
14
|
+
import { logger } from '../../utils/logger.js';
|
|
15
|
+
import chalk from 'chalk';
|
|
16
|
+
export function createOpencodeMetricsCommand() {
|
|
17
|
+
const command = new Command('opencode-metrics');
|
|
18
|
+
command
|
|
19
|
+
.description('Process OpenCode sessions and extract metrics to JSONL')
|
|
20
|
+
.option('-s, --session <id>', 'Process specific OpenCode session by ID')
|
|
21
|
+
.option('-d, --discover', 'Discover and process all unprocessed sessions')
|
|
22
|
+
.option('-v, --verbose', 'Show detailed processing output')
|
|
23
|
+
.action(async (options) => {
|
|
24
|
+
try {
|
|
25
|
+
const { getOpenCodeStoragePath } = await import('../../agents/plugins/opencode/opencode.paths.js');
|
|
26
|
+
const storagePath = getOpenCodeStoragePath();
|
|
27
|
+
if (!storagePath) {
|
|
28
|
+
console.error(chalk.red('OpenCode storage not found.'));
|
|
29
|
+
console.log(chalk.dim('Expected location: ~/.local/share/opencode/storage/ (Linux)'));
|
|
30
|
+
console.log(chalk.dim(' ~/Library/Application Support/opencode/storage/ (macOS)'));
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
if (options.verbose) {
|
|
34
|
+
console.log(chalk.dim(`Storage path: ${storagePath}`));
|
|
35
|
+
}
|
|
36
|
+
if (options.session) {
|
|
37
|
+
// Process specific session
|
|
38
|
+
await processSpecificSession(storagePath, options.session, options.verbose);
|
|
39
|
+
}
|
|
40
|
+
else if (options.discover) {
|
|
41
|
+
// Discover and process all
|
|
42
|
+
await discoverAndProcessSessions(storagePath, options.verbose);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
console.log(chalk.yellow('Use --session <id> or --discover to process OpenCode sessions'));
|
|
46
|
+
console.log('');
|
|
47
|
+
console.log(chalk.bold('Examples:'));
|
|
48
|
+
console.log(chalk.dim(' codemie opencode-metrics --session ses_abc123...'));
|
|
49
|
+
console.log(chalk.dim(' codemie opencode-metrics --discover'));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
logger.error('Failed to process OpenCode metrics:', error);
|
|
54
|
+
console.error(chalk.red('Failed to process OpenCode metrics'));
|
|
55
|
+
if (error instanceof Error) {
|
|
56
|
+
console.error(chalk.dim(error.message));
|
|
57
|
+
}
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
return command;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Process a specific OpenCode session by ID
|
|
65
|
+
*/
|
|
66
|
+
async function processSpecificSession(storagePath, sessionId, verbose) {
|
|
67
|
+
const sessionDir = join(storagePath, 'session');
|
|
68
|
+
if (!existsSync(sessionDir)) {
|
|
69
|
+
console.error(chalk.red(`Session directory not found: ${sessionDir}`));
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
// Locate session file across all projectIDs
|
|
73
|
+
let projectDirs;
|
|
74
|
+
try {
|
|
75
|
+
projectDirs = readdirSync(sessionDir);
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
console.error(chalk.red(`Failed to read session directory: ${sessionDir}`));
|
|
79
|
+
process.exit(1);
|
|
80
|
+
}
|
|
81
|
+
for (const projectId of projectDirs) {
|
|
82
|
+
const projectPath = join(sessionDir, projectId);
|
|
83
|
+
// Skip non-directories
|
|
84
|
+
try {
|
|
85
|
+
const { statSync } = await import('fs');
|
|
86
|
+
if (!statSync(projectPath).isDirectory())
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
const sessionPath = join(projectPath, `${sessionId}.json`);
|
|
93
|
+
if (existsSync(sessionPath)) {
|
|
94
|
+
console.log(chalk.blue(`Found session: ${sessionId}`));
|
|
95
|
+
if (verbose) {
|
|
96
|
+
console.log(chalk.dim(` Path: ${sessionPath}`));
|
|
97
|
+
console.log(chalk.dim(` Project: ${projectId}`));
|
|
98
|
+
}
|
|
99
|
+
// Process the session
|
|
100
|
+
await processSession(storagePath, sessionPath, sessionId, verbose);
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
console.error(chalk.red(`Session ${sessionId} not found in OpenCode storage`));
|
|
105
|
+
console.log(chalk.dim('Searched in: ' + sessionDir));
|
|
106
|
+
process.exit(1);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Discover and process all OpenCode sessions
|
|
110
|
+
*/
|
|
111
|
+
async function discoverAndProcessSessions(storagePath, verbose) {
|
|
112
|
+
const { OpenCodeSessionAdapter } = await import('../../agents/plugins/opencode/opencode.session.js');
|
|
113
|
+
const { OpenCodePluginMetadata } = await import('../../agents/plugins/opencode/opencode.plugin.js');
|
|
114
|
+
const adapter = new OpenCodeSessionAdapter(OpenCodePluginMetadata);
|
|
115
|
+
console.log(chalk.blue('Discovering OpenCode sessions...'));
|
|
116
|
+
// Discover sessions (last 30 days by default)
|
|
117
|
+
const sessions = await adapter.discoverSessions({ maxAgeDays: 30 });
|
|
118
|
+
if (sessions.length === 0) {
|
|
119
|
+
console.log(chalk.yellow('No OpenCode sessions found in the last 30 days'));
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
console.log(chalk.green(`Found ${sessions.length} session(s)`));
|
|
123
|
+
console.log('');
|
|
124
|
+
let processedCount = 0;
|
|
125
|
+
let skippedCount = 0;
|
|
126
|
+
let errorCount = 0;
|
|
127
|
+
for (const sessionDesc of sessions) {
|
|
128
|
+
if (verbose) {
|
|
129
|
+
console.log(chalk.dim(`Processing: ${sessionDesc.sessionId}`));
|
|
130
|
+
}
|
|
131
|
+
try {
|
|
132
|
+
const result = await processSession(storagePath, sessionDesc.filePath, sessionDesc.sessionId, verbose);
|
|
133
|
+
if (result.skipped) {
|
|
134
|
+
skippedCount++;
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
processedCount++;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
errorCount++;
|
|
142
|
+
if (verbose) {
|
|
143
|
+
console.error(chalk.red(` Error: ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
console.log('');
|
|
148
|
+
console.log(chalk.bold('Summary:'));
|
|
149
|
+
console.log(` ${chalk.green('✓')} Processed: ${processedCount}`);
|
|
150
|
+
console.log(` ${chalk.yellow('○')} Skipped (recently processed): ${skippedCount}`);
|
|
151
|
+
if (errorCount > 0) {
|
|
152
|
+
console.log(` ${chalk.red('✗')} Errors: ${errorCount}`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Process a single session and write metrics
|
|
157
|
+
*/
|
|
158
|
+
async function processSession(_storagePath, sessionPath, sessionId, verbose) {
|
|
159
|
+
const { OpenCodeSessionAdapter } = await import('../../agents/plugins/opencode/opencode.session.js');
|
|
160
|
+
const { OpenCodePluginMetadata } = await import('../../agents/plugins/opencode/opencode.plugin.js');
|
|
161
|
+
const adapter = new OpenCodeSessionAdapter(OpenCodePluginMetadata);
|
|
162
|
+
// Parse and process the session
|
|
163
|
+
const parsedSession = await adapter.parseSessionFile(sessionPath, sessionId);
|
|
164
|
+
// Run the metrics processor directly
|
|
165
|
+
const { OpenCodeMetricsProcessor } = await import('../../agents/plugins/opencode/session/processors/opencode.metrics-processor.js');
|
|
166
|
+
const processor = new OpenCodeMetricsProcessor();
|
|
167
|
+
// Create minimal ProcessingContext for CLI usage
|
|
168
|
+
// The processor only needs sessionId from context
|
|
169
|
+
const context = {
|
|
170
|
+
sessionId,
|
|
171
|
+
apiBaseUrl: '',
|
|
172
|
+
cookies: '',
|
|
173
|
+
clientType: 'codemie-opencode',
|
|
174
|
+
version: '1.0.0',
|
|
175
|
+
dryRun: false
|
|
176
|
+
};
|
|
177
|
+
const result = await processor.process(parsedSession, context);
|
|
178
|
+
if (verbose) {
|
|
179
|
+
console.log(chalk.dim(` Result: ${result.message}`));
|
|
180
|
+
if (result.metadata) {
|
|
181
|
+
console.log(chalk.dim(` Deltas written: ${result.metadata.deltasWritten || 0}`));
|
|
182
|
+
if (result.metadata.deltasSkipped) {
|
|
183
|
+
console.log(chalk.dim(` Deltas skipped (dedup): ${result.metadata.deltasSkipped}`));
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
// Check if skipped due to recent processing
|
|
188
|
+
const skipped = result.metadata?.skippedReason === 'RECENTLY_PROCESSED';
|
|
189
|
+
if (!verbose) {
|
|
190
|
+
const status = skipped
|
|
191
|
+
? chalk.yellow('○')
|
|
192
|
+
: (result.success ? chalk.green('✓') : chalk.red('✗'));
|
|
193
|
+
const deltasInfo = result.metadata?.deltasWritten
|
|
194
|
+
? chalk.dim(` (${result.metadata.deltasWritten} deltas)`)
|
|
195
|
+
: '';
|
|
196
|
+
console.log(`${status} ${sessionId}${deltasInfo}`);
|
|
197
|
+
}
|
|
198
|
+
return { skipped };
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=opencode-metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode-metrics.js","sourceRoot":"","sources":["../../../src/cli/commands/opencode-metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC,wBAAgB,kBAAkB,IAAI,OAAO,CA4B5C"}
|
|
@@ -7,6 +7,7 @@ import { logger } from '../../utils/logger.js';
|
|
|
7
7
|
import { ProviderRegistry } from '../../providers/index.js';
|
|
8
8
|
import { getAllProviderChoices, displaySetupSuccess, displaySetupError, getAllModelChoices, displaySetupInstructions } from '../../providers/integration/setup-ui.js';
|
|
9
9
|
import { FirstTimeExperience } from '../first-time.js';
|
|
10
|
+
import { AgentRegistry } from '../../agents/registry.js';
|
|
10
11
|
export function createSetupCommand() {
|
|
11
12
|
const command = new Command('setup');
|
|
12
13
|
command
|
|
@@ -178,6 +179,10 @@ async function handlePluginSetup(providerName, setupSteps, profileName, isUpdate
|
|
|
178
179
|
}
|
|
179
180
|
// Display success
|
|
180
181
|
displaySetupSuccess(finalProfileName, providerName, selectedModel);
|
|
182
|
+
// Check and install Claude if needed (only during first-time setup, not updates)
|
|
183
|
+
if (!isUpdate) {
|
|
184
|
+
await checkAndInstallClaude();
|
|
185
|
+
}
|
|
181
186
|
}
|
|
182
187
|
catch (error) {
|
|
183
188
|
saveSpinner.fail(chalk.red('Failed to save profile'));
|
|
@@ -277,6 +282,114 @@ async function promptForModelSelection(models, providerTemplate) {
|
|
|
277
282
|
}
|
|
278
283
|
return selectedModel;
|
|
279
284
|
}
|
|
285
|
+
/**
|
|
286
|
+
* Check and install Claude Code if needed
|
|
287
|
+
* Called during first-time setup to ensure Claude is installed with supported version
|
|
288
|
+
*/
|
|
289
|
+
async function checkAndInstallClaude() {
|
|
290
|
+
try {
|
|
291
|
+
const claude = AgentRegistry.getAgent('claude');
|
|
292
|
+
if (!claude) {
|
|
293
|
+
// Claude agent not found in registry, skip installation
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
const isInstalled = await claude.isInstalled();
|
|
297
|
+
if (!isInstalled) {
|
|
298
|
+
// Claude not installed - prompt to install
|
|
299
|
+
console.log();
|
|
300
|
+
console.log(chalk.yellow('○ Claude Code is not installed'));
|
|
301
|
+
console.log();
|
|
302
|
+
const { installClaude } = await inquirer.prompt([
|
|
303
|
+
{
|
|
304
|
+
type: 'confirm',
|
|
305
|
+
name: 'installClaude',
|
|
306
|
+
message: 'Would you like to install Claude Code now?',
|
|
307
|
+
default: true,
|
|
308
|
+
},
|
|
309
|
+
]);
|
|
310
|
+
if (installClaude) {
|
|
311
|
+
const spinner = ora('Installing Claude Code (supported version)...').start();
|
|
312
|
+
try {
|
|
313
|
+
// Install supported version
|
|
314
|
+
if (claude.installVersion) {
|
|
315
|
+
await claude.installVersion('supported');
|
|
316
|
+
}
|
|
317
|
+
else {
|
|
318
|
+
await claude.install();
|
|
319
|
+
}
|
|
320
|
+
const installedVersion = await claude.getVersion();
|
|
321
|
+
const versionStr = installedVersion ? ` v${installedVersion}` : '';
|
|
322
|
+
spinner.succeed(chalk.green(`Claude Code${versionStr} installed successfully`));
|
|
323
|
+
// Show next steps
|
|
324
|
+
console.log();
|
|
325
|
+
console.log(chalk.cyan('💡 Next steps:'));
|
|
326
|
+
console.log(chalk.white(' Interactive mode:'), chalk.blueBright('codemie-claude'));
|
|
327
|
+
console.log(chalk.white(' Single task:'), chalk.blueBright('codemie-claude --task "your task"'));
|
|
328
|
+
console.log();
|
|
329
|
+
}
|
|
330
|
+
catch (error) {
|
|
331
|
+
spinner.fail(chalk.red('Failed to install Claude Code'));
|
|
332
|
+
logger.error('Claude installation failed during setup', { error });
|
|
333
|
+
console.log();
|
|
334
|
+
console.log(chalk.yellow('You can install it manually later using:'));
|
|
335
|
+
console.log(chalk.blueBright(' codemie install claude --supported'));
|
|
336
|
+
console.log();
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
else {
|
|
340
|
+
console.log();
|
|
341
|
+
console.log(chalk.gray('Skipped Claude Code installation'));
|
|
342
|
+
console.log(chalk.yellow('You can install it later using:'), chalk.blueBright('codemie install claude --supported'));
|
|
343
|
+
console.log();
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
// Claude installed - check version compatibility with timeout protection
|
|
348
|
+
if (claude.checkVersionCompatibility) {
|
|
349
|
+
try {
|
|
350
|
+
// Add timeout protection to avoid blocking setup if version check hangs
|
|
351
|
+
const compat = await Promise.race([
|
|
352
|
+
claude.checkVersionCompatibility(),
|
|
353
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('Version check timeout')), 3000))
|
|
354
|
+
]);
|
|
355
|
+
if (compat.isNewer) {
|
|
356
|
+
// Installed version is newer than supported
|
|
357
|
+
console.log();
|
|
358
|
+
console.log(chalk.yellow(`⚠️ Claude Code v${compat.installedVersion} is installed`));
|
|
359
|
+
console.log(chalk.yellow(` CodeMie has only tested and verified v${compat.supportedVersion}`));
|
|
360
|
+
console.log();
|
|
361
|
+
console.log(chalk.white(' To install the supported version:'));
|
|
362
|
+
console.log(chalk.blueBright(' codemie install claude --supported'));
|
|
363
|
+
console.log();
|
|
364
|
+
}
|
|
365
|
+
else if (compat.compatible) {
|
|
366
|
+
// Version is compatible (same or older than supported)
|
|
367
|
+
console.log();
|
|
368
|
+
console.log(chalk.green(`✓ Claude Code v${compat.installedVersion} is installed`));
|
|
369
|
+
console.log();
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
catch (error) {
|
|
373
|
+
// Silently skip version check if it fails - don't block setup
|
|
374
|
+
logger.debug('Claude version check skipped during setup', { error });
|
|
375
|
+
console.log();
|
|
376
|
+
console.log(chalk.green(`✓ Claude Code is installed`));
|
|
377
|
+
console.log();
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
else {
|
|
381
|
+
// No version check available, just show installed message
|
|
382
|
+
console.log();
|
|
383
|
+
console.log(chalk.green(`✓ Claude Code is installed`));
|
|
384
|
+
console.log();
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
catch (error) {
|
|
389
|
+
// Don't fail setup if Claude check/install fails
|
|
390
|
+
logger.error('Error checking/installing Claude:', error);
|
|
391
|
+
}
|
|
392
|
+
}
|
|
280
393
|
/*
|
|
281
394
|
* Note: Old SSO setup function (handleAiRunSSOSetup) has been removed.
|
|
282
395
|
* It has been replaced by the plugin-based SSOSetupSteps in src/providers/plugins/sso/
|