@codemieai/code 0.12.0 → 0.13.0

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 (204) hide show
  1. package/README.md +109 -56
  2. package/bin/codemie-copilot.js +224 -0
  3. package/bin/codemie-pi.js +18 -0
  4. package/dist/agents/core/AgentCLI.d.ts.map +1 -1
  5. package/dist/agents/core/AgentCLI.js +16 -10
  6. package/dist/agents/core/AgentCLI.js.map +1 -1
  7. package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
  8. package/dist/agents/core/BaseAgentAdapter.js +43 -19
  9. package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
  10. package/dist/agents/core/agent-aliases.d.ts +17 -0
  11. package/dist/agents/core/agent-aliases.d.ts.map +1 -0
  12. package/dist/agents/core/agent-aliases.js +41 -0
  13. package/dist/agents/core/agent-aliases.js.map +1 -0
  14. package/dist/agents/core/session/session-origin-audit.d.ts +13 -0
  15. package/dist/agents/core/session/session-origin-audit.d.ts.map +1 -1
  16. package/dist/agents/core/session/session-origin-audit.js +34 -0
  17. package/dist/agents/core/session/session-origin-audit.js.map +1 -1
  18. package/dist/agents/core/session/stale-session-reconciliation.d.ts +42 -0
  19. package/dist/agents/core/session/stale-session-reconciliation.d.ts.map +1 -0
  20. package/dist/agents/core/session/stale-session-reconciliation.js +141 -0
  21. package/dist/agents/core/session/stale-session-reconciliation.js.map +1 -0
  22. package/dist/agents/core/session/types.d.ts +19 -0
  23. package/dist/agents/core/session/types.d.ts.map +1 -1
  24. package/dist/agents/core/session/types.js +17 -1
  25. package/dist/agents/core/session/types.js.map +1 -1
  26. package/dist/agents/core/types.d.ts +1 -0
  27. package/dist/agents/core/types.d.ts.map +1 -1
  28. package/dist/agents/plugins/codex/codex.reconciliation.d.ts +15 -35
  29. package/dist/agents/plugins/codex/codex.reconciliation.d.ts.map +1 -1
  30. package/dist/agents/plugins/codex/codex.reconciliation.js +8 -139
  31. package/dist/agents/plugins/codex/codex.reconciliation.js.map +1 -1
  32. package/dist/agents/plugins/copilot-cli/copilot-cli.constants.d.ts +4 -0
  33. package/dist/agents/plugins/copilot-cli/copilot-cli.constants.d.ts.map +1 -1
  34. package/dist/agents/plugins/copilot-cli/copilot-cli.constants.js +4 -0
  35. package/dist/agents/plugins/copilot-cli/copilot-cli.constants.js.map +1 -1
  36. package/dist/agents/plugins/copilot-cli/copilot-cli.models.d.ts +8 -0
  37. package/dist/agents/plugins/copilot-cli/copilot-cli.models.d.ts.map +1 -0
  38. package/dist/agents/plugins/copilot-cli/copilot-cli.models.js +195 -0
  39. package/dist/agents/plugins/copilot-cli/copilot-cli.models.js.map +1 -0
  40. package/dist/agents/plugins/copilot-cli/copilot-cli.plugin.d.ts +4 -20
  41. package/dist/agents/plugins/copilot-cli/copilot-cli.plugin.d.ts.map +1 -1
  42. package/dist/agents/plugins/copilot-cli/copilot-cli.plugin.js +237 -38
  43. package/dist/agents/plugins/copilot-cli/copilot-cli.plugin.js.map +1 -1
  44. package/dist/agents/plugins/copilot-cli/copilot-cli.session.d.ts.map +1 -1
  45. package/dist/agents/plugins/copilot-cli/copilot-cli.session.js +14 -2
  46. package/dist/agents/plugins/copilot-cli/copilot-cli.session.js.map +1 -1
  47. package/dist/agents/plugins/copilot-cli/index.d.ts +2 -1
  48. package/dist/agents/plugins/copilot-cli/index.d.ts.map +1 -1
  49. package/dist/agents/plugins/copilot-cli/index.js +2 -1
  50. package/dist/agents/plugins/copilot-cli/index.js.map +1 -1
  51. package/dist/agents/plugins/copilot-cli/session/processors/copilot-cli.conversations-processor.d.ts +6 -3
  52. package/dist/agents/plugins/copilot-cli/session/processors/copilot-cli.conversations-processor.d.ts.map +1 -1
  53. package/dist/agents/plugins/copilot-cli/session/processors/copilot-cli.conversations-processor.js +298 -5
  54. package/dist/agents/plugins/copilot-cli/session/processors/copilot-cli.conversations-processor.js.map +1 -1
  55. package/dist/agents/plugins/pi/__tests__/home-redirect.d.ts +12 -0
  56. package/dist/agents/plugins/pi/__tests__/home-redirect.d.ts.map +1 -0
  57. package/dist/agents/plugins/pi/__tests__/home-redirect.js +27 -0
  58. package/dist/agents/plugins/pi/__tests__/home-redirect.js.map +1 -0
  59. package/dist/agents/plugins/pi/extension/README.md +68 -0
  60. package/dist/agents/plugins/pi/extension/index.js +161 -0
  61. package/dist/agents/plugins/pi/extension/package.json +8 -0
  62. package/dist/agents/plugins/pi/index.d.ts +3 -0
  63. package/dist/agents/plugins/pi/index.d.ts.map +1 -0
  64. package/dist/agents/plugins/pi/index.js +3 -0
  65. package/dist/agents/plugins/pi/index.js.map +1 -0
  66. package/dist/agents/plugins/pi/pi.extension.d.ts +60 -0
  67. package/dist/agents/plugins/pi/pi.extension.d.ts.map +1 -0
  68. package/dist/agents/plugins/pi/pi.extension.js +201 -0
  69. package/dist/agents/plugins/pi/pi.extension.js.map +1 -0
  70. package/dist/agents/plugins/pi/pi.incremental-sync.d.ts +63 -0
  71. package/dist/agents/plugins/pi/pi.incremental-sync.d.ts.map +1 -0
  72. package/dist/agents/plugins/pi/pi.incremental-sync.js +266 -0
  73. package/dist/agents/plugins/pi/pi.incremental-sync.js.map +1 -0
  74. package/dist/agents/plugins/pi/pi.models.d.ts +20 -0
  75. package/dist/agents/plugins/pi/pi.models.d.ts.map +1 -0
  76. package/dist/agents/plugins/pi/pi.models.js +201 -0
  77. package/dist/agents/plugins/pi/pi.models.js.map +1 -0
  78. package/dist/agents/plugins/pi/pi.packages.d.ts +11 -0
  79. package/dist/agents/plugins/pi/pi.packages.d.ts.map +1 -0
  80. package/dist/agents/plugins/pi/pi.packages.js +35 -0
  81. package/dist/agents/plugins/pi/pi.packages.js.map +1 -0
  82. package/dist/agents/plugins/pi/pi.paths.d.ts +37 -0
  83. package/dist/agents/plugins/pi/pi.paths.d.ts.map +1 -0
  84. package/dist/agents/plugins/pi/pi.paths.js +146 -0
  85. package/dist/agents/plugins/pi/pi.paths.js.map +1 -0
  86. package/dist/agents/plugins/pi/pi.plugin.d.ts +30 -0
  87. package/dist/agents/plugins/pi/pi.plugin.d.ts.map +1 -0
  88. package/dist/agents/plugins/pi/pi.plugin.js +453 -0
  89. package/dist/agents/plugins/pi/pi.plugin.js.map +1 -0
  90. package/dist/agents/plugins/pi/pi.session.d.ts +114 -0
  91. package/dist/agents/plugins/pi/pi.session.d.ts.map +1 -0
  92. package/dist/agents/plugins/pi/pi.session.js +388 -0
  93. package/dist/agents/plugins/pi/pi.session.js.map +1 -0
  94. package/dist/agents/plugins/pi/pi.setup.d.ts +2 -0
  95. package/dist/agents/plugins/pi/pi.setup.d.ts.map +1 -0
  96. package/dist/agents/plugins/pi/pi.setup.js +33 -0
  97. package/dist/agents/plugins/pi/pi.setup.js.map +1 -0
  98. package/dist/agents/plugins/pi/pi.types.d.ts +143 -0
  99. package/dist/agents/plugins/pi/pi.types.d.ts.map +1 -0
  100. package/dist/agents/plugins/pi/pi.types.js +74 -0
  101. package/dist/agents/plugins/pi/pi.types.js.map +1 -0
  102. package/dist/agents/plugins/pi/session/pi-file-operations.d.ts +17 -0
  103. package/dist/agents/plugins/pi/session/pi-file-operations.d.ts.map +1 -0
  104. package/dist/agents/plugins/pi/session/pi-file-operations.js +98 -0
  105. package/dist/agents/plugins/pi/session/pi-file-operations.js.map +1 -0
  106. package/dist/agents/plugins/pi/session/pi-named-invocations.d.ts +52 -0
  107. package/dist/agents/plugins/pi/session/pi-named-invocations.d.ts.map +1 -0
  108. package/dist/agents/plugins/pi/session/pi-named-invocations.js +189 -0
  109. package/dist/agents/plugins/pi/session/pi-named-invocations.js.map +1 -0
  110. package/dist/agents/plugins/pi/session/pi-user-prompt.d.ts +14 -0
  111. package/dist/agents/plugins/pi/session/pi-user-prompt.d.ts.map +1 -0
  112. package/dist/agents/plugins/pi/session/pi-user-prompt.js +51 -0
  113. package/dist/agents/plugins/pi/session/pi-user-prompt.js.map +1 -0
  114. package/dist/agents/plugins/pi/session/processors/pi.conversations-processor.d.ts +52 -0
  115. package/dist/agents/plugins/pi/session/processors/pi.conversations-processor.d.ts.map +1 -0
  116. package/dist/agents/plugins/pi/session/processors/pi.conversations-processor.js +716 -0
  117. package/dist/agents/plugins/pi/session/processors/pi.conversations-processor.js.map +1 -0
  118. package/dist/agents/plugins/pi/session/processors/pi.metrics-processor.d.ts +104 -0
  119. package/dist/agents/plugins/pi/session/processors/pi.metrics-processor.d.ts.map +1 -0
  120. package/dist/agents/plugins/pi/session/processors/pi.metrics-processor.js +595 -0
  121. package/dist/agents/plugins/pi/session/processors/pi.metrics-processor.js.map +1 -0
  122. package/dist/agents/registry.d.ts.map +1 -1
  123. package/dist/agents/registry.js +2 -2
  124. package/dist/agents/registry.js.map +1 -1
  125. package/dist/cli/commands/analytics/agent-labels.d.ts.map +1 -1
  126. package/dist/cli/commands/analytics/agent-labels.js +1 -0
  127. package/dist/cli/commands/analytics/agent-labels.js.map +1 -1
  128. package/dist/cli/commands/analytics/cost/usage-readers.d.ts +24 -0
  129. package/dist/cli/commands/analytics/cost/usage-readers.d.ts.map +1 -1
  130. package/dist/cli/commands/analytics/cost/usage-readers.js +199 -54
  131. package/dist/cli/commands/analytics/cost/usage-readers.js.map +1 -1
  132. package/dist/cli/commands/analytics/index.js +1 -0
  133. package/dist/cli/commands/analytics/index.js.map +1 -1
  134. package/dist/cli/commands/analytics/native-loader.d.ts +21 -4
  135. package/dist/cli/commands/analytics/native-loader.d.ts.map +1 -1
  136. package/dist/cli/commands/analytics/native-loader.js +250 -96
  137. package/dist/cli/commands/analytics/native-loader.js.map +1 -1
  138. package/dist/cli/commands/analytics/report/client/app.js +47 -3
  139. package/dist/cli/commands/analytics/report/payload-builder.d.ts.map +1 -1
  140. package/dist/cli/commands/analytics/report/payload-builder.js +25 -2
  141. package/dist/cli/commands/analytics/report/payload-builder.js.map +1 -1
  142. package/dist/cli/commands/analytics/report/types.d.ts +1 -0
  143. package/dist/cli/commands/analytics/report/types.d.ts.map +1 -1
  144. package/dist/cli/commands/hook.d.ts.map +1 -1
  145. package/dist/cli/commands/hook.js +71 -29
  146. package/dist/cli/commands/hook.js.map +1 -1
  147. package/dist/cli/commands/install.d.ts.map +1 -1
  148. package/dist/cli/commands/install.js +7 -5
  149. package/dist/cli/commands/install.js.map +1 -1
  150. package/dist/cli/commands/list.d.ts.map +1 -1
  151. package/dist/cli/commands/list.js +3 -1
  152. package/dist/cli/commands/list.js.map +1 -1
  153. package/dist/cli/commands/uninstall.d.ts.map +1 -1
  154. package/dist/cli/commands/uninstall.js +5 -3
  155. package/dist/cli/commands/uninstall.js.map +1 -1
  156. package/dist/cli/commands/update.d.ts.map +1 -1
  157. package/dist/cli/commands/update.js +5 -3
  158. package/dist/cli/commands/update.js.map +1 -1
  159. package/dist/cli/first-time.d.ts.map +1 -1
  160. package/dist/cli/first-time.js +7 -6
  161. package/dist/cli/first-time.js.map +1 -1
  162. package/dist/providers/core/auth-validation.d.ts +7 -2
  163. package/dist/providers/core/auth-validation.d.ts.map +1 -1
  164. package/dist/providers/core/auth-validation.js +11 -5
  165. package/dist/providers/core/auth-validation.js.map +1 -1
  166. package/dist/providers/plugins/sso/proxy/plugins/claude-request-normalizer.plugin.d.ts +8 -3
  167. package/dist/providers/plugins/sso/proxy/plugins/claude-request-normalizer.plugin.d.ts.map +1 -1
  168. package/dist/providers/plugins/sso/proxy/plugins/claude-request-normalizer.plugin.js +46 -11
  169. package/dist/providers/plugins/sso/proxy/plugins/claude-request-normalizer.plugin.js.map +1 -1
  170. package/dist/providers/plugins/sso/proxy/plugins/codex-encrypted-content-sanitizer.plugin.d.ts +23 -13
  171. package/dist/providers/plugins/sso/proxy/plugins/codex-encrypted-content-sanitizer.plugin.d.ts.map +1 -1
  172. package/dist/providers/plugins/sso/proxy/plugins/codex-encrypted-content-sanitizer.plugin.js +75 -18
  173. package/dist/providers/plugins/sso/proxy/plugins/codex-encrypted-content-sanitizer.plugin.js.map +1 -1
  174. package/dist/providers/plugins/sso/proxy/plugins/copilot-encrypted-content-sanitizer.plugin.d.ts +21 -0
  175. package/dist/providers/plugins/sso/proxy/plugins/copilot-encrypted-content-sanitizer.plugin.d.ts.map +1 -0
  176. package/dist/providers/plugins/sso/proxy/plugins/copilot-encrypted-content-sanitizer.plugin.js +133 -0
  177. package/dist/providers/plugins/sso/proxy/plugins/copilot-encrypted-content-sanitizer.plugin.js.map +1 -0
  178. package/dist/providers/plugins/sso/proxy/plugins/header-injection.plugin.js +1 -1
  179. package/dist/providers/plugins/sso/proxy/plugins/header-injection.plugin.js.map +1 -1
  180. package/dist/providers/plugins/sso/proxy/plugins/index.d.ts +2 -1
  181. package/dist/providers/plugins/sso/proxy/plugins/index.d.ts.map +1 -1
  182. package/dist/providers/plugins/sso/proxy/plugins/index.js +4 -2
  183. package/dist/providers/plugins/sso/proxy/plugins/index.js.map +1 -1
  184. package/dist/providers/plugins/sso/proxy/plugins/types.d.ts +11 -0
  185. package/dist/providers/plugins/sso/proxy/plugins/types.d.ts.map +1 -1
  186. package/dist/providers/plugins/sso/proxy/sso.proxy.d.ts +2 -0
  187. package/dist/providers/plugins/sso/proxy/sso.proxy.d.ts.map +1 -1
  188. package/dist/providers/plugins/sso/proxy/sso.proxy.js +37 -1
  189. package/dist/providers/plugins/sso/proxy/sso.proxy.js.map +1 -1
  190. package/dist/providers/plugins/sso/session/SessionSyncer.d.ts.map +1 -1
  191. package/dist/providers/plugins/sso/session/SessionSyncer.js +13 -0
  192. package/dist/providers/plugins/sso/session/SessionSyncer.js.map +1 -1
  193. package/dist/providers/plugins/sso/session/processors/conversations/syncProcessor.js +6 -0
  194. package/dist/providers/plugins/sso/session/processors/conversations/syncProcessor.js.map +1 -1
  195. package/dist/providers/plugins/sso/session/processors/metrics/metrics-post-processor.d.ts +0 -6
  196. package/dist/providers/plugins/sso/session/processors/metrics/metrics-post-processor.d.ts.map +1 -1
  197. package/dist/providers/plugins/sso/session/processors/metrics/metrics-post-processor.js +28 -19
  198. package/dist/providers/plugins/sso/session/processors/metrics/metrics-post-processor.js.map +1 -1
  199. package/dist/utils/interactive.d.ts +14 -0
  200. package/dist/utils/interactive.d.ts.map +1 -0
  201. package/dist/utils/interactive.js +16 -0
  202. package/dist/utils/interactive.js.map +1 -0
  203. package/package.json +6 -4
  204. package/scripts/copy-plugins.js +6 -0
@@ -0,0 +1,195 @@
1
+ import { fetchCodeMieLlmModels } from '../../../providers/plugins/sso/sso.http-client.js';
2
+ import { CodeMieSSO } from '../../../providers/plugins/sso/sso.auth.js';
3
+ import { ConfigurationError } from '../../../utils/errors.js';
4
+ import { logger } from '../../../utils/logger.js';
5
+ const COPILOT_INCOMPATIBLE_MODEL_PATTERNS = [
6
+ /embedding/i,
7
+ /rerank/i,
8
+ /whisper/i,
9
+ /tts/i,
10
+ /moderation/i,
11
+ /image/i,
12
+ /vision-only/i,
13
+ ];
14
+ const GPT_FAMILY_PATTERNS = [
15
+ /\bgpt\b/i,
16
+ ];
17
+ const CLAUDE_FAMILY_PATTERNS = [
18
+ /claude/i,
19
+ /anthropic/i,
20
+ /sonnet/i,
21
+ /opus/i,
22
+ /haiku/i,
23
+ ];
24
+ function getModelId(model) {
25
+ return model.deployment_name || model.base_name || model.label;
26
+ }
27
+ function getSearchText(model) {
28
+ return [
29
+ model.deployment_name,
30
+ model.base_name,
31
+ model.label,
32
+ model.provider,
33
+ ].filter(Boolean).join(' ').toLowerCase();
34
+ }
35
+ export function isCopilotCompatibleModelName(modelName) {
36
+ if (!modelName)
37
+ return false;
38
+ if (COPILOT_INCOMPATIBLE_MODEL_PATTERNS.some((pattern) => pattern.test(modelName))) {
39
+ return false;
40
+ }
41
+ return GPT_FAMILY_PATTERNS.some((pattern) => pattern.test(modelName))
42
+ || CLAUDE_FAMILY_PATTERNS.some((pattern) => pattern.test(modelName));
43
+ }
44
+ function isCopilotCompatibleModel(model) {
45
+ if (!model.enabled)
46
+ return false;
47
+ if (model.features?.tools === false || model.features?.streaming === false) {
48
+ return false;
49
+ }
50
+ const id = getModelId(model);
51
+ if (!id || !isCopilotCompatibleModelName(id)) {
52
+ const searchText = getSearchText(model);
53
+ if (!isCopilotCompatibleModelName(searchText)) {
54
+ return false;
55
+ }
56
+ }
57
+ return true;
58
+ }
59
+ function extractVersionParts(text) {
60
+ const lower = text.toLowerCase();
61
+ const gptMatch = lower.match(/gpt[-.]?(\d+)(?:[-.](\d+))?(?:[-.](\d+))?/);
62
+ const claudeDateMatch = lower.match(/(20\d{2})[-.]?(\d{2})[-.]?(\d{2})/);
63
+ const claudeGenMatch = lower.match(/claude(?:[-_.]?(\d+))?(?:[-_.](\d+))?/);
64
+ const version = [
65
+ gptMatch?.[1] ?? claudeGenMatch?.[1],
66
+ gptMatch?.[2] ?? claudeGenMatch?.[2],
67
+ gptMatch?.[3],
68
+ ].map((part) => (part ? Number(part) : 0));
69
+ if (claudeDateMatch) {
70
+ version.push(Number(claudeDateMatch[1]), Number(claudeDateMatch[2]), Number(claudeDateMatch[3]));
71
+ }
72
+ else {
73
+ version.push(0, 0, 0);
74
+ }
75
+ return version;
76
+ }
77
+ function rankModel(model) {
78
+ const id = getModelId(model);
79
+ if (!id) {
80
+ throw new ConfigurationError('Cannot rank Copilot model without a model identifier');
81
+ }
82
+ const searchText = getSearchText(model);
83
+ const preferredGpt55Bonus = /gpt[-_.]?5[-_.]?5(?:[-_.]|$)/i.test(searchText) ? 1 : 0;
84
+ const preferredGpt54Bonus = /gpt[-_.]?5[-_.]?4(?:[-_.]|$)/i.test(searchText) ? 1 : 0;
85
+ const preferredGptCodexBonus = /gpt[-_.]?5[-_.]?[23].*codex/i.test(searchText) ? 1 : 0;
86
+ const preferredClaudeBonus = /claude[-_.]?(?:sonnet[-_.]?)?(?:4(?:[-_.]5|[-_.]6)?|5)(?:[-_.]|$)/i.test(searchText) ? 1 : 0;
87
+ const gptFamilyBonus = GPT_FAMILY_PATTERNS.some((pattern) => pattern.test(searchText)) ? 1 : 0;
88
+ const claudeFamilyBonus = CLAUDE_FAMILY_PATTERNS.some((pattern) => pattern.test(searchText)) ? 1 : 0;
89
+ const defaultBonus = model.default ? 1 : 0;
90
+ const toolBonus = model.features?.tools === false ? 0 : 1;
91
+ const streamingBonus = model.features?.streaming === false ? 0 : 1;
92
+ const temperatureBonus = model.features?.temperature === false ? 1 : 0;
93
+ return {
94
+ model,
95
+ id,
96
+ score: [
97
+ preferredGpt55Bonus,
98
+ preferredGpt54Bonus,
99
+ preferredGptCodexBonus,
100
+ gptFamilyBonus,
101
+ preferredClaudeBonus,
102
+ claudeFamilyBonus,
103
+ temperatureBonus,
104
+ toolBonus,
105
+ streamingBonus,
106
+ ...extractVersionParts(searchText),
107
+ defaultBonus,
108
+ ],
109
+ };
110
+ }
111
+ function compareRankedModels(a, b) {
112
+ const max = Math.max(a.score.length, b.score.length);
113
+ for (let i = 0; i < max; i++) {
114
+ const diff = (b.score[i] ?? 0) - (a.score[i] ?? 0);
115
+ if (diff !== 0)
116
+ return diff;
117
+ }
118
+ return a.id.localeCompare(b.id);
119
+ }
120
+ async function fetchCodeMieModelsForCopilot(env) {
121
+ const jwtToken = env.CODEMIE_JWT_TOKEN;
122
+ const baseUrl = env.CODEMIE_BASE_URL;
123
+ if (jwtToken && baseUrl) {
124
+ logger.debug('[copilot-cli-models] Fetching CodeMie model list via JWT auth');
125
+ return fetchCodeMieLlmModels(baseUrl, jwtToken);
126
+ }
127
+ const codeMieUrl = env.CODEMIE_URL;
128
+ if (codeMieUrl) {
129
+ const sso = new CodeMieSSO();
130
+ const credentials = await sso.getStoredCredentials(codeMieUrl);
131
+ if (!credentials) {
132
+ throw new ConfigurationError(`SSO credentials not found for ${codeMieUrl}. Run: codemie setup or codemie profile login --url ${codeMieUrl}`);
133
+ }
134
+ logger.debug('[copilot-cli-models] Fetching CodeMie model list via SSO auth');
135
+ return fetchCodeMieLlmModels(credentials.apiUrl, credentials.cookies);
136
+ }
137
+ return [];
138
+ }
139
+ export async function resolveCopilotModel(env) {
140
+ const currentModel = env.CODEMIE_MODEL;
141
+ const modelSource = (env.CODEMIE_MODEL_SOURCE || 'default');
142
+ let rawModels = [];
143
+ try {
144
+ rawModels = await fetchCodeMieModelsForCopilot(env);
145
+ }
146
+ catch (error) {
147
+ if (isCopilotCompatibleModelName(currentModel)) {
148
+ const configuredModel = currentModel;
149
+ logger.debug('[copilot-cli-models] Failed to fetch CodeMie models; keeping compatible configured model', {
150
+ error: error instanceof Error ? error.message : String(error),
151
+ model: configuredModel,
152
+ });
153
+ return { selectedModel: configuredModel, availableModels: [configuredModel] };
154
+ }
155
+ throw error;
156
+ }
157
+ const rankedModels = rawModels
158
+ .filter(isCopilotCompatibleModel)
159
+ .map(rankModel)
160
+ .sort(compareRankedModels);
161
+ if (rankedModels.length === 0) {
162
+ if (isCopilotCompatibleModelName(currentModel)) {
163
+ const configuredModel = currentModel;
164
+ logger.debug('[copilot-cli-models] CodeMie returned no explicitly compatible Copilot models; keeping configured model');
165
+ return { selectedModel: configuredModel, availableModels: [configuredModel] };
166
+ }
167
+ throw new ConfigurationError('No CodeMie model compatible with GitHub Copilot CLI is available. ' +
168
+ 'Use a model with tool calling and streaming support, such as gpt-5.5 or claude-sonnet-4.6.');
169
+ }
170
+ const selectedModel = rankedModels[0].id;
171
+ const rankedIds = rankedModels.map((entry) => entry.id);
172
+ const shouldPreserveConfiguredModel = modelSource === 'cli' || modelSource === 'env';
173
+ const effectiveModel = shouldPreserveConfiguredModel && currentModel && rankedIds.includes(currentModel)
174
+ ? currentModel
175
+ : selectedModel;
176
+ if (currentModel && currentModel !== effectiveModel) {
177
+ logger.info(`[copilot-cli-models] Using ${effectiveModel} for Copilot instead of profile model ${currentModel}`);
178
+ }
179
+ return {
180
+ selectedModel: effectiveModel,
181
+ availableModels: rankedModels.map((entry) => entry.id),
182
+ };
183
+ }
184
+ export function assertExplicitCopilotModelAllowed(model, availableModels) {
185
+ if (!isCopilotCompatibleModelName(model)) {
186
+ throw new ConfigurationError(`Model "${model}" is not compatible with codemie-copilot. ` +
187
+ `Use a GPT-family or Claude-family model with tool calling and streaming support` +
188
+ `${availableModels.length ? ` such as: ${availableModels.join(', ')}` : '.'}`);
189
+ }
190
+ if (availableModels.length > 0 && !availableModels.includes(model)) {
191
+ throw new ConfigurationError(`Model "${model}" is not available in CodeMie for codemie-copilot. ` +
192
+ `Available models: ${availableModels.join(', ')}`);
193
+ }
194
+ }
195
+ //# sourceMappingURL=copilot-cli.models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot-cli.models.js","sourceRoot":"","sources":["../../../../src/agents/plugins/copilot-cli/copilot-cli.models.ts"],"names":[],"mappings":"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"}
@@ -1,30 +1,14 @@
1
- /**
2
- * GitHub Copilot CLI — analytics-only agent plugin.
3
- *
4
- * CodeMie does NOT install, launch, configure, or proxy Copilot. This plugin exists solely
5
- * so `AgentRegistry` can hand the analytics pipeline a `SessionAdapter`: `native-loader.ts`
6
- * resolves adapters via `AgentRegistry.getAgent(name)?.getSessionAdapter?.()`, and there is
7
- * no analytics-only bypass around the registry.
8
- *
9
- * The mutating lifecycle methods inherited from `BaseAgentAdapter` are therefore overridden
10
- * to refuse. Left inherited, `install()` would npm-install `@github/copilot` and `run()`
11
- * would launch it — both outside this integration's remit.
12
- */
13
1
  import type { AgentMetadata } from '../../core/types.js';
14
2
  import { BaseAgentAdapter } from '../../core/BaseAgentAdapter.js';
15
3
  import type { SessionAdapter } from '../../core/session/BaseSessionAdapter.js';
16
- import { COPILOT_CLI_AGENT_NAME, COPILOT_CLI_DISPLAY_NAME } from './copilot-cli.constants.js';
17
- export { COPILOT_CLI_AGENT_NAME, COPILOT_CLI_DISPLAY_NAME };
4
+ export { COPILOT_CLI_AGENT_NAME, COPILOT_CLI_CLIENT_TYPE, COPILOT_CLI_DISPLAY_NAME, } from './copilot-cli.constants.js';
18
5
  export declare const CopilotCliPluginMetadata: AgentMetadata;
19
6
  export declare class CopilotCliPlugin extends BaseAgentAdapter {
20
7
  private sessionAdapter;
21
8
  constructor();
22
9
  getSessionAdapter(): SessionAdapter;
23
- /** Refused: analytics-only. See {@link NOT_MANAGED}. */
24
- install(): Promise<void>;
25
- /** Refused: analytics-only. See {@link NOT_MANAGED}. */
26
- uninstall(): Promise<void>;
27
- /** Refused: analytics-only. See {@link NOT_MANAGED}. */
28
- run(_args: string[], _env?: Record<string, string>): Promise<void>;
10
+ protected setupProxy(env: NodeJS.ProcessEnv): Promise<void>;
11
+ isInstalled(): Promise<boolean>;
12
+ getVersion(): Promise<string | null>;
29
13
  }
30
14
  //# sourceMappingURL=copilot-cli.plugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"copilot-cli.plugin.d.ts","sourceRoot":"","sources":["../../../../src/agents/plugins/copilot-cli/copilot-cli.plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAG/E,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAE9F,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,CAAC;AAM5D,eAAO,MAAM,wBAAwB,EAAE,aAmBtC,CAAC;AAEF,qBAAa,gBAAiB,SAAQ,gBAAgB;IACpD,OAAO,CAAC,cAAc,CAA+B;;IAMrD,iBAAiB,IAAI,cAAc;IAOnC,wDAAwD;IAClD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,wDAAwD;IAClD,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC,wDAAwD;IAClD,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CAGzE"}
1
+ {"version":3,"file":"copilot-cli.plugin.d.ts","sourceRoot":"","sources":["../../../../src/agents/plugins/copilot-cli/copilot-cli.plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAe/E,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,4BAA4B,CAAC;AAoEpC,eAAO,MAAM,wBAAwB,EAAE,aAyKtC,CAAC;AAEF,qBAAa,gBAAiB,SAAQ,gBAAgB;IACpD,OAAO,CAAC,cAAc,CAA+B;;IAMrD,iBAAiB,IAAI,cAAc;cAOV,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB3D,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAO/B,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAapD"}
@@ -1,41 +1,213 @@
1
- /**
2
- * GitHub Copilot CLI — analytics-only agent plugin.
3
- *
4
- * CodeMie does NOT install, launch, configure, or proxy Copilot. This plugin exists solely
5
- * so `AgentRegistry` can hand the analytics pipeline a `SessionAdapter`: `native-loader.ts`
6
- * resolves adapters via `AgentRegistry.getAgent(name)?.getSessionAdapter?.()`, and there is
7
- * no analytics-only bypass around the registry.
8
- *
9
- * The mutating lifecycle methods inherited from `BaseAgentAdapter` are therefore overridden
10
- * to refuse. Left inherited, `install()` would npm-install `@github/copilot` and `run()`
11
- * would launch it — both outside this integration's remit.
12
- */
13
1
  import { BaseAgentAdapter } from '../../core/BaseAgentAdapter.js';
14
2
  import { CopilotCliSessionAdapter } from './copilot-cli.session.js';
15
3
  import { ConfigurationError } from '../../../utils/errors.js';
16
- import { COPILOT_CLI_AGENT_NAME, COPILOT_CLI_DISPLAY_NAME } from './copilot-cli.constants.js';
17
- export { COPILOT_CLI_AGENT_NAME, COPILOT_CLI_DISPLAY_NAME };
18
- const NOT_MANAGED = 'GitHub Copilot CLI is not managed by CodeMie. It is supported for analytics only — ' +
19
- 'install and run it with the `copilot` command directly (npm package `@github/copilot`).';
4
+ import { commandExists, exec } from '../../../utils/processes.js';
5
+ import { logger } from '../../../utils/logger.js';
6
+ import { COPILOT_CLI_AGENT_NAME, COPILOT_CLI_CLIENT_TYPE, COPILOT_CLI_DISPLAY_NAME, } from './copilot-cli.constants.js';
7
+ import { assertExplicitCopilotModelAllowed, resolveCopilotModel, } from './copilot-cli.models.js';
8
+ export { COPILOT_CLI_AGENT_NAME, COPILOT_CLI_CLIENT_TYPE, COPILOT_CLI_DISPLAY_NAME, } from './copilot-cli.constants.js';
9
+ const COPILOT_SUPPORTED_VERSION = '1.0.79';
10
+ const COPILOT_MINIMUM_SUPPORTED_VERSION = '1.0.70';
11
+ const COPILOT_COMPATIBLE_PROVIDERS = ['ai-run-sso', 'litellm'];
12
+ const COPILOT_RECOMMENDED_MODELS = ['gpt-5.5', 'claude-sonnet-4.6', 'gpt-5.4'];
13
+ function buildCopilotHookConfig(env, sessionId) {
14
+ return {
15
+ agentName: env.CODEMIE_AGENT || COPILOT_CLI_AGENT_NAME,
16
+ sessionId,
17
+ provider: env.CODEMIE_PROVIDER,
18
+ apiBaseUrl: env.CODEMIE_BASE_URL,
19
+ ssoUrl: env.CODEMIE_URL,
20
+ syncApiUrl: env.CODEMIE_SYNC_API_URL,
21
+ version: env.CODEMIE_CLI_VERSION,
22
+ profileName: env.CODEMIE_PROFILE_NAME,
23
+ project: env.CODEMIE_PROJECT,
24
+ model: env.CODEMIE_MODEL,
25
+ clientType: COPILOT_CLI_CLIENT_TYPE,
26
+ };
27
+ }
28
+ function buildCopilotProviderEnv(env) {
29
+ if (!env.CODEMIE_BASE_URL) {
30
+ throw new ConfigurationError('CodeMie base URL is not configured for Copilot CLI. Run codemie setup and try again.');
31
+ }
32
+ if (!env.CODEMIE_MODEL) {
33
+ throw new ConfigurationError('No CodeMie model is configured for Copilot CLI. Run codemie setup or pass --model.');
34
+ }
35
+ const providerType = /^claude/i.test(env.CODEMIE_MODEL) ? 'anthropic' : 'openai';
36
+ const providerEnv = {
37
+ COPILOT_PROVIDER_BASE_URL: env.CODEMIE_BASE_URL,
38
+ COPILOT_PROVIDER_TYPE: providerType,
39
+ COPILOT_MODEL: env.CODEMIE_MODEL,
40
+ COPILOT_PROVIDER_MODEL_ID: env.CODEMIE_MODEL,
41
+ COPILOT_PROVIDER_WIRE_MODEL: env.CODEMIE_MODEL,
42
+ COPILOT_OFFLINE: 'true',
43
+ };
44
+ if (/^gpt[-_.]?5/i.test(env.CODEMIE_MODEL)) {
45
+ providerEnv.COPILOT_PROVIDER_WIRE_API = 'responses';
46
+ }
47
+ if (env.CODEMIE_API_KEY) {
48
+ providerEnv.COPILOT_PROVIDER_API_KEY = env.CODEMIE_API_KEY;
49
+ providerEnv.COPILOT_PROVIDER_BEARER_TOKEN = env.CODEMIE_API_KEY;
50
+ }
51
+ return providerEnv;
52
+ }
53
+ function assertCopilotProviderSupported(config) {
54
+ const provider = config.provider;
55
+ if (!provider || !COPILOT_COMPATIBLE_PROVIDERS.includes(provider)) {
56
+ throw new ConfigurationError('GitHub Copilot CLI via CodeMie currently supports only AI/Run SSO and LiteLLM profiles. ' +
57
+ 'Run codemie setup to choose a supported provider.');
58
+ }
59
+ }
20
60
  export const CopilotCliPluginMetadata = {
21
61
  name: COPILOT_CLI_AGENT_NAME,
22
62
  displayName: COPILOT_CLI_DISPLAY_NAME,
23
- description: 'GitHub Copilot CLI — analytics ingestion only (not managed by CodeMie)',
24
- // Deliberately null, even though Copilot ships as @github/copilot. `codemie update`
25
- // bypasses the adapter entirely — updateAgent() reads metadata.npmPackage and runs
26
- // `npm install -g <pkg> --force`, which would overwrite the user's own Copilot install.
27
- // Null makes that path fail safe ("cannot be updated") instead of destructively, as
28
- // defense in depth behind the getManageableAgents() exclusion.
29
- npmPackage: null,
30
- cliCommand: 'copilot',
63
+ description: 'GitHub Copilot CLI - AI coding agent managed by CodeMie',
64
+ npmPackage: '@github/copilot',
65
+ cliCommand: process.env.CODEMIE_COPILOT_BIN || 'copilot',
66
+ supportedVersion: COPILOT_SUPPORTED_VERSION,
67
+ minimumSupportedVersion: COPILOT_MINIMUM_SUPPORTED_VERSION,
31
68
  dataPaths: {
32
69
  home: '.copilot',
33
70
  },
34
- // Required by AgentMetadata but inapplicable here: CodeMie never launches Copilot, so
35
- // there is no environment to map and no provider to route it through.
36
- envMapping: {},
37
- supportedProviders: [],
38
- analyticsOnly: true,
71
+ extensionsConfig: {
72
+ project: '.github',
73
+ global: '~/.copilot',
74
+ skillsEntryFile: 'SKILL.md',
75
+ dirNames: {
76
+ agents: ['agents'],
77
+ commands: [],
78
+ skills: ['skills'],
79
+ hooks: ['hooks'],
80
+ rules: [],
81
+ },
82
+ extraProjectDirs: ['.github/copilot'],
83
+ },
84
+ mcpConfig: {
85
+ project: {
86
+ path: ['.mcp.json', '.github/mcp.json'],
87
+ jsonPath: 'mcpServers',
88
+ },
89
+ user: {
90
+ path: '~/.copilot/mcp-config.json',
91
+ jsonPath: 'mcpServers',
92
+ },
93
+ },
94
+ hookConfig: {
95
+ eventNameMapping: {
96
+ SessionStart: 'SessionStart',
97
+ SessionEnd: 'SessionEnd',
98
+ UserPromptSubmit: 'UserPromptSubmit',
99
+ PreToolUse: 'UserPromptSubmit',
100
+ PostToolUse: 'Stop',
101
+ Notification: 'PermissionRequest',
102
+ },
103
+ },
104
+ envMapping: {
105
+ baseUrl: [],
106
+ apiKey: [],
107
+ model: [],
108
+ },
109
+ supportedProviders: [...COPILOT_COMPATIBLE_PROVIDERS],
110
+ blockedModelPatterns: [/embedding/i, /rerank/i, /whisper/i, /tts/i, /image/i],
111
+ recommendedModels: [...COPILOT_RECOMMENDED_MODELS],
112
+ ssoConfig: {
113
+ enabled: true,
114
+ clientType: COPILOT_CLI_CLIENT_TYPE,
115
+ },
116
+ sessionAnalyticsReport: true,
117
+ flagMappings: {
118
+ '--task': { type: 'flag', target: '--prompt' },
119
+ },
120
+ lifecycle: {
121
+ async onSessionStart(sessionId, env) {
122
+ try {
123
+ const { processEvent } = await import('../../../cli/commands/hook.js');
124
+ await processEvent({
125
+ hook_event_name: 'SessionStart',
126
+ session_id: sessionId,
127
+ transcript_path: '',
128
+ permission_mode: 'default',
129
+ cwd: process.cwd(),
130
+ source: 'startup',
131
+ }, buildCopilotHookConfig(env, sessionId));
132
+ logger.info(`[copilot-cli] SessionStart hook completed for session ${sessionId}`);
133
+ }
134
+ catch (error) {
135
+ const message = error instanceof Error ? error.message : String(error);
136
+ logger.error(`[copilot-cli] SessionStart hook failed (non-blocking): ${message}`);
137
+ }
138
+ },
139
+ async beforeRun(env, config) {
140
+ assertCopilotProviderSupported(config);
141
+ // Prevent fallback to GitHub-native auth even when GitHub credentials exist.
142
+ delete env.GH_TOKEN;
143
+ delete env.GITHUB_TOKEN;
144
+ delete env.COPILOT_TOKEN;
145
+ if (!env.COPILOT_HOME) {
146
+ env.COPILOT_HOME = this.resolveDataPath();
147
+ }
148
+ await this.ensureDirectory(env.COPILOT_HOME);
149
+ const availableModels = (env.CODEMIE_COPILOT_AVAILABLE_MODELS || '')
150
+ .split(',')
151
+ .map((entry) => entry.trim())
152
+ .filter(Boolean);
153
+ if (env.CODEMIE_MODEL) {
154
+ assertExplicitCopilotModelAllowed(env.CODEMIE_MODEL, availableModels);
155
+ }
156
+ const providerEnv = buildCopilotProviderEnv(env);
157
+ Object.assign(env, providerEnv);
158
+ logger.debug('[copilot-cli] Prepared provider env for managed Copilot session', {
159
+ provider: config.provider,
160
+ model: env.CODEMIE_MODEL,
161
+ providerType: providerEnv.COPILOT_PROVIDER_TYPE,
162
+ clientType: COPILOT_CLI_CLIENT_TYPE,
163
+ });
164
+ return env;
165
+ },
166
+ enrichArgs(args, _config) {
167
+ const enriched = [...args];
168
+ const hasPrompt = enriched.includes('-p') || enriched.includes('--prompt');
169
+ const hasAutoApproval = enriched.includes('--allow-all') || enriched.includes('--allow-all-tools') || enriched.includes('--yolo');
170
+ const hasModel = enriched.includes('--model');
171
+ if (hasPrompt && !hasAutoApproval) {
172
+ enriched.push('--allow-all-tools');
173
+ }
174
+ if (!hasModel && process.env.CODEMIE_MODEL) {
175
+ enriched.push('--model', process.env.CODEMIE_MODEL);
176
+ }
177
+ return enriched;
178
+ },
179
+ async onSessionEnd(exitCode, env) {
180
+ const sessionId = env.CODEMIE_SESSION_ID;
181
+ if (!sessionId) {
182
+ logger.debug('[copilot-cli] No CODEMIE_SESSION_ID in environment, skipping session end');
183
+ return;
184
+ }
185
+ try {
186
+ const adapter = new CopilotCliSessionAdapter(CopilotCliPluginMetadata);
187
+ const sessions = await adapter.discoverSessions({
188
+ maxAgeDays: 1,
189
+ limit: 1,
190
+ cwd: process.cwd(),
191
+ });
192
+ const transcriptPath = sessions[0]?.filePath ?? '';
193
+ const agentSessionId = sessions[0]?.sessionId ?? sessionId;
194
+ const { processEvent } = await import('../../../cli/commands/hook.js');
195
+ await processEvent({
196
+ hook_event_name: 'SessionEnd',
197
+ session_id: agentSessionId,
198
+ transcript_path: transcriptPath,
199
+ permission_mode: 'default',
200
+ cwd: process.cwd(),
201
+ reason: exitCode === 0 ? 'exit' : `exit(${exitCode})`,
202
+ }, buildCopilotHookConfig(env, sessionId));
203
+ logger.info(`[copilot-cli] SessionEnd hook completed for session ${sessionId}`);
204
+ }
205
+ catch (error) {
206
+ const message = error instanceof Error ? error.message : String(error);
207
+ logger.error(`[copilot-cli] SessionEnd hook failed (non-blocking): ${message}`);
208
+ }
209
+ },
210
+ },
39
211
  };
40
212
  export class CopilotCliPlugin extends BaseAgentAdapter {
41
213
  sessionAdapter = null;
@@ -48,17 +220,44 @@ export class CopilotCliPlugin extends BaseAgentAdapter {
48
220
  }
49
221
  return this.sessionAdapter;
50
222
  }
51
- /** Refused: analytics-only. See {@link NOT_MANAGED}. */
52
- async install() {
53
- throw new ConfigurationError(NOT_MANAGED);
223
+ async setupProxy(env) {
224
+ if (env.CODEMIE_PROVIDER !== 'ai-run-sso' && env.CODEMIE_AUTH_METHOD !== 'jwt') {
225
+ await super.setupProxy(env);
226
+ return;
227
+ }
228
+ const modelSource = env.CODEMIE_MODEL_SOURCE;
229
+ const explicitModel = env.CODEMIE_MODEL && (modelSource === 'cli' || modelSource === 'env')
230
+ ? env.CODEMIE_MODEL
231
+ : undefined;
232
+ const { selectedModel, availableModels } = await resolveCopilotModel(env);
233
+ if (explicitModel) {
234
+ assertExplicitCopilotModelAllowed(explicitModel, availableModels);
235
+ env.CODEMIE_MODEL = explicitModel;
236
+ }
237
+ else {
238
+ env.CODEMIE_MODEL = selectedModel;
239
+ }
240
+ env.CODEMIE_COPILOT_AVAILABLE_MODELS = availableModels.join(',');
241
+ await super.setupProxy(env);
54
242
  }
55
- /** Refused: analytics-only. See {@link NOT_MANAGED}. */
56
- async uninstall() {
57
- throw new ConfigurationError(NOT_MANAGED);
243
+ async isInstalled() {
244
+ if (!this.metadata.cliCommand) {
245
+ return true;
246
+ }
247
+ return commandExists(this.metadata.cliCommand);
58
248
  }
59
- /** Refused: analytics-only. See {@link NOT_MANAGED}. */
60
- async run(_args, _env) {
61
- throw new ConfigurationError(NOT_MANAGED);
249
+ async getVersion() {
250
+ if (!this.metadata.cliCommand) {
251
+ return null;
252
+ }
253
+ try {
254
+ const result = await exec(this.metadata.cliCommand, ['--version']);
255
+ const match = result.stdout.trim().match(/(\d+\.\d+\.\d+)/);
256
+ return match ? match[1] : result.stdout.trim() || null;
257
+ }
258
+ catch {
259
+ return null;
260
+ }
62
261
  }
63
262
  }
64
263
  //# sourceMappingURL=copilot-cli.plugin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"copilot-cli.plugin.js","sourceRoot":"","sources":["../../../../src/agents/plugins/copilot-cli/copilot-cli.plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAElE,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAE9F,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,CAAC;AAE5D,MAAM,WAAW,GACf,qFAAqF;IACrF,yFAAyF,CAAC;AAE5F,MAAM,CAAC,MAAM,wBAAwB,GAAkB;IACrD,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,wBAAwB;IACrC,WAAW,EAAE,wEAAwE;IACrF,oFAAoF;IACpF,mFAAmF;IACnF,wFAAwF;IACxF,oFAAoF;IACpF,+DAA+D;IAC/D,UAAU,EAAE,IAAI;IAChB,UAAU,EAAE,SAAS;IACrB,SAAS,EAAE;QACT,IAAI,EAAE,UAAU;KACjB;IACD,sFAAsF;IACtF,sEAAsE;IACtE,UAAU,EAAE,EAAE;IACd,kBAAkB,EAAE,EAAE;IACtB,aAAa,EAAE,IAAI;CACpB,CAAC;AAEF,MAAM,OAAO,gBAAiB,SAAQ,gBAAgB;IAC5C,cAAc,GAA0B,IAAI,CAAC;IAErD;QACE,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAClC,CAAC;IAED,iBAAiB;QACf,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,IAAI,CAAC,cAAc,GAAG,IAAI,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,wDAAwD;IACxD,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAC5C,CAAC;IAED,wDAAwD;IACxD,KAAK,CAAC,SAAS;QACb,MAAM,IAAI,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAC5C,CAAC;IAED,wDAAwD;IACxD,KAAK,CAAC,GAAG,CAAC,KAAe,EAAE,IAA6B;QACtD,MAAM,IAAI,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAC5C,CAAC;CACF"}
1
+ {"version":3,"file":"copilot-cli.plugin.js","sourceRoot":"","sources":["../../../../src/agents/plugins/copilot-cli/copilot-cli.plugin.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"copilot-cli.session.d.ts","sourceRoot":"","sources":["../../../../src/agents/plugins/copilot-cli/copilot-cli.session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,uBAAuB,EACvB,iBAAiB,EAClB,MAAM,0CAA0C,CAAC;AAClD,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EAElB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAmCzD,qBAAa,wBAAyB,YAAW,cAAc;IAIjD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAHrC,QAAQ,CAAC,SAAS,iBAA0B;IAC5C,OAAO,CAAC,UAAU,CAA0B;gBAEf,QAAQ,EAAE,aAAa;IAKpD,iBAAiB,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI;IAQpD;;;;;OAKG;IACG,gBAAgB,CAAC,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAuEvF;;;;;;OAMG;IACG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAuLnF,yEAAyE;IACnE,cAAc,CAClB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC;CAwC7B"}
1
+ {"version":3,"file":"copilot-cli.session.d.ts","sourceRoot":"","sources":["../../../../src/agents/plugins/copilot-cli/copilot-cli.session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,uBAAuB,EACvB,iBAAiB,EAClB,MAAM,0CAA0C,CAAC;AAClD,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EAElB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAmCzD,qBAAa,wBAAyB,YAAW,cAAc;IAIjD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAHrC,QAAQ,CAAC,SAAS,iBAA0B;IAC5C,OAAO,CAAC,UAAU,CAA0B;gBAEf,QAAQ,EAAE,aAAa;IAKpD,iBAAiB,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI;IAQpD;;;;;OAKG;IACG,gBAAgB,CAAC,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAuEvF;;;;;;OAMG;IACG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAmMnF,yEAAyE;IACnE,cAAc,CAClB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC;CAwC7B"}
@@ -191,7 +191,12 @@ export class CopilotCliSessionAdapter {
191
191
  break;
192
192
  }
193
193
  case 'user.message': {
194
- const text = event.data?.text;
194
+ const data = event.data ?? {};
195
+ const text = typeof data.text === 'string' && data.text.trim()
196
+ ? data.text
197
+ : typeof data.content === 'string'
198
+ ? data.content
199
+ : undefined;
195
200
  if (typeof text === 'string' && text.trim()) {
196
201
  userPrompts.push({ count: 1, text });
197
202
  }
@@ -218,7 +223,14 @@ export class CopilotCliSessionAdapter {
218
223
  timestamp: event.timestamp,
219
224
  cwd,
220
225
  gitBranch: branch,
221
- message: { role: 'assistant', model: data.model ?? currentModel },
226
+ message: {
227
+ role: 'assistant',
228
+ model: data.model ?? currentModel,
229
+ content: typeof data.content === 'string'
230
+ ? data.content
231
+ : '',
232
+ toolRequests: Array.isArray(data.toolRequests) ? data.toolRequests : [],
233
+ },
222
234
  };
223
235
  if (!record.message.model) {
224
236
  unlabelledTurns.push(record);