@codemieai/code 0.15.3 → 0.15.5

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 (208) hide show
  1. package/dist/agents/core/AgentCLI.d.ts.map +1 -1
  2. package/dist/agents/core/AgentCLI.js +9 -0
  3. package/dist/agents/core/AgentCLI.js.map +1 -1
  4. package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
  5. package/dist/agents/core/BaseAgentAdapter.js +34 -9
  6. package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
  7. package/dist/agents/plugins/claude/claude.models.d.ts +58 -0
  8. package/dist/agents/plugins/claude/claude.models.d.ts.map +1 -1
  9. package/dist/agents/plugins/claude/claude.models.js +196 -10
  10. package/dist/agents/plugins/claude/claude.models.js.map +1 -1
  11. package/dist/agents/plugins/claude/claude.plugin.d.ts.map +1 -1
  12. package/dist/agents/plugins/claude/claude.plugin.js +147 -45
  13. package/dist/agents/plugins/claude/claude.plugin.js.map +1 -1
  14. package/dist/agents/plugins/claude/plugin/statusline.bundle.mjs +729 -0
  15. package/dist/agents/plugins/claude/statusline-installer.d.ts +1 -1
  16. package/dist/agents/plugins/claude/statusline-installer.d.ts.map +1 -1
  17. package/dist/agents/plugins/claude/statusline-installer.js +41 -3
  18. package/dist/agents/plugins/claude/statusline-installer.js.map +1 -1
  19. package/dist/agents/plugins/codex/codex-models.d.ts.map +1 -1
  20. package/dist/agents/plugins/codex/codex-models.js +109 -8
  21. package/dist/agents/plugins/codex/codex-models.js.map +1 -1
  22. package/dist/agents/plugins/codex/codex.correlation.d.ts +39 -0
  23. package/dist/agents/plugins/codex/codex.correlation.d.ts.map +1 -0
  24. package/dist/agents/plugins/codex/codex.correlation.js +150 -0
  25. package/dist/agents/plugins/codex/codex.correlation.js.map +1 -0
  26. package/dist/agents/plugins/codex/codex.plugin.d.ts.map +1 -1
  27. package/dist/agents/plugins/codex/codex.plugin.js +8 -40
  28. package/dist/agents/plugins/codex/codex.plugin.js.map +1 -1
  29. package/dist/agents/plugins/kimi/kimi.env-model.d.ts +27 -0
  30. package/dist/agents/plugins/kimi/kimi.env-model.d.ts.map +1 -0
  31. package/dist/agents/plugins/kimi/kimi.env-model.js +52 -0
  32. package/dist/agents/plugins/kimi/kimi.env-model.js.map +1 -0
  33. package/dist/agents/plugins/kimi/kimi.session.d.ts +6 -0
  34. package/dist/agents/plugins/kimi/kimi.session.d.ts.map +1 -1
  35. package/dist/agents/plugins/kimi/kimi.session.js +24 -2
  36. package/dist/agents/plugins/kimi/kimi.session.js.map +1 -1
  37. package/dist/agents/plugins/opencode/opencode-dynamic-models.js +1 -1
  38. package/dist/agents/plugins/opencode/opencode-dynamic-models.js.map +1 -1
  39. package/dist/cli/commands/analytics/cost/cost-enricher.d.ts +19 -2
  40. package/dist/cli/commands/analytics/cost/cost-enricher.d.ts.map +1 -1
  41. package/dist/cli/commands/analytics/cost/cost-enricher.js +171 -14
  42. package/dist/cli/commands/analytics/cost/cost-enricher.js.map +1 -1
  43. package/dist/cli/commands/analytics/cost/local-models.d.ts +15 -0
  44. package/dist/cli/commands/analytics/cost/local-models.d.ts.map +1 -0
  45. package/dist/cli/commands/analytics/cost/local-models.js +21 -0
  46. package/dist/cli/commands/analytics/cost/local-models.js.map +1 -0
  47. package/dist/cli/commands/analytics/cost/types.d.ts +60 -0
  48. package/dist/cli/commands/analytics/cost/types.d.ts.map +1 -1
  49. package/dist/cli/commands/analytics/cost/types.js.map +1 -1
  50. package/dist/cli/commands/analytics/cost/usage-readers.d.ts +25 -2
  51. package/dist/cli/commands/analytics/cost/usage-readers.d.ts.map +1 -1
  52. package/dist/cli/commands/analytics/cost/usage-readers.js +61 -3
  53. package/dist/cli/commands/analytics/cost/usage-readers.js.map +1 -1
  54. package/dist/cli/commands/analytics/formatter.d.ts +11 -0
  55. package/dist/cli/commands/analytics/formatter.d.ts.map +1 -1
  56. package/dist/cli/commands/analytics/formatter.js +28 -0
  57. package/dist/cli/commands/analytics/formatter.js.map +1 -1
  58. package/dist/cli/commands/analytics/index.d.ts.map +1 -1
  59. package/dist/cli/commands/analytics/index.js +113 -72
  60. package/dist/cli/commands/analytics/index.js.map +1 -1
  61. package/dist/cli/commands/analytics/otel-loader.d.ts.map +1 -1
  62. package/dist/cli/commands/analytics/otel-loader.js +60 -14
  63. package/dist/cli/commands/analytics/otel-loader.js.map +1 -1
  64. package/dist/cli/commands/analytics/otel-pricing.d.ts +38 -0
  65. package/dist/cli/commands/analytics/otel-pricing.d.ts.map +1 -0
  66. package/dist/cli/commands/analytics/otel-pricing.js +33 -0
  67. package/dist/cli/commands/analytics/otel-pricing.js.map +1 -0
  68. package/dist/cli/commands/analytics/report/client/app.js +279 -18
  69. package/dist/cli/commands/analytics/report/output-target.d.ts +22 -0
  70. package/dist/cli/commands/analytics/report/output-target.d.ts.map +1 -0
  71. package/dist/cli/commands/analytics/report/output-target.js +56 -0
  72. package/dist/cli/commands/analytics/report/output-target.js.map +1 -0
  73. package/dist/cli/commands/analytics/report/payload-builder.d.ts.map +1 -1
  74. package/dist/cli/commands/analytics/report/payload-builder.js +6 -0
  75. package/dist/cli/commands/analytics/report/payload-builder.js.map +1 -1
  76. package/dist/cli/commands/analytics/report/report-generator.d.ts +1 -1
  77. package/dist/cli/commands/analytics/report/report-generator.js +1 -1
  78. package/dist/cli/commands/analytics/report/session-report.d.ts +1 -3
  79. package/dist/cli/commands/analytics/report/session-report.d.ts.map +1 -1
  80. package/dist/cli/commands/analytics/report/session-report.js +1 -3
  81. package/dist/cli/commands/analytics/report/session-report.js.map +1 -1
  82. package/dist/cli/commands/analytics/report/template.html +6 -6
  83. package/dist/cli/commands/analytics/report/types.d.ts +17 -1
  84. package/dist/cli/commands/analytics/report/types.d.ts.map +1 -1
  85. package/dist/cli/commands/analytics/sources/sessions-source.d.ts.map +1 -1
  86. package/dist/cli/commands/analytics/sources/sessions-source.js +9 -11
  87. package/dist/cli/commands/analytics/sources/sessions-source.js.map +1 -1
  88. package/dist/cli/commands/analytics/sources/types.d.ts +0 -2
  89. package/dist/cli/commands/analytics/sources/types.d.ts.map +1 -1
  90. package/dist/cli/commands/analytics/types.d.ts +13 -7
  91. package/dist/cli/commands/analytics/types.d.ts.map +1 -1
  92. package/dist/cli/commands/doctor/checks/NpmPrefixOverrideCheck.d.ts +9 -0
  93. package/dist/cli/commands/doctor/checks/NpmPrefixOverrideCheck.d.ts.map +1 -0
  94. package/dist/cli/commands/doctor/checks/NpmPrefixOverrideCheck.js +42 -0
  95. package/dist/cli/commands/doctor/checks/NpmPrefixOverrideCheck.js.map +1 -0
  96. package/dist/cli/commands/doctor/checks/index.d.ts +1 -0
  97. package/dist/cli/commands/doctor/checks/index.d.ts.map +1 -1
  98. package/dist/cli/commands/doctor/checks/index.js +1 -0
  99. package/dist/cli/commands/doctor/checks/index.js.map +1 -1
  100. package/dist/cli/commands/doctor/index.d.ts.map +1 -1
  101. package/dist/cli/commands/doctor/index.js +2 -1
  102. package/dist/cli/commands/doctor/index.js.map +1 -1
  103. package/dist/cli/commands/models.d.ts.map +1 -1
  104. package/dist/cli/commands/models.js +16 -3
  105. package/dist/cli/commands/models.js.map +1 -1
  106. package/dist/cli/commands/proxy/connect-orchestrator.js +1 -1
  107. package/dist/cli/commands/proxy/connect-orchestrator.js.map +1 -1
  108. package/dist/cli/commands/proxy/connectors/tenant-catalog.d.ts +16 -4
  109. package/dist/cli/commands/proxy/connectors/tenant-catalog.d.ts.map +1 -1
  110. package/dist/cli/commands/proxy/connectors/tenant-catalog.js +42 -14
  111. package/dist/cli/commands/proxy/connectors/tenant-catalog.js.map +1 -1
  112. package/dist/cli/commands/proxy/connectors/vscode-models.d.ts +18 -0
  113. package/dist/cli/commands/proxy/connectors/vscode-models.d.ts.map +1 -1
  114. package/dist/cli/commands/proxy/connectors/vscode-models.js +58 -0
  115. package/dist/cli/commands/proxy/connectors/vscode-models.js.map +1 -1
  116. package/dist/cli/commands/proxy/connectors/vscode.d.ts +2 -2
  117. package/dist/cli/commands/proxy/connectors/vscode.d.ts.map +1 -1
  118. package/dist/cli/commands/proxy/connectors/vscode.js +27 -38
  119. package/dist/cli/commands/proxy/connectors/vscode.js.map +1 -1
  120. package/dist/cli/commands/update.d.ts.map +1 -1
  121. package/dist/cli/commands/update.js +4 -3
  122. package/dist/cli/commands/update.js.map +1 -1
  123. package/dist/frameworks/plugins/codegraph.plugin.js +2 -2
  124. package/dist/frameworks/plugins/codegraph.plugin.js.map +1 -1
  125. package/dist/providers/core/codemie-auth-helpers.d.ts.map +1 -1
  126. package/dist/providers/core/codemie-auth-helpers.js +6 -1
  127. package/dist/providers/core/codemie-auth-helpers.js.map +1 -1
  128. package/dist/providers/core/default-agent-hooks.d.ts.map +1 -1
  129. package/dist/providers/core/default-agent-hooks.js +9 -0
  130. package/dist/providers/core/default-agent-hooks.js.map +1 -1
  131. package/dist/providers/plugins/bedrock/bedrock.template.d.ts.map +1 -1
  132. package/dist/providers/plugins/bedrock/bedrock.template.js +5 -31
  133. package/dist/providers/plugins/bedrock/bedrock.template.js.map +1 -1
  134. package/dist/providers/plugins/sso/proxy/plugins/background-request-normalizer.plugin.d.ts +44 -0
  135. package/dist/providers/plugins/sso/proxy/plugins/background-request-normalizer.plugin.d.ts.map +1 -0
  136. package/dist/providers/plugins/sso/proxy/plugins/background-request-normalizer.plugin.js +106 -0
  137. package/dist/providers/plugins/sso/proxy/plugins/background-request-normalizer.plugin.js.map +1 -0
  138. package/dist/providers/plugins/sso/proxy/plugins/index.d.ts +3 -1
  139. package/dist/providers/plugins/sso/proxy/plugins/index.d.ts.map +1 -1
  140. package/dist/providers/plugins/sso/proxy/plugins/index.js +5 -1
  141. package/dist/providers/plugins/sso/proxy/plugins/index.js.map +1 -1
  142. package/dist/providers/plugins/sso/proxy/plugins/routing-header-injector.plugin.d.ts +67 -0
  143. package/dist/providers/plugins/sso/proxy/plugins/routing-header-injector.plugin.d.ts.map +1 -0
  144. package/dist/providers/plugins/sso/proxy/plugins/routing-header-injector.plugin.js +203 -0
  145. package/dist/providers/plugins/sso/proxy/plugins/routing-header-injector.plugin.js.map +1 -0
  146. package/dist/providers/plugins/sso/sso.http-client.d.ts +95 -0
  147. package/dist/providers/plugins/sso/sso.http-client.d.ts.map +1 -1
  148. package/dist/providers/plugins/sso/sso.http-client.js +79 -0
  149. package/dist/providers/plugins/sso/sso.http-client.js.map +1 -1
  150. package/dist/providers/plugins/sso/sso.models.d.ts +7 -0
  151. package/dist/providers/plugins/sso/sso.models.d.ts.map +1 -1
  152. package/dist/providers/plugins/sso/sso.models.js +22 -14
  153. package/dist/providers/plugins/sso/sso.models.js.map +1 -1
  154. package/dist/utils/bedrock-pricing.mjs +111 -0
  155. package/dist/utils/cli-bin.d.ts.map +1 -1
  156. package/dist/utils/cli-bin.js +3 -4
  157. package/dist/utils/cli-bin.js.map +1 -1
  158. package/dist/utils/cli-updater.d.ts +1 -0
  159. package/dist/utils/cli-updater.d.ts.map +1 -1
  160. package/dist/utils/cli-updater.js +37 -9
  161. package/dist/utils/cli-updater.js.map +1 -1
  162. package/dist/utils/credential-crypto.d.ts +51 -0
  163. package/dist/utils/credential-crypto.d.ts.map +1 -0
  164. package/dist/utils/credential-crypto.js +96 -0
  165. package/dist/utils/credential-crypto.js.map +1 -0
  166. package/dist/utils/model-normalizer.d.ts +6 -0
  167. package/dist/utils/model-normalizer.d.ts.map +1 -1
  168. package/dist/utils/model-normalizer.js +37 -19
  169. package/dist/utils/model-normalizer.js.map +1 -1
  170. package/dist/utils/npm-prefix.d.ts +48 -0
  171. package/dist/utils/npm-prefix.d.ts.map +1 -0
  172. package/dist/utils/npm-prefix.js +142 -0
  173. package/dist/utils/npm-prefix.js.map +1 -0
  174. package/dist/utils/paths.d.ts +7 -0
  175. package/dist/utils/paths.d.ts.map +1 -1
  176. package/dist/utils/paths.js +10 -0
  177. package/dist/utils/paths.js.map +1 -1
  178. package/dist/utils/platform.d.ts +10 -0
  179. package/dist/utils/platform.d.ts.map +1 -0
  180. package/dist/utils/platform.js +14 -0
  181. package/dist/utils/platform.js.map +1 -0
  182. package/dist/utils/price-resolution.d.ts +42 -0
  183. package/dist/utils/price-resolution.d.ts.map +1 -0
  184. package/dist/utils/price-resolution.js +112 -0
  185. package/dist/utils/price-resolution.js.map +1 -0
  186. package/dist/utils/pricing.d.ts +65 -6
  187. package/dist/utils/pricing.d.ts.map +1 -1
  188. package/dist/utils/pricing.js +91 -117
  189. package/dist/utils/pricing.js.map +1 -1
  190. package/dist/utils/pricing.json +201 -20
  191. package/dist/utils/processes.d.ts.map +1 -1
  192. package/dist/utils/processes.js +6 -3
  193. package/dist/utils/processes.js.map +1 -1
  194. package/dist/utils/routing-headers.mjs +104 -0
  195. package/dist/utils/security.d.ts +0 -32
  196. package/dist/utils/security.d.ts.map +1 -1
  197. package/dist/utils/security.js +20 -102
  198. package/dist/utils/security.js.map +1 -1
  199. package/package.json +4 -2
  200. package/scripts/bundle-statusline.mjs +37 -0
  201. package/scripts/copy-plugins.js +19 -2
  202. package/src/utils/tips.json +9 -9
  203. package/dist/agents/plugins/claude/plugin/__tests__/statusline.test.ts +0 -323
  204. package/dist/agents/plugins/claude/plugin/statusline.mjs +0 -282
  205. package/dist/cli/commands/analytics/exporter.d.ts +0 -20
  206. package/dist/cli/commands/analytics/exporter.d.ts.map +0 -1
  207. package/dist/cli/commands/analytics/exporter.js +0 -91
  208. package/dist/cli/commands/analytics/exporter.js.map +0 -1
@@ -0,0 +1,111 @@
1
+ // Bedrock regional-endpoint pricing.
2
+ //
3
+ // Amazon Bedrock bills a regional or multi-region (cross-region inference profile) endpoint at a
4
+ // premium over its global one, for the models Anthropic documents this two-endpoint-type pricing
5
+ // structure for — see
6
+ // https://platform.claude.com/docs/en/build-with-claude/claude-in-amazon-bedrock#regions. This
7
+ // module resolves a raw backend model id to its Bedrock region and applies that premium to a
8
+ // price/rate object; it knows nothing about routing decisions (Switchyard/LiteLLM tier, classifier
9
+ // cost — see the separate routing-headers.mjs) and nothing about any particular agent. Any agent
10
+ // whose requests can land on Bedrock through this proxy (Claude, but potentially others too) needs
11
+ // the same detection, so it lives here rather than under a specific agent's plugin directory.
12
+ //
13
+ // Deliberately plain JS with zero imports, living under src/utils/ rather than beside a specific
14
+ // agent's plugin: this file is deployed as-is to two different runtimes —
15
+ // - Any agent's standalone statusline (e.g. the Claude one, plugin/statusline.mjs — no project
16
+ // imports, `node <path>` after the CLI process exits) imports it by relative path; its own
17
+ // installer deploys this file as a flat sibling (see statusline-installer.ts).
18
+ // - src/utils/pricing.ts (the analytics/report pricing table) and
19
+ // src/cli/commands/analytics/cost/usage-readers.ts import it as a normal TS import — see the
20
+ // companion bedrock-pricing.d.mts for its types, since this file itself is plain JS, not
21
+ // compiled.
22
+ // Because tsc does not compile `.mjs`, scripts/copy-plugins.js has an explicit copy entry for it
23
+ // (same pattern as pricing.json).
24
+
25
+ /**
26
+ * The literal backend model LiteLLM dispatched to, e.g. `bedrock/converse/eu.anthropic.claude-
27
+ * haiku-4-5-20251001-v1:0` or `bedrock/us.anthropic.claude-sonnet-5`. Present on every LiteLLM-
28
+ * proxied response regardless of whether a routing decision was made at all — unlike
29
+ * `parseRoutingHeaders()` (routing-headers.mjs), which returns `null` for an unrouted turn. Used
30
+ * for Bedrock regional-endpoint pricing detection (see {@link isBedrockRegionalPremium}) because
31
+ * the cleaned `routedModel`/`requestedModel` fields, and sometimes even the response's own
32
+ * `model` field (observed on a "capable"-tier Switchyard turn), have the region qualifier
33
+ * already stripped.
34
+ *
35
+ * @param {object | null | undefined} message
36
+ * @returns {string | null}
37
+ */
38
+ export function parseBackendModelName(message) {
39
+ return message?.['x-litellm-model-name'] ?? null;
40
+ }
41
+
42
+ // Matches the Bedrock region/endpoint qualifier that sits directly before `.anthropic.` in a
43
+ // fully-qualified backend model id — `global` (the no-premium default), a geography code (`us`,
44
+ // `eu`, `jp`, `au` — Bedrock's cross-region inference profiles), or a literal AWS region
45
+ // (`us-east-2`). Matches with or without a leading `bedrock/`/`converse/` path segment.
46
+ const BEDROCK_REGION_PATTERN = /(?:^|\/)([a-z0-9-]+)\.anthropic\./i;
47
+
48
+ /**
49
+ * The Bedrock region/endpoint qualifier embedded in a fully-qualified backend model id, or
50
+ * `null` when the id carries none (a direct Anthropic API id, or a non-Bedrock provider).
51
+ *
52
+ * @param {string | null | undefined} rawModelId
53
+ * @returns {string | null}
54
+ */
55
+ export function bedrockEndpointRegion(rawModelId) {
56
+ if (!rawModelId) return null;
57
+ const match = BEDROCK_REGION_PATTERN.exec(String(rawModelId).toLowerCase());
58
+ return match ? match[1] : null;
59
+ }
60
+
61
+ /**
62
+ * True when `rawModelId` names a Bedrock regional or multi-region (cross-region inference
63
+ * profile) endpoint rather than the global one. `global`, and any id with no Bedrock region
64
+ * qualifier at all, are never regional.
65
+ *
66
+ * Says nothing about whether a premium actually applies, or how big it is — that is
67
+ * model-specific (Anthropic documents it only for Sonnet 4.5+/Haiku 4.5+/Opus 4.5+) and lives as
68
+ * a `bedrockRegionalMultiplier` field on the model's own pricing row; see
69
+ * {@link applyBedrockRegionalPremium}.
70
+ *
71
+ * @param {string | null | undefined} rawModelId
72
+ * @returns {boolean}
73
+ */
74
+ export function isBedrockRegionalPremium(rawModelId) {
75
+ const region = bedrockEndpointRegion(rawModelId);
76
+ return region != null && region !== 'global';
77
+ }
78
+
79
+ /**
80
+ * Applies a price/rate object's own `bedrockRegionalMultiplier` when `rawModelId` names a
81
+ * regional/multi-region Bedrock endpoint (see {@link isBedrockRegionalPremium}) — a no-op
82
+ * (returns `price` itself) otherwise, and when `price` carries no `bedrockRegionalMultiplier` at
83
+ * all (a pre-4.5 model, which Anthropic does not document this pricing structure for). Confirmed
84
+ * against a real LiteLLM billing breakdown: every priced component on a `us`-profile Sonnet 5
85
+ * turn, and separately on `eu`- and `jp`-profile Haiku 4.5 turns in the same session, matched
86
+ * exactly ×1.1 of the global rate, while a `global`-routed turn in the same session matched
87
+ * ×1.0 with no premium.
88
+ *
89
+ * Shared by both callers — pricing.ts's `ModelPrice` (`cacheCreation`) and statusline.mjs's
90
+ * deployed rate card (`cacheCreation`, or the raw `cacheWrite` spelling from an older install) —
91
+ * so multiplies whichever cache-write field is actually present rather than assuming one shape.
92
+ *
93
+ * @param {object | null | undefined} price
94
+ * @param {string | null | undefined} rawModelId
95
+ * @returns {object | null | undefined}
96
+ */
97
+ export function applyBedrockRegionalPremium(price, rawModelId) {
98
+ if (price == null || price.bedrockRegionalMultiplier == null || !isBedrockRegionalPremium(rawModelId)) {
99
+ return price;
100
+ }
101
+ const multiplier = price.bedrockRegionalMultiplier;
102
+ return {
103
+ ...price,
104
+ ...(price.input != null && { input: price.input * multiplier }),
105
+ ...(price.output != null && { output: price.output * multiplier }),
106
+ ...(price.cacheRead != null && { cacheRead: price.cacheRead * multiplier }),
107
+ ...(price.cacheCreation != null && { cacheCreation: price.cacheCreation * multiplier }),
108
+ ...(price.cacheWrite != null && { cacheWrite: price.cacheWrite * multiplier }),
109
+ ...(price.cacheWrite1h != null && { cacheWrite1h: price.cacheWrite1h * multiplier }),
110
+ };
111
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"cli-bin.d.ts","sourceRoot":"","sources":["../../src/utils/cli-bin.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAwDvD"}
1
+ {"version":3,"file":"cli-bin.d.ts","sourceRoot":"","sources":["../../src/utils/cli-bin.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAuDvD"}
@@ -9,8 +9,8 @@
9
9
  import fs from 'fs/promises';
10
10
  import path from 'path';
11
11
  import os from 'os';
12
- import { exec } from './exec.js';
13
12
  import { logger } from './logger.js';
13
+ import { getCodemieOrGlobalNpmPrefix } from '../utils/npm-prefix.js';
14
14
  /**
15
15
  * Restore the global 'codemie' binary symlink if it was overwritten by an
16
16
  * agent package that declares the same bin name.
@@ -30,10 +30,9 @@ export async function restoreCliBinLink() {
30
30
  return;
31
31
  }
32
32
  try {
33
- const prefixResult = await exec('npm', ['prefix', '-g']);
34
- if (prefixResult.code !== 0)
33
+ const npmPrefix = await getCodemieOrGlobalNpmPrefix();
34
+ if (!npmPrefix)
35
35
  return;
36
- const npmPrefix = prefixResult.stdout.trim();
37
36
  const globalBinPath = path.join(npmPrefix, 'bin', 'codemie');
38
37
  // Check if the path is a symlink; if not (e.g., regular file), skip.
39
38
  // On fresh installs the binary may not exist yet — return silently.
@@ -1 +1 @@
1
- {"version":3,"file":"cli-bin.js","sourceRoot":"","sources":["../../src/utils/cli-bin.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,qEAAqE;IACrE,mDAAmD;IACnD,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,OAAO,EAAE,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;QAC5D,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;QACzD,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO;QAEpC,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC7C,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAE7D,qEAAqE;QACrE,oEAAoE;QACpE,IAAI,IAAI,CAAC;QACT,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,CAAC,2BAA2B;YAC3F,MAAM,KAAK,CAAC;QACd,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YAAE,OAAO;QAEnC,8BAA8B;QAC9B,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAEvD,yEAAyE;QACzE,0EAA0E;QAC1E,IAAI,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACzC,OAAO,CAAC,gBAAgB;QAC1B,CAAC;QAED,6CAA6C;QAC7C,2FAA2F;QAC3F,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CACnC,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,CACvE,CAAC;QAEF,mEAAmE;QACnE,MAAM,OAAO,GAAG,GAAG,aAAa,gBAAgB,OAAO,CAAC,GAAG,EAAE,CAAC;QAC9D,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YACzC,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,8CAA8C,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7E,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACtE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,yDAAyD;QACzD,MAAM,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAK,CAAC,CAAC;IACnE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"cli-bin.js","sourceRoot":"","sources":["../../src/utils/cli-bin.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAEpE;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,qEAAqE;IACrE,mDAAmD;IACnD,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,OAAO,EAAE,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;QAC5D,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,2BAA2B,EAAE,CAAC;QACtD,IAAI,CAAC,SAAS;YAAE,OAAO;QAEvB,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAE7D,qEAAqE;QACrE,oEAAoE;QACpE,IAAI,IAAI,CAAC;QACT,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,CAAC,2BAA2B;YAC3F,MAAM,KAAK,CAAC;QACd,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YAAE,OAAO;QAEnC,8BAA8B;QAC9B,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAEvD,yEAAyE;QACzE,0EAA0E;QAC1E,IAAI,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACzC,OAAO,CAAC,gBAAgB;QAC1B,CAAC;QAED,6CAA6C;QAC7C,2FAA2F;QAC3F,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CACnC,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,CACvE,CAAC;QAEF,mEAAmE;QACnE,MAAM,OAAO,GAAG,GAAG,aAAa,gBAAgB,OAAO,CAAC,GAAG,EAAE,CAAC;QAC9D,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YACzC,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,8CAA8C,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7E,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACtE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,yDAAyD;QACzD,MAAM,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAK,CAAC,CAAC;IACnE,CAAC;AACH,CAAC"}
@@ -9,6 +9,7 @@
9
9
  * - CODEMIE_AUTO_UPDATE=false: Prompt user before updating
10
10
  * - CODEMIE_UPDATE_CHECK_INTERVAL: Time between update checks in ms (default: 86400000 = 24h)
11
11
  */
12
+ export declare const CLI_PACKAGE_NAME = "@codemieai/code";
12
13
  /**
13
14
  * Get the current CLI version from package.json
14
15
  */
@@ -1 +1 @@
1
- {"version":3,"file":"cli-updater.d.ts","sourceRoot":"","sources":["../../src/utils/cli-updater.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAuBH;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAcnE;AAkED;;;;;GAKG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,0BAA0B;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,+BAA+B;IAC/B,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAyC9E;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,CAmCvF;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA4CpF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAkF7D"}
1
+ {"version":3,"file":"cli-updater.d.ts","sourceRoot":"","sources":["../../src/utils/cli-updater.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAcH,eAAO,MAAM,gBAAgB,oBAAoB,CAAC;AAclD;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAcnE;AA0FD;;;;;GAKG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,0BAA0B;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,+BAA+B;IAC/B,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAyC9E;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,CAmCvF;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA8CpF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAkF7D"}
@@ -16,14 +16,18 @@ import inquirer from 'inquirer';
16
16
  import { fileURLToPath } from 'url';
17
17
  import { logger } from './logger.js';
18
18
  import { getLatestVersion, installGlobal } from './processes.js';
19
+ import { getNpmPrefixArgs } from './npm-prefix.js';
19
20
  import { compareVersions, isValidSemanticVersion } from './version-utils.js';
20
21
  import { getCodemiePath } from './paths.js';
21
22
  import { parseBooleanEnv } from './env.js';
22
- const CLI_PACKAGE_NAME = '@codemieai/code';
23
+ export const CLI_PACKAGE_NAME = '@codemieai/code';
23
24
  // Rate limiting: Check for updates at most once per interval (default: 24 hours)
24
25
  const UPDATE_CHECK_INTERVAL = parseInt(process.env.CODEMIE_UPDATE_CHECK_INTERVAL || '86400000', 10);
25
26
  const LAST_CHECK_FILE = path.join(getCodemiePath(), '.last-update-check');
26
27
  const UPDATE_LOCK_FILE = path.join(getCodemiePath(), '.update-lock');
28
+ // A lock older than this is considered orphaned (holder crashed or was killed
29
+ // mid-update) and is reclaimed. Generous vs. the 60s update install timeout.
30
+ const UPDATE_LOCK_STALE_MS = 10 * 60 * 1000;
27
31
  /**
28
32
  * Get the current CLI version from package.json
29
33
  */
@@ -75,21 +79,43 @@ async function recordUpdateCheck() {
75
79
  }
76
80
  /**
77
81
  * Acquire lock file to prevent concurrent updates
82
+ * Reclaims the lock when it is stale (holder died before releasing it)
78
83
  * @returns true if lock acquired, false if another process is updating
79
84
  */
80
85
  async function acquireUpdateLock() {
81
- try {
82
- // Try to create lock file with exclusive flag (fails if exists)
83
- const fd = await fs.open(UPDATE_LOCK_FILE, 'wx');
84
- await fd.close();
86
+ const tryAcquire = async () => {
87
+ try {
88
+ // Try to create lock file with exclusive flag (fails if exists)
89
+ const fd = await fs.open(UPDATE_LOCK_FILE, 'wx');
90
+ await fd.close();
91
+ return true;
92
+ }
93
+ catch {
94
+ return false;
95
+ }
96
+ };
97
+ if (await tryAcquire()) {
85
98
  logger.debug('Acquired update lock');
86
99
  return true;
87
100
  }
101
+ // Lock file exists - either another process is updating, or a previous
102
+ // process died before releasing it. Reclaim only when provably stale.
103
+ try {
104
+ const { mtimeMs } = await fs.stat(UPDATE_LOCK_FILE);
105
+ const ageMs = Date.now() - mtimeMs;
106
+ if (ageMs < UPDATE_LOCK_STALE_MS) {
107
+ logger.debug('Update lock already held by another process');
108
+ return false;
109
+ }
110
+ logger.debug(`Removing stale update lock (${Math.floor(ageMs / 60000)} min old)`);
111
+ await fs.unlink(UPDATE_LOCK_FILE);
112
+ }
88
113
  catch {
89
- // Lock file exists - another process is updating
90
- logger.debug('Update lock already held by another process');
91
- return false;
114
+ // Lock vanished between attempts (holder released it) - retry below
92
115
  }
116
+ const acquired = await tryAcquire();
117
+ logger.debug(acquired ? 'Acquired update lock after clearing stale lock' : 'Update lock already held by another process');
118
+ return acquired;
93
119
  }
94
120
  /**
95
121
  * Release update lock file
@@ -235,8 +261,10 @@ export async function updateCli(latestVersion, silent = false) {
235
261
  console.log();
236
262
  console.error(chalk.red('✗ Failed to update CodeMie CLI'));
237
263
  console.log();
264
+ const [, prefix] = await getNpmPrefixArgs();
265
+ const prefixFlag = prefix ? ` --prefix "${prefix}"` : '';
238
266
  console.log(chalk.yellow(' You can manually update with:'));
239
- console.log(chalk.white(` npm install -g ${CLI_PACKAGE_NAME}@${latestVersion}`));
267
+ console.log(chalk.white(` npm install -g ${CLI_PACKAGE_NAME}@${latestVersion}${prefixFlag}`));
240
268
  console.log();
241
269
  console.log(chalk.dim(' 💡 To disable auto-update: export CODEMIE_AUTO_UPDATE=false'));
242
270
  console.log();
@@ -1 +1 @@
1
- {"version":3,"file":"cli-updater.js","sourceRoot":"","sources":["../../src/utils/cli-updater.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-updater.js","sourceRoot":"","sources":["../../src/utils/cli-updater.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Credential-encryption primitives.
3
+ *
4
+ * Split out of security.ts (rather than kept there and re-exported) because the Claude Code
5
+ * statusline (src/agents/plugins/claude/plugin/statusline.ts) needs to decrypt the same
6
+ * credential files security.ts's CredentialStore writes, without hand-copying the derivation —
7
+ * but that file is bundled standalone by scripts/bundle-statusline.mjs into one self-contained
8
+ * artifact with no node_modules resolution at runtime. security.ts itself is NOT safe to import
9
+ * into that bundle: CredentialStore lazily loads the optional `keytar` native module (a `.node`
10
+ * binary esbuild has no loader for), and esbuild resolves an entire imported file's module graph
11
+ * even when only a few of its exports are actually used, so pulling in security.ts pulls in
12
+ * keytar too and the build fails outright (observed on CI, not just locally). This module has
13
+ * only Node builtin imports (crypto, os) — nothing esbuild can choke on — so statusline.ts
14
+ * imports it directly instead, and security.ts imports it right back for CredentialStore's own
15
+ * use. Keep it that way: importing anything else in here (fs, keytar, or security.ts itself)
16
+ * reintroduces the same bundling failure.
17
+ */
18
+ /** Machine-specific AES-256 key, derived identically wherever a credential file is read or written. */
19
+ export declare function deriveMachineEncryptionKey(): Buffer;
20
+ export declare function encryptWithKey(text: string, key: Buffer): string;
21
+ /** Decrypts either the current AES-256-GCM format (`iv:authTag:encrypted`) or the legacy AES-256-CBC format (`iv:encrypted`). */
22
+ export declare function decryptWithKey(text: string, key: Buffer): string;
23
+ /**
24
+ * Reduce a URL to protocol+host, or return it unchanged if it is not an
25
+ * http(s) URL with a host.
26
+ *
27
+ * `new URL()` does not throw on `scheme:rest` strings — `new URL('localhost:8080')`
28
+ * parses as protocol `localhost:` with an *empty* host. Without the host and
29
+ * protocol guard every scheme-less `host:port` would normalize to the same
30
+ * `scheme://` and two different instances would share one credential entry.
31
+ */
32
+ export declare function normalizeUrlForKey(baseUrl: string): string;
33
+ /**
34
+ * Generate a storage key for a given URL.
35
+ *
36
+ * Reduces the URL to protocol+host before hashing so storage and retrieval
37
+ * always agree on a key regardless of which path a caller passes in (e.g.
38
+ * a bare portal URL from `codemie setup` vs. a full API URL from
39
+ * `codemie profile login --url <api-url>`). Only stripping a trailing
40
+ * slash here (without dropping the path) would make the key sensitive to
41
+ * whichever URL variant happened to be passed at store time.
42
+ * @param baseUrl - The URL to hash (path/query/hash, if any, are discarded)
43
+ * @returns Storage key (e.g., "sso-abc123...")
44
+ */
45
+ export declare function deriveUrlStorageKey(baseUrl: string): string;
46
+ /**
47
+ * Storage key as it was derived before the URL was normalized to protocol+host.
48
+ * Only used to find and clean up credentials written by an earlier version.
49
+ */
50
+ export declare function deriveLegacyUrlStorageKey(baseUrl: string): string;
51
+ //# sourceMappingURL=credential-crypto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-crypto.d.ts","sourceRoot":"","sources":["../../src/utils/credential-crypto.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAMH,uGAAuG;AACvG,wBAAgB,0BAA0B,IAAI,MAAM,CAInD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAOhE;AAED,iIAAiI;AACjI,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAahE;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAU1D;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEjE"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Credential-encryption primitives.
3
+ *
4
+ * Split out of security.ts (rather than kept there and re-exported) because the Claude Code
5
+ * statusline (src/agents/plugins/claude/plugin/statusline.ts) needs to decrypt the same
6
+ * credential files security.ts's CredentialStore writes, without hand-copying the derivation —
7
+ * but that file is bundled standalone by scripts/bundle-statusline.mjs into one self-contained
8
+ * artifact with no node_modules resolution at runtime. security.ts itself is NOT safe to import
9
+ * into that bundle: CredentialStore lazily loads the optional `keytar` native module (a `.node`
10
+ * binary esbuild has no loader for), and esbuild resolves an entire imported file's module graph
11
+ * even when only a few of its exports are actually used, so pulling in security.ts pulls in
12
+ * keytar too and the build fails outright (observed on CI, not just locally). This module has
13
+ * only Node builtin imports (crypto, os) — nothing esbuild can choke on — so statusline.ts
14
+ * imports it directly instead, and security.ts imports it right back for CredentialStore's own
15
+ * use. Keep it that way: importing anything else in here (fs, keytar, or security.ts itself)
16
+ * reintroduces the same bundling failure.
17
+ */
18
+ import * as crypto from 'crypto';
19
+ import * as os from 'os';
20
+ import { URL } from 'url';
21
+ /** Machine-specific AES-256 key, derived identically wherever a credential file is read or written. */
22
+ export function deriveMachineEncryptionKey() {
23
+ const machineId = os.hostname() + os.platform() + os.arch();
24
+ const hex = crypto.createHash('sha256').update(machineId).digest('hex');
25
+ return crypto.createHash('sha256').update(hex).digest();
26
+ }
27
+ export function encryptWithKey(text, key) {
28
+ const iv = crypto.randomBytes(12);
29
+ const cipher = crypto.createCipheriv('aes-256-gcm', key, iv);
30
+ let encrypted = cipher.update(text, 'utf8', 'hex');
31
+ encrypted += cipher.final('hex');
32
+ const authTag = cipher.getAuthTag();
33
+ return iv.toString('hex') + ':' + authTag.toString('hex') + ':' + encrypted;
34
+ }
35
+ /** Decrypts either the current AES-256-GCM format (`iv:authTag:encrypted`) or the legacy AES-256-CBC format (`iv:encrypted`). */
36
+ export function decryptWithKey(text, key) {
37
+ const parts = text.split(':');
38
+ if (parts.length === 3) {
39
+ const iv = Buffer.from(parts[0], 'hex');
40
+ const authTag = Buffer.from(parts[1], 'hex');
41
+ const decipher = crypto.createDecipheriv('aes-256-gcm', key, iv);
42
+ decipher.setAuthTag(authTag);
43
+ return decipher.update(parts[2], 'hex', 'utf8') + decipher.final('utf8');
44
+ }
45
+ // Legacy CBC format: iv:encrypted (backward compat for existing stored credentials)
46
+ const iv = Buffer.from(parts[0], 'hex');
47
+ const decipher = crypto.createDecipheriv('aes-256-cbc', key, iv);
48
+ return decipher.update(parts[1], 'hex', 'utf8') + decipher.final('utf8');
49
+ }
50
+ /**
51
+ * Reduce a URL to protocol+host, or return it unchanged if it is not an
52
+ * http(s) URL with a host.
53
+ *
54
+ * `new URL()` does not throw on `scheme:rest` strings — `new URL('localhost:8080')`
55
+ * parses as protocol `localhost:` with an *empty* host. Without the host and
56
+ * protocol guard every scheme-less `host:port` would normalize to the same
57
+ * `scheme://` and two different instances would share one credential entry.
58
+ */
59
+ export function normalizeUrlForKey(baseUrl) {
60
+ try {
61
+ const parsed = new URL(baseUrl);
62
+ if (parsed.host && (parsed.protocol === 'http:' || parsed.protocol === 'https:')) {
63
+ return `${parsed.protocol}//${parsed.host}`.toLowerCase();
64
+ }
65
+ }
66
+ catch {
67
+ // Not a parseable URL — fall through to the raw form.
68
+ }
69
+ return baseUrl.replace(/\/$/, '').toLowerCase();
70
+ }
71
+ function hashStorageKey(normalized) {
72
+ return `sso-${crypto.createHash('sha256').update(normalized).digest('hex')}`;
73
+ }
74
+ /**
75
+ * Generate a storage key for a given URL.
76
+ *
77
+ * Reduces the URL to protocol+host before hashing so storage and retrieval
78
+ * always agree on a key regardless of which path a caller passes in (e.g.
79
+ * a bare portal URL from `codemie setup` vs. a full API URL from
80
+ * `codemie profile login --url <api-url>`). Only stripping a trailing
81
+ * slash here (without dropping the path) would make the key sensitive to
82
+ * whichever URL variant happened to be passed at store time.
83
+ * @param baseUrl - The URL to hash (path/query/hash, if any, are discarded)
84
+ * @returns Storage key (e.g., "sso-abc123...")
85
+ */
86
+ export function deriveUrlStorageKey(baseUrl) {
87
+ return hashStorageKey(normalizeUrlForKey(baseUrl));
88
+ }
89
+ /**
90
+ * Storage key as it was derived before the URL was normalized to protocol+host.
91
+ * Only used to find and clean up credentials written by an earlier version.
92
+ */
93
+ export function deriveLegacyUrlStorageKey(baseUrl) {
94
+ return hashStorageKey(baseUrl.replace(/\/$/, '').toLowerCase());
95
+ }
96
+ //# sourceMappingURL=credential-crypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-crypto.js","sourceRoot":"","sources":["../../src/utils/credential-crypto.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@
8
8
  * Handles various model name formats:
9
9
  * - AWS Bedrock Converse: converse/region.provider.model-v1:0 -> model
10
10
  * - AWS Bedrock Direct: region.provider.model-v1:0 -> model
11
+ * - Switchyard Bedrock alias: bedrock/region.provider.model -> model (no version suffix)
11
12
  * - Kimi Code: kimi-code/kimi-for-coding -> kimi-for-coding
12
13
  * - Standard Claude: claude-sonnet-4-5-20250929 (unchanged)
13
14
  * - OpenAI: gpt-4-turbo (unchanged)
@@ -16,7 +17,12 @@
16
17
  * Examples:
17
18
  * converse/global.anthropic.claude-haiku-4-5-20251001-v1:0 -> claude-haiku-4-5-20251001
18
19
  * eu.anthropic.claude-haiku-4-5-20251001-v1:0 -> claude-haiku-4-5-20251001
20
+ * bedrock/us.anthropic.claude-sonnet-5 -> claude-sonnet-5
21
+ * bedrock/converse/us.anthropic.claude-haiku-4-5-20251001-v1:0 -> claude-haiku-4-5-20251001
19
22
  * kimi-code/kimi-for-coding -> kimi-for-coding
23
+ * openai.gpt-4o -> gpt-4o
24
+ * azure/gpt-4o -> gpt-4o
25
+ * vertex_ai/gemini-3-pro -> gemini-3-pro
20
26
  * claude-sonnet-4-5-20250929 -> claude-sonnet-4-5-20250929
21
27
  */
22
28
  export declare function normalizeModelName(modelName: string): string;
@@ -1 +1 @@
1
- {"version":3,"file":"model-normalizer.d.ts","sourceRoot":"","sources":["../../src/utils/model-normalizer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAgC5D"}
1
+ {"version":3,"file":"model-normalizer.d.ts","sourceRoot":"","sources":["../../src/utils/model-normalizer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAkC5D"}
@@ -2,12 +2,23 @@
2
2
  * Model name normalization utilities
3
3
  * Handles various provider formats (AWS Bedrock, standard names, etc.)
4
4
  */
5
+ /**
6
+ * Vendor path prefixes some proxies/wire logs prepend ahead of the bare model id — `openai.`
7
+ * (dot form) or `openai/` (slash form), the slash-only `azure/`, `vertex_ai/` and `anthropic/`,
8
+ * and the dot-only `moonshotai.` (e.g. `moonshotai.kimi-k2.5`) and `qwen.` (e.g.
9
+ * `qwen.qwen3-coder-480b-a35b-v1`). Matched case-insensitively and stripped in
10
+ * {@link normalizeModelName}, before {@link canonicalizeModelId}'s later dots-to-dashes pass runs
11
+ * — stripping here first is what keeps `moonshotai.kimi-k2.5` resolving to `kimi-k2-5` rather than
12
+ * `moonshotai-kimi-k2-5`.
13
+ */
14
+ const VENDOR_PREFIX_PATTERN = /^(?:openai[./]|azure\/|vertex_ai\/|anthropic\/|moonshotai\.|qwen\.)/i;
5
15
  /**
6
16
  * Normalize LLM model names from different provider formats
7
17
  *
8
18
  * Handles various model name formats:
9
19
  * - AWS Bedrock Converse: converse/region.provider.model-v1:0 -> model
10
20
  * - AWS Bedrock Direct: region.provider.model-v1:0 -> model
21
+ * - Switchyard Bedrock alias: bedrock/region.provider.model -> model (no version suffix)
11
22
  * - Kimi Code: kimi-code/kimi-for-coding -> kimi-for-coding
12
23
  * - Standard Claude: claude-sonnet-4-5-20250929 (unchanged)
13
24
  * - OpenAI: gpt-4-turbo (unchanged)
@@ -16,29 +27,29 @@
16
27
  * Examples:
17
28
  * converse/global.anthropic.claude-haiku-4-5-20251001-v1:0 -> claude-haiku-4-5-20251001
18
29
  * eu.anthropic.claude-haiku-4-5-20251001-v1:0 -> claude-haiku-4-5-20251001
30
+ * bedrock/us.anthropic.claude-sonnet-5 -> claude-sonnet-5
31
+ * bedrock/converse/us.anthropic.claude-haiku-4-5-20251001-v1:0 -> claude-haiku-4-5-20251001
19
32
  * kimi-code/kimi-for-coding -> kimi-for-coding
33
+ * openai.gpt-4o -> gpt-4o
34
+ * azure/gpt-4o -> gpt-4o
35
+ * vertex_ai/gemini-3-pro -> gemini-3-pro
20
36
  * claude-sonnet-4-5-20250929 -> claude-sonnet-4-5-20250929
21
37
  */
22
38
  export function normalizeModelName(modelName) {
23
- // Extract model from AWS Bedrock converse format
24
- // Format: converse/region.provider.model-v1:0
25
- // Example: converse/global.anthropic.claude-haiku-4-5-20251001-v1:0
26
- if (modelName.startsWith('converse/')) {
27
- const match = modelName.match(/anthropic\.(claude-[a-z0-9-]+)-v\d+:/);
28
- if (match) {
29
- return match[1]; // Returns: claude-haiku-4-5-20251001
30
- }
31
- }
32
- // Extract model from AWS Bedrock direct format (without converse/ prefix)
33
- // Format: region.provider.model-v1:0
34
- // Examples:
35
- // - eu.anthropic.claude-haiku-4-5-20251001-v1:0
36
- // - us-east-1.anthropic.claude-opus-4-20250514-v1:0
37
- if (modelName.includes('.anthropic.')) {
38
- const match = modelName.match(/anthropic\.(claude-[a-z0-9-]+)-v\d+:/);
39
- if (match) {
40
- return match[1];
41
- }
39
+ // Extract model from an AWS Bedrock id, with or without a `converse/`/`bedrock/` path
40
+ // prefix — including both stacked together as `bedrock/converse/` (observed on real usage
41
+ // data) — and with or without AWS's own `-v1:0` inference-profile version suffix. The
42
+ // suffix is optional because Switchyard's own Bedrock aliases (e.g.
43
+ // `bedrock/us.anthropic.claude-sonnet-5`, seen on a "capable"-tier routed turn) carry no
44
+ // version at all, unlike a native AWS SDK Bedrock id.
45
+ // Formats:
46
+ // - converse/region.provider.model-v1:0
47
+ // - region.provider.model-v1:0
48
+ // - bedrock/region.provider.model
49
+ // - bedrock/converse/region.provider.model-v1:0
50
+ const bedrockMatch = modelName.match(/^(?:bedrock\/)?(?:converse\/)?[a-z0-9-]+\.anthropic\.(claude-[a-z0-9-]+?)(?:-v\d+:\d+)?$/);
51
+ if (bedrockMatch) {
52
+ return bedrockMatch[1]; // Returns: claude-haiku-4-5-20251001
42
53
  }
43
54
  // Strip Kimi Code vendor prefix so wire-log model aliases resolve to the pricing table.
44
55
  // Kimi emits aliases like "kimi-code/kimi-for-coding"; the canonical pricing key is
@@ -46,6 +57,13 @@ export function normalizeModelName(modelName) {
46
57
  if (modelName.startsWith('kimi-code/')) {
47
58
  return modelName.slice('kimi-code/'.length);
48
59
  }
60
+ // Strip vendor path/proxy prefixes some gateways prepend ahead of the bare model id, so
61
+ // e.g. "openai.gpt-4o" and "azure/gpt-4o" both resolve to the same pricing-table key as a
62
+ // direct "gpt-4o" id.
63
+ const vendorPrefixMatch = modelName.match(VENDOR_PREFIX_PATTERN);
64
+ if (vendorPrefixMatch) {
65
+ return modelName.slice(vendorPrefixMatch[0].length);
66
+ }
49
67
  // Return unchanged for standard formats
50
68
  return modelName;
51
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"model-normalizer.js","sourceRoot":"","sources":["../../src/utils/model-normalizer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAClD,iDAAiD;IACjD,8CAA8C;IAC9C,oEAAoE;IACpE,IAAI,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACtE,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,qCAAqC;QACxD,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,qCAAqC;IACrC,YAAY;IACZ,gDAAgD;IAChD,oDAAoD;IACpD,IAAI,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACtE,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,wFAAwF;IACxF,oFAAoF;IACpF,qBAAqB;IACrB,IAAI,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACvC,OAAO,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED,wCAAwC;IACxC,OAAO,SAAS,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"model-normalizer.js","sourceRoot":"","sources":["../../src/utils/model-normalizer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;GAQG;AACH,MAAM,qBAAqB,GAAG,sEAAsE,CAAC;AAErG;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAClD,sFAAsF;IACtF,0FAA0F;IAC1F,sFAAsF;IACtF,oEAAoE;IACpE,yFAAyF;IACzF,sDAAsD;IACtD,WAAW;IACX,wCAAwC;IACxC,+BAA+B;IAC/B,kCAAkC;IAClC,gDAAgD;IAChD,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,0FAA0F,CAAC,CAAC;IACjI,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,qCAAqC;IAC/D,CAAC;IAED,wFAAwF;IACxF,oFAAoF;IACpF,qBAAqB;IACrB,IAAI,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACvC,OAAO,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED,wFAAwF;IACxF,0FAA0F;IAC1F,sBAAsB;IACtB,MAAM,iBAAiB,GAAG,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACjE,IAAI,iBAAiB,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC;IAED,wCAAwC;IACxC,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * npm Prefix Utilities
3
+ *
4
+ * Resolves the npm prefix CodeMie runs from and detects the per-user prefix override that
5
+ * older CodeMie installers wrote to `.npmrc`.
6
+ */
7
+ /**
8
+ * Get the npm prefix the running CodeMie package was installed into, derived from its
9
+ * location: `<prefix>\node_modules\@codemieai\code` on win32,
10
+ * `<prefix>/lib/node_modules/@codemieai/code` on POSIX.
11
+ *
12
+ * @param packageDir - Package root to inspect; defaults to the running package's own root.
13
+ * @param platform - Platform whose path rules and layout to use; defaults to `process.platform`.
14
+ * @returns The prefix, or `null` when `packageDir` does not match the layout (dev checkout,
15
+ * `npm link`) or, on win32, when `<prefix>\codemie.cmd` is missing (project-local dependency,
16
+ * npx cache).
17
+ */
18
+ export declare function getCodemieNpmPrefix(packageDir?: string, platform?: NodeJS.Platform): string | null;
19
+ /**
20
+ * Path of the per-user npm prefix that older CodeMie installers wrote to `.npmrc`.
21
+ *
22
+ * @param platform - Platform to resolve the path for; defaults to `process.platform`.
23
+ */
24
+ export declare function getLegacyNpmPrefixPath(platform?: NodeJS.Platform): string;
25
+ /**
26
+ * Extract the last `prefix=` value from `.npmrc` content, with surrounding quotes removed.
27
+ */
28
+ export declare function parseNpmrcPrefix(content: string): string | null;
29
+ /**
30
+ * Read the `prefix` set in the user-level `.npmrc` (the file `npm config get userconfig` points to).
31
+ *
32
+ * Unlike `npm config get prefix`, this ignores `NPM_CONFIG_PREFIX` and global/project config.
33
+ *
34
+ * @returns The prefix, or `null` when it is not set or the file cannot be read.
35
+ */
36
+ export declare function getUserNpmrcPrefix(): Promise<string | null>;
37
+ /**
38
+ * The prefix of the running CodeMie copy, or npm's global prefix when it cannot be derived.
39
+ */
40
+ export declare function getCodemieOrGlobalNpmPrefix(): Promise<string | null>;
41
+ /**
42
+ * `--prefix` args that keep an npm global install/uninstall/list next to the running CodeMie copy.
43
+ *
44
+ * @returns `[]` when CodeMie runs from npm's global prefix, from a dev checkout, or when either
45
+ * prefix cannot be resolved; otherwise `['--prefix', <CodeMie prefix>]`.
46
+ */
47
+ export declare function getNpmPrefixArgs(): Promise<string[]>;
48
+ //# sourceMappingURL=npm-prefix.d.ts.map