@codemieai/code 0.4.2 → 0.6.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 (187) hide show
  1. package/README.md +7 -1
  2. package/bin/codemie-kimi-acp.js +18 -0
  3. package/bin/codemie-kimi.js +18 -0
  4. package/dist/agents/core/AgentCLI.d.ts.map +1 -1
  5. package/dist/agents/core/AgentCLI.js +26 -2
  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 +39 -8
  9. package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
  10. package/dist/agents/core/metrics/types.d.ts +1 -1
  11. package/dist/agents/core/metrics/types.d.ts.map +1 -1
  12. package/dist/agents/core/reasoning-effort.d.ts +8 -0
  13. package/dist/agents/core/reasoning-effort.d.ts.map +1 -0
  14. package/dist/agents/core/reasoning-effort.js +70 -0
  15. package/dist/agents/core/reasoning-effort.js.map +1 -0
  16. package/dist/agents/core/session/BaseProcessor.d.ts +2 -0
  17. package/dist/agents/core/session/BaseProcessor.d.ts.map +1 -1
  18. package/dist/agents/core/session/BaseSessionAdapter.d.ts +7 -0
  19. package/dist/agents/core/session/BaseSessionAdapter.d.ts.map +1 -1
  20. package/dist/agents/core/types.d.ts +62 -0
  21. package/dist/agents/core/types.d.ts.map +1 -1
  22. package/dist/agents/plugins/claude/claude.plugin.d.ts.map +1 -1
  23. package/dist/agents/plugins/claude/claude.plugin.js +15 -4
  24. package/dist/agents/plugins/claude/claude.plugin.js.map +1 -1
  25. package/dist/agents/plugins/claude/claude.session.d.ts +9 -0
  26. package/dist/agents/plugins/claude/claude.session.d.ts.map +1 -1
  27. package/dist/agents/plugins/claude/claude.session.js +40 -9
  28. package/dist/agents/plugins/claude/claude.session.js.map +1 -1
  29. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.d.ts +9 -0
  30. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.d.ts.map +1 -1
  31. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js +45 -11
  32. package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js.map +1 -1
  33. package/dist/agents/plugins/codex/codex-models.d.ts.map +1 -1
  34. package/dist/agents/plugins/codex/codex-models.js +7 -3
  35. package/dist/agents/plugins/codex/codex-models.js.map +1 -1
  36. package/dist/agents/plugins/codex/codex.plugin.d.ts.map +1 -1
  37. package/dist/agents/plugins/codex/codex.plugin.js +25 -7
  38. package/dist/agents/plugins/codex/codex.plugin.js.map +1 -1
  39. package/dist/agents/plugins/gemini/gemini.plugin.js.map +1 -1
  40. package/dist/agents/plugins/gemini/session/processors/gemini.metrics-processor.d.ts.map +1 -1
  41. package/dist/agents/plugins/gemini/session/processors/gemini.metrics-processor.js +3 -0
  42. package/dist/agents/plugins/gemini/session/processors/gemini.metrics-processor.js.map +1 -1
  43. package/dist/agents/plugins/kimi/extension/SKILL.md +6 -0
  44. package/dist/agents/plugins/kimi/extension/manifest.json +8 -0
  45. package/dist/agents/plugins/kimi/kimi-acp.plugin.d.ts +7 -0
  46. package/dist/agents/plugins/kimi/kimi-acp.plugin.d.ts.map +1 -0
  47. package/dist/agents/plugins/kimi/kimi-acp.plugin.js +28 -0
  48. package/dist/agents/plugins/kimi/kimi-acp.plugin.js.map +1 -0
  49. package/dist/agents/plugins/kimi/kimi.extension-installer.d.ts +56 -0
  50. package/dist/agents/plugins/kimi/kimi.extension-installer.d.ts.map +1 -0
  51. package/dist/agents/plugins/kimi/kimi.extension-installer.js +79 -0
  52. package/dist/agents/plugins/kimi/kimi.extension-installer.js.map +1 -0
  53. package/dist/agents/plugins/kimi/kimi.hook-config-injector.d.ts +34 -0
  54. package/dist/agents/plugins/kimi/kimi.hook-config-injector.d.ts.map +1 -0
  55. package/dist/agents/plugins/kimi/kimi.hook-config-injector.js +158 -0
  56. package/dist/agents/plugins/kimi/kimi.hook-config-injector.js.map +1 -0
  57. package/dist/agents/plugins/kimi/kimi.hook-transformer.d.ts +23 -0
  58. package/dist/agents/plugins/kimi/kimi.hook-transformer.d.ts.map +1 -0
  59. package/dist/agents/plugins/kimi/kimi.hook-transformer.js +46 -0
  60. package/dist/agents/plugins/kimi/kimi.hook-transformer.js.map +1 -0
  61. package/dist/agents/plugins/kimi/kimi.models.d.ts +8 -0
  62. package/dist/agents/plugins/kimi/kimi.models.d.ts.map +1 -0
  63. package/dist/agents/plugins/kimi/kimi.models.js +174 -0
  64. package/dist/agents/plugins/kimi/kimi.models.js.map +1 -0
  65. package/dist/agents/plugins/kimi/kimi.paths.d.ts +65 -0
  66. package/dist/agents/plugins/kimi/kimi.paths.d.ts.map +1 -0
  67. package/dist/agents/plugins/kimi/kimi.paths.js +95 -0
  68. package/dist/agents/plugins/kimi/kimi.paths.js.map +1 -0
  69. package/dist/agents/plugins/kimi/kimi.plugin.d.ts +37 -0
  70. package/dist/agents/plugins/kimi/kimi.plugin.d.ts.map +1 -0
  71. package/dist/agents/plugins/kimi/kimi.plugin.js +329 -0
  72. package/dist/agents/plugins/kimi/kimi.plugin.js.map +1 -0
  73. package/dist/agents/plugins/kimi/kimi.session.d.ts +40 -0
  74. package/dist/agents/plugins/kimi/kimi.session.d.ts.map +1 -0
  75. package/dist/agents/plugins/kimi/kimi.session.js +191 -0
  76. package/dist/agents/plugins/kimi/kimi.session.js.map +1 -0
  77. package/dist/agents/plugins/kimi/session/processors/kimi.metrics-processor.d.ts +43 -0
  78. package/dist/agents/plugins/kimi/session/processors/kimi.metrics-processor.d.ts.map +1 -0
  79. package/dist/agents/plugins/kimi/session/processors/kimi.metrics-processor.js +421 -0
  80. package/dist/agents/plugins/kimi/session/processors/kimi.metrics-processor.js.map +1 -0
  81. package/dist/agents/plugins/kimi/session/types.d.ts +81 -0
  82. package/dist/agents/plugins/kimi/session/types.d.ts.map +1 -0
  83. package/dist/agents/plugins/kimi/session/types.js +5 -0
  84. package/dist/agents/plugins/kimi/session/types.js.map +1 -0
  85. package/dist/agents/plugins/opencode/opencode-dynamic-models.d.ts.map +1 -1
  86. package/dist/agents/plugins/opencode/opencode-dynamic-models.js +8 -1
  87. package/dist/agents/plugins/opencode/opencode-dynamic-models.js.map +1 -1
  88. package/dist/agents/plugins/opencode/opencode-model-configs.d.ts.map +1 -1
  89. package/dist/agents/plugins/opencode/opencode-model-configs.js +29 -0
  90. package/dist/agents/plugins/opencode/opencode-model-configs.js.map +1 -1
  91. package/dist/agents/plugins/opencode/opencode.plugin.d.ts.map +1 -1
  92. package/dist/agents/plugins/opencode/opencode.plugin.js +13 -0
  93. package/dist/agents/plugins/opencode/opencode.plugin.js.map +1 -1
  94. package/dist/agents/registry.d.ts.map +1 -1
  95. package/dist/agents/registry.js +4 -0
  96. package/dist/agents/registry.js.map +1 -1
  97. package/dist/cli/commands/analytics/cost/cost-calculator.d.ts.map +1 -1
  98. package/dist/cli/commands/analytics/cost/cost-calculator.js +19 -2
  99. package/dist/cli/commands/analytics/cost/cost-calculator.js.map +1 -1
  100. package/dist/cli/commands/analytics/cost/cost-enricher.d.ts.map +1 -1
  101. package/dist/cli/commands/analytics/cost/cost-enricher.js +67 -1
  102. package/dist/cli/commands/analytics/cost/cost-enricher.js.map +1 -1
  103. package/dist/cli/commands/analytics/cost/dispatch-extractor.d.ts +2 -2
  104. package/dist/cli/commands/analytics/cost/dispatch-extractor.d.ts.map +1 -1
  105. package/dist/cli/commands/analytics/cost/dispatch-extractor.js +6 -4
  106. package/dist/cli/commands/analytics/cost/dispatch-extractor.js.map +1 -1
  107. package/dist/cli/commands/analytics/cost/pricing.d.ts +1 -0
  108. package/dist/cli/commands/analytics/cost/pricing.d.ts.map +1 -1
  109. package/dist/cli/commands/analytics/cost/pricing.js +1 -0
  110. package/dist/cli/commands/analytics/cost/pricing.js.map +1 -1
  111. package/dist/cli/commands/analytics/cost/pricing.json +79 -37
  112. package/dist/cli/commands/analytics/cost/types.d.ts +14 -0
  113. package/dist/cli/commands/analytics/cost/types.d.ts.map +1 -1
  114. package/dist/cli/commands/analytics/cost/types.js.map +1 -1
  115. package/dist/cli/commands/analytics/cost/usage-readers.d.ts +13 -4
  116. package/dist/cli/commands/analytics/cost/usage-readers.d.ts.map +1 -1
  117. package/dist/cli/commands/analytics/cost/usage-readers.js +121 -27
  118. package/dist/cli/commands/analytics/cost/usage-readers.js.map +1 -1
  119. package/dist/cli/commands/analytics/model-normalizer.d.ts +2 -0
  120. package/dist/cli/commands/analytics/model-normalizer.d.ts.map +1 -1
  121. package/dist/cli/commands/analytics/model-normalizer.js +8 -0
  122. package/dist/cli/commands/analytics/model-normalizer.js.map +1 -1
  123. package/dist/cli/commands/analytics/report/client/app.js +233 -120
  124. package/dist/cli/commands/analytics/report/template.html +28 -4
  125. package/dist/cli/commands/hook.d.ts.map +1 -1
  126. package/dist/cli/commands/hook.js +24 -7
  127. package/dist/cli/commands/hook.js.map +1 -1
  128. package/dist/env/types.d.ts +3 -0
  129. package/dist/env/types.d.ts.map +1 -1
  130. package/dist/env/types.js.map +1 -1
  131. package/dist/providers/index.d.ts +2 -0
  132. package/dist/providers/index.d.ts.map +1 -1
  133. package/dist/providers/index.js +2 -0
  134. package/dist/providers/index.js.map +1 -1
  135. package/dist/providers/plugins/moonshot-subscription/index.d.ts +9 -0
  136. package/dist/providers/plugins/moonshot-subscription/index.d.ts.map +1 -0
  137. package/dist/providers/plugins/moonshot-subscription/index.js +9 -0
  138. package/dist/providers/plugins/moonshot-subscription/index.js.map +1 -0
  139. package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.setup-steps.d.ts +8 -0
  140. package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.setup-steps.d.ts.map +1 -0
  141. package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.setup-steps.js +80 -0
  142. package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.setup-steps.js.map +1 -0
  143. package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.template.d.ts +11 -0
  144. package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.template.d.ts.map +1 -0
  145. package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.template.js +111 -0
  146. package/dist/providers/plugins/moonshot-subscription/moonshot-subscription.template.js.map +1 -0
  147. package/dist/providers/plugins/sso/proxy/plugins/codex-encrypted-content-sanitizer.plugin.d.ts +9 -2
  148. package/dist/providers/plugins/sso/proxy/plugins/codex-encrypted-content-sanitizer.plugin.d.ts.map +1 -1
  149. package/dist/providers/plugins/sso/proxy/plugins/codex-encrypted-content-sanitizer.plugin.js +17 -6
  150. package/dist/providers/plugins/sso/proxy/plugins/codex-encrypted-content-sanitizer.plugin.js.map +1 -1
  151. package/dist/providers/plugins/sso/proxy/plugins/index.d.ts +2 -1
  152. package/dist/providers/plugins/sso/proxy/plugins/index.d.ts.map +1 -1
  153. package/dist/providers/plugins/sso/proxy/plugins/index.js +3 -1
  154. package/dist/providers/plugins/sso/proxy/plugins/index.js.map +1 -1
  155. package/dist/providers/plugins/sso/proxy/plugins/kimi-request-normalizer.plugin.d.ts +18 -0
  156. package/dist/providers/plugins/sso/proxy/plugins/kimi-request-normalizer.plugin.d.ts.map +1 -0
  157. package/dist/providers/plugins/sso/proxy/plugins/kimi-request-normalizer.plugin.js +56 -0
  158. package/dist/providers/plugins/sso/proxy/plugins/kimi-request-normalizer.plugin.js.map +1 -0
  159. package/dist/providers/plugins/sso/proxy/plugins/request-sanitizer.plugin.d.ts +12 -0
  160. package/dist/providers/plugins/sso/proxy/plugins/request-sanitizer.plugin.d.ts.map +1 -1
  161. package/dist/providers/plugins/sso/proxy/plugins/request-sanitizer.plugin.js +48 -14
  162. package/dist/providers/plugins/sso/proxy/plugins/request-sanitizer.plugin.js.map +1 -1
  163. package/dist/providers/plugins/sso/sso.auth.d.ts +5 -0
  164. package/dist/providers/plugins/sso/sso.auth.d.ts.map +1 -1
  165. package/dist/providers/plugins/sso/sso.auth.js +23 -1
  166. package/dist/providers/plugins/sso/sso.auth.js.map +1 -1
  167. package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.d.ts.map +1 -1
  168. package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.js +6 -0
  169. package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.js.map +1 -1
  170. package/dist/telemetry/clients/claude-desktop/claude-desktop.parser.d.ts.map +1 -1
  171. package/dist/telemetry/clients/claude-desktop/claude-desktop.parser.js +21 -0
  172. package/dist/telemetry/clients/claude-desktop/claude-desktop.parser.js.map +1 -1
  173. package/dist/utils/config.d.ts +24 -0
  174. package/dist/utils/config.d.ts.map +1 -1
  175. package/dist/utils/config.js +85 -8
  176. package/dist/utils/config.js.map +1 -1
  177. package/dist/utils/exec.js +1 -1
  178. package/dist/utils/exec.js.map +1 -1
  179. package/dist/utils/native-installer.d.ts.map +1 -1
  180. package/dist/utils/native-installer.js +6 -3
  181. package/dist/utils/native-installer.js.map +1 -1
  182. package/dist/utils/windows-path.d.ts.map +1 -1
  183. package/dist/utils/windows-path.js +6 -2
  184. package/dist/utils/windows-path.js.map +1 -1
  185. package/package.json +4 -1
  186. package/scripts/copy-plugins.js +5 -0
  187. package/scripts/test-desktop-telemetry.js +1 -1
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Kimi Metrics Processor
3
+ *
4
+ * Extracts metrics from Kimi Code session wire events and writes them as
5
+ * incremental MetricDelta records to the shared session metrics JSONL store.
6
+ *
7
+ * Unlike the previous one-delta-per-session implementation, this processor emits
8
+ * one delta per completed assistant step, matching the per-message granularity
9
+ * used by the Claude metrics processor. The shared analytics aggregator sums
10
+ * these deltas into session/branch/project totals.
11
+ *
12
+ * Responsibilities:
13
+ * - Detect Kimi Code sessions
14
+ * - Emit one MetricDelta per completed step (identified by step.end event uuid)
15
+ * - Count tool calls and results within each step
16
+ * - Track file operations from display metadata nested inside loop events
17
+ * - Capture user prompts, skill/agent invocations, and branch info
18
+ * - Write incremental metric deltas to ~/.codemie/sessions/{sessionId}_metrics.jsonl
19
+ */
20
+ import type { SessionProcessor, ProcessingContext, ProcessingResult } from '../../../../core/session/BaseProcessor.js';
21
+ import type { ParsedSession } from '../../../../core/session/BaseSessionAdapter.js';
22
+ export declare class KimiMetricsProcessor implements SessionProcessor {
23
+ readonly name = "kimi-metrics";
24
+ readonly priority = 1;
25
+ shouldProcess(session: ParsedSession): boolean;
26
+ process(session: ParsedSession, context: ProcessingContext): Promise<ProcessingResult>;
27
+ private extractSteps;
28
+ private extractTurnPrompts;
29
+ private turnPromptToArray;
30
+ private buildStepMetrics;
31
+ private buildStepNamedInvocations;
32
+ private buildStepCommandInvocations;
33
+ private inferAgentType;
34
+ private extractTextContent;
35
+ private extractTextContentFromMessage;
36
+ private extractSlashCommand;
37
+ private resolveDisplay;
38
+ private deriveLanguage;
39
+ private deriveFormat;
40
+ private computeLineChanges;
41
+ private splitLines;
42
+ }
43
+ //# sourceMappingURL=kimi.metrics-processor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kimi.metrics-processor.d.ts","sourceRoot":"","sources":["../../../../../../src/agents/plugins/kimi/session/processors/kimi.metrics-processor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AACvH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gDAAgD,CAAC;AAepF,qBAAa,oBAAqB,YAAW,gBAAgB;IAC3D,QAAQ,CAAC,IAAI,kBAAkB;IAC/B,QAAQ,CAAC,QAAQ,KAAK;IAEtB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO;IAIxC,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAqH5F,OAAO,CAAC,YAAY;IAuEpB,OAAO,CAAC,kBAAkB;IA+B1B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,gBAAgB;IA6ExB,OAAO,CAAC,yBAAyB;IA6BjC,OAAO,CAAC,2BAA2B;IAanC,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,6BAA6B;IAerC,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,cAAc;IA4BtB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,kBAAkB;IAuB1B,OAAO,CAAC,UAAU;CAOnB"}
@@ -0,0 +1,421 @@
1
+ /**
2
+ * Kimi Metrics Processor
3
+ *
4
+ * Extracts metrics from Kimi Code session wire events and writes them as
5
+ * incremental MetricDelta records to the shared session metrics JSONL store.
6
+ *
7
+ * Unlike the previous one-delta-per-session implementation, this processor emits
8
+ * one delta per completed assistant step, matching the per-message granularity
9
+ * used by the Claude metrics processor. The shared analytics aggregator sums
10
+ * these deltas into session/branch/project totals.
11
+ *
12
+ * Responsibilities:
13
+ * - Detect Kimi Code sessions
14
+ * - Emit one MetricDelta per completed step (identified by step.end event uuid)
15
+ * - Count tool calls and results within each step
16
+ * - Track file operations from display metadata nested inside loop events
17
+ * - Capture user prompts, skill/agent invocations, and branch info
18
+ * - Write incremental metric deltas to ~/.codemie/sessions/{sessionId}_metrics.jsonl
19
+ */
20
+ import { logger } from '../../../../../utils/logger.js';
21
+ export class KimiMetricsProcessor {
22
+ name = 'kimi-metrics';
23
+ priority = 1;
24
+ shouldProcess(session) {
25
+ return session.agentName === 'Kimi Code';
26
+ }
27
+ async process(session, context) {
28
+ try {
29
+ const messages = session.messages;
30
+ if (messages.length === 0) {
31
+ logger.debug(`[${this.name}] No wire events to process for session ${session.sessionId}`);
32
+ return { success: true, message: 'No wire events to process' };
33
+ }
34
+ const { MetricsWriter } = await import('../../../../../providers/plugins/sso/session/processors/metrics/MetricsWriter.js');
35
+ const writer = new MetricsWriter(session.sessionId);
36
+ let existingDeltas = [];
37
+ try {
38
+ existingDeltas = await writer.readAll();
39
+ }
40
+ catch (error) {
41
+ logger.debug(`[${this.name}] Could not read existing deltas: ${error instanceof Error ? error.message : String(error)}`);
42
+ }
43
+ const processedStepUuids = new Set(existingDeltas.map((d) => d.recordId));
44
+ const steps = this.extractSteps(messages);
45
+ const turnPrompts = this.extractTurnPrompts(messages);
46
+ const sessionModel = session.metadata.model;
47
+ const gitBranch = session.metadata?.gitBranch ?? session.metadata?.branch;
48
+ const newDeltas = [];
49
+ const promptedTurns = new Set();
50
+ for (const step of steps) {
51
+ if (processedStepUuids.has(step.uuid)) {
52
+ continue;
53
+ }
54
+ const { tools, toolStatus, fileOperations } = this.buildStepMetrics(step);
55
+ const isFirstStepOfTurn = !promptedTurns.has(step.turnId);
56
+ const userPrompts = isFirstStepOfTurn
57
+ ? this.turnPromptToArray(turnPrompts.get(step.turnId))
58
+ : [];
59
+ if (userPrompts.length > 0) {
60
+ promptedTurns.add(step.turnId);
61
+ }
62
+ const { skillInvocations, agentInvocations } = this.buildStepNamedInvocations(step);
63
+ const commandInvocations = isFirstStepOfTurn
64
+ ? this.buildStepCommandInvocations(step, turnPrompts.get(step.turnId))
65
+ : {};
66
+ const delta = {
67
+ recordId: step.uuid,
68
+ sessionId: session.sessionId,
69
+ agentSessionId: context.agentSessionId || session.sessionId,
70
+ timestamp: step.timestamp,
71
+ ...(gitBranch && { gitBranch }),
72
+ ...(Object.keys(tools).length > 0 && { tools }),
73
+ ...(Object.keys(toolStatus).length > 0 && { toolStatus }),
74
+ ...(fileOperations.length > 0 && { fileOperations }),
75
+ ...(userPrompts.length > 0 && { userPrompts }),
76
+ ...(Object.keys(skillInvocations).length > 0 && { skillInvocations }),
77
+ ...(Object.keys(agentInvocations).length > 0 && { agentInvocations }),
78
+ ...(Object.keys(commandInvocations).length > 0 && { commandInvocations }),
79
+ ...(sessionModel && { models: [sessionModel] }),
80
+ };
81
+ newDeltas.push(delta);
82
+ }
83
+ for (const delta of newDeltas) {
84
+ await writer.appendDelta(delta);
85
+ }
86
+ // Preserve in-memory summary of the latest step for callers/tests.
87
+ const lastStep = steps[steps.length - 1];
88
+ if (lastStep) {
89
+ const { tools, toolStatus, fileOperations } = this.buildStepMetrics(lastStep);
90
+ const lastIsFirstStepOfTurn = lastStep.step === Math.min(...steps.filter((s) => s.turnId === lastStep.turnId).map((s) => s.step));
91
+ session.metrics = {
92
+ tools,
93
+ toolStatus,
94
+ fileOperations,
95
+ userPrompts: lastIsFirstStepOfTurn ? this.turnPromptToArray(turnPrompts.get(lastStep.turnId)) : [],
96
+ ...this.buildStepNamedInvocations(lastStep),
97
+ commandInvocations: lastIsFirstStepOfTurn
98
+ ? this.buildStepCommandInvocations(lastStep, turnPrompts.get(lastStep.turnId))
99
+ : {},
100
+ };
101
+ }
102
+ logger.info(`[${this.name}] Wrote ${newDeltas.length} metric delta(s) for session ${session.sessionId}`);
103
+ logger.debug(`[${this.name}] Metrics file: ${writer.getFilePath()}`);
104
+ return {
105
+ success: true,
106
+ message: `Generated ${newDeltas.length} delta(s)`,
107
+ metadata: {
108
+ recordsProcessed: messages.length,
109
+ deltasWritten: newDeltas.length,
110
+ syncUpdates: {
111
+ metrics: {
112
+ processedRecordIds: newDeltas.map((d) => d.recordId),
113
+ lastProcessedTimestamp: Date.now(),
114
+ totalDeltas: newDeltas.length
115
+ }
116
+ }
117
+ }
118
+ };
119
+ }
120
+ catch (error) {
121
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
122
+ logger.error(`[${this.name}] Processing failed:`, error);
123
+ return {
124
+ success: false,
125
+ message: `Metrics processing failed: ${errorMessage}`
126
+ };
127
+ }
128
+ }
129
+ extractSteps(events) {
130
+ const stepEnds = [];
131
+ const toolCalls = [];
132
+ const toolResults = [];
133
+ const displays = [];
134
+ const stepBeginUuids = new Map();
135
+ for (const event of events) {
136
+ if (event.type !== 'context.append_loop_event' || !event.event) {
137
+ continue;
138
+ }
139
+ const ev = event.event;
140
+ if (ev.type === 'step.begin' && typeof ev.uuid === 'string') {
141
+ stepBeginUuids.set(ev.uuid, { turnId: String(ev.turnId ?? '0'), step: Number(ev.step ?? 0) });
142
+ }
143
+ if (ev.type === 'tool.call' &&
144
+ typeof ev.toolCallId === 'string' &&
145
+ typeof ev.name === 'string') {
146
+ toolCalls.push(event);
147
+ }
148
+ if (ev.type === 'tool.result' && ev.result) {
149
+ toolResults.push(event);
150
+ }
151
+ const display = this.resolveDisplay(event);
152
+ if (display) {
153
+ displays.push({ stepUuid: ev.stepUuid, display });
154
+ }
155
+ }
156
+ // Build buckets from step.end events, matching related events by stepUuid.
157
+ for (const event of events) {
158
+ if (event.type !== 'context.append_loop_event' ||
159
+ event.event?.type !== 'step.end' ||
160
+ typeof event.event.uuid !== 'string') {
161
+ continue;
162
+ }
163
+ const stepUuid = event.event.uuid;
164
+ const beginInfo = stepBeginUuids.get(stepUuid);
165
+ const turnId = beginInfo?.turnId ?? String(event.event.turnId ?? '0');
166
+ const stepNumber = beginInfo?.step ?? Number(event.event.step ?? 0);
167
+ const bucket = {
168
+ uuid: stepUuid,
169
+ turnId,
170
+ step: stepNumber,
171
+ timestamp: typeof event.time === 'number' ? event.time : Date.now(),
172
+ toolCalls: toolCalls.filter((tc) => tc.event.stepUuid === stepUuid),
173
+ toolResults: toolResults.filter((tr) => tr.event?.stepUuid === stepUuid),
174
+ displays: displays
175
+ .filter((d) => d.stepUuid === stepUuid)
176
+ .map((d) => d.display),
177
+ };
178
+ stepEnds.push(bucket);
179
+ }
180
+ // Preserve chronological order by timestamp.
181
+ stepEnds.sort((a, b) => a.timestamp - b.timestamp);
182
+ return stepEnds;
183
+ }
184
+ extractTurnPrompts(events) {
185
+ const map = new Map();
186
+ let currentTurnId = '0';
187
+ for (const event of events) {
188
+ if (event.type === 'turn.prompt') {
189
+ if (typeof event.event?.turnId === 'string') {
190
+ currentTurnId = event.event.turnId;
191
+ }
192
+ const text = this.extractTextContent(event);
193
+ if (text) {
194
+ map.set(currentTurnId, text);
195
+ }
196
+ }
197
+ if (event.type === 'context.append_message' && event.message?.role === 'user') {
198
+ const origin = event.message.origin;
199
+ if (origin?.kind === 'user') {
200
+ const text = this.extractTextContentFromMessage(event.message);
201
+ if (text) {
202
+ // Prefer the explicit turnId on the message when available.
203
+ const turnId = event.event?.turnId ? String(event.event.turnId) : currentTurnId;
204
+ map.set(turnId, text);
205
+ }
206
+ }
207
+ }
208
+ }
209
+ return map;
210
+ }
211
+ turnPromptToArray(text) {
212
+ return text ? [{ count: 1, text }] : [];
213
+ }
214
+ buildStepMetrics(step) {
215
+ const tools = {};
216
+ const toolStatus = {};
217
+ const fileOperations = [];
218
+ const toolCallById = new Map();
219
+ for (const toolCall of step.toolCalls) {
220
+ const toolName = toolCall.event.name;
221
+ tools[toolName] = (tools[toolName] || 0) + 1;
222
+ if (!toolStatus[toolName]) {
223
+ toolStatus[toolName] = { success: 0, failure: 0 };
224
+ }
225
+ toolCallById.set(toolCall.event.toolCallId, toolCall);
226
+ if (typeof toolCall.event.uuid === 'string') {
227
+ toolCallById.set(toolCall.event.uuid, toolCall);
228
+ }
229
+ }
230
+ for (const resultEvent of step.toolResults) {
231
+ const ev = resultEvent.event;
232
+ if (!ev)
233
+ continue;
234
+ const matchedToolCall = (typeof ev.toolCallId === 'string' && toolCallById.get(ev.toolCallId)) ||
235
+ (typeof ev.parentUuid === 'string' && toolCallById.get(ev.parentUuid));
236
+ if (!matchedToolCall) {
237
+ continue;
238
+ }
239
+ const toolName = matchedToolCall.event.name;
240
+ const isError = ev.result?.isError === true;
241
+ if (isError) {
242
+ toolStatus[toolName].failure++;
243
+ }
244
+ else {
245
+ toolStatus[toolName].success++;
246
+ }
247
+ }
248
+ for (const display of step.displays) {
249
+ if (display.kind !== 'file_io') {
250
+ continue;
251
+ }
252
+ const operation = display.operation;
253
+ if (operation !== 'read' && operation !== 'write' && operation !== 'edit' && operation !== 'delete') {
254
+ continue;
255
+ }
256
+ const fileOp = {
257
+ type: operation,
258
+ path: typeof display.path === 'string' ? display.path : undefined,
259
+ };
260
+ if (fileOp.path) {
261
+ const language = this.deriveLanguage(fileOp.path);
262
+ const format = this.deriveFormat(fileOp.path);
263
+ if (language)
264
+ fileOp.language = language;
265
+ if (format)
266
+ fileOp.format = format;
267
+ }
268
+ if (typeof display.before === 'string' && typeof display.after === 'string') {
269
+ const lineStats = this.computeLineChanges(display.before, display.after);
270
+ fileOp.linesAdded = lineStats.linesAdded;
271
+ fileOp.linesRemoved = lineStats.linesRemoved;
272
+ fileOp.linesModified = lineStats.linesModified;
273
+ }
274
+ fileOperations.push(fileOp);
275
+ }
276
+ return { tools, toolStatus, fileOperations };
277
+ }
278
+ buildStepNamedInvocations(step) {
279
+ const skillInvocations = {};
280
+ const agentInvocations = {};
281
+ for (const toolCall of step.toolCalls) {
282
+ const args = toolCall.event.args;
283
+ if (!args || typeof args !== 'object') {
284
+ continue;
285
+ }
286
+ const toolName = toolCall.event.name;
287
+ if (toolName === 'Skill' && typeof args.skill === 'string') {
288
+ skillInvocations[args.skill] = (skillInvocations[args.skill] || 0) + 1;
289
+ }
290
+ else if ((toolName === 'Agent' || toolName === 'AgentSwarm') && typeof args.subagent_type === 'string') {
291
+ agentInvocations[args.subagent_type] = (agentInvocations[args.subagent_type] || 0) + 1;
292
+ }
293
+ else if (toolName === 'Agent' && typeof args.description === 'string') {
294
+ const agentType = this.inferAgentType(args.description);
295
+ if (agentType) {
296
+ agentInvocations[agentType] = (agentInvocations[agentType] || 0) + 1;
297
+ }
298
+ }
299
+ }
300
+ return { skillInvocations, agentInvocations };
301
+ }
302
+ buildStepCommandInvocations(step, turnPrompt) {
303
+ const commandInvocations = {};
304
+ if (turnPrompt) {
305
+ const command = this.extractSlashCommand(turnPrompt);
306
+ if (command) {
307
+ commandInvocations[command] = (commandInvocations[command] || 0) + 1;
308
+ }
309
+ }
310
+ return commandInvocations;
311
+ }
312
+ inferAgentType(description) {
313
+ const lower = description.toLowerCase();
314
+ if (lower.includes('explore'))
315
+ return 'explore';
316
+ if (lower.includes('plan'))
317
+ return 'plan';
318
+ if (lower.includes('coder'))
319
+ return 'coder';
320
+ if (lower.includes('review'))
321
+ return 'review';
322
+ return undefined;
323
+ }
324
+ extractTextContent(event) {
325
+ const input = event.input;
326
+ if (Array.isArray(input)) {
327
+ for (const part of input) {
328
+ if (part && part.type === 'text' && typeof part.text === 'string') {
329
+ return part.text;
330
+ }
331
+ }
332
+ }
333
+ return undefined;
334
+ }
335
+ extractTextContentFromMessage(message) {
336
+ const content = message.content;
337
+ if (Array.isArray(content)) {
338
+ for (const part of content) {
339
+ if (part && part.type === 'text' && typeof part.text === 'string') {
340
+ return part.text;
341
+ }
342
+ }
343
+ }
344
+ if (typeof content === 'string') {
345
+ return content;
346
+ }
347
+ return undefined;
348
+ }
349
+ extractSlashCommand(text) {
350
+ const match = text.trim().match(/^\/([a-zA-Z0-9_-]+)/);
351
+ return match ? match[1] : undefined;
352
+ }
353
+ resolveDisplay(event) {
354
+ return event.event?.display ?? event.display;
355
+ }
356
+ deriveLanguage(path) {
357
+ const ext = path.split('.').pop()?.toLowerCase();
358
+ switch (ext) {
359
+ case 'ts': return 'typescript';
360
+ case 'tsx': return 'typescript';
361
+ case 'js': return 'javascript';
362
+ case 'jsx': return 'javascript';
363
+ case 'py': return 'python';
364
+ case 'go': return 'go';
365
+ case 'rs': return 'rust';
366
+ case 'java': return 'java';
367
+ case 'kt': return 'kotlin';
368
+ case 'rb': return 'ruby';
369
+ case 'php': return 'php';
370
+ case 'c': return 'c';
371
+ case 'cpp':
372
+ case 'cc':
373
+ case 'cxx': return 'cpp';
374
+ case 'h':
375
+ case 'hpp': return 'cpp';
376
+ case 'cs': return 'csharp';
377
+ case 'swift': return 'swift';
378
+ case 'md': return 'markdown';
379
+ case 'json': return 'json';
380
+ case 'yaml':
381
+ case 'yml': return 'yaml';
382
+ case 'toml': return 'toml';
383
+ case 'sh': return 'shell';
384
+ default: return undefined;
385
+ }
386
+ }
387
+ deriveFormat(path) {
388
+ const ext = path.split('.').pop()?.toLowerCase();
389
+ return ext || undefined;
390
+ }
391
+ computeLineChanges(before, after) {
392
+ const beforeLines = this.splitLines(before);
393
+ const afterLines = this.splitLines(after);
394
+ const maxLen = Math.max(beforeLines.length, afterLines.length);
395
+ let linesAdded = 0;
396
+ let linesRemoved = 0;
397
+ let linesModified = 0;
398
+ for (let i = 0; i < maxLen; i++) {
399
+ const b = beforeLines[i];
400
+ const a = afterLines[i];
401
+ if (b === undefined && a !== undefined) {
402
+ linesAdded++;
403
+ }
404
+ else if (b !== undefined && a === undefined) {
405
+ linesRemoved++;
406
+ }
407
+ else if (b !== a) {
408
+ linesModified++;
409
+ }
410
+ }
411
+ return { linesAdded, linesRemoved, linesModified };
412
+ }
413
+ splitLines(text) {
414
+ const lines = text.split('\n');
415
+ if (lines.length > 0 && lines[lines.length - 1] === '') {
416
+ lines.pop();
417
+ }
418
+ return lines;
419
+ }
420
+ }
421
+ //# sourceMappingURL=kimi.metrics-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kimi.metrics-processor.js","sourceRoot":"","sources":["../../../../../../src/agents/plugins/kimi/session/processors/kimi.metrics-processor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Shared types for Kimi Code `wire.jsonl` session events.
3
+ */
4
+ export interface KimiUsage {
5
+ inputOther?: number;
6
+ output?: number;
7
+ inputCacheRead?: number;
8
+ inputCacheCreation?: number;
9
+ }
10
+ export type KimiDisplayOperation = 'read' | 'write' | 'edit' | 'delete';
11
+ export interface KimiWireEventDisplay {
12
+ kind?: string;
13
+ operation?: KimiDisplayOperation;
14
+ path?: string;
15
+ content?: string;
16
+ before?: string;
17
+ after?: string;
18
+ }
19
+ export interface KimiLoopEvent {
20
+ type?: string;
21
+ uuid?: string;
22
+ turnId?: string;
23
+ step?: number;
24
+ stepUuid?: string;
25
+ toolCallId?: string;
26
+ parentUuid?: string;
27
+ name?: string;
28
+ args?: Record<string, unknown>;
29
+ description?: string;
30
+ result?: {
31
+ output?: string;
32
+ isError?: boolean;
33
+ };
34
+ usage?: KimiUsage;
35
+ finishReason?: string;
36
+ /**
37
+ * Display metadata for loop events (e.g. file_io for tool calls).
38
+ * In real wire.jsonl output this is nested inside the event object,
39
+ * not at the top-level wire event.
40
+ */
41
+ display?: KimiWireEventDisplay;
42
+ }
43
+ export interface KimiWireEvent {
44
+ type: string;
45
+ time?: number;
46
+ protocol_version?: string;
47
+ created_at?: number;
48
+ app_version?: string;
49
+ profileName?: string;
50
+ systemPrompt?: string;
51
+ modelAlias?: string;
52
+ thinkingLevel?: string;
53
+ model?: string;
54
+ usage?: KimiUsage;
55
+ usageScope?: string;
56
+ input?: Array<{
57
+ type?: string;
58
+ text?: string;
59
+ }>;
60
+ origin?: {
61
+ kind?: string;
62
+ };
63
+ message?: {
64
+ role?: string;
65
+ content?: Array<{
66
+ type?: string;
67
+ text?: string;
68
+ }> | string;
69
+ toolCalls?: unknown[];
70
+ origin?: {
71
+ kind?: string;
72
+ };
73
+ };
74
+ event?: KimiLoopEvent;
75
+ /**
76
+ * @deprecated Real Kimi wire.jsonl puts display inside `event.display`.
77
+ * Keep for backward compatibility with old fixtures/tests only.
78
+ */
79
+ display?: KimiWireEventDisplay;
80
+ }
81
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/agents/plugins/kimi/session/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,SAAS;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AAExE,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;IACF,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,OAAO,CAAC,EAAE,oBAAoB,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChD,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAE3B,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,GAAG,MAAM,CAAC;QAC3D,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;QACtB,MAAM,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAC5B,CAAC;IAEF,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB;;;OAGG;IACH,OAAO,CAAC,EAAE,oBAAoB,CAAC;CAChC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Shared types for Kimi Code `wire.jsonl` session events.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/agents/plugins/kimi/session/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -1 +1 @@
1
- {"version":3,"file":"opencode-dynamic-models.d.ts","sourceRoot":"","sources":["../../../../src/agents/plugins/opencode/opencode-dynamic-models.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mDAAmD,CAAC;AAElF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AA+DvE;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,QAAQ,GAAG,mBAAmB,CA0CpF;AAID;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAyC9C"}
1
+ {"version":3,"file":"opencode-dynamic-models.d.ts","sourceRoot":"","sources":["../../../../src/agents/plugins/opencode/opencode-dynamic-models.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mDAAmD,CAAC;AAElF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAqEvE;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,QAAQ,GAAG,mBAAmB,CA0CpF;AAID;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAyC9C"}
@@ -23,7 +23,8 @@ import { logger } from '../../../utils/logger.js';
23
23
  // (POST /v1/responses) instead of Chat Completions (POST /v1/chat/completions).
24
24
  //
25
25
  // Naming conventions observed in CodeMie deployments:
26
- // Responses API → gpt-5-2-*, gpt-5.2-*, gpt-5.x-codex-*, gpt-5-x-codex-*
26
+ // Responses API → gpt-5-2-*, gpt-5.2-*, gpt-5.x-codex-*, gpt-5-x-codex-*,
27
+ // gpt-5.4-*, gpt-5-4-*, gpt-5.5-*, gpt-5-5-*
27
28
  // Chat Completions → gpt-4*, gpt-5-<year>-*, o1/o3/o4*, gemini-*, claude-*, …
28
29
  //
29
30
  // Update this list whenever new Responses-API-only models are deployed.
@@ -34,6 +35,10 @@ const RESPONSES_API_MODEL_PATTERNS = [
34
35
  /^gpt-5\.1-codex/, // gpt-5.1-codex, gpt-5.1-codex-mini, gpt-5.1-codex-max
35
36
  /^gpt-5-3-codex/, // hyphenated variant of gpt-5.3-codex
36
37
  /^gpt-5\.3-codex/, // gpt-5.3-codex-2026-02-24
38
+ /^gpt-5\.4-/, // gpt-5.4-* — Azure requires /v1/responses for tools + reasoning_effort
39
+ /^gpt-5-4-/, // hyphenated variant of gpt-5.4-*
40
+ /^gpt-5\.5-/, // gpt-5.5-2026-04-24 — same Azure restriction as gpt-5.4
41
+ /^gpt-5-5-/, // hyphenated variant of gpt-5.5-*
37
42
  ];
38
43
  function isResponsesApiModel(id) {
39
44
  return RESPONSES_API_MODEL_PATTERNS.some(p => p.test(id));
@@ -71,6 +76,8 @@ function detectLimits(id, family) {
71
76
  return { context: 1048576, output: 32768 };
72
77
  if (id.startsWith('gpt-4o'))
73
78
  return { context: 128000, output: 16384 };
79
+ if (id.startsWith('gpt-5.5') || id.startsWith('gpt-5-5'))
80
+ return { context: 1050000, output: 128000 }; // Azure-published window for gpt-5.5
74
81
  if (id.startsWith('gpt-5'))
75
82
  return { context: 400000, output: 128000 };
76
83
  if (/^o[134]-/.test(id) || id === 'o1')