@codemieai/code 0.0.36 → 0.0.37

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 (203) hide show
  1. package/README.md +33 -0
  2. package/dist/agents/codemie-code/tools/assistant-invocation.d.ts.map +1 -1
  3. package/dist/agents/codemie-code/tools/assistant-invocation.js +2 -2
  4. package/dist/agents/codemie-code/tools/assistant-invocation.js.map +1 -1
  5. package/dist/agents/core/extension/BaseExtensionInstaller.d.ts.map +1 -1
  6. package/dist/agents/core/extension/BaseExtensionInstaller.js +11 -4
  7. package/dist/agents/core/extension/BaseExtensionInstaller.js.map +1 -1
  8. package/dist/agents/core/session/BaseProcessor.d.ts +22 -1
  9. package/dist/agents/core/session/BaseProcessor.d.ts.map +1 -1
  10. package/dist/agents/plugins/claude/claude-acp.plugin.d.ts +5 -0
  11. package/dist/agents/plugins/claude/claude-acp.plugin.d.ts.map +1 -1
  12. package/dist/agents/plugins/claude/claude-acp.plugin.js +12 -2
  13. package/dist/agents/plugins/claude/claude-acp.plugin.js.map +1 -1
  14. package/dist/agents/plugins/claude/claude.plugin.d.ts.map +1 -1
  15. package/dist/agents/plugins/claude/claude.plugin.js +4 -0
  16. package/dist/agents/plugins/claude/claude.plugin.js.map +1 -1
  17. package/dist/agents/plugins/claude/claude.session.d.ts +5 -0
  18. package/dist/agents/plugins/claude/claude.session.d.ts.map +1 -1
  19. package/dist/agents/plugins/claude/claude.session.js +101 -2
  20. package/dist/agents/plugins/claude/claude.session.js.map +1 -1
  21. package/dist/agents/plugins/claude/plugin/.claude-plugin/plugin.json +1 -1
  22. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.d.ts +0 -1
  23. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.d.ts.map +1 -1
  24. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js +13 -19
  25. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js.map +1 -1
  26. package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.d.ts.map +1 -1
  27. package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.js +29 -4
  28. package/dist/agents/plugins/claude/session/processors/claude.metrics-processor.js.map +1 -1
  29. package/dist/cli/commands/assistants/chat.js +9 -6
  30. package/dist/cli/commands/assistants/chat.js.map +1 -1
  31. package/dist/cli/commands/assistants/constants.d.ts +2 -6
  32. package/dist/cli/commands/assistants/constants.d.ts.map +1 -1
  33. package/dist/cli/commands/assistants/constants.js +2 -5
  34. package/dist/cli/commands/assistants/constants.js.map +1 -1
  35. package/dist/cli/commands/assistants/index.d.ts.map +1 -1
  36. package/dist/cli/commands/assistants/index.js +1 -11
  37. package/dist/cli/commands/assistants/index.js.map +1 -1
  38. package/dist/cli/commands/assistants/setup/configuration/actions.d.ts +30 -0
  39. package/dist/cli/commands/assistants/setup/configuration/actions.d.ts.map +1 -0
  40. package/dist/cli/commands/assistants/setup/configuration/actions.js +63 -0
  41. package/dist/cli/commands/assistants/setup/configuration/actions.js.map +1 -0
  42. package/dist/cli/commands/assistants/setup/configuration/constants.d.ts +49 -0
  43. package/dist/cli/commands/assistants/setup/configuration/constants.d.ts.map +1 -0
  44. package/dist/cli/commands/assistants/setup/configuration/constants.js +56 -0
  45. package/dist/cli/commands/assistants/setup/configuration/constants.js.map +1 -0
  46. package/dist/cli/commands/assistants/setup/configuration/index.d.ts +9 -0
  47. package/dist/cli/commands/assistants/setup/configuration/index.d.ts.map +1 -0
  48. package/dist/cli/commands/assistants/setup/configuration/index.js +8 -0
  49. package/dist/cli/commands/assistants/setup/configuration/index.js.map +1 -0
  50. package/dist/cli/commands/assistants/setup/configuration/selection.d.ts +12 -0
  51. package/dist/cli/commands/assistants/setup/configuration/selection.d.ts.map +1 -0
  52. package/dist/cli/commands/assistants/setup/configuration/selection.js +94 -0
  53. package/dist/cli/commands/assistants/setup/configuration/selection.js.map +1 -0
  54. package/dist/cli/commands/assistants/setup/configuration/types.d.ts +22 -0
  55. package/dist/cli/commands/assistants/setup/configuration/types.d.ts.map +1 -0
  56. package/dist/cli/commands/assistants/setup/configuration/types.js +2 -0
  57. package/dist/cli/commands/assistants/setup/configuration/types.js.map +1 -0
  58. package/dist/cli/commands/assistants/setup/configuration/ui.d.ts +9 -0
  59. package/dist/cli/commands/assistants/setup/configuration/ui.d.ts.map +1 -0
  60. package/dist/cli/commands/assistants/setup/configuration/ui.js +86 -0
  61. package/dist/cli/commands/assistants/setup/configuration/ui.js.map +1 -0
  62. package/dist/cli/commands/assistants/setup/constants.d.ts +26 -0
  63. package/dist/cli/commands/assistants/setup/constants.d.ts.map +1 -0
  64. package/dist/cli/commands/assistants/setup/constants.js +21 -0
  65. package/dist/cli/commands/assistants/setup/constants.js.map +1 -0
  66. package/dist/cli/commands/assistants/setup/data.d.ts +30 -0
  67. package/dist/cli/commands/assistants/setup/data.d.ts.map +1 -0
  68. package/dist/cli/commands/assistants/setup/data.js +125 -0
  69. package/dist/cli/commands/assistants/setup/data.js.map +1 -0
  70. package/dist/cli/commands/assistants/setup/generators/claude-agent-generator.d.ts.map +1 -0
  71. package/dist/cli/commands/assistants/{generators → setup/generators}/claude-agent-generator.js +6 -2
  72. package/dist/cli/commands/assistants/setup/generators/claude-agent-generator.js.map +1 -0
  73. package/dist/cli/commands/assistants/setup/generators/claude-skill-generator.d.ts +12 -0
  74. package/dist/cli/commands/assistants/setup/generators/claude-skill-generator.d.ts.map +1 -0
  75. package/dist/cli/commands/assistants/setup/generators/claude-skill-generator.js +94 -0
  76. package/dist/cli/commands/assistants/setup/generators/claude-skill-generator.js.map +1 -0
  77. package/dist/cli/commands/assistants/setup/helpers.d.ts +27 -0
  78. package/dist/cli/commands/assistants/setup/helpers.d.ts.map +1 -0
  79. package/dist/cli/commands/assistants/setup/helpers.js +94 -0
  80. package/dist/cli/commands/assistants/setup/helpers.js.map +1 -0
  81. package/dist/cli/commands/assistants/setup/index.d.ts +17 -0
  82. package/dist/cli/commands/assistants/setup/index.d.ts.map +1 -0
  83. package/dist/cli/commands/assistants/setup/index.js +193 -0
  84. package/dist/cli/commands/assistants/setup/index.js.map +1 -0
  85. package/dist/cli/commands/assistants/setup/manualConfiguration/actions.d.ts +47 -0
  86. package/dist/cli/commands/assistants/setup/manualConfiguration/actions.d.ts.map +1 -0
  87. package/dist/cli/commands/assistants/setup/manualConfiguration/actions.js +140 -0
  88. package/dist/cli/commands/assistants/setup/manualConfiguration/actions.js.map +1 -0
  89. package/dist/cli/commands/assistants/setup/manualConfiguration/constants.d.ts +56 -0
  90. package/dist/cli/commands/assistants/setup/manualConfiguration/constants.d.ts.map +1 -0
  91. package/dist/cli/commands/assistants/setup/manualConfiguration/constants.js +61 -0
  92. package/dist/cli/commands/assistants/setup/manualConfiguration/constants.js.map +1 -0
  93. package/dist/cli/commands/assistants/setup/manualConfiguration/index.d.ts +12 -0
  94. package/dist/cli/commands/assistants/setup/manualConfiguration/index.d.ts.map +1 -0
  95. package/dist/cli/commands/assistants/setup/manualConfiguration/index.js +48 -0
  96. package/dist/cli/commands/assistants/setup/manualConfiguration/index.js.map +1 -0
  97. package/dist/cli/commands/assistants/setup/manualConfiguration/interactive-prompt.d.ts +6 -0
  98. package/dist/cli/commands/assistants/setup/manualConfiguration/interactive-prompt.d.ts.map +1 -0
  99. package/dist/cli/commands/assistants/setup/manualConfiguration/interactive-prompt.js +90 -0
  100. package/dist/cli/commands/assistants/setup/manualConfiguration/interactive-prompt.js.map +1 -0
  101. package/dist/cli/commands/assistants/setup/manualConfiguration/types.d.ts +37 -0
  102. package/dist/cli/commands/assistants/setup/manualConfiguration/types.d.ts.map +1 -0
  103. package/dist/cli/commands/assistants/setup/manualConfiguration/types.js +2 -0
  104. package/dist/cli/commands/assistants/setup/manualConfiguration/types.js.map +1 -0
  105. package/dist/cli/commands/assistants/setup/manualConfiguration/ui.d.ts +6 -0
  106. package/dist/cli/commands/assistants/setup/manualConfiguration/ui.d.ts.map +1 -0
  107. package/dist/cli/commands/assistants/setup/manualConfiguration/ui.js +103 -0
  108. package/dist/cli/commands/assistants/setup/manualConfiguration/ui.js.map +1 -0
  109. package/dist/cli/commands/assistants/setup/selection/actions.d.ts +31 -0
  110. package/dist/cli/commands/assistants/setup/selection/actions.d.ts.map +1 -0
  111. package/dist/cli/commands/assistants/setup/selection/actions.js +321 -0
  112. package/dist/cli/commands/assistants/setup/selection/actions.js.map +1 -0
  113. package/dist/cli/commands/assistants/setup/selection/constants.d.ts +79 -0
  114. package/dist/cli/commands/assistants/setup/selection/constants.d.ts.map +1 -0
  115. package/dist/cli/commands/assistants/setup/selection/constants.js +90 -0
  116. package/dist/cli/commands/assistants/setup/selection/constants.js.map +1 -0
  117. package/dist/cli/commands/assistants/setup/selection/index.d.ts +25 -0
  118. package/dist/cli/commands/assistants/setup/selection/index.d.ts.map +1 -0
  119. package/dist/cli/commands/assistants/setup/selection/index.js +127 -0
  120. package/dist/cli/commands/assistants/setup/selection/index.js.map +1 -0
  121. package/dist/cli/commands/assistants/setup/selection/interactive-prompt.d.ts +20 -0
  122. package/dist/cli/commands/assistants/setup/selection/interactive-prompt.d.ts.map +1 -0
  123. package/dist/cli/commands/assistants/setup/selection/interactive-prompt.js +328 -0
  124. package/dist/cli/commands/assistants/setup/selection/interactive-prompt.js.map +1 -0
  125. package/dist/cli/commands/assistants/setup/selection/types.d.ts +27 -0
  126. package/dist/cli/commands/assistants/setup/selection/types.d.ts.map +1 -0
  127. package/dist/cli/commands/assistants/setup/selection/types.js +2 -0
  128. package/dist/cli/commands/assistants/setup/selection/types.js.map +1 -0
  129. package/dist/cli/commands/assistants/setup/selection/ui.d.ts +11 -0
  130. package/dist/cli/commands/assistants/setup/selection/ui.d.ts.map +1 -0
  131. package/dist/cli/commands/assistants/setup/selection/ui.js +189 -0
  132. package/dist/cli/commands/assistants/setup/selection/ui.js.map +1 -0
  133. package/dist/cli/commands/assistants/setup/selection/utils.d.ts +36 -0
  134. package/dist/cli/commands/assistants/setup/selection/utils.d.ts.map +1 -0
  135. package/dist/cli/commands/assistants/setup/selection/utils.js +55 -0
  136. package/dist/cli/commands/assistants/setup/selection/utils.js.map +1 -0
  137. package/dist/cli/commands/assistants/setup/summary/index.d.ts +16 -0
  138. package/dist/cli/commands/assistants/setup/summary/index.d.ts.map +1 -0
  139. package/dist/cli/commands/assistants/setup/summary/index.js +48 -0
  140. package/dist/cli/commands/assistants/setup/summary/index.js.map +1 -0
  141. package/dist/cli/commands/log/cleaner.d.ts +33 -0
  142. package/dist/cli/commands/log/cleaner.d.ts.map +1 -0
  143. package/dist/cli/commands/log/cleaner.js +214 -0
  144. package/dist/cli/commands/log/cleaner.js.map +1 -0
  145. package/dist/cli/commands/log/filter.d.ts +55 -0
  146. package/dist/cli/commands/log/filter.d.ts.map +1 -0
  147. package/dist/cli/commands/log/filter.js +128 -0
  148. package/dist/cli/commands/log/filter.js.map +1 -0
  149. package/dist/cli/commands/log/follower.d.ts +36 -0
  150. package/dist/cli/commands/log/follower.d.ts.map +1 -0
  151. package/dist/cli/commands/log/follower.js +151 -0
  152. package/dist/cli/commands/log/follower.js.map +1 -0
  153. package/dist/cli/commands/log/formatter.d.ts +76 -0
  154. package/dist/cli/commands/log/formatter.d.ts.map +1 -0
  155. package/dist/cli/commands/log/formatter.js +261 -0
  156. package/dist/cli/commands/log/formatter.js.map +1 -0
  157. package/dist/cli/commands/log/index.d.ts +6 -0
  158. package/dist/cli/commands/log/index.d.ts.map +1 -0
  159. package/dist/cli/commands/log/index.js +398 -0
  160. package/dist/cli/commands/log/index.js.map +1 -0
  161. package/dist/cli/commands/log/parser.d.ts +20 -0
  162. package/dist/cli/commands/log/parser.d.ts.map +1 -0
  163. package/dist/cli/commands/log/parser.js +111 -0
  164. package/dist/cli/commands/log/parser.js.map +1 -0
  165. package/dist/cli/commands/log/reader.d.ts +61 -0
  166. package/dist/cli/commands/log/reader.d.ts.map +1 -0
  167. package/dist/cli/commands/log/reader.js +327 -0
  168. package/dist/cli/commands/log/reader.js.map +1 -0
  169. package/dist/cli/commands/log/types.d.ts +100 -0
  170. package/dist/cli/commands/log/types.d.ts.map +1 -0
  171. package/dist/cli/commands/log/types.js +5 -0
  172. package/dist/cli/commands/log/types.js.map +1 -0
  173. package/dist/cli/commands/setup.d.ts.map +1 -1
  174. package/dist/cli/commands/setup.js +2 -0
  175. package/dist/cli/commands/setup.js.map +1 -1
  176. package/dist/cli/index.js +2 -0
  177. package/dist/cli/index.js.map +1 -1
  178. package/dist/env/types.d.ts +1 -0
  179. package/dist/env/types.d.ts.map +1 -1
  180. package/dist/env/types.js.map +1 -1
  181. package/dist/providers/plugins/sso/session/SessionSyncer.d.ts +5 -0
  182. package/dist/providers/plugins/sso/session/SessionSyncer.d.ts.map +1 -1
  183. package/dist/providers/plugins/sso/session/SessionSyncer.js +102 -3
  184. package/dist/providers/plugins/sso/session/SessionSyncer.js.map +1 -1
  185. package/dist/providers/plugins/sso/session/processors/conversations/conversation-sync-processor.d.ts +0 -1
  186. package/dist/providers/plugins/sso/session/processors/conversations/conversation-sync-processor.d.ts.map +1 -1
  187. package/dist/providers/plugins/sso/session/processors/conversations/conversation-sync-processor.js +25 -48
  188. package/dist/providers/plugins/sso/session/processors/conversations/conversation-sync-processor.js.map +1 -1
  189. package/dist/providers/plugins/sso/session/processors/metrics/metrics-sync-processor.d.ts.map +1 -1
  190. package/dist/providers/plugins/sso/session/processors/metrics/metrics-sync-processor.js +8 -34
  191. package/dist/providers/plugins/sso/session/processors/metrics/metrics-sync-processor.js.map +1 -1
  192. package/dist/utils/native-installer.d.ts +1 -0
  193. package/dist/utils/native-installer.d.ts.map +1 -1
  194. package/dist/utils/native-installer.js +21 -7
  195. package/dist/utils/native-installer.js.map +1 -1
  196. package/package.json +2 -2
  197. package/dist/cli/commands/assistants/generators/claude-agent-generator.d.ts.map +0 -1
  198. package/dist/cli/commands/assistants/generators/claude-agent-generator.js.map +0 -1
  199. package/dist/cli/commands/assistants/list.d.ts +0 -11
  200. package/dist/cli/commands/assistants/list.d.ts.map +0 -1
  201. package/dist/cli/commands/assistants/list.js +0 -323
  202. package/dist/cli/commands/assistants/list.js.map +0 -1
  203. /package/dist/cli/commands/assistants/{generators → setup/generators}/claude-agent-generator.d.ts +0 -0
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Data Layer
3
+ *
4
+ * Handles all data fetching for assistant selection
5
+ */
6
+ import { PANEL_ID, API_SCOPE, CONFIG } from './selection/constants.js';
7
+ import { logger } from '../../../../utils/logger.js';
8
+ export function createDataFetcher(deps) {
9
+ async function fetchAssistants(params) {
10
+ const { scope, searchQuery = '', page = 0 } = params;
11
+ logger.debug('[AssistantSelection] Fetching assistants', { scope, searchQuery, page });
12
+ if (scope === PANEL_ID.REGISTERED) {
13
+ const allData = fetchRegisteredFromConfig(searchQuery);
14
+ const total = allData.length;
15
+ const pages = Math.ceil(total / CONFIG.ITEMS_PER_PAGE);
16
+ const startIndex = page * CONFIG.ITEMS_PER_PAGE;
17
+ const endIndex = startIndex + CONFIG.ITEMS_PER_PAGE;
18
+ const data = allData.slice(startIndex, endIndex);
19
+ logger.debug('[AssistantSelection] Fetched registered assistants', { count: data.length, total, pages });
20
+ return { data, total, pages };
21
+ }
22
+ try {
23
+ const filters = {
24
+ search: searchQuery.trim(),
25
+ };
26
+ if (scope === PANEL_ID.MARKETPLACE) {
27
+ filters.marketplace = null;
28
+ }
29
+ const apiParams = {
30
+ page,
31
+ per_page: CONFIG.ITEMS_PER_PAGE,
32
+ minimal_response: false,
33
+ ...(scope === PANEL_ID.PROJECT && { scope: API_SCOPE.VISIBLE_TO_USER }),
34
+ ...(scope === PANEL_ID.MARKETPLACE && { scope: API_SCOPE.MARKETPLACE }),
35
+ filters
36
+ };
37
+ logger.debug('[AssistantSelection] Full API request params', {
38
+ scope,
39
+ apiParams: JSON.stringify(apiParams, null, 2)
40
+ });
41
+ const response = await deps.client.assistants.listPaginated(apiParams);
42
+ logger.debug('[AssistantSelection] Full raw API response', {
43
+ scope,
44
+ response: JSON.stringify(response, null, 2)
45
+ });
46
+ logger.debug('[AssistantSelection] Processed response', {
47
+ dataCount: response.data.length,
48
+ paginationTotal: response.pagination.total,
49
+ paginationPages: response.pagination.pages,
50
+ scope
51
+ });
52
+ return {
53
+ data: response.data,
54
+ total: response.pagination.total,
55
+ pages: response.pagination.pages
56
+ };
57
+ }
58
+ catch (error) {
59
+ throw error instanceof Error ? error : new Error(`Failed to fetch ${scope} assistants: ${error}`);
60
+ }
61
+ }
62
+ function fetchRegisteredFromConfig(searchQuery) {
63
+ const registered = deps.config.codemieAssistants || [];
64
+ let assistants = registered.map(asst => ({
65
+ id: asst.id,
66
+ name: asst.name,
67
+ description: asst.description || '',
68
+ slug: asst.slug,
69
+ project: asst.project || ''
70
+ }));
71
+ if (searchQuery.trim()) {
72
+ const lowerQuery = searchQuery.toLowerCase();
73
+ assistants = assistants.filter(assistant => {
74
+ const project = ('project' in assistant ? assistant.project : '');
75
+ const slug = ('slug' in assistant ? assistant.slug : '');
76
+ return (assistant.name.toLowerCase().includes(lowerQuery) ||
77
+ assistant.description?.toLowerCase().includes(lowerQuery) ||
78
+ project.toLowerCase().includes(lowerQuery) ||
79
+ slug.toLowerCase().includes(lowerQuery));
80
+ });
81
+ }
82
+ return assistants;
83
+ }
84
+ async function fetchAssistantsByIds(selectedIds, existingAssistants) {
85
+ const existingMap = new Map(existingAssistants.map(a => [a.id, a]));
86
+ const idsToFetch = [];
87
+ // Identify which IDs need to be fetched
88
+ for (const id of selectedIds) {
89
+ if (!existingMap.has(id)) {
90
+ idsToFetch.push(id);
91
+ }
92
+ }
93
+ // Fetch missing assistants
94
+ if (idsToFetch.length > 0) {
95
+ logger.debug('[AssistantSetup] Fetching missing assistant details', {
96
+ count: idsToFetch.length,
97
+ ids: idsToFetch
98
+ });
99
+ for (const id of idsToFetch) {
100
+ try {
101
+ const assistant = await deps.client.assistants.get(id);
102
+ existingMap.set(id, assistant);
103
+ logger.debug('[AssistantSetup] Fetched assistant', { id, name: assistant.name });
104
+ }
105
+ catch (error) {
106
+ logger.error('[AssistantSetup] Failed to fetch assistant', { id, error });
107
+ }
108
+ }
109
+ }
110
+ // Build result in requested order
111
+ const result = [];
112
+ for (const id of selectedIds) {
113
+ const assistant = existingMap.get(id);
114
+ if (assistant) {
115
+ result.push(assistant);
116
+ }
117
+ }
118
+ return result;
119
+ }
120
+ return {
121
+ fetchAssistants,
122
+ fetchAssistantsByIds
123
+ };
124
+ }
125
+ //# sourceMappingURL=data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.js","sourceRoot":"","sources":["../../../../../src/cli/commands/assistants/setup/data.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-agent-generator.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/commands/assistants/setup/generators/claude-agent-generator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAezE;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAmCxE;AAWD;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBhF;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAe1E"}
@@ -8,16 +8,20 @@ import { promises as fs } from 'node:fs';
8
8
  import path from 'node:path';
9
9
  import os from 'node:os';
10
10
  import dedent from 'dedent';
11
- import { logger } from '../../../../utils/logger.js';
11
+ import { logger } from '../../../../../utils/logger.js';
12
12
  /**
13
13
  * Create Claude subagent metadata for frontmatter
14
14
  */
15
15
  export function createClaudeSubagentMetadata(assistant) {
16
16
  const description = assistant.description || `Interact with ${assistant.name}`;
17
+ const sanitizedDescription = description
18
+ .replace(/\n/g, ' ')
19
+ .replace(/"/g, '\\"')
20
+ .trim();
17
21
  return dedent(`
18
22
  ---
19
23
  name: ${assistant.slug}
20
- description: ${description}
24
+ description: "${sanitizedDescription}"
21
25
  tools: Read, Bash
22
26
  model: inherit
23
27
  ---
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-agent-generator.js","sourceRoot":"","sources":["../../../../../../src/cli/commands/assistants/setup/generators/claude-agent-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { Assistant } from 'codemie-sdk';
2
+ /**
3
+ * Register an assistant as a Claude Code skill
4
+ * Creates: ~/.claude/skills/{slug}/SKILL.md
5
+ */
6
+ export declare function registerClaudeSkill(assistant: Assistant): Promise<void>;
7
+ /**
8
+ * Unregister a Claude Code skill
9
+ * Removes: ~/.claude/skills/{slug}/
10
+ */
11
+ export declare function unregisterClaudeSkill(slug: string): Promise<void>;
12
+ //# sourceMappingURL=claude-skill-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-skill-generator.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/commands/assistants/setup/generators/claude-skill-generator.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAoD7C;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB7E;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBvE"}
@@ -0,0 +1,94 @@
1
+ import fs from 'fs/promises';
2
+ import path from 'path';
3
+ import os from 'os';
4
+ import dedent from 'dedent';
5
+ import { logger } from '../../../../../utils/logger.js';
6
+ /**
7
+ * Get the skills directory path for Claude Code
8
+ */
9
+ function getSkillsDir() {
10
+ const homeDir = os.homedir();
11
+ return path.join(homeDir, '.claude', 'skills');
12
+ }
13
+ /**
14
+ * Create YAML frontmatter for Claude Code skill file
15
+ */
16
+ function createSkillMetadata(assistant) {
17
+ const slug = assistant.slug || assistant.id.toLowerCase().replace(/[^a-z0-9]+/g, '-');
18
+ return dedent `
19
+ ---
20
+ name: ${slug}
21
+ description: ${assistant.description || assistant.name}
22
+ ---
23
+ `;
24
+ }
25
+ /**
26
+ * Create full SKILL.md content for Claude Code
27
+ */
28
+ function createSkillContent(assistant) {
29
+ const metadata = createSkillMetadata(assistant);
30
+ const name = assistant.name;
31
+ const description = assistant.description || assistant.name;
32
+ const assistantId = assistant.id;
33
+ return dedent `
34
+ ${metadata}
35
+
36
+ # ${name}
37
+
38
+ ${description}
39
+
40
+ ## Instructions
41
+
42
+ Send the user's message to the ${name} assistant:
43
+
44
+ \`\`\`bash
45
+ codemie assistants chat "${assistantId}" "$ARGUMENTS"
46
+ \`\`\`
47
+
48
+ The assistant will process the request and return a response.
49
+ `;
50
+ }
51
+ /**
52
+ * Register an assistant as a Claude Code skill
53
+ * Creates: ~/.claude/skills/{slug}/SKILL.md
54
+ */
55
+ export async function registerClaudeSkill(assistant) {
56
+ const slug = assistant.slug || assistant.id.toLowerCase().replace(/[^a-z0-9]+/g, '-');
57
+ const skillsDir = getSkillsDir();
58
+ const skillDir = path.join(skillsDir, slug);
59
+ const skillFile = path.join(skillDir, 'SKILL.md');
60
+ try {
61
+ await fs.mkdir(skillDir, { recursive: true });
62
+ const content = createSkillContent(assistant);
63
+ await fs.writeFile(skillFile, content, 'utf-8');
64
+ logger.debug(`Registered Claude skill: ${skillFile}`);
65
+ }
66
+ catch (error) {
67
+ logger.error(`Failed to register Claude skill for ${assistant.name}`, { error });
68
+ throw error;
69
+ }
70
+ }
71
+ /**
72
+ * Unregister a Claude Code skill
73
+ * Removes: ~/.claude/skills/{slug}/
74
+ */
75
+ export async function unregisterClaudeSkill(slug) {
76
+ const skillsDir = getSkillsDir();
77
+ const skillDir = path.join(skillsDir, slug);
78
+ try {
79
+ try {
80
+ await fs.access(skillDir);
81
+ }
82
+ catch {
83
+ logger.debug(`Skill directory not found: ${skillDir}`);
84
+ return;
85
+ }
86
+ await fs.rm(skillDir, { recursive: true, force: true });
87
+ logger.debug(`Unregistered Claude skill: ${skillDir}`);
88
+ }
89
+ catch (error) {
90
+ logger.error(`Failed to unregister Claude skill ${slug}`, { error });
91
+ throw error;
92
+ }
93
+ }
94
+ //# sourceMappingURL=claude-skill-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-skill-generator.js","sourceRoot":"","sources":["../../../../../../src/cli/commands/assistants/setup/generators/claude-skill-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Registration Operations Module
3
+ *
4
+ * Handles registration/unregistration business logic
5
+ */
6
+ import type { Assistant, AssistantBase } from 'codemie-sdk';
7
+ import type { CodemieAssistant } from '../../../../env/types.js';
8
+ import type { RegistrationMode } from '../../../../cli/commands/assistants/setup/manualConfiguration/types.js';
9
+ export interface RegistrationChanges {
10
+ toRegister: Assistant[];
11
+ toUnregister: CodemieAssistant[];
12
+ }
13
+ /**
14
+ * Determine which assistants to register and unregister
15
+ */
16
+ export declare function determineChanges(selectedIds: string[], allAssistants: (Assistant | AssistantBase)[], registeredAssistants: CodemieAssistant[]): RegistrationChanges;
17
+ /**
18
+ * Unregister an assistant
19
+ * Removes both Claude agent and skill files
20
+ */
21
+ export declare function unregisterAssistant(assistant: CodemieAssistant): Promise<void>;
22
+ /**
23
+ * Register an assistant with specified registration mode
24
+ * @param mode - 'agent' (Claude agent only) or 'skill' (Claude skill only)
25
+ */
26
+ export declare function registerAssistant(assistant: Assistant, mode?: RegistrationMode): Promise<CodemieAssistant | null>;
27
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/assistants/setup/helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAKvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8DAA8D,CAAC;AAGrG,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,YAAY,EAAE,gBAAgB,EAAE,CAAC;CAClC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,EAAE,EACrB,aAAa,EAAE,CAAC,SAAS,GAAG,aAAa,CAAC,EAAE,EAC5C,oBAAoB,EAAE,gBAAgB,EAAE,GACvC,mBAAmB,CAWrB;AAsCD;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAWpF;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,SAAS,EACpB,IAAI,GAAE,gBAA0C,GAC/C,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAoClC"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Registration Operations Module
3
+ *
4
+ * Handles registration/unregistration business logic
5
+ */
6
+ import chalk from 'chalk';
7
+ import ora from 'ora';
8
+ import { logger } from '../../../../utils/logger.js';
9
+ import { MESSAGES } from '../../../../cli/commands/assistants/constants.js';
10
+ import { registerClaudeSubagent, unregisterClaudeSubagent } from '../../../../cli/commands/assistants/setup/generators/claude-agent-generator.js';
11
+ import { registerClaudeSkill, unregisterClaudeSkill } from '../../../../cli/commands/assistants/setup/generators/claude-skill-generator.js';
12
+ import { REGISTRATION_MODE } from '../../../../cli/commands/assistants/setup/manualConfiguration/constants.js';
13
+ /**
14
+ * Determine which assistants to register and unregister
15
+ */
16
+ export function determineChanges(selectedIds, allAssistants, registeredAssistants) {
17
+ const selectedSet = new Set(selectedIds);
18
+ const registeredIds = new Set(registeredAssistants.map(a => a.id));
19
+ const toRegister = allAssistants.filter(a => selectedSet.has(a.id) && !registeredIds.has(a.id));
20
+ const toUnregister = registeredAssistants.filter(a => !selectedSet.has(a.id));
21
+ return { toRegister, toUnregister };
22
+ }
23
+ /**
24
+ * Execute assistant operation with spinner
25
+ */
26
+ async function executeWithSpinner(spinnerMessage, operation, successMessage, errorMessage, onError) {
27
+ const isVerbose = process.env.CODEMIE_DEBUG === 'true';
28
+ const spinner = ora(spinnerMessage).start();
29
+ try {
30
+ const result = await operation();
31
+ if (isVerbose) {
32
+ spinner.succeed(chalk.green(successMessage));
33
+ }
34
+ else {
35
+ spinner.clear();
36
+ spinner.stop();
37
+ }
38
+ return result;
39
+ }
40
+ catch (error) {
41
+ if (isVerbose) {
42
+ spinner.fail(chalk.red(errorMessage));
43
+ }
44
+ else {
45
+ spinner.clear();
46
+ spinner.stop();
47
+ }
48
+ if (onError) {
49
+ onError(error);
50
+ }
51
+ return null;
52
+ }
53
+ }
54
+ /**
55
+ * Unregister an assistant
56
+ * Removes both Claude agent and skill files
57
+ */
58
+ export async function unregisterAssistant(assistant) {
59
+ await executeWithSpinner(MESSAGES.SETUP.SPINNER_UNREGISTERING(chalk.bold(assistant.name)), async () => {
60
+ await unregisterClaudeSubagent(assistant.slug);
61
+ await unregisterClaudeSkill(assistant.slug);
62
+ }, MESSAGES.SETUP.SUCCESS_UNREGISTERED(chalk.bold(assistant.name), chalk.cyan(assistant.slug)), MESSAGES.SETUP.ERROR_UNREGISTER_FAILED(assistant.name), (error) => logger.error('Assistant removal failed', { error, assistantId: assistant.id }));
63
+ }
64
+ /**
65
+ * Register an assistant with specified registration mode
66
+ * @param mode - 'agent' (Claude agent only) or 'skill' (Claude skill only)
67
+ */
68
+ export async function registerAssistant(assistant, mode = REGISTRATION_MODE.AGENT) {
69
+ const modeLabel = mode === REGISTRATION_MODE.SKILL ? 'skill' : 'agent';
70
+ const result = await executeWithSpinner(MESSAGES.SETUP.SPINNER_REGISTERING(chalk.bold(assistant.name)), async () => {
71
+ switch (mode) {
72
+ case REGISTRATION_MODE.AGENT:
73
+ await registerClaudeSubagent(assistant);
74
+ break;
75
+ case REGISTRATION_MODE.SKILL:
76
+ await registerClaudeSkill(assistant);
77
+ break;
78
+ }
79
+ return assistant.slug;
80
+ }, MESSAGES.SETUP.SUCCESS_REGISTERED(chalk.bold(assistant.name), chalk.cyan(`@${assistant.slug}`) + chalk.dim(` as ${modeLabel}`)), MESSAGES.SETUP.ERROR_REGISTER_FAILED(assistant.name), (error) => logger.error('Assistant generation failed', { error, assistantId: assistant.id, mode }));
81
+ if (!result) {
82
+ return null;
83
+ }
84
+ return {
85
+ id: assistant.id,
86
+ name: assistant.name,
87
+ slug: assistant.slug,
88
+ description: assistant.description,
89
+ project: assistant.project,
90
+ registeredAt: new Date().toISOString(),
91
+ registrationMode: mode
92
+ };
93
+ }
94
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../../src/cli/commands/assistants/setup/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Setup Assistants Command - Orchestration
3
+ *
4
+ * Unified command to view, register, and unregister CodeMie assistants
5
+ */
6
+ import { Command } from 'commander';
7
+ export interface SetupCommandOptions {
8
+ profile?: string;
9
+ project?: string;
10
+ allProjects?: boolean;
11
+ verbose?: boolean;
12
+ }
13
+ /**
14
+ * Create assistants setup command
15
+ */
16
+ export declare function createAssistantsSetupCommand(): Command;
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/assistants/setup/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAQD;;GAEG;AACH,wBAAgB,4BAA4B,IAAI,OAAO,CAsBtD"}
@@ -0,0 +1,193 @@
1
+ /**
2
+ * Setup Assistants Command - Orchestration
3
+ *
4
+ * Unified command to view, register, and unregister CodeMie assistants
5
+ */
6
+ import { Command } from 'commander';
7
+ import chalk from 'chalk';
8
+ import { logger } from '../../../../utils/logger.js';
9
+ import { ConfigLoader } from '../../../../utils/config.js';
10
+ import { createErrorContext, formatErrorForUser } from '../../../../utils/errors.js';
11
+ import { MESSAGES, ACTIONS } from '../../../../cli/commands/assistants/constants.js';
12
+ import { getAuthenticatedClient } from '../../../../utils/auth.js';
13
+ import { promptAssistantSelection } from '../../../../cli/commands/assistants/setup/selection/index.js';
14
+ import { determineChanges, registerAssistant, unregisterAssistant } from '../../../../cli/commands/assistants/setup/helpers.js';
15
+ import { createDataFetcher } from '../../../../cli/commands/assistants/setup/data.js';
16
+ import { promptModeSelection, CONFIGURATION_CHOICE } from '../../../../cli/commands/assistants/setup/configuration/index.js';
17
+ import { promptManualConfiguration } from '../../../../cli/commands/assistants/setup/manualConfiguration/index.js';
18
+ import { REGISTRATION_MODE } from '../../../../cli/commands/assistants/setup/manualConfiguration/constants.js';
19
+ import { displaySummary } from '../../../../cli/commands/assistants/setup/summary/index.js';
20
+ import { ACTION_TYPE } from '../../../../cli/commands/assistants/setup/constants.js';
21
+ /**
22
+ * Create assistants setup command
23
+ */
24
+ export function createAssistantsSetupCommand() {
25
+ const command = new Command('setup');
26
+ command
27
+ .description(MESSAGES.SETUP.COMMAND_DESCRIPTION)
28
+ .option('--profile <name>', MESSAGES.SETUP.OPTION_PROFILE)
29
+ .option('--project <project>', MESSAGES.SETUP.OPTION_PROJECT)
30
+ .option('--all-projects', MESSAGES.SETUP.OPTION_ALL_PROJECTS)
31
+ .option('-v, --verbose', MESSAGES.SHARED.OPTION_VERBOSE)
32
+ .action(async (options) => {
33
+ if (options.verbose) {
34
+ enableVerboseLogging();
35
+ }
36
+ try {
37
+ await setupAssistants(options);
38
+ }
39
+ catch (error) {
40
+ handleError(error);
41
+ }
42
+ });
43
+ return command;
44
+ }
45
+ /**
46
+ * Enable verbose debug logging
47
+ */
48
+ function enableVerboseLogging() {
49
+ process.env.CODEMIE_DEBUG = 'true';
50
+ const logFilePath = logger.getLogFilePath();
51
+ if (logFilePath) {
52
+ console.log(chalk.dim(`Debug logs: ${logFilePath}\n`));
53
+ }
54
+ }
55
+ /**
56
+ * Handle command errors
57
+ */
58
+ function handleError(error) {
59
+ const context = createErrorContext(error);
60
+ logger.error('Failed to setup assistants', context);
61
+ console.error(formatErrorForUser(context));
62
+ process.exit(1);
63
+ }
64
+ /**
65
+ * Setup assistants - unified list/register/unregister
66
+ */
67
+ async function setupAssistants(options) {
68
+ // Load config and profile
69
+ const config = await ConfigLoader.load();
70
+ const profileName = options.profile || await ConfigLoader.getActiveProfileName() || 'default';
71
+ logger.debug('Setting up assistants', { profileName, options });
72
+ // Get authenticated client and current registrations
73
+ const client = await getAuthenticatedClient(config);
74
+ const registeredAssistants = config.codemieAssistants || [];
75
+ const registeredIds = new Set(registeredAssistants.map(a => a.id));
76
+ // Prompt user to select assistants
77
+ const { selectedIds, action } = await promptAssistantSelection(registeredIds, config, options, client);
78
+ if (action === ACTIONS.CANCEL) {
79
+ console.log(chalk.dim(MESSAGES.SETUP.NO_CHANGES_MADE));
80
+ return;
81
+ }
82
+ // Fetch full details for selected assistants
83
+ const fetcher = createDataFetcher({ config, client, options });
84
+ const selectedAssistants = await fetcher.fetchAssistantsByIds(selectedIds, []);
85
+ // Configure registration modes (skip if no assistants selected)
86
+ let registrationModes = new Map();
87
+ if (selectedAssistants.length > 0) {
88
+ // Loop to allow going back
89
+ let configurationComplete = false;
90
+ while (!configurationComplete) {
91
+ // Step 1: Show mode selection screen (Subagents, Skills, Manual)
92
+ const { choice, cancelled, back } = await promptModeSelection();
93
+ if (cancelled) {
94
+ console.log(chalk.dim(MESSAGES.SETUP.NO_CHANGES_MADE));
95
+ return;
96
+ }
97
+ if (back) {
98
+ // Go back to selection screen
99
+ return setupAssistants(options);
100
+ }
101
+ // Step 2: Handle choice
102
+ if (choice === CONFIGURATION_CHOICE.SUBAGENTS) { // Bulk register all as agents
103
+ for (const assistant of selectedAssistants) {
104
+ registrationModes.set(assistant.id, REGISTRATION_MODE.AGENT);
105
+ }
106
+ configurationComplete = true;
107
+ }
108
+ else if (choice === CONFIGURATION_CHOICE.SKILLS) { // Bulk register all as skills
109
+ for (const assistant of selectedAssistants) {
110
+ registrationModes.set(assistant.id, REGISTRATION_MODE.SKILL);
111
+ }
112
+ configurationComplete = true;
113
+ }
114
+ else { // Manual configuration - show individual configuration screen
115
+ const { registrationModes: modes, action: configAction } = await promptManualConfiguration(selectedAssistants, registeredIds, registeredAssistants);
116
+ if (configAction === ACTION_TYPE.CANCEL) {
117
+ console.log(chalk.dim(MESSAGES.SETUP.NO_CHANGES_MADE));
118
+ return;
119
+ }
120
+ if (configAction === ACTION_TYPE.BACK) {
121
+ // Go back to configuration mode selection
122
+ continue;
123
+ }
124
+ registrationModes = modes;
125
+ configurationComplete = true;
126
+ }
127
+ }
128
+ }
129
+ // Apply changes and get summary data
130
+ const { newRegistrations, registered, unregistered } = await applyChanges(selectedIds, selectedAssistants, registeredAssistants, registrationModes);
131
+ // Update config
132
+ config.codemieAssistants = newRegistrations;
133
+ await ConfigLoader.saveProfile(profileName, config);
134
+ // Display summary
135
+ displaySummary(registered, unregistered, profileName, config);
136
+ }
137
+ /**
138
+ * Apply registration changes
139
+ * Returns new registrations and lists of what changed
140
+ */
141
+ async function applyChanges(selectedIds, allAssistants, registeredAssistants, registrationModes) {
142
+ // Determine what needs to change
143
+ const { toRegister, toUnregister } = determineChanges(selectedIds, allAssistants, registeredAssistants);
144
+ const selectedSet = new Set(selectedIds);
145
+ const toReregister = registeredAssistants.filter(a => selectedSet.has(a.id));
146
+ if (toRegister.length === 0 && toUnregister.length === 0 && toReregister.length === 0) {
147
+ console.log(chalk.yellow(MESSAGES.SETUP.NO_CHANGES_TO_APPLY));
148
+ return { newRegistrations: registeredAssistants, registered: [], unregistered: [] };
149
+ }
150
+ // Unregister: both removed assistants and those needing re-registration
151
+ const toUnregisterAll = [...toUnregister, ...toReregister];
152
+ for (const assistant of toUnregisterAll) {
153
+ await unregisterAssistant(assistant);
154
+ }
155
+ // Register all selected assistants with their configured modes
156
+ const newRegistrations = [];
157
+ const allToRegister = [...toRegister, ...toReregister];
158
+ for (const assistant of allToRegister) {
159
+ const fullAssistant = getFullAssistant(assistant, allAssistants);
160
+ if (!fullAssistant)
161
+ continue;
162
+ const mode = registrationModes.get(fullAssistant.id) || REGISTRATION_MODE.AGENT;
163
+ const registered = await registerAssistant(fullAssistant, mode);
164
+ if (registered) {
165
+ newRegistrations.push(registered);
166
+ }
167
+ }
168
+ // Return results for summary
169
+ return {
170
+ newRegistrations,
171
+ registered: [...toRegister, ...getFullAssistants(toReregister, allAssistants)],
172
+ unregistered: toUnregister
173
+ };
174
+ }
175
+ /**
176
+ * Get full assistant details from the list
177
+ */
178
+ function getFullAssistant(assistant, allAssistants) {
179
+ // Check if it's already a full Assistant (has registeredAt = it's a CodemieAssistant)
180
+ if ('registeredAt' in assistant) {
181
+ return allAssistants.find(a => a.id === assistant.id) || null;
182
+ }
183
+ return assistant;
184
+ }
185
+ /**
186
+ * Get full assistant details for multiple assistants
187
+ */
188
+ function getFullAssistants(assistants, allAssistants) {
189
+ return assistants
190
+ .map(a => getFullAssistant(a, allAssistants))
191
+ .filter((a) => a !== null);
192
+ }
193
+ //# sourceMappingURL=index.js.map