@clinebot/core 0.0.20 → 0.0.21

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 (356) hide show
  1. package/dist/account/cline-account-service.d.ts +3 -2
  2. package/dist/account/cline-account-service.d.ts.map +1 -0
  3. package/dist/account/index.d.ts +1 -0
  4. package/dist/account/index.d.ts.map +1 -0
  5. package/dist/account/rpc.d.ts +1 -0
  6. package/dist/account/rpc.d.ts.map +1 -0
  7. package/dist/account/types.d.ts +1 -0
  8. package/dist/account/types.d.ts.map +1 -0
  9. package/dist/agents/agent-config-loader.d.ts +1 -0
  10. package/dist/agents/agent-config-loader.d.ts.map +1 -0
  11. package/dist/agents/agent-config-parser.d.ts +1 -0
  12. package/dist/agents/agent-config-parser.d.ts.map +1 -0
  13. package/dist/agents/hooks-config-loader.d.ts +1 -0
  14. package/dist/agents/hooks-config-loader.d.ts.map +1 -0
  15. package/dist/agents/index.d.ts +1 -0
  16. package/dist/agents/index.d.ts.map +1 -0
  17. package/dist/agents/plugin-config-loader.d.ts +1 -0
  18. package/dist/agents/plugin-config-loader.d.ts.map +1 -0
  19. package/dist/agents/plugin-loader.d.ts +1 -0
  20. package/dist/agents/plugin-loader.d.ts.map +1 -0
  21. package/dist/agents/plugin-sandbox.d.ts +1 -0
  22. package/dist/agents/plugin-sandbox.d.ts.map +1 -0
  23. package/dist/agents/unified-config-file-watcher.d.ts +1 -0
  24. package/dist/agents/unified-config-file-watcher.d.ts.map +1 -0
  25. package/dist/agents/user-instruction-config-loader.d.ts +1 -0
  26. package/dist/agents/user-instruction-config-loader.d.ts.map +1 -0
  27. package/dist/auth/client.d.ts +1 -0
  28. package/dist/auth/client.d.ts.map +1 -0
  29. package/dist/auth/cline.d.ts +1 -0
  30. package/dist/auth/cline.d.ts.map +1 -0
  31. package/dist/auth/codex.d.ts +1 -0
  32. package/dist/auth/codex.d.ts.map +1 -0
  33. package/dist/auth/oca.d.ts +1 -0
  34. package/dist/auth/oca.d.ts.map +1 -0
  35. package/dist/auth/server.d.ts +1 -0
  36. package/dist/auth/server.d.ts.map +1 -0
  37. package/dist/auth/types.d.ts +1 -0
  38. package/dist/auth/types.d.ts.map +1 -0
  39. package/dist/auth/utils.d.ts +1 -0
  40. package/dist/auth/utils.d.ts.map +1 -0
  41. package/dist/chat/chat-schema.d.ts +13 -12
  42. package/dist/chat/chat-schema.d.ts.map +1 -0
  43. package/dist/index.d.ts +3 -1
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.node.d.ts +2 -0
  46. package/dist/index.node.d.ts.map +1 -0
  47. package/dist/index.node.js +303 -302
  48. package/dist/input/file-indexer.d.ts +1 -0
  49. package/dist/input/file-indexer.d.ts.map +1 -0
  50. package/dist/input/index.d.ts +1 -0
  51. package/dist/input/index.d.ts.map +1 -0
  52. package/dist/input/mention-enricher.d.ts +1 -0
  53. package/dist/input/mention-enricher.d.ts.map +1 -0
  54. package/dist/mcp/config-loader.d.ts +1 -0
  55. package/dist/mcp/config-loader.d.ts.map +1 -0
  56. package/dist/mcp/index.d.ts +1 -0
  57. package/dist/mcp/index.d.ts.map +1 -0
  58. package/dist/mcp/manager.d.ts +1 -0
  59. package/dist/mcp/manager.d.ts.map +1 -0
  60. package/dist/mcp/types.d.ts +1 -0
  61. package/dist/mcp/types.d.ts.map +1 -0
  62. package/dist/providers/local-provider-registry.d.ts +36 -0
  63. package/dist/providers/local-provider-registry.d.ts.map +1 -0
  64. package/dist/providers/local-provider-service.d.ts +2 -1
  65. package/dist/providers/local-provider-service.d.ts.map +1 -0
  66. package/dist/runtime/commands.d.ts +1 -0
  67. package/dist/runtime/commands.d.ts.map +1 -0
  68. package/dist/runtime/hook-file-hooks.d.ts +1 -0
  69. package/dist/runtime/hook-file-hooks.d.ts.map +1 -0
  70. package/dist/runtime/rules.d.ts +1 -0
  71. package/dist/runtime/rules.d.ts.map +1 -0
  72. package/dist/runtime/runtime-builder.d.ts +1 -0
  73. package/dist/runtime/runtime-builder.d.ts.map +1 -0
  74. package/dist/runtime/sandbox/subprocess-sandbox.d.ts +1 -0
  75. package/dist/runtime/sandbox/subprocess-sandbox.d.ts.map +1 -0
  76. package/dist/runtime/session-runtime.d.ts +2 -0
  77. package/dist/runtime/session-runtime.d.ts.map +1 -0
  78. package/dist/runtime/skills.d.ts +1 -0
  79. package/dist/runtime/skills.d.ts.map +1 -0
  80. package/dist/runtime/tool-approval.d.ts +1 -0
  81. package/dist/runtime/tool-approval.d.ts.map +1 -0
  82. package/dist/runtime/workflows.d.ts +1 -0
  83. package/dist/runtime/workflows.d.ts.map +1 -0
  84. package/dist/session/default-session-manager.d.ts +4 -0
  85. package/dist/session/default-session-manager.d.ts.map +1 -0
  86. package/dist/session/file-session-service.d.ts +1 -0
  87. package/dist/session/file-session-service.d.ts.map +1 -0
  88. package/dist/session/rpc-session-service.d.ts +1 -0
  89. package/dist/session/rpc-session-service.d.ts.map +1 -0
  90. package/dist/session/rpc-spawn-lease.d.ts +1 -0
  91. package/dist/session/rpc-spawn-lease.d.ts.map +1 -0
  92. package/dist/session/runtime-oauth-token-manager.d.ts +1 -0
  93. package/dist/session/runtime-oauth-token-manager.d.ts.map +1 -0
  94. package/dist/session/session-agent-events.d.ts +20 -1
  95. package/dist/session/session-agent-events.d.ts.map +1 -0
  96. package/dist/session/session-artifacts.d.ts +1 -0
  97. package/dist/session/session-artifacts.d.ts.map +1 -0
  98. package/dist/session/session-config-builder.d.ts +1 -0
  99. package/dist/session/session-config-builder.d.ts.map +1 -0
  100. package/dist/session/session-graph.d.ts +1 -0
  101. package/dist/session/session-graph.d.ts.map +1 -0
  102. package/dist/session/session-host.d.ts +1 -0
  103. package/dist/session/session-host.d.ts.map +1 -0
  104. package/dist/session/session-manager.d.ts +1 -0
  105. package/dist/session/session-manager.d.ts.map +1 -0
  106. package/dist/session/session-manifest.d.ts +2 -1
  107. package/dist/session/session-manifest.d.ts.map +1 -0
  108. package/dist/session/session-service.d.ts +1 -0
  109. package/dist/session/session-service.d.ts.map +1 -0
  110. package/dist/session/session-team-coordination.d.ts +1 -0
  111. package/dist/session/session-team-coordination.d.ts.map +1 -0
  112. package/dist/session/session-telemetry.d.ts +3 -1
  113. package/dist/session/session-telemetry.d.ts.map +1 -0
  114. package/dist/session/sqlite-rpc-session-backend.d.ts +1 -0
  115. package/dist/session/sqlite-rpc-session-backend.d.ts.map +1 -0
  116. package/dist/session/unified-session-persistence-service.d.ts +1 -0
  117. package/dist/session/unified-session-persistence-service.d.ts.map +1 -0
  118. package/dist/session/utils/helpers.d.ts +1 -0
  119. package/dist/session/utils/helpers.d.ts.map +1 -0
  120. package/dist/session/utils/types.d.ts +1 -0
  121. package/dist/session/utils/types.d.ts.map +1 -0
  122. package/dist/session/utils/usage.d.ts +1 -0
  123. package/dist/session/utils/usage.d.ts.map +1 -0
  124. package/dist/session/workspace-manager.d.ts +1 -0
  125. package/dist/session/workspace-manager.d.ts.map +1 -0
  126. package/dist/session/workspace-manifest.d.ts +1 -0
  127. package/dist/session/workspace-manifest.d.ts.map +1 -0
  128. package/dist/storage/file-team-store.d.ts +1 -0
  129. package/dist/storage/file-team-store.d.ts.map +1 -0
  130. package/dist/storage/provider-settings-legacy-migration.d.ts +1 -0
  131. package/dist/storage/provider-settings-legacy-migration.d.ts.map +1 -0
  132. package/dist/storage/provider-settings-manager.d.ts +1 -0
  133. package/dist/storage/provider-settings-manager.d.ts.map +1 -0
  134. package/dist/storage/sqlite-session-store.d.ts +1 -0
  135. package/dist/storage/sqlite-session-store.d.ts.map +1 -0
  136. package/dist/storage/sqlite-team-store.d.ts +1 -0
  137. package/dist/storage/sqlite-team-store.d.ts.map +1 -0
  138. package/dist/storage/team-store.d.ts +1 -0
  139. package/dist/storage/team-store.d.ts.map +1 -0
  140. package/dist/team/index.d.ts +1 -0
  141. package/dist/team/index.d.ts.map +1 -0
  142. package/dist/team/projections.d.ts +1 -0
  143. package/dist/team/projections.d.ts.map +1 -0
  144. package/dist/telemetry/ITelemetryAdapter.d.ts +1 -0
  145. package/dist/telemetry/ITelemetryAdapter.d.ts.map +1 -0
  146. package/dist/telemetry/LoggerTelemetryAdapter.d.ts +1 -0
  147. package/dist/telemetry/LoggerTelemetryAdapter.d.ts.map +1 -0
  148. package/dist/telemetry/OpenTelemetryAdapter.d.ts +1 -0
  149. package/dist/telemetry/OpenTelemetryAdapter.d.ts.map +1 -0
  150. package/dist/telemetry/OpenTelemetryProvider.d.ts +1 -0
  151. package/dist/telemetry/OpenTelemetryProvider.d.ts.map +1 -0
  152. package/dist/telemetry/TelemetryService.d.ts +1 -0
  153. package/dist/telemetry/TelemetryService.d.ts.map +1 -0
  154. package/dist/telemetry/core-events.d.ts +55 -22
  155. package/dist/telemetry/core-events.d.ts.map +1 -0
  156. package/dist/telemetry/opentelemetry.d.ts +1 -0
  157. package/dist/telemetry/opentelemetry.d.ts.map +1 -0
  158. package/dist/tools/constants.d.ts +1 -0
  159. package/dist/tools/constants.d.ts.map +1 -0
  160. package/dist/tools/definitions.d.ts +8 -1
  161. package/dist/tools/definitions.d.ts.map +1 -0
  162. package/dist/tools/executors/apply-patch-parser.d.ts +1 -0
  163. package/dist/tools/executors/apply-patch-parser.d.ts.map +1 -0
  164. package/dist/tools/executors/apply-patch.d.ts +1 -0
  165. package/dist/tools/executors/apply-patch.d.ts.map +1 -0
  166. package/dist/tools/executors/bash.d.ts +2 -1
  167. package/dist/tools/executors/bash.d.ts.map +1 -0
  168. package/dist/tools/executors/editor.d.ts +1 -0
  169. package/dist/tools/executors/editor.d.ts.map +1 -0
  170. package/dist/tools/executors/file-read.d.ts +1 -0
  171. package/dist/tools/executors/file-read.d.ts.map +1 -0
  172. package/dist/tools/executors/index.d.ts +14 -7
  173. package/dist/tools/executors/index.d.ts.map +1 -0
  174. package/dist/tools/executors/search.d.ts +1 -0
  175. package/dist/tools/executors/search.d.ts.map +1 -0
  176. package/dist/tools/executors/web-fetch.d.ts +1 -0
  177. package/dist/tools/executors/web-fetch.d.ts.map +1 -0
  178. package/dist/tools/helpers.d.ts +15 -0
  179. package/dist/tools/helpers.d.ts.map +1 -0
  180. package/dist/tools/index.d.ts +2 -1
  181. package/dist/tools/index.d.ts.map +1 -0
  182. package/dist/tools/model-tool-routing.d.ts +1 -0
  183. package/dist/tools/model-tool-routing.d.ts.map +1 -0
  184. package/dist/tools/presets.d.ts +1 -0
  185. package/dist/tools/presets.d.ts.map +1 -0
  186. package/dist/tools/schemas.d.ts +41 -0
  187. package/dist/tools/schemas.d.ts.map +1 -0
  188. package/dist/tools/types.d.ts +3 -2
  189. package/dist/tools/types.d.ts.map +1 -0
  190. package/dist/types/common.d.ts +1 -0
  191. package/dist/types/common.d.ts.map +1 -0
  192. package/dist/types/config.d.ts +1 -0
  193. package/dist/types/config.d.ts.map +1 -0
  194. package/dist/types/events.d.ts +1 -0
  195. package/dist/types/events.d.ts.map +1 -0
  196. package/dist/types/provider-settings.d.ts +1 -0
  197. package/dist/types/provider-settings.d.ts.map +1 -0
  198. package/dist/types/sessions.d.ts +1 -0
  199. package/dist/types/sessions.d.ts.map +1 -0
  200. package/dist/types/storage.d.ts +1 -0
  201. package/dist/types/storage.d.ts.map +1 -0
  202. package/dist/types/workspace.d.ts +1 -0
  203. package/dist/types/workspace.d.ts.map +1 -0
  204. package/dist/types.d.ts +1 -0
  205. package/dist/types.d.ts.map +1 -0
  206. package/package.json +6 -4
  207. package/src/account/cline-account-service.test.ts +0 -101
  208. package/src/account/cline-account-service.ts +0 -287
  209. package/src/account/index.ts +0 -22
  210. package/src/account/rpc.test.ts +0 -62
  211. package/src/account/rpc.ts +0 -172
  212. package/src/account/types.ts +0 -98
  213. package/src/agents/agent-config-loader.test.ts +0 -236
  214. package/src/agents/agent-config-loader.ts +0 -108
  215. package/src/agents/agent-config-parser.ts +0 -198
  216. package/src/agents/hooks-config-loader.test.ts +0 -20
  217. package/src/agents/hooks-config-loader.ts +0 -118
  218. package/src/agents/index.ts +0 -85
  219. package/src/agents/plugin-config-loader.test.ts +0 -140
  220. package/src/agents/plugin-config-loader.ts +0 -97
  221. package/src/agents/plugin-loader.test.ts +0 -228
  222. package/src/agents/plugin-loader.ts +0 -172
  223. package/src/agents/plugin-sandbox-bootstrap.ts +0 -445
  224. package/src/agents/plugin-sandbox.test.ts +0 -317
  225. package/src/agents/plugin-sandbox.ts +0 -341
  226. package/src/agents/unified-config-file-watcher.test.ts +0 -196
  227. package/src/agents/unified-config-file-watcher.ts +0 -483
  228. package/src/agents/user-instruction-config-loader.test.ts +0 -158
  229. package/src/agents/user-instruction-config-loader.ts +0 -438
  230. package/src/auth/client.test.ts +0 -40
  231. package/src/auth/client.ts +0 -25
  232. package/src/auth/cline.test.ts +0 -130
  233. package/src/auth/cline.ts +0 -420
  234. package/src/auth/codex.test.ts +0 -170
  235. package/src/auth/codex.ts +0 -491
  236. package/src/auth/oca.test.ts +0 -215
  237. package/src/auth/oca.ts +0 -573
  238. package/src/auth/server.ts +0 -216
  239. package/src/auth/types.ts +0 -81
  240. package/src/auth/utils.test.ts +0 -128
  241. package/src/auth/utils.ts +0 -247
  242. package/src/chat/chat-schema.ts +0 -82
  243. package/src/index.node.ts +0 -285
  244. package/src/index.ts +0 -211
  245. package/src/input/file-indexer.d.ts +0 -11
  246. package/src/input/file-indexer.test.ts +0 -127
  247. package/src/input/file-indexer.ts +0 -327
  248. package/src/input/index.ts +0 -7
  249. package/src/input/mention-enricher.test.ts +0 -85
  250. package/src/input/mention-enricher.ts +0 -122
  251. package/src/mcp/config-loader.test.ts +0 -238
  252. package/src/mcp/config-loader.ts +0 -219
  253. package/src/mcp/index.ts +0 -26
  254. package/src/mcp/manager.test.ts +0 -106
  255. package/src/mcp/manager.ts +0 -262
  256. package/src/mcp/types.ts +0 -88
  257. package/src/providers/local-provider-service.ts +0 -608
  258. package/src/runtime/commands.test.ts +0 -98
  259. package/src/runtime/commands.ts +0 -83
  260. package/src/runtime/hook-file-hooks.test.ts +0 -237
  261. package/src/runtime/hook-file-hooks.ts +0 -859
  262. package/src/runtime/index.ts +0 -37
  263. package/src/runtime/rules.ts +0 -34
  264. package/src/runtime/runtime-builder.team-persistence.test.ts +0 -202
  265. package/src/runtime/runtime-builder.test.ts +0 -371
  266. package/src/runtime/runtime-builder.ts +0 -589
  267. package/src/runtime/runtime-parity.test.ts +0 -143
  268. package/src/runtime/sandbox/subprocess-sandbox.ts +0 -231
  269. package/src/runtime/session-runtime.ts +0 -46
  270. package/src/runtime/skills.ts +0 -44
  271. package/src/runtime/tool-approval.ts +0 -104
  272. package/src/runtime/workflows.test.ts +0 -119
  273. package/src/runtime/workflows.ts +0 -45
  274. package/src/session/default-session-manager.e2e.test.ts +0 -384
  275. package/src/session/default-session-manager.test.ts +0 -1741
  276. package/src/session/default-session-manager.ts +0 -1233
  277. package/src/session/file-session-service.ts +0 -280
  278. package/src/session/index.ts +0 -42
  279. package/src/session/rpc-session-service.ts +0 -107
  280. package/src/session/rpc-spawn-lease.test.ts +0 -49
  281. package/src/session/rpc-spawn-lease.ts +0 -122
  282. package/src/session/runtime-oauth-token-manager.test.ts +0 -137
  283. package/src/session/runtime-oauth-token-manager.ts +0 -272
  284. package/src/session/session-agent-events.ts +0 -159
  285. package/src/session/session-artifacts.ts +0 -106
  286. package/src/session/session-config-builder.ts +0 -113
  287. package/src/session/session-graph.ts +0 -92
  288. package/src/session/session-host.test.ts +0 -29
  289. package/src/session/session-host.ts +0 -242
  290. package/src/session/session-manager.ts +0 -69
  291. package/src/session/session-manifest.ts +0 -29
  292. package/src/session/session-service.team-persistence.test.ts +0 -48
  293. package/src/session/session-service.ts +0 -673
  294. package/src/session/session-team-coordination.ts +0 -229
  295. package/src/session/session-telemetry.ts +0 -95
  296. package/src/session/sqlite-rpc-session-backend.ts +0 -303
  297. package/src/session/unified-session-persistence-service.test.ts +0 -85
  298. package/src/session/unified-session-persistence-service.ts +0 -996
  299. package/src/session/utils/helpers.ts +0 -139
  300. package/src/session/utils/types.ts +0 -57
  301. package/src/session/utils/usage.ts +0 -32
  302. package/src/session/workspace-manager.ts +0 -98
  303. package/src/session/workspace-manifest.ts +0 -100
  304. package/src/storage/artifact-store.ts +0 -1
  305. package/src/storage/file-team-store.ts +0 -257
  306. package/src/storage/index.ts +0 -11
  307. package/src/storage/provider-settings-legacy-migration.test.ts +0 -307
  308. package/src/storage/provider-settings-legacy-migration.ts +0 -689
  309. package/src/storage/provider-settings-manager.test.ts +0 -145
  310. package/src/storage/provider-settings-manager.ts +0 -150
  311. package/src/storage/session-store.ts +0 -1
  312. package/src/storage/sqlite-session-store.ts +0 -275
  313. package/src/storage/sqlite-team-store.ts +0 -454
  314. package/src/storage/team-store.ts +0 -40
  315. package/src/team/index.ts +0 -4
  316. package/src/team/projections.ts +0 -285
  317. package/src/telemetry/ITelemetryAdapter.ts +0 -94
  318. package/src/telemetry/LoggerTelemetryAdapter.test.ts +0 -42
  319. package/src/telemetry/LoggerTelemetryAdapter.ts +0 -114
  320. package/src/telemetry/OpenTelemetryAdapter.test.ts +0 -157
  321. package/src/telemetry/OpenTelemetryAdapter.ts +0 -348
  322. package/src/telemetry/OpenTelemetryProvider.test.ts +0 -113
  323. package/src/telemetry/OpenTelemetryProvider.ts +0 -322
  324. package/src/telemetry/TelemetryService.test.ts +0 -134
  325. package/src/telemetry/TelemetryService.ts +0 -141
  326. package/src/telemetry/core-events.ts +0 -344
  327. package/src/telemetry/opentelemetry.ts +0 -20
  328. package/src/tools/constants.ts +0 -35
  329. package/src/tools/definitions.test.ts +0 -658
  330. package/src/tools/definitions.ts +0 -726
  331. package/src/tools/executors/apply-patch-parser.ts +0 -520
  332. package/src/tools/executors/apply-patch.ts +0 -359
  333. package/src/tools/executors/bash.ts +0 -205
  334. package/src/tools/executors/editor.test.ts +0 -35
  335. package/src/tools/executors/editor.ts +0 -219
  336. package/src/tools/executors/file-read.test.ts +0 -49
  337. package/src/tools/executors/file-read.ts +0 -110
  338. package/src/tools/executors/index.ts +0 -75
  339. package/src/tools/executors/search.ts +0 -278
  340. package/src/tools/executors/web-fetch.ts +0 -259
  341. package/src/tools/index.ts +0 -168
  342. package/src/tools/model-tool-routing.test.ts +0 -86
  343. package/src/tools/model-tool-routing.ts +0 -132
  344. package/src/tools/presets.test.ts +0 -62
  345. package/src/tools/presets.ts +0 -168
  346. package/src/tools/schemas.ts +0 -284
  347. package/src/tools/types.ts +0 -328
  348. package/src/types/common.ts +0 -14
  349. package/src/types/config.ts +0 -84
  350. package/src/types/events.ts +0 -74
  351. package/src/types/index.ts +0 -24
  352. package/src/types/provider-settings.ts +0 -43
  353. package/src/types/sessions.ts +0 -16
  354. package/src/types/storage.ts +0 -64
  355. package/src/types/workspace.ts +0 -7
  356. package/src/types.ts +0 -128
@@ -1,348 +0,0 @@
1
- import type { Meter } from "@opentelemetry/api";
2
- import type { Logger as OpenTelemetryLogger } from "@opentelemetry/api-logs";
3
- import type { LoggerProvider } from "@opentelemetry/sdk-logs";
4
- import type { MeterProvider } from "@opentelemetry/sdk-metrics";
5
- import type {
6
- ITelemetryAdapter,
7
- TelemetryMetadata,
8
- TelemetryPrimitive,
9
- TelemetryProperties,
10
- } from "./ITelemetryAdapter";
11
-
12
- type FlatTelemetryAttributes = Record<string, string | number | boolean>;
13
-
14
- export interface OpenTelemetryAdapterOptions {
15
- readonly metadata: TelemetryMetadata;
16
- readonly meterProvider?: MeterProvider | null;
17
- readonly loggerProvider?: LoggerProvider | null;
18
- readonly name?: string;
19
- readonly enabled?: boolean | (() => boolean);
20
- readonly distinctId?: string;
21
- readonly commonProperties?: TelemetryProperties;
22
- }
23
-
24
- export class OpenTelemetryAdapter implements ITelemetryAdapter {
25
- readonly name: string;
26
-
27
- private readonly metadata: TelemetryMetadata;
28
- private readonly meter: Meter | null;
29
- private readonly logger: OpenTelemetryLogger | null;
30
- private readonly enabled: boolean | (() => boolean);
31
- private distinctId?: string;
32
- private commonProperties: TelemetryProperties;
33
- private counters = new Map<string, ReturnType<Meter["createCounter"]>>();
34
- private histograms = new Map<string, ReturnType<Meter["createHistogram"]>>();
35
- private gauges = new Map<
36
- string,
37
- ReturnType<Meter["createObservableGauge"]>
38
- >();
39
- private gaugeValues = new Map<
40
- string,
41
- Map<string, { value: number; attributes?: TelemetryProperties }>
42
- >();
43
- private readonly meterProvider?: MeterProvider | null;
44
- private readonly loggerProvider?: LoggerProvider | null;
45
-
46
- constructor(options: OpenTelemetryAdapterOptions) {
47
- this.name = options.name ?? "OpenTelemetryAdapter";
48
- this.metadata = { ...options.metadata };
49
- this.meterProvider = options.meterProvider;
50
- this.loggerProvider = options.loggerProvider;
51
- this.meter = options.meterProvider?.getMeter("cline") ?? null;
52
- this.logger = options.loggerProvider?.getLogger("cline") ?? null;
53
- this.enabled = options.enabled ?? true;
54
- this.distinctId = options.distinctId;
55
- this.commonProperties = options.commonProperties
56
- ? { ...options.commonProperties }
57
- : {};
58
- }
59
-
60
- emit(event: string, properties?: TelemetryProperties): void {
61
- if (!this.isEnabled()) {
62
- return;
63
- }
64
- this.emitLog(event, properties, false);
65
- }
66
-
67
- emitRequired(event: string, properties?: TelemetryProperties): void {
68
- this.emitLog(event, properties, true);
69
- }
70
-
71
- recordCounter(
72
- name: string,
73
- value: number,
74
- attributes?: TelemetryProperties,
75
- description?: string,
76
- required = false,
77
- ): void {
78
- if (!this.meter || (!required && !this.isEnabled())) {
79
- return;
80
- }
81
-
82
- let counter = this.counters.get(name);
83
- if (!counter) {
84
- counter = this.meter.createCounter(
85
- name,
86
- description ? { description } : undefined,
87
- );
88
- this.counters.set(name, counter);
89
- }
90
-
91
- counter.add(
92
- value,
93
- this.flattenProperties(this.buildAttributes(attributes)),
94
- );
95
- }
96
-
97
- recordHistogram(
98
- name: string,
99
- value: number,
100
- attributes?: TelemetryProperties,
101
- description?: string,
102
- required = false,
103
- ): void {
104
- if (!this.meter || (!required && !this.isEnabled())) {
105
- return;
106
- }
107
-
108
- let histogram = this.histograms.get(name);
109
- if (!histogram) {
110
- histogram = this.meter.createHistogram(
111
- name,
112
- description ? { description } : undefined,
113
- );
114
- this.histograms.set(name, histogram);
115
- }
116
-
117
- histogram.record(
118
- value,
119
- this.flattenProperties(this.buildAttributes(attributes)),
120
- );
121
- }
122
-
123
- recordGauge(
124
- name: string,
125
- value: number | null,
126
- attributes?: TelemetryProperties,
127
- description?: string,
128
- required = false,
129
- ): void {
130
- if (!this.meter || (!required && !this.isEnabled())) {
131
- return;
132
- }
133
-
134
- const mergedAttributes = this.buildAttributes(attributes);
135
- const attrKey = JSON.stringify(mergedAttributes);
136
- const existingSeries = this.gaugeValues.get(name);
137
-
138
- if (value === null) {
139
- if (existingSeries) {
140
- existingSeries.delete(attrKey);
141
- if (existingSeries.size === 0) {
142
- this.gaugeValues.delete(name);
143
- this.gauges.delete(name);
144
- }
145
- }
146
- return;
147
- }
148
-
149
- let series = existingSeries;
150
- if (!series) {
151
- series = new Map();
152
- this.gaugeValues.set(name, series);
153
- }
154
-
155
- if (!this.gauges.has(name)) {
156
- const gauge = this.meter.createObservableGauge(
157
- name,
158
- description ? { description } : undefined,
159
- );
160
- gauge.addCallback((observableResult) => {
161
- for (const data of this.snapshotGaugeSeries(name)) {
162
- observableResult.observe(
163
- data.value,
164
- this.flattenProperties(data.attributes),
165
- );
166
- }
167
- });
168
- this.gauges.set(name, gauge);
169
- }
170
-
171
- series.set(attrKey, { value, attributes: mergedAttributes });
172
- }
173
-
174
- isEnabled(): boolean {
175
- return typeof this.enabled === "function" ? this.enabled() : this.enabled;
176
- }
177
-
178
- setDistinctId(distinctId?: string): void {
179
- this.distinctId = distinctId;
180
- }
181
-
182
- setCommonProperties(properties: TelemetryProperties): void {
183
- this.commonProperties = { ...properties };
184
- }
185
-
186
- updateCommonProperties(properties: TelemetryProperties): void {
187
- this.commonProperties = {
188
- ...this.commonProperties,
189
- ...properties,
190
- };
191
- }
192
-
193
- async flush(): Promise<void> {
194
- await Promise.all([
195
- this.meterProvider?.forceFlush?.(),
196
- this.loggerProvider?.forceFlush?.(),
197
- ]);
198
- }
199
-
200
- async dispose(): Promise<void> {
201
- await Promise.all([
202
- this.meterProvider?.shutdown?.(),
203
- this.loggerProvider?.shutdown?.(),
204
- ]);
205
- }
206
-
207
- private emitLog(
208
- event: string,
209
- properties: TelemetryProperties | undefined,
210
- required: boolean,
211
- ): void {
212
- if (!this.logger) {
213
- return;
214
- }
215
-
216
- const attributes = this.flattenProperties(
217
- this.buildAttributes(properties, required),
218
- );
219
- this.logger.emit({
220
- severityText: "INFO",
221
- body: event,
222
- attributes,
223
- });
224
- }
225
-
226
- private buildAttributes(
227
- properties?: TelemetryProperties,
228
- required = false,
229
- ): TelemetryProperties {
230
- return {
231
- ...this.commonProperties,
232
- ...properties,
233
- ...this.metadata,
234
- ...(this.distinctId ? { distinct_id: this.distinctId } : {}),
235
- ...(required ? { _required: true } : {}),
236
- };
237
- }
238
-
239
- private snapshotGaugeSeries(
240
- name: string,
241
- ): Array<{ value: number; attributes?: TelemetryProperties }> {
242
- const series = this.gaugeValues.get(name);
243
- if (!series) {
244
- return [];
245
- }
246
- return Array.from(series.values(), (entry) => ({
247
- value: entry.value,
248
- attributes: entry.attributes ? { ...entry.attributes } : undefined,
249
- }));
250
- }
251
-
252
- private flattenProperties(
253
- properties?: TelemetryProperties,
254
- prefix = "",
255
- seen: WeakSet<object> = new WeakSet(),
256
- depth = 0,
257
- ): FlatTelemetryAttributes {
258
- if (!properties) {
259
- return {};
260
- }
261
-
262
- const flattened: FlatTelemetryAttributes = {};
263
- const maxArraySize = 100;
264
- const maxDepth = 10;
265
-
266
- for (const [key, value] of Object.entries(properties)) {
267
- if (key === "__proto__" || key === "constructor" || key === "prototype") {
268
- continue;
269
- }
270
-
271
- const fullKey = prefix ? `${prefix}.${key}` : key;
272
-
273
- if (value === null || value === undefined) {
274
- flattened[fullKey] = String(value);
275
- continue;
276
- }
277
-
278
- if (Array.isArray(value)) {
279
- const limited =
280
- value.length > maxArraySize ? value.slice(0, maxArraySize) : value;
281
- try {
282
- flattened[fullKey] = JSON.stringify(limited);
283
- } catch {
284
- flattened[fullKey] = "[UnserializableArray]";
285
- }
286
- if (value.length > maxArraySize) {
287
- flattened[`${fullKey}_truncated`] = true;
288
- flattened[`${fullKey}_original_length`] = value.length;
289
- }
290
- continue;
291
- }
292
-
293
- if (typeof value === "object") {
294
- if (value instanceof Date) {
295
- flattened[fullKey] = value.toISOString();
296
- continue;
297
- }
298
- if (value instanceof Error) {
299
- flattened[fullKey] = value.message;
300
- continue;
301
- }
302
- if (seen.has(value)) {
303
- flattened[fullKey] = "[Circular]";
304
- continue;
305
- }
306
- if (depth >= maxDepth) {
307
- flattened[fullKey] = "[MaxDepthExceeded]";
308
- continue;
309
- }
310
-
311
- seen.add(value);
312
- Object.assign(
313
- flattened,
314
- this.flattenProperties(
315
- value as TelemetryProperties,
316
- fullKey,
317
- seen,
318
- depth + 1,
319
- ),
320
- );
321
- continue;
322
- }
323
-
324
- if (isTelemetryPrimitive(value)) {
325
- flattened[fullKey] = value;
326
- continue;
327
- }
328
-
329
- try {
330
- flattened[fullKey] = JSON.stringify(value);
331
- } catch {
332
- flattened[fullKey] = String(value);
333
- }
334
- }
335
-
336
- return flattened;
337
- }
338
- }
339
-
340
- function isTelemetryPrimitive(
341
- value: unknown,
342
- ): value is Exclude<TelemetryPrimitive, null | undefined> {
343
- return (
344
- typeof value === "string" ||
345
- typeof value === "number" ||
346
- typeof value === "boolean"
347
- );
348
- }
@@ -1,113 +0,0 @@
1
- import type { BasicLogger } from "@clinebot/shared";
2
- import { afterEach, describe, expect, it, vi } from "vitest";
3
- import {
4
- createConfiguredTelemetryService,
5
- createOpenTelemetryTelemetryService,
6
- OpenTelemetryProvider,
7
- } from "./OpenTelemetryProvider";
8
- import { TelemetryService } from "./TelemetryService";
9
-
10
- describe("createOpenTelemetryTelemetryService", () => {
11
- afterEach(() => {
12
- vi.restoreAllMocks();
13
- });
14
-
15
- it("logs a provider creation event during bootstrap", async () => {
16
- const captureRequired = vi
17
- .spyOn(TelemetryService.prototype, "captureRequired")
18
- .mockImplementation(() => {});
19
-
20
- const { provider } = createOpenTelemetryTelemetryService({
21
- metadata: {
22
- extension_version: "1.2.3",
23
- cline_type: "cli",
24
- platform: "terminal",
25
- platform_version: process.version,
26
- os_type: process.platform,
27
- os_version: "unknown",
28
- },
29
- enabled: true,
30
- logsExporter: "console",
31
- metricsExporter: "otlp",
32
- otlpProtocol: "http/json",
33
- otlpEndpoint: "http://localhost:4318",
34
- serviceName: "cline-cli",
35
- serviceVersion: "1.2.3",
36
- });
37
-
38
- expect(captureRequired).toHaveBeenCalledWith(
39
- "telemetry.provider_created",
40
- expect.objectContaining({
41
- provider: "opentelemetry",
42
- enabled: true,
43
- logsExporter: "console",
44
- metricsExporter: "otlp",
45
- otlpProtocol: "http/json",
46
- hasOtlpEndpoint: true,
47
- serviceName: "cline-cli",
48
- serviceVersion: "1.2.3",
49
- }),
50
- );
51
-
52
- await provider.dispose();
53
- });
54
-
55
- it("does not create an OTEL provider when disabled", () => {
56
- const providerSpy = vi.spyOn(
57
- OpenTelemetryProvider.prototype,
58
- "createTelemetryService",
59
- );
60
-
61
- const { telemetry, provider } = createConfiguredTelemetryService({
62
- metadata: {
63
- extension_version: "1.2.3",
64
- cline_type: "cli",
65
- platform: "terminal",
66
- platform_version: process.version,
67
- os_type: process.platform,
68
- os_version: "unknown",
69
- },
70
- enabled: false,
71
- });
72
-
73
- expect(provider).toBeUndefined();
74
- expect(providerSpy).not.toHaveBeenCalled();
75
- expect(telemetry).toBeInstanceOf(TelemetryService);
76
- });
77
-
78
- it("attaches the logger adapter when creating configured telemetry", () => {
79
- const logger: BasicLogger = {
80
- debug: vi.fn(),
81
- info: vi.fn(),
82
- warn: vi.fn(),
83
- error: vi.fn(),
84
- };
85
- const { telemetry, provider } = createConfiguredTelemetryService({
86
- metadata: {
87
- extension_version: "1.2.3",
88
- cline_type: "cli",
89
- platform: "terminal",
90
- platform_version: process.version,
91
- os_type: process.platform,
92
- os_version: "unknown",
93
- },
94
- enabled: true,
95
- logsExporter: "console",
96
- logger,
97
- });
98
-
99
- telemetry.capture({
100
- event: "session.started",
101
- properties: { sessionId: "session-1" },
102
- });
103
-
104
- expect(logger.info).toHaveBeenCalledWith(
105
- "telemetry.event",
106
- expect.objectContaining({
107
- event: "session.started",
108
- }),
109
- );
110
-
111
- return provider?.dispose();
112
- });
113
- });