@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.
Files changed (180) hide show
  1. package/README.md +73 -7
  2. package/bin/codemie-opencode.js +11 -0
  3. package/dist/agents/codemie-code/agent.d.ts +17 -1
  4. package/dist/agents/codemie-code/agent.d.ts.map +1 -1
  5. package/dist/agents/codemie-code/agent.js +62 -3
  6. package/dist/agents/codemie-code/agent.js.map +1 -1
  7. package/dist/agents/codemie-code/index.d.ts +1 -0
  8. package/dist/agents/codemie-code/index.d.ts.map +1 -1
  9. package/dist/agents/codemie-code/index.js +28 -2
  10. package/dist/agents/codemie-code/index.js.map +1 -1
  11. package/dist/agents/codemie-code/prompts.d.ts +12 -3
  12. package/dist/agents/codemie-code/prompts.d.ts.map +1 -1
  13. package/dist/agents/codemie-code/prompts.js +25 -5
  14. package/dist/agents/codemie-code/prompts.js.map +1 -1
  15. package/dist/agents/codemie-code/types.d.ts +3 -0
  16. package/dist/agents/codemie-code/types.d.ts.map +1 -1
  17. package/dist/agents/codemie-code/types.js.map +1 -1
  18. package/dist/agents/core/AgentCLI.d.ts.map +1 -1
  19. package/dist/agents/core/AgentCLI.js +3 -1
  20. package/dist/agents/core/AgentCLI.js.map +1 -1
  21. package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
  22. package/dist/agents/core/BaseAgentAdapter.js +33 -0
  23. package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
  24. package/dist/agents/core/session/BaseSessionAdapter.d.ts +25 -0
  25. package/dist/agents/core/session/BaseSessionAdapter.d.ts.map +1 -1
  26. package/dist/agents/core/session/discovery-types.d.ts +53 -0
  27. package/dist/agents/core/session/discovery-types.d.ts.map +1 -0
  28. package/dist/agents/core/session/discovery-types.js +8 -0
  29. package/dist/agents/core/session/discovery-types.js.map +1 -0
  30. package/dist/agents/core/types.d.ts +45 -0
  31. package/dist/agents/core/types.d.ts.map +1 -1
  32. package/dist/agents/plugins/claude/claude.plugin.d.ts +44 -1
  33. package/dist/agents/plugins/claude/claude.plugin.d.ts.map +1 -1
  34. package/dist/agents/plugins/claude/claude.plugin.js +214 -0
  35. package/dist/agents/plugins/claude/claude.plugin.js.map +1 -1
  36. package/dist/agents/plugins/claude/plugin/README.md +40 -2
  37. package/dist/agents/plugins/claude/plugin/claude-templates/README.md +5 -5
  38. package/dist/agents/plugins/claude/plugin/claude-templates/templates/CLAUDE.md.template +177 -436
  39. package/dist/agents/plugins/claude/plugin/claude-templates/templates/agents/code-review-agent-template.md.template +49 -82
  40. package/dist/agents/plugins/claude/plugin/claude-templates/templates/agents/refactor-cleaner-agent.md.template +337 -0
  41. package/dist/agents/plugins/claude/plugin/claude-templates/templates/agents/solution-architect-agent.md.template +129 -419
  42. package/dist/agents/plugins/claude/plugin/claude-templates/templates/agents/unit-tester-agent.md.template +146 -693
  43. package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/api/api-patterns.md.template +110 -138
  44. package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/architecture/architecture.md.template +197 -0
  45. package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/data/database-patterns.md.template +171 -91
  46. package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/development/development-practices.md.template +219 -131
  47. package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/security/security-practices.md.template +223 -98
  48. package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/standards/code-quality.md.template +131 -95
  49. package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/testing/testing-patterns.md.template +247 -75
  50. package/dist/agents/plugins/claude/plugin/commands/README.md +133 -0
  51. package/dist/agents/plugins/claude/plugin/commands/codemie-init.md +336 -544
  52. package/dist/agents/plugins/claude/plugin/commands/codemie-subagents.md +232 -503
  53. package/dist/agents/plugins/claude/plugin/commands/memory-add.md +311 -30
  54. package/dist/agents/plugins/claude/plugin/commands/memory-refresh.md +218 -39
  55. package/dist/agents/plugins/gemini/gemini.plugin.d.ts.map +1 -1
  56. package/dist/agents/plugins/gemini/gemini.plugin.js +0 -3
  57. package/dist/agents/plugins/gemini/gemini.plugin.js.map +1 -1
  58. package/dist/agents/plugins/opencode/index.d.ts +8 -0
  59. package/dist/agents/plugins/opencode/index.d.ts.map +1 -0
  60. package/dist/agents/plugins/opencode/index.js +12 -0
  61. package/dist/agents/plugins/opencode/index.js.map +1 -0
  62. package/dist/agents/plugins/opencode/opencode-message-types.d.ts +207 -0
  63. package/dist/agents/plugins/opencode/opencode-message-types.d.ts.map +1 -0
  64. package/dist/agents/plugins/opencode/opencode-message-types.js +59 -0
  65. package/dist/agents/plugins/opencode/opencode-message-types.js.map +1 -0
  66. package/dist/agents/plugins/opencode/opencode-model-configs.d.ts +65 -0
  67. package/dist/agents/plugins/opencode/opencode-model-configs.d.ts.map +1 -0
  68. package/dist/agents/plugins/opencode/opencode-model-configs.js +184 -0
  69. package/dist/agents/plugins/opencode/opencode-model-configs.js.map +1 -0
  70. package/dist/agents/plugins/opencode/opencode.paths.d.ts +62 -0
  71. package/dist/agents/plugins/opencode/opencode.paths.d.ts.map +1 -0
  72. package/dist/agents/plugins/opencode/opencode.paths.js +148 -0
  73. package/dist/agents/plugins/opencode/opencode.paths.js.map +1 -0
  74. package/dist/agents/plugins/opencode/opencode.plugin.d.ts +35 -0
  75. package/dist/agents/plugins/opencode/opencode.plugin.d.ts.map +1 -0
  76. package/dist/agents/plugins/opencode/opencode.plugin.js +338 -0
  77. package/dist/agents/plugins/opencode/opencode.plugin.js.map +1 -0
  78. package/dist/agents/plugins/opencode/opencode.session.d.ts +77 -0
  79. package/dist/agents/plugins/opencode/opencode.session.d.ts.map +1 -0
  80. package/dist/agents/plugins/opencode/opencode.session.js +424 -0
  81. package/dist/agents/plugins/opencode/opencode.session.js.map +1 -0
  82. package/dist/agents/plugins/opencode/opencode.storage-utils.d.ts +25 -0
  83. package/dist/agents/plugins/opencode/opencode.storage-utils.d.ts.map +1 -0
  84. package/dist/agents/plugins/opencode/opencode.storage-utils.js +96 -0
  85. package/dist/agents/plugins/opencode/opencode.storage-utils.js.map +1 -0
  86. package/dist/agents/plugins/opencode/session/processors/opencode.conversations-processor.d.ts +30 -0
  87. package/dist/agents/plugins/opencode/session/processors/opencode.conversations-processor.d.ts.map +1 -0
  88. package/dist/agents/plugins/opencode/session/processors/opencode.conversations-processor.js +116 -0
  89. package/dist/agents/plugins/opencode/session/processors/opencode.conversations-processor.js.map +1 -0
  90. package/dist/agents/plugins/opencode/session/processors/opencode.metrics-processor.d.ts +102 -0
  91. package/dist/agents/plugins/opencode/session/processors/opencode.metrics-processor.d.ts.map +1 -0
  92. package/dist/agents/plugins/opencode/session/processors/opencode.metrics-processor.js +584 -0
  93. package/dist/agents/plugins/opencode/session/processors/opencode.metrics-processor.js.map +1 -0
  94. package/dist/agents/registry.d.ts.map +1 -1
  95. package/dist/agents/registry.js +2 -0
  96. package/dist/agents/registry.js.map +1 -1
  97. package/dist/cli/commands/doctor/checks/AgentsCheck.d.ts +5 -0
  98. package/dist/cli/commands/doctor/checks/AgentsCheck.d.ts.map +1 -1
  99. package/dist/cli/commands/doctor/checks/AgentsCheck.js +29 -0
  100. package/dist/cli/commands/doctor/checks/AgentsCheck.js.map +1 -1
  101. package/dist/cli/commands/install.d.ts.map +1 -1
  102. package/dist/cli/commands/install.js +86 -7
  103. package/dist/cli/commands/install.js.map +1 -1
  104. package/dist/cli/commands/opencode-metrics.d.ts +13 -0
  105. package/dist/cli/commands/opencode-metrics.d.ts.map +1 -0
  106. package/dist/cli/commands/opencode-metrics.js +200 -0
  107. package/dist/cli/commands/opencode-metrics.js.map +1 -0
  108. package/dist/cli/commands/setup.d.ts.map +1 -1
  109. package/dist/cli/commands/setup.js +113 -0
  110. package/dist/cli/commands/setup.js.map +1 -1
  111. package/dist/cli/commands/skill.d.ts +6 -0
  112. package/dist/cli/commands/skill.d.ts.map +1 -0
  113. package/dist/cli/commands/skill.js +196 -0
  114. package/dist/cli/commands/skill.js.map +1 -0
  115. package/dist/cli/commands/update.d.ts.map +1 -1
  116. package/dist/cli/commands/update.js +34 -6
  117. package/dist/cli/commands/update.js.map +1 -1
  118. package/dist/cli/index.js +4 -0
  119. package/dist/cli/index.js.map +1 -1
  120. package/dist/migrations/003-remove-hooks-node.migration.d.ts +22 -0
  121. package/dist/migrations/003-remove-hooks-node.migration.d.ts.map +1 -0
  122. package/dist/migrations/003-remove-hooks-node.migration.js +103 -0
  123. package/dist/migrations/003-remove-hooks-node.migration.js.map +1 -0
  124. package/dist/migrations/index.d.ts +1 -0
  125. package/dist/migrations/index.d.ts.map +1 -1
  126. package/dist/migrations/index.js +1 -1
  127. package/dist/migrations/index.js.map +1 -1
  128. package/dist/providers/plugins/sso/sso.http-client.js +2 -2
  129. package/dist/providers/plugins/sso/sso.http-client.js.map +1 -1
  130. package/dist/providers/plugins/sso/sso.setup-steps.d.ts.map +1 -1
  131. package/dist/providers/plugins/sso/sso.setup-steps.js +14 -10
  132. package/dist/providers/plugins/sso/sso.setup-steps.js.map +1 -1
  133. package/dist/skills/core/SkillDiscovery.d.ts +83 -0
  134. package/dist/skills/core/SkillDiscovery.d.ts.map +1 -0
  135. package/dist/skills/core/SkillDiscovery.js +237 -0
  136. package/dist/skills/core/SkillDiscovery.js.map +1 -0
  137. package/dist/skills/core/SkillManager.d.ts +86 -0
  138. package/dist/skills/core/SkillManager.d.ts.map +1 -0
  139. package/dist/skills/core/SkillManager.js +155 -0
  140. package/dist/skills/core/SkillManager.js.map +1 -0
  141. package/dist/skills/core/types.d.ts +120 -0
  142. package/dist/skills/core/types.d.ts.map +1 -0
  143. package/dist/skills/core/types.js +20 -0
  144. package/dist/skills/core/types.js.map +1 -0
  145. package/dist/skills/index.d.ts +12 -0
  146. package/dist/skills/index.d.ts.map +1 -0
  147. package/dist/skills/index.js +12 -0
  148. package/dist/skills/index.js.map +1 -0
  149. package/dist/skills/utils/content-loader.d.ts +25 -0
  150. package/dist/skills/utils/content-loader.d.ts.map +1 -0
  151. package/dist/skills/utils/content-loader.js +161 -0
  152. package/dist/skills/utils/content-loader.js.map +1 -0
  153. package/dist/skills/utils/frontmatter.d.ts +60 -0
  154. package/dist/skills/utils/frontmatter.d.ts.map +1 -0
  155. package/dist/skills/utils/frontmatter.js +114 -0
  156. package/dist/skills/utils/frontmatter.js.map +1 -0
  157. package/dist/skills/utils/pattern-matcher.d.ts +60 -0
  158. package/dist/skills/utils/pattern-matcher.d.ts.map +1 -0
  159. package/dist/skills/utils/pattern-matcher.js +97 -0
  160. package/dist/skills/utils/pattern-matcher.js.map +1 -0
  161. package/dist/utils/installation-detector.d.ts +22 -0
  162. package/dist/utils/installation-detector.d.ts.map +1 -0
  163. package/dist/utils/installation-detector.js +49 -0
  164. package/dist/utils/installation-detector.js.map +1 -0
  165. package/dist/utils/native-installer.d.ts +49 -0
  166. package/dist/utils/native-installer.d.ts.map +1 -0
  167. package/dist/utils/native-installer.js +194 -0
  168. package/dist/utils/native-installer.js.map +1 -0
  169. package/dist/utils/version-utils.d.ts +50 -0
  170. package/dist/utils/version-utils.d.ts.map +1 -0
  171. package/dist/utils/version-utils.js +92 -0
  172. package/dist/utils/version-utils.js.map +1 -0
  173. package/package.json +5 -2
  174. package/scripts/copy-mr-skill-to-global.ts +252 -0
  175. package/scripts/demo-hooks.sh +125 -0
  176. package/scripts/test-hooks.sh +196 -0
  177. package/dist/agents/plugins/claude/plugin/claude-templates/templates/INDEX.md +0 -205
  178. package/dist/agents/plugins/claude/plugin/claude-templates/templates/TEMPLATE_SIZES.md +0 -74
  179. package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/architecture/layered-architecture.md.template +0 -143
  180. 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;AAGH,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAExF,qBAAa,WAAY,YAAW,mBAAmB;IACrD,IAAI,SAAsB;IAEpB,GAAG,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAyBjC,kBAAkB,CACtB,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,EACvC,aAAa,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,GACjD,OAAO,CAAC,iBAAiB,CAAC;CA6B9B"}
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;AAG/D,MAAM,OAAO,WAAW;IACtB,IAAI,GAAG,kBAAkB,CAAC;IAE1B,KAAK,CAAC,GAAG;QACP,MAAM,OAAO,GAAwB,EAAE,CAAC;QACxC,IAAI,OAAO,GAAG,IAAI,CAAC;QAEnB,MAAM,eAAe,GAAG,MAAM,aAAa,CAAC,kBAAkB,EAAE,CAAC;QAEjE,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;gBACpC,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC;gBACzC,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClD,OAAO,CAAC,IAAI,CAAC;oBACX,MAAM,EAAE,IAAI;oBACZ,OAAO,EAAE,GAAG,KAAK,CAAC,WAAW,GAAG,UAAU,EAAE;iBAC7C,CAAC,CAAC;YACL,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,gDAAgD;aAC1D,CAAC,CAAC;QACL,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,WAAuC,EACvC,aAAkD;QAElD,MAAM,OAAO,GAAwB,EAAE,CAAC;QACxC,IAAI,OAAO,GAAG,IAAI,CAAC;QAEnB,MAAM,eAAe,GAAG,MAAM,aAAa,CAAC,kBAAkB,EAAE,CAAC;QAEjE,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;gBACpC,WAAW,CAAC,YAAY,KAAK,CAAC,WAAW,KAAK,CAAC,CAAC;gBAChD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC;gBACzC,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClD,MAAM,MAAM,GAAsB;oBAChC,MAAM,EAAE,IAAI;oBACZ,OAAO,EAAE,GAAG,KAAK,CAAC,WAAW,GAAG,UAAU,EAAE;iBAC7C,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACrB,aAAa,CAAC,MAAM,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAsB;gBAChC,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,gDAAgD;aAC1D,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrB,aAAa,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAC/C,CAAC;CACF"}
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,CAkJ9C"}
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
- .action(async (name) => {
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
- // Check if already installed
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
- console.log(chalk.blueBright(`${agent.displayName} is already installed`));
59
- return;
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
- const spinner = ora(`Installing ${agent.displayName}...`).start();
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
- await agent.install();
64
- spinner.succeed(`${agent.displayName} installed successfully`);
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":"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"}
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;AAiBpC,wBAAgB,kBAAkB,IAAI,OAAO,CA4B5C"}
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/