@codemieai/code 0.0.34 → 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.
Files changed (155) hide show
  1. package/README.md +10 -5
  2. package/bin/codemie-claude-acp.js +21 -0
  3. package/bin/codemie.js +13 -0
  4. package/dist/agents/codemie-code/agent.d.ts +22 -4
  5. package/dist/agents/codemie-code/agent.d.ts.map +1 -1
  6. package/dist/agents/codemie-code/agent.js +291 -195
  7. package/dist/agents/codemie-code/agent.js.map +1 -1
  8. package/dist/agents/codemie-code/index.d.ts +1 -1
  9. package/dist/agents/codemie-code/index.d.ts.map +1 -1
  10. package/dist/agents/codemie-code/index.js +8 -5
  11. package/dist/agents/codemie-code/index.js.map +1 -1
  12. package/dist/agents/codemie-code/prompts.d.ts +8 -10
  13. package/dist/agents/codemie-code/prompts.d.ts.map +1 -1
  14. package/dist/agents/codemie-code/prompts.js +43 -16
  15. package/dist/agents/codemie-code/prompts.js.map +1 -1
  16. package/dist/agents/codemie-code/toolMetadata.d.ts.map +1 -1
  17. package/dist/agents/codemie-code/toolMetadata.js +9 -8
  18. package/dist/agents/codemie-code/toolMetadata.js.map +1 -1
  19. package/dist/agents/codemie-code/tools/assistant-invocation.d.ts +47 -0
  20. package/dist/agents/codemie-code/tools/assistant-invocation.d.ts.map +1 -0
  21. package/dist/agents/codemie-code/tools/assistant-invocation.js +129 -0
  22. package/dist/agents/codemie-code/tools/assistant-invocation.js.map +1 -0
  23. package/dist/agents/codemie-code/tools/index.d.ts +70 -4
  24. package/dist/agents/codemie-code/tools/index.d.ts.map +1 -1
  25. package/dist/agents/codemie-code/tools/index.js +57 -44
  26. package/dist/agents/codemie-code/tools/index.js.map +1 -1
  27. package/dist/agents/codemie-code/tools/planning.d.ts +6 -5
  28. package/dist/agents/codemie-code/tools/planning.d.ts.map +1 -1
  29. package/dist/agents/codemie-code/tools/planning.js +12 -10
  30. package/dist/agents/codemie-code/tools/planning.js.map +1 -1
  31. package/dist/agents/codemie-code/types.d.ts +24 -3
  32. package/dist/agents/codemie-code/types.d.ts.map +1 -1
  33. package/dist/agents/codemie-code/types.js +24 -0
  34. package/dist/agents/codemie-code/types.js.map +1 -1
  35. package/dist/agents/codemie-code/ui/autocomplete.d.ts +98 -0
  36. package/dist/agents/codemie-code/ui/autocomplete.d.ts.map +1 -0
  37. package/dist/agents/codemie-code/ui/autocomplete.js +145 -0
  38. package/dist/agents/codemie-code/ui/autocomplete.js.map +1 -0
  39. package/dist/agents/codemie-code/ui/keyHandlers.d.ts +112 -0
  40. package/dist/agents/codemie-code/ui/keyHandlers.d.ts.map +1 -0
  41. package/dist/agents/codemie-code/ui/keyHandlers.js +415 -0
  42. package/dist/agents/codemie-code/ui/keyHandlers.js.map +1 -0
  43. package/dist/agents/codemie-code/ui/mentions.d.ts +86 -0
  44. package/dist/agents/codemie-code/ui/mentions.d.ts.map +1 -0
  45. package/dist/agents/codemie-code/ui/mentions.js +122 -0
  46. package/dist/agents/codemie-code/ui/mentions.js.map +1 -0
  47. package/dist/agents/codemie-code/ui/terminalCodes.d.ts +38 -0
  48. package/dist/agents/codemie-code/ui/terminalCodes.d.ts.map +1 -0
  49. package/dist/agents/codemie-code/ui/terminalCodes.js +42 -0
  50. package/dist/agents/codemie-code/ui/terminalCodes.js.map +1 -0
  51. package/dist/agents/codemie-code/ui/todoPanel.d.ts.map +1 -1
  52. package/dist/agents/codemie-code/ui/todoPanel.js +3 -4
  53. package/dist/agents/codemie-code/ui/todoPanel.js.map +1 -1
  54. package/dist/agents/codemie-code/ui.d.ts +8 -7
  55. package/dist/agents/codemie-code/ui.d.ts.map +1 -1
  56. package/dist/agents/codemie-code/ui.js +87 -145
  57. package/dist/agents/codemie-code/ui.js.map +1 -1
  58. package/dist/agents/core/AgentCLI.d.ts +5 -0
  59. package/dist/agents/core/AgentCLI.d.ts.map +1 -1
  60. package/dist/agents/core/AgentCLI.js +22 -0
  61. package/dist/agents/core/AgentCLI.js.map +1 -1
  62. package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
  63. package/dist/agents/core/BaseAgentAdapter.js +58 -28
  64. package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
  65. package/dist/agents/core/extension/BaseExtensionInstaller.d.ts +7 -1
  66. package/dist/agents/core/extension/BaseExtensionInstaller.d.ts.map +1 -1
  67. package/dist/agents/core/extension/BaseExtensionInstaller.js +58 -15
  68. package/dist/agents/core/extension/BaseExtensionInstaller.js.map +1 -1
  69. package/dist/agents/core/types.d.ts +17 -0
  70. package/dist/agents/core/types.d.ts.map +1 -1
  71. package/dist/agents/plugins/claude/claude-acp.plugin.d.ts +27 -0
  72. package/dist/agents/plugins/claude/claude-acp.plugin.d.ts.map +1 -0
  73. package/dist/agents/plugins/claude/claude-acp.plugin.js +63 -0
  74. package/dist/agents/plugins/claude/claude-acp.plugin.js.map +1 -0
  75. package/dist/agents/plugins/claude/claude-message-types.d.ts +1 -0
  76. package/dist/agents/plugins/claude/claude-message-types.d.ts.map +1 -1
  77. package/dist/agents/plugins/claude/claude.plugin.d.ts +1 -1
  78. package/dist/agents/plugins/claude/claude.plugin.d.ts.map +1 -1
  79. package/dist/agents/plugins/claude/claude.plugin.js +66 -29
  80. package/dist/agents/plugins/claude/claude.plugin.js.map +1 -1
  81. package/dist/agents/plugins/claude/claude.session.d.ts.map +1 -1
  82. package/dist/agents/plugins/claude/claude.session.js +14 -7
  83. package/dist/agents/plugins/claude/claude.session.js.map +1 -1
  84. package/dist/agents/plugins/claude/plugin/.claude-plugin/plugin.json +1 -1
  85. package/dist/agents/plugins/claude/plugin/commands/codemie-subagents.md +4 -4
  86. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.d.ts.map +1 -1
  87. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js +43 -8
  88. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js.map +1 -1
  89. package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.d.ts.map +1 -1
  90. package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.js +68 -40
  91. package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.js.map +1 -1
  92. package/dist/agents/registry.d.ts +1 -1
  93. package/dist/agents/registry.d.ts.map +1 -1
  94. package/dist/agents/registry.js +3 -1
  95. package/dist/agents/registry.js.map +1 -1
  96. package/dist/cli/commands/assistants/chat.d.ts +11 -0
  97. package/dist/cli/commands/assistants/chat.d.ts.map +1 -0
  98. package/dist/cli/commands/assistants/chat.js +201 -0
  99. package/dist/cli/commands/assistants/chat.js.map +1 -0
  100. package/dist/cli/commands/assistants/constants.d.ts +81 -0
  101. package/dist/cli/commands/assistants/constants.d.ts.map +1 -0
  102. package/dist/cli/commands/assistants/constants.js +75 -0
  103. package/dist/cli/commands/assistants/constants.js.map +1 -0
  104. package/dist/cli/commands/assistants/generators/claude-agent-generator.d.ts +26 -0
  105. package/dist/cli/commands/assistants/generators/claude-agent-generator.d.ts.map +1 -0
  106. package/dist/cli/commands/assistants/generators/claude-agent-generator.js +115 -0
  107. package/dist/cli/commands/assistants/generators/claude-agent-generator.js.map +1 -0
  108. package/dist/cli/commands/assistants/index.d.ts +11 -0
  109. package/dist/cli/commands/assistants/index.d.ts.map +1 -0
  110. package/dist/cli/commands/assistants/index.js +28 -0
  111. package/dist/cli/commands/assistants/index.js.map +1 -0
  112. package/dist/cli/commands/assistants/list.d.ts +11 -0
  113. package/dist/cli/commands/assistants/list.d.ts.map +1 -0
  114. package/dist/cli/commands/assistants/list.js +323 -0
  115. package/dist/cli/commands/assistants/list.js.map +1 -0
  116. package/dist/cli/commands/install.d.ts.map +1 -1
  117. package/dist/cli/commands/install.js +18 -6
  118. package/dist/cli/commands/install.js.map +1 -1
  119. package/dist/cli/commands/self-update.d.ts +3 -0
  120. package/dist/cli/commands/self-update.d.ts.map +1 -0
  121. package/dist/cli/commands/self-update.js +55 -0
  122. package/dist/cli/commands/self-update.js.map +1 -0
  123. package/dist/cli/index.d.ts.map +1 -1
  124. package/dist/cli/index.js +8 -4
  125. package/dist/cli/index.js.map +1 -1
  126. package/dist/env/types.d.ts +13 -0
  127. package/dist/env/types.d.ts.map +1 -1
  128. package/dist/env/types.js +1 -1
  129. package/dist/env/types.js.map +1 -1
  130. package/dist/utils/auth.d.ts +22 -0
  131. package/dist/utils/auth.d.ts.map +1 -0
  132. package/dist/utils/auth.js +50 -0
  133. package/dist/utils/auth.js.map +1 -0
  134. package/dist/utils/cli-updater.d.ts +70 -0
  135. package/dist/utils/cli-updater.d.ts.map +1 -0
  136. package/dist/utils/cli-updater.js +339 -0
  137. package/dist/utils/cli-updater.js.map +1 -0
  138. package/dist/utils/config.d.ts +6 -1
  139. package/dist/utils/config.d.ts.map +1 -1
  140. package/dist/utils/config.js +13 -0
  141. package/dist/utils/config.js.map +1 -1
  142. package/dist/utils/native-installer.d.ts.map +1 -1
  143. package/dist/utils/native-installer.js +48 -17
  144. package/dist/utils/native-installer.js.map +1 -1
  145. package/dist/utils/processes.js +1 -1
  146. package/dist/utils/profile.d.ts +2 -0
  147. package/dist/utils/profile.d.ts.map +1 -1
  148. package/dist/utils/profile.js +5 -0
  149. package/dist/utils/profile.js.map +1 -1
  150. package/dist/utils/sdk-client.d.ts +15 -0
  151. package/dist/utils/sdk-client.d.ts.map +1 -0
  152. package/dist/utils/sdk-client.js +92 -0
  153. package/dist/utils/sdk-client.js.map +1 -0
  154. package/package.json +7 -2
  155. package/dist/agents/plugins/claude/plugin/commands/codemie-pr.md +0 -25
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Shared authentication utilities for assistants commands
3
+ */
4
+ import type { CodeMieClient } from 'codemie-sdk';
5
+ import type { ProviderProfile } from '../env/types.js';
6
+ /**
7
+ * Get authenticated CodeMie client with automatic re-authentication on failure
8
+ *
9
+ * @param config - Provider configuration
10
+ * @returns Authenticated CodeMieClient instance
11
+ * @throws ConfigurationError if authentication fails and user declines re-auth
12
+ */
13
+ export declare function getAuthenticatedClient(config: ProviderProfile): Promise<CodeMieClient>;
14
+ /**
15
+ * Prompt user for re-authentication
16
+ *
17
+ * @param config - Provider configuration
18
+ * @returns True if re-authentication succeeded, false otherwise
19
+ * @throws ConfigurationError if re-authentication is not available
20
+ */
21
+ export declare function promptReauthentication(config: ProviderProfile): Promise<boolean>;
22
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/utils/auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAItD;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,CAa5F;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CActF"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Shared authentication utilities for assistants commands
3
+ */
4
+ import chalk from 'chalk';
5
+ import { getCodemieClient } from '../utils/sdk-client.js';
6
+ import { ConfigurationError } from '../utils/errors.js';
7
+ import { ProviderRegistry } from '../providers/core/registry.js';
8
+ import { handleAuthValidationFailure } from '../providers/core/auth-validation.js';
9
+ /**
10
+ * Get authenticated CodeMie client with automatic re-authentication on failure
11
+ *
12
+ * @param config - Provider configuration
13
+ * @returns Authenticated CodeMieClient instance
14
+ * @throws ConfigurationError if authentication fails and user declines re-auth
15
+ */
16
+ export async function getAuthenticatedClient(config) {
17
+ try {
18
+ return await getCodemieClient();
19
+ }
20
+ catch (error) {
21
+ if (error instanceof ConfigurationError && error.message.includes('SSO authentication required')) {
22
+ const reauthed = await promptReauthentication(config);
23
+ if (reauthed) {
24
+ // Retry getting client after successful re-authentication
25
+ return await getCodemieClient();
26
+ }
27
+ }
28
+ throw error;
29
+ }
30
+ }
31
+ /**
32
+ * Prompt user for re-authentication
33
+ *
34
+ * @param config - Provider configuration
35
+ * @returns True if re-authentication succeeded, false otherwise
36
+ * @throws ConfigurationError if re-authentication is not available
37
+ */
38
+ export async function promptReauthentication(config) {
39
+ const setupSteps = ProviderRegistry.getSetupSteps(config.provider || '');
40
+ if (setupSteps?.validateAuth) {
41
+ const validationResult = await setupSteps.validateAuth(config);
42
+ const reauthed = await handleAuthValidationFailure(validationResult, setupSteps, config);
43
+ if (reauthed) {
44
+ console.log(chalk.green('\n✓ Re-authentication successful\n'));
45
+ return true;
46
+ }
47
+ }
48
+ throw new ConfigurationError('Authentication expired. Please re-authenticate.');
49
+ }
50
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/utils/auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAElF;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,MAAuB;IAClE,IAAI,CAAC;QACH,OAAO,MAAM,gBAAgB,EAAE,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,kBAAkB,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAAC,EAAE,CAAC;YACjG,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAAC,MAAM,CAAC,CAAC;YACtD,IAAI,QAAQ,EAAE,CAAC;gBACb,0DAA0D;gBAC1D,OAAO,MAAM,gBAAgB,EAAE,CAAC;YAClC,CAAC;QACH,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,MAAuB;IAClE,MAAM,UAAU,GAAG,gBAAgB,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAEzE,IAAI,UAAU,EAAE,YAAY,EAAE,CAAC;QAC7B,MAAM,gBAAgB,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,MAAM,2BAA2B,CAAC,gBAAgB,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QAEzF,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC,CAAC;YAC/D,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,MAAM,IAAI,kBAAkB,CAAC,iDAAiD,CAAC,CAAC;AAClF,CAAC"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * CLI Auto-Update Utilities
3
+ *
4
+ * Handles version checking and updating for the CodeMie CLI itself
5
+ * (@codemieai/code package)
6
+ *
7
+ * Environment Variables:
8
+ * - CODEMIE_AUTO_UPDATE=true (default): Silently update without prompting
9
+ * - CODEMIE_AUTO_UPDATE=false: Prompt user before updating
10
+ * - CODEMIE_UPDATE_CHECK_INTERVAL: Time between update checks in ms (default: 86400000 = 24h)
11
+ */
12
+ /**
13
+ * Get the current CLI version from package.json
14
+ */
15
+ export declare function getCurrentCliVersion(): Promise<string | null>;
16
+ /**
17
+ * Check if auto-update is enabled (default: true)
18
+ * Reads CODEMIE_AUTO_UPDATE environment variable
19
+ *
20
+ * @returns true if auto-update should happen silently, false if prompt required
21
+ */
22
+ export declare function isAutoUpdateEnabled(): boolean;
23
+ /**
24
+ * Result of checking for CLI updates
25
+ */
26
+ export interface CliUpdateCheckResult {
27
+ /** Current CLI version */
28
+ currentVersion: string;
29
+ /** Latest available version from npm */
30
+ latestVersion: string;
31
+ /** True if update available */
32
+ hasUpdate: boolean;
33
+ }
34
+ /**
35
+ * Check if a CLI update is available
36
+ * Fast check with 5-second timeout
37
+ *
38
+ * @returns Update check result, or null if check fails
39
+ */
40
+ export declare function checkForCliUpdate(): Promise<CliUpdateCheckResult | null>;
41
+ /**
42
+ * Prompt user to update CLI
43
+ *
44
+ * @param result - Update check result
45
+ * @returns True if user confirms update, false otherwise
46
+ */
47
+ export declare function promptForCliUpdate(result: CliUpdateCheckResult): Promise<boolean>;
48
+ /**
49
+ * Update the CLI to the latest version
50
+ *
51
+ * @param latestVersion - Version to install
52
+ * @param silent - If true, minimize output (for auto-update)
53
+ */
54
+ export declare function updateCli(latestVersion: string, silent?: boolean): Promise<void>;
55
+ /**
56
+ * Check for CLI updates and handle update (silent or prompted)
57
+ * This is the main entry point called from bin/codemie.js
58
+ *
59
+ * Behavior:
60
+ * - CODEMIE_AUTO_UPDATE=true (default): Silent update
61
+ * - CODEMIE_AUTO_UPDATE=false: Prompt user
62
+ *
63
+ * Performance optimizations:
64
+ * - Rate limited: Only checks once per UPDATE_CHECK_INTERVAL (default: 24h)
65
+ * - File-based locking: Prevents concurrent updates from multiple CLI processes
66
+ *
67
+ * Non-blocking: Failures are logged but don't block CLI startup
68
+ */
69
+ export declare function checkAndPromptForUpdate(): Promise<void>;
70
+ //# sourceMappingURL=cli-updater.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-updater.d.ts","sourceRoot":"","sources":["../../src/utils/cli-updater.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAsBH;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAcnE;AAkED;;;;;GAKG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAW7C;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,0BAA0B;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,+BAA+B;IAC/B,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAyC9E;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,CAmCvF;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA4CpF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAkF7D"}
@@ -0,0 +1,339 @@
1
+ /**
2
+ * CLI Auto-Update Utilities
3
+ *
4
+ * Handles version checking and updating for the CodeMie CLI itself
5
+ * (@codemieai/code package)
6
+ *
7
+ * Environment Variables:
8
+ * - CODEMIE_AUTO_UPDATE=true (default): Silently update without prompting
9
+ * - CODEMIE_AUTO_UPDATE=false: Prompt user before updating
10
+ * - CODEMIE_UPDATE_CHECK_INTERVAL: Time between update checks in ms (default: 86400000 = 24h)
11
+ */
12
+ import fs from 'fs/promises';
13
+ import path from 'path';
14
+ import chalk from 'chalk';
15
+ import inquirer from 'inquirer';
16
+ import { fileURLToPath } from 'url';
17
+ import { logger } from './logger.js';
18
+ import { getLatestVersion, installGlobal } from './processes.js';
19
+ import { compareVersions, isValidSemanticVersion } from './version-utils.js';
20
+ import { getCodemiePath } from './paths.js';
21
+ const CLI_PACKAGE_NAME = '@codemieai/code';
22
+ // Rate limiting: Check for updates at most once per interval (default: 24 hours)
23
+ const UPDATE_CHECK_INTERVAL = parseInt(process.env.CODEMIE_UPDATE_CHECK_INTERVAL || '86400000', 10);
24
+ const LAST_CHECK_FILE = path.join(getCodemiePath(), '.last-update-check');
25
+ const UPDATE_LOCK_FILE = path.join(getCodemiePath(), '.update-lock');
26
+ /**
27
+ * Get the current CLI version from package.json
28
+ */
29
+ export async function getCurrentCliVersion() {
30
+ try {
31
+ // Navigate from src/utils/ to package.json (2 levels up)
32
+ const dirname = path.dirname(fileURLToPath(import.meta.url));
33
+ const packageJsonPath = path.resolve(dirname, '../../package.json');
34
+ const content = await fs.readFile(packageJsonPath, 'utf-8');
35
+ const packageJson = JSON.parse(content);
36
+ return packageJson.version || null;
37
+ }
38
+ catch (error) {
39
+ logger.debug('Failed to read current CLI version:', error);
40
+ return null;
41
+ }
42
+ }
43
+ /**
44
+ * Check if we should perform an update check (rate limiting)
45
+ * Only checks once per UPDATE_CHECK_INTERVAL (default: 24 hours)
46
+ */
47
+ async function shouldCheckForUpdate() {
48
+ try {
49
+ const lastCheckStr = await fs.readFile(LAST_CHECK_FILE, 'utf-8');
50
+ const lastCheck = parseInt(lastCheckStr, 10);
51
+ const now = Date.now();
52
+ const shouldCheck = (now - lastCheck) > UPDATE_CHECK_INTERVAL;
53
+ if (!shouldCheck) {
54
+ logger.debug(`Skipping update check (last checked ${Math.floor((now - lastCheck) / 1000 / 60)} minutes ago)`);
55
+ }
56
+ return shouldCheck;
57
+ }
58
+ catch {
59
+ // File doesn't exist or invalid - should check
60
+ return true;
61
+ }
62
+ }
63
+ /**
64
+ * Record the time of the last update check
65
+ */
66
+ async function recordUpdateCheck() {
67
+ try {
68
+ await fs.writeFile(LAST_CHECK_FILE, Date.now().toString(), 'utf-8');
69
+ logger.debug('Recorded update check timestamp');
70
+ }
71
+ catch (error) {
72
+ logger.debug('Failed to record update check time:', error);
73
+ }
74
+ }
75
+ /**
76
+ * Acquire lock file to prevent concurrent updates
77
+ * @returns true if lock acquired, false if another process is updating
78
+ */
79
+ async function acquireUpdateLock() {
80
+ try {
81
+ // Try to create lock file with exclusive flag (fails if exists)
82
+ const fd = await fs.open(UPDATE_LOCK_FILE, 'wx');
83
+ await fd.close();
84
+ logger.debug('Acquired update lock');
85
+ return true;
86
+ }
87
+ catch {
88
+ // Lock file exists - another process is updating
89
+ logger.debug('Update lock already held by another process');
90
+ return false;
91
+ }
92
+ }
93
+ /**
94
+ * Release update lock file
95
+ */
96
+ async function releaseUpdateLock() {
97
+ try {
98
+ await fs.unlink(UPDATE_LOCK_FILE);
99
+ logger.debug('Released update lock');
100
+ }
101
+ catch {
102
+ // Lock file already deleted or never created
103
+ logger.debug('Lock file not found (already released)');
104
+ }
105
+ }
106
+ /**
107
+ * Check if auto-update is enabled (default: true)
108
+ * Reads CODEMIE_AUTO_UPDATE environment variable
109
+ *
110
+ * @returns true if auto-update should happen silently, false if prompt required
111
+ */
112
+ export function isAutoUpdateEnabled() {
113
+ const envValue = process.env.CODEMIE_AUTO_UPDATE;
114
+ // If not set, default to true (silent auto-update)
115
+ if (envValue === undefined || envValue === null || envValue === '') {
116
+ return true;
117
+ }
118
+ // Parse as boolean
119
+ const normalized = envValue.toLowerCase().trim();
120
+ return normalized === 'true' || normalized === '1' || normalized === 'yes';
121
+ }
122
+ /**
123
+ * Check if a CLI update is available
124
+ * Fast check with 5-second timeout
125
+ *
126
+ * @returns Update check result, or null if check fails
127
+ */
128
+ export async function checkForCliUpdate() {
129
+ try {
130
+ const currentVersion = await getCurrentCliVersion();
131
+ if (!currentVersion) {
132
+ logger.debug('Could not determine current CLI version');
133
+ return null;
134
+ }
135
+ // Validate current version format
136
+ if (!isValidSemanticVersion(currentVersion)) {
137
+ logger.error('Invalid current CLI version format', { version: currentVersion });
138
+ return null;
139
+ }
140
+ // Fast check with 5-second timeout
141
+ const latestVersion = await getLatestVersion(CLI_PACKAGE_NAME, { timeout: 5000 });
142
+ if (!latestVersion) {
143
+ logger.debug('Could not fetch latest CLI version from npm');
144
+ return null;
145
+ }
146
+ // SECURITY: Validate version string from npm registry before using
147
+ if (!isValidSemanticVersion(latestVersion)) {
148
+ logger.error('Invalid version format received from npm registry (potential security issue)', {
149
+ version: latestVersion,
150
+ source: 'npm'
151
+ });
152
+ return null;
153
+ }
154
+ const hasUpdate = compareVersions(currentVersion, latestVersion) < 0;
155
+ return {
156
+ currentVersion,
157
+ latestVersion,
158
+ hasUpdate
159
+ };
160
+ }
161
+ catch (error) {
162
+ logger.debug('CLI update check failed:', error);
163
+ return null;
164
+ }
165
+ }
166
+ /**
167
+ * Prompt user to update CLI
168
+ *
169
+ * @param result - Update check result
170
+ * @returns True if user confirms update, false otherwise
171
+ */
172
+ export async function promptForCliUpdate(result) {
173
+ // Box: 47 total width (45 dashes + 2 corners)
174
+ // Content area: 47 - 4 (two borders + two leading spaces) = 43 chars
175
+ const contentWidth = 43;
176
+ // Title: "📦 CodeMie CLI Update Available" (30 string chars, 31 visual width due to emoji)
177
+ const titleVisualWidth = 31; // Emoji takes 2 visual columns
178
+ const titlePadding = ' '.repeat(Math.max(0, contentWidth - titleVisualWidth));
179
+ // Build content lines with proper padding
180
+ const currentLine = `Current: ${result.currentVersion}`;
181
+ const currentPadding = ' '.repeat(Math.max(0, contentWidth - currentLine.length));
182
+ const latestLine = `Latest: ${result.latestVersion}`;
183
+ const latestPadding = ' '.repeat(Math.max(0, contentWidth - latestLine.length));
184
+ console.log();
185
+ console.log(chalk.yellow('┌─────────────────────────────────────────────┐'));
186
+ console.log(chalk.yellow('│ ') + chalk.bold('📦 CodeMie CLI Update Available') + titlePadding + chalk.yellow('│'));
187
+ console.log(chalk.yellow('│─────────────────────────────────────────────│'));
188
+ console.log(chalk.yellow('│ ') + currentLine + currentPadding + chalk.yellow('│'));
189
+ console.log(chalk.yellow('│ ') + chalk.green(latestLine) + latestPadding + chalk.yellow('│'));
190
+ console.log(chalk.yellow('└─────────────────────────────────────────────┘'));
191
+ console.log();
192
+ const { shouldUpdate } = await inquirer.prompt([
193
+ {
194
+ type: 'confirm',
195
+ name: 'shouldUpdate',
196
+ message: 'Would you like to update now?',
197
+ default: true
198
+ }
199
+ ]);
200
+ return shouldUpdate;
201
+ }
202
+ /**
203
+ * Update the CLI to the latest version
204
+ *
205
+ * @param latestVersion - Version to install
206
+ * @param silent - If true, minimize output (for auto-update)
207
+ */
208
+ export async function updateCli(latestVersion, silent = false) {
209
+ if (!silent) {
210
+ console.log();
211
+ console.log(chalk.cyan(`📦 Updating CodeMie CLI to ${latestVersion}...`));
212
+ }
213
+ try {
214
+ // Use force: true to handle directory conflicts during global update
215
+ await installGlobal(CLI_PACKAGE_NAME, {
216
+ version: latestVersion,
217
+ force: true,
218
+ timeout: 60000 // 1 minute timeout for update
219
+ });
220
+ if (silent) {
221
+ // Silent mode: just log to debug
222
+ logger.debug(`CodeMie CLI auto-updated to ${latestVersion}`);
223
+ }
224
+ else {
225
+ console.log();
226
+ console.log(chalk.green('✓ CodeMie CLI updated successfully!'));
227
+ console.log(chalk.cyan(` Current version: ${latestVersion}`));
228
+ console.log();
229
+ console.log(chalk.dim(' 💡 The update will take effect on the next command.'));
230
+ console.log();
231
+ }
232
+ }
233
+ catch (error) {
234
+ // Log error for debugging
235
+ logger.error('CLI update failed', {
236
+ targetVersion: latestVersion,
237
+ error: error instanceof Error ? error.message : String(error),
238
+ silent
239
+ });
240
+ // On error, show message even in silent mode
241
+ console.log();
242
+ console.error(chalk.red('✗ Failed to update CodeMie CLI'));
243
+ console.log();
244
+ console.log(chalk.yellow(' You can manually update with:'));
245
+ console.log(chalk.white(` npm install -g ${CLI_PACKAGE_NAME}@${latestVersion}`));
246
+ console.log();
247
+ console.log(chalk.dim(' 💡 To disable auto-update: export CODEMIE_AUTO_UPDATE=false'));
248
+ console.log();
249
+ throw error;
250
+ }
251
+ }
252
+ /**
253
+ * Check for CLI updates and handle update (silent or prompted)
254
+ * This is the main entry point called from bin/codemie.js
255
+ *
256
+ * Behavior:
257
+ * - CODEMIE_AUTO_UPDATE=true (default): Silent update
258
+ * - CODEMIE_AUTO_UPDATE=false: Prompt user
259
+ *
260
+ * Performance optimizations:
261
+ * - Rate limited: Only checks once per UPDATE_CHECK_INTERVAL (default: 24h)
262
+ * - File-based locking: Prevents concurrent updates from multiple CLI processes
263
+ *
264
+ * Non-blocking: Failures are logged but don't block CLI startup
265
+ */
266
+ export async function checkAndPromptForUpdate() {
267
+ try {
268
+ // PERFORMANCE FIX: Rate limiting - only check once per interval (default: 24h)
269
+ if (!(await shouldCheckForUpdate())) {
270
+ return;
271
+ }
272
+ const result = await checkForCliUpdate();
273
+ // Record check timestamp even if no update (prevents repeated checks)
274
+ await recordUpdateCheck();
275
+ // No update available or check failed
276
+ if (!result || !result.hasUpdate) {
277
+ return;
278
+ }
279
+ const autoUpdate = isAutoUpdateEnabled();
280
+ if (autoUpdate) {
281
+ // CONCURRENCY FIX: Try to acquire lock before updating
282
+ const hasLock = await acquireUpdateLock();
283
+ if (!hasLock) {
284
+ logger.debug('Another process is updating CLI, skipping');
285
+ return;
286
+ }
287
+ try {
288
+ // Silent auto-update (default behavior)
289
+ logger.debug(`Auto-updating CLI: ${result.currentVersion} → ${result.latestVersion}`);
290
+ await updateCli(result.latestVersion, true);
291
+ // Don't exit - let CLI continue with updated version on next run
292
+ }
293
+ finally {
294
+ await releaseUpdateLock();
295
+ }
296
+ return;
297
+ }
298
+ // Prompt mode (CODEMIE_AUTO_UPDATE=false)
299
+ const shouldUpdate = await promptForCliUpdate(result);
300
+ if (!shouldUpdate) {
301
+ console.log(chalk.dim(' Skipping update. You can update later with:'));
302
+ console.log(chalk.white(` codemie self-update`));
303
+ console.log();
304
+ console.log(chalk.dim(' 💡 To enable auto-update: export CODEMIE_AUTO_UPDATE=true'));
305
+ console.log();
306
+ return;
307
+ }
308
+ // CONCURRENCY FIX: Try to acquire lock before updating
309
+ const hasLock = await acquireUpdateLock();
310
+ if (!hasLock) {
311
+ console.log();
312
+ console.log(chalk.yellow('⚠ Another process is updating CLI. Please wait and try again.'));
313
+ console.log();
314
+ return;
315
+ }
316
+ try {
317
+ // Perform update (verbose)
318
+ await updateCli(result.latestVersion, false);
319
+ // Exit after update so user can run the new version
320
+ process.exit(0);
321
+ }
322
+ finally {
323
+ await releaseUpdateLock();
324
+ }
325
+ }
326
+ catch (error) {
327
+ // Clean up lock on error
328
+ await releaseUpdateLock();
329
+ // Log error with context for troubleshooting
330
+ logger.error('CLI update check/installation failed', {
331
+ error: error instanceof Error ? error.message : String(error),
332
+ stack: error instanceof Error ? error.stack : undefined,
333
+ autoUpdate: isAutoUpdateEnabled()
334
+ });
335
+ // Don't block CLI startup if update check/install fails
336
+ logger.debug('CLI update check failed (non-blocking):', error);
337
+ }
338
+ }
339
+ //# sourceMappingURL=cli-updater.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-updater.js","sourceRoot":"","sources":["../../src/utils/cli-updater.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;AAE3C,iFAAiF;AACjF,MAAM,qBAAqB,GAAG,QAAQ,CACpC,OAAO,CAAC,GAAG,CAAC,6BAA6B,IAAI,UAAU,EACvD,EAAE,CACH,CAAC;AACF,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,oBAAoB,CAAC,CAAC;AAC1E,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,cAAc,CAAC,CAAC;AAErE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,IAAI,CAAC;QACH,yDAAyD;QACzD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7D,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;QAEpE,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAExC,OAAO,WAAW,CAAC,OAAO,IAAI,IAAI,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,oBAAoB;IACjC,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,MAAM,WAAW,GAAG,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,qBAAqB,CAAC;QAC9D,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,CAAC,KAAK,CAAC,uCAAuC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC;QAChH,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,+CAA+C;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB;IAC9B,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;QACpE,MAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,iBAAiB;IAC9B,IAAI,CAAC;QACH,gEAAgE;QAChE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;QACjD,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,iDAAiD;QACjD,MAAM,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;QAC5D,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB;IAC9B,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,6CAA6C;QAC7C,MAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IAEjD,mDAAmD;IACnD,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;QACnE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mBAAmB;IACnB,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IACjD,OAAO,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,KAAK,CAAC;AAC7E,CAAC;AAcD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,MAAM,oBAAoB,EAAE,CAAC;QACpD,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;YACxD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,kCAAkC;QAClC,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC,EAAE,CAAC;YAC5C,MAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;YAChF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,mCAAmC;QACnC,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAClF,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAC5D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,mEAAmE;QACnE,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,EAAE,CAAC;YAC3C,MAAM,CAAC,KAAK,CAAC,8EAA8E,EAAE;gBAC3F,OAAO,EAAE,aAAa;gBACtB,MAAM,EAAE,KAAK;aACd,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,SAAS,GAAG,eAAe,CAAC,cAAc,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;QAErE,OAAO;YACL,cAAc;YACd,aAAa;YACb,SAAS;SACV,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAA4B;IACnE,8CAA8C;IAC9C,qEAAqE;IACrE,MAAM,YAAY,GAAG,EAAE,CAAC;IAExB,2FAA2F;IAC3F,MAAM,gBAAgB,GAAG,EAAE,CAAC,CAAC,+BAA+B;IAC5D,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,gBAAgB,CAAC,CAAC,CAAC;IAE9E,0CAA0C;IAC1C,MAAM,WAAW,GAAG,YAAY,MAAM,CAAC,cAAc,EAAE,CAAC;IACxD,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IAElF,MAAM,UAAU,GAAG,YAAY,MAAM,CAAC,aAAa,EAAE,CAAC;IACtD,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAEhF,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,iDAAiD,CAAC,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,GAAG,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACpH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,iDAAiD,CAAC,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,GAAG,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACpF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,iDAAiD,CAAC,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAA4B;QACxE;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,+BAA+B;YACxC,OAAO,EAAE,IAAI;SACd;KACF,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,aAAqB,EAAE,MAAM,GAAG,KAAK;IACnE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8BAA8B,aAAa,KAAK,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,CAAC;QACH,qEAAqE;QACrE,MAAM,aAAa,CAAC,gBAAgB,EAAE;YACpC,OAAO,EAAE,aAAa;YACtB,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,KAAK,CAAC,8BAA8B;SAC9C,CAAC,CAAC;QAEH,IAAI,MAAM,EAAE,CAAC;YACX,iCAAiC;YACjC,MAAM,CAAC,KAAK,CAAC,+BAA+B,aAAa,EAAE,CAAC,CAAC;QAC/D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,aAAa,EAAE,CAAC,CAAC,CAAC;YAC/D,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC,CAAC;YAChF,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,0BAA0B;QAC1B,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE;YAChC,aAAa,EAAE,aAAa;YAC5B,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;YAC7D,MAAM;SACP,CAAC,CAAC;QAEH,6CAA6C;QAC7C,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,gBAAgB,IAAI,aAAa,EAAE,CAAC,CAAC,CAAC;QACpF,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC,CAAC;QACxF,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB;IAC3C,IAAI,CAAC;QACH,+EAA+E;QAC/E,IAAI,CAAC,CAAC,MAAM,oBAAoB,EAAE,CAAC,EAAE,CAAC;YACpC,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,iBAAiB,EAAE,CAAC;QAEzC,sEAAsE;QACtE,MAAM,iBAAiB,EAAE,CAAC;QAE1B,sCAAsC;QACtC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACjC,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,mBAAmB,EAAE,CAAC;QAEzC,IAAI,UAAU,EAAE,CAAC;YACf,uDAAuD;YACvD,MAAM,OAAO,GAAG,MAAM,iBAAiB,EAAE,CAAC;YAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;gBAC1D,OAAO;YACT,CAAC;YAED,IAAI,CAAC;gBACH,wCAAwC;gBACxC,MAAM,CAAC,KAAK,CAAC,sBAAsB,MAAM,CAAC,cAAc,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;gBACtF,MAAM,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;gBAC5C,iEAAiE;YACnE,CAAC;oBAAS,CAAC;gBACT,MAAM,iBAAiB,EAAE,CAAC;YAC5B,CAAC;YACD,OAAO;QACT,CAAC;QAED,0CAA0C;QAC1C,MAAM,YAAY,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAEtD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC,CAAC;YACtF,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QAED,uDAAuD;QACvD,MAAM,OAAO,GAAG,MAAM,iBAAiB,EAAE,CAAC;QAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,+DAA+D,CAAC,CAAC,CAAC;YAC3F,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,2BAA2B;YAC3B,MAAM,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;YAE7C,oDAAoD;YACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;gBAAS,CAAC;YACT,MAAM,iBAAiB,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,yBAAyB;QACzB,MAAM,iBAAiB,EAAE,CAAC;QAE1B,6CAA6C;QAC7C,MAAM,CAAC,KAAK,CAAC,sCAAsC,EAAE;YACnD,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;YAC7D,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YACvD,UAAU,EAAE,mBAAmB,EAAE;SAClC,CAAC,CAAC;QAEH,wDAAwD;QACxD,MAAM,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;IACjE,CAAC;AACH,CAAC"}
@@ -1,4 +1,4 @@
1
- import { CodeMieConfigOptions, ProviderProfile, MultiProviderConfig, CodeMieIntegrationInfo, ConfigWithSource } from '../env/types.js';
1
+ import { CodeMieConfigOptions, ProviderProfile, MultiProviderConfig, CodeMieIntegrationInfo, ConfigWithSource, CodemieAssistant } from '../env/types.js';
2
2
  export type { CodeMieConfigOptions, CodeMieIntegrationInfo, ConfigWithSource };
3
3
  /**
4
4
  * Unified configuration loader with priority system:
@@ -156,4 +156,9 @@ export declare class ConfigLoader {
156
156
  * Returns a persistent UUID that uniquely identifies this CodeMie installation
157
157
  */
158
158
  export declare function getInstallationId(): Promise<string>;
159
+ /**
160
+ * Load registered CodeMie assistants from configuration
161
+ * @returns Array of registered assistants, or empty array if none configured
162
+ */
163
+ export declare function loadRegisteredAssistants(): Promise<CodemieAssistant[]>;
159
164
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
@@ -682,4 +682,17 @@ export async function getInstallationId() {
682
682
  return id;
683
683
  }
684
684
  }
685
+ /**
686
+ * Load registered CodeMie assistants from configuration
687
+ * @returns Array of registered assistants, or empty array if none configured
688
+ */
689
+ export async function loadRegisteredAssistants() {
690
+ try {
691
+ const config = await ConfigLoader.load();
692
+ return config.codemieAssistants || [];
693
+ }
694
+ catch {
695
+ return [];
696
+ }
697
+ }
685
698
  //# sourceMappingURL=config.js.map