@dotsetlabs/bellwether 0.10.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 (403) hide show
  1. package/CHANGELOG.md +291 -0
  2. package/LICENSE +21 -0
  3. package/README.md +739 -0
  4. package/dist/auth/credentials.d.ts +64 -0
  5. package/dist/auth/credentials.js +218 -0
  6. package/dist/auth/index.d.ts +6 -0
  7. package/dist/auth/index.js +6 -0
  8. package/dist/auth/keychain.d.ts +64 -0
  9. package/dist/auth/keychain.js +268 -0
  10. package/dist/baseline/ab-testing.d.ts +80 -0
  11. package/dist/baseline/ab-testing.js +236 -0
  12. package/dist/baseline/ai-compatibility-scorer.d.ts +95 -0
  13. package/dist/baseline/ai-compatibility-scorer.js +606 -0
  14. package/dist/baseline/calibration.d.ts +77 -0
  15. package/dist/baseline/calibration.js +136 -0
  16. package/dist/baseline/category-matching.d.ts +85 -0
  17. package/dist/baseline/category-matching.js +289 -0
  18. package/dist/baseline/change-impact-analyzer.d.ts +98 -0
  19. package/dist/baseline/change-impact-analyzer.js +592 -0
  20. package/dist/baseline/comparator.d.ts +64 -0
  21. package/dist/baseline/comparator.js +916 -0
  22. package/dist/baseline/confidence.d.ts +55 -0
  23. package/dist/baseline/confidence.js +122 -0
  24. package/dist/baseline/converter.d.ts +61 -0
  25. package/dist/baseline/converter.js +585 -0
  26. package/dist/baseline/dependency-analyzer.d.ts +89 -0
  27. package/dist/baseline/dependency-analyzer.js +567 -0
  28. package/dist/baseline/deprecation-tracker.d.ts +133 -0
  29. package/dist/baseline/deprecation-tracker.js +322 -0
  30. package/dist/baseline/diff.d.ts +55 -0
  31. package/dist/baseline/diff.js +1584 -0
  32. package/dist/baseline/documentation-scorer.d.ts +205 -0
  33. package/dist/baseline/documentation-scorer.js +466 -0
  34. package/dist/baseline/embeddings.d.ts +118 -0
  35. package/dist/baseline/embeddings.js +251 -0
  36. package/dist/baseline/error-analyzer.d.ts +198 -0
  37. package/dist/baseline/error-analyzer.js +721 -0
  38. package/dist/baseline/evaluation/evaluator.d.ts +42 -0
  39. package/dist/baseline/evaluation/evaluator.js +323 -0
  40. package/dist/baseline/evaluation/expanded-dataset.d.ts +45 -0
  41. package/dist/baseline/evaluation/expanded-dataset.js +1164 -0
  42. package/dist/baseline/evaluation/golden-dataset.d.ts +58 -0
  43. package/dist/baseline/evaluation/golden-dataset.js +717 -0
  44. package/dist/baseline/evaluation/index.d.ts +15 -0
  45. package/dist/baseline/evaluation/index.js +15 -0
  46. package/dist/baseline/evaluation/types.d.ts +186 -0
  47. package/dist/baseline/evaluation/types.js +8 -0
  48. package/dist/baseline/external-dependency-detector.d.ts +181 -0
  49. package/dist/baseline/external-dependency-detector.js +524 -0
  50. package/dist/baseline/golden-output.d.ts +162 -0
  51. package/dist/baseline/golden-output.js +636 -0
  52. package/dist/baseline/health-scorer.d.ts +174 -0
  53. package/dist/baseline/health-scorer.js +451 -0
  54. package/dist/baseline/incremental-checker.d.ts +97 -0
  55. package/dist/baseline/incremental-checker.js +174 -0
  56. package/dist/baseline/index.d.ts +31 -0
  57. package/dist/baseline/index.js +42 -0
  58. package/dist/baseline/migration-generator.d.ts +137 -0
  59. package/dist/baseline/migration-generator.js +554 -0
  60. package/dist/baseline/migrations.d.ts +60 -0
  61. package/dist/baseline/migrations.js +197 -0
  62. package/dist/baseline/performance-tracker.d.ts +214 -0
  63. package/dist/baseline/performance-tracker.js +577 -0
  64. package/dist/baseline/pr-comment-generator.d.ts +117 -0
  65. package/dist/baseline/pr-comment-generator.js +546 -0
  66. package/dist/baseline/response-fingerprint.d.ts +127 -0
  67. package/dist/baseline/response-fingerprint.js +728 -0
  68. package/dist/baseline/response-schema-tracker.d.ts +129 -0
  69. package/dist/baseline/response-schema-tracker.js +420 -0
  70. package/dist/baseline/risk-scorer.d.ts +54 -0
  71. package/dist/baseline/risk-scorer.js +434 -0
  72. package/dist/baseline/saver.d.ts +89 -0
  73. package/dist/baseline/saver.js +554 -0
  74. package/dist/baseline/scenario-generator.d.ts +151 -0
  75. package/dist/baseline/scenario-generator.js +905 -0
  76. package/dist/baseline/schema-compare.d.ts +86 -0
  77. package/dist/baseline/schema-compare.js +557 -0
  78. package/dist/baseline/schema-evolution.d.ts +189 -0
  79. package/dist/baseline/schema-evolution.js +467 -0
  80. package/dist/baseline/semantic.d.ts +203 -0
  81. package/dist/baseline/semantic.js +908 -0
  82. package/dist/baseline/synonyms.d.ts +60 -0
  83. package/dist/baseline/synonyms.js +386 -0
  84. package/dist/baseline/telemetry.d.ts +165 -0
  85. package/dist/baseline/telemetry.js +294 -0
  86. package/dist/baseline/test-pruner.d.ts +120 -0
  87. package/dist/baseline/test-pruner.js +387 -0
  88. package/dist/baseline/types.d.ts +449 -0
  89. package/dist/baseline/types.js +5 -0
  90. package/dist/baseline/version.d.ts +138 -0
  91. package/dist/baseline/version.js +206 -0
  92. package/dist/cache/index.d.ts +5 -0
  93. package/dist/cache/index.js +5 -0
  94. package/dist/cache/response-cache.d.ts +151 -0
  95. package/dist/cache/response-cache.js +287 -0
  96. package/dist/ci/index.d.ts +60 -0
  97. package/dist/ci/index.js +342 -0
  98. package/dist/cli/commands/auth.d.ts +12 -0
  99. package/dist/cli/commands/auth.js +352 -0
  100. package/dist/cli/commands/badge.d.ts +3 -0
  101. package/dist/cli/commands/badge.js +74 -0
  102. package/dist/cli/commands/baseline-accept.d.ts +15 -0
  103. package/dist/cli/commands/baseline-accept.js +178 -0
  104. package/dist/cli/commands/baseline-migrate.d.ts +12 -0
  105. package/dist/cli/commands/baseline-migrate.js +164 -0
  106. package/dist/cli/commands/baseline.d.ts +14 -0
  107. package/dist/cli/commands/baseline.js +449 -0
  108. package/dist/cli/commands/beta.d.ts +10 -0
  109. package/dist/cli/commands/beta.js +231 -0
  110. package/dist/cli/commands/check.d.ts +11 -0
  111. package/dist/cli/commands/check.js +820 -0
  112. package/dist/cli/commands/cloud/badge.d.ts +3 -0
  113. package/dist/cli/commands/cloud/badge.js +74 -0
  114. package/dist/cli/commands/cloud/diff.d.ts +6 -0
  115. package/dist/cli/commands/cloud/diff.js +79 -0
  116. package/dist/cli/commands/cloud/history.d.ts +6 -0
  117. package/dist/cli/commands/cloud/history.js +102 -0
  118. package/dist/cli/commands/cloud/link.d.ts +9 -0
  119. package/dist/cli/commands/cloud/link.js +119 -0
  120. package/dist/cli/commands/cloud/login.d.ts +7 -0
  121. package/dist/cli/commands/cloud/login.js +499 -0
  122. package/dist/cli/commands/cloud/projects.d.ts +6 -0
  123. package/dist/cli/commands/cloud/projects.js +44 -0
  124. package/dist/cli/commands/cloud/shared.d.ts +7 -0
  125. package/dist/cli/commands/cloud/shared.js +42 -0
  126. package/dist/cli/commands/cloud/teams.d.ts +8 -0
  127. package/dist/cli/commands/cloud/teams.js +169 -0
  128. package/dist/cli/commands/cloud/upload.d.ts +8 -0
  129. package/dist/cli/commands/cloud/upload.js +181 -0
  130. package/dist/cli/commands/contract.d.ts +11 -0
  131. package/dist/cli/commands/contract.js +280 -0
  132. package/dist/cli/commands/discover.d.ts +3 -0
  133. package/dist/cli/commands/discover.js +82 -0
  134. package/dist/cli/commands/eval.d.ts +9 -0
  135. package/dist/cli/commands/eval.js +187 -0
  136. package/dist/cli/commands/explore.d.ts +11 -0
  137. package/dist/cli/commands/explore.js +437 -0
  138. package/dist/cli/commands/feedback.d.ts +9 -0
  139. package/dist/cli/commands/feedback.js +174 -0
  140. package/dist/cli/commands/golden.d.ts +12 -0
  141. package/dist/cli/commands/golden.js +407 -0
  142. package/dist/cli/commands/history.d.ts +10 -0
  143. package/dist/cli/commands/history.js +202 -0
  144. package/dist/cli/commands/init.d.ts +9 -0
  145. package/dist/cli/commands/init.js +219 -0
  146. package/dist/cli/commands/interview.d.ts +3 -0
  147. package/dist/cli/commands/interview.js +903 -0
  148. package/dist/cli/commands/link.d.ts +10 -0
  149. package/dist/cli/commands/link.js +169 -0
  150. package/dist/cli/commands/login.d.ts +7 -0
  151. package/dist/cli/commands/login.js +499 -0
  152. package/dist/cli/commands/preset.d.ts +33 -0
  153. package/dist/cli/commands/preset.js +297 -0
  154. package/dist/cli/commands/profile.d.ts +33 -0
  155. package/dist/cli/commands/profile.js +286 -0
  156. package/dist/cli/commands/registry.d.ts +11 -0
  157. package/dist/cli/commands/registry.js +146 -0
  158. package/dist/cli/commands/shared.d.ts +79 -0
  159. package/dist/cli/commands/shared.js +196 -0
  160. package/dist/cli/commands/teams.d.ts +8 -0
  161. package/dist/cli/commands/teams.js +169 -0
  162. package/dist/cli/commands/test.d.ts +9 -0
  163. package/dist/cli/commands/test.js +500 -0
  164. package/dist/cli/commands/upload.d.ts +8 -0
  165. package/dist/cli/commands/upload.js +223 -0
  166. package/dist/cli/commands/validate-config.d.ts +6 -0
  167. package/dist/cli/commands/validate-config.js +35 -0
  168. package/dist/cli/commands/verify.d.ts +11 -0
  169. package/dist/cli/commands/verify.js +283 -0
  170. package/dist/cli/commands/watch.d.ts +12 -0
  171. package/dist/cli/commands/watch.js +253 -0
  172. package/dist/cli/index.d.ts +3 -0
  173. package/dist/cli/index.js +178 -0
  174. package/dist/cli/interactive.d.ts +47 -0
  175. package/dist/cli/interactive.js +216 -0
  176. package/dist/cli/output/terminal-reporter.d.ts +19 -0
  177. package/dist/cli/output/terminal-reporter.js +104 -0
  178. package/dist/cli/output.d.ts +226 -0
  179. package/dist/cli/output.js +438 -0
  180. package/dist/cli/utils/env.d.ts +5 -0
  181. package/dist/cli/utils/env.js +14 -0
  182. package/dist/cli/utils/progress.d.ts +59 -0
  183. package/dist/cli/utils/progress.js +206 -0
  184. package/dist/cli/utils/server-context.d.ts +10 -0
  185. package/dist/cli/utils/server-context.js +36 -0
  186. package/dist/cloud/auth.d.ts +144 -0
  187. package/dist/cloud/auth.js +374 -0
  188. package/dist/cloud/client.d.ts +24 -0
  189. package/dist/cloud/client.js +65 -0
  190. package/dist/cloud/http-client.d.ts +38 -0
  191. package/dist/cloud/http-client.js +215 -0
  192. package/dist/cloud/index.d.ts +23 -0
  193. package/dist/cloud/index.js +25 -0
  194. package/dist/cloud/mock-client.d.ts +107 -0
  195. package/dist/cloud/mock-client.js +545 -0
  196. package/dist/cloud/types.d.ts +515 -0
  197. package/dist/cloud/types.js +15 -0
  198. package/dist/config/defaults.d.ts +160 -0
  199. package/dist/config/defaults.js +169 -0
  200. package/dist/config/loader.d.ts +24 -0
  201. package/dist/config/loader.js +122 -0
  202. package/dist/config/template.d.ts +42 -0
  203. package/dist/config/template.js +647 -0
  204. package/dist/config/validator.d.ts +2112 -0
  205. package/dist/config/validator.js +658 -0
  206. package/dist/constants/cloud.d.ts +107 -0
  207. package/dist/constants/cloud.js +110 -0
  208. package/dist/constants/core.d.ts +521 -0
  209. package/dist/constants/core.js +556 -0
  210. package/dist/constants/testing.d.ts +1283 -0
  211. package/dist/constants/testing.js +1568 -0
  212. package/dist/constants.d.ts +10 -0
  213. package/dist/constants.js +10 -0
  214. package/dist/contract/index.d.ts +6 -0
  215. package/dist/contract/index.js +5 -0
  216. package/dist/contract/validator.d.ts +177 -0
  217. package/dist/contract/validator.js +574 -0
  218. package/dist/cost/index.d.ts +6 -0
  219. package/dist/cost/index.js +5 -0
  220. package/dist/cost/tracker.d.ts +134 -0
  221. package/dist/cost/tracker.js +313 -0
  222. package/dist/discovery/discovery.d.ts +16 -0
  223. package/dist/discovery/discovery.js +173 -0
  224. package/dist/discovery/types.d.ts +51 -0
  225. package/dist/discovery/types.js +2 -0
  226. package/dist/docs/agents.d.ts +3 -0
  227. package/dist/docs/agents.js +995 -0
  228. package/dist/docs/contract.d.ts +51 -0
  229. package/dist/docs/contract.js +1681 -0
  230. package/dist/docs/generator.d.ts +4 -0
  231. package/dist/docs/generator.js +4 -0
  232. package/dist/docs/html-reporter.d.ts +9 -0
  233. package/dist/docs/html-reporter.js +757 -0
  234. package/dist/docs/index.d.ts +10 -0
  235. package/dist/docs/index.js +11 -0
  236. package/dist/docs/junit-reporter.d.ts +18 -0
  237. package/dist/docs/junit-reporter.js +210 -0
  238. package/dist/docs/report.d.ts +14 -0
  239. package/dist/docs/report.js +44 -0
  240. package/dist/docs/sarif-reporter.d.ts +19 -0
  241. package/dist/docs/sarif-reporter.js +335 -0
  242. package/dist/docs/shared.d.ts +35 -0
  243. package/dist/docs/shared.js +162 -0
  244. package/dist/docs/templates.d.ts +12 -0
  245. package/dist/docs/templates.js +76 -0
  246. package/dist/errors/index.d.ts +6 -0
  247. package/dist/errors/index.js +6 -0
  248. package/dist/errors/retry.d.ts +92 -0
  249. package/dist/errors/retry.js +323 -0
  250. package/dist/errors/types.d.ts +321 -0
  251. package/dist/errors/types.js +584 -0
  252. package/dist/index.d.ts +32 -0
  253. package/dist/index.js +32 -0
  254. package/dist/interview/dependency-resolver.d.ts +11 -0
  255. package/dist/interview/dependency-resolver.js +32 -0
  256. package/dist/interview/interviewer.d.ts +232 -0
  257. package/dist/interview/interviewer.js +1939 -0
  258. package/dist/interview/mock-response-generator.d.ts +7 -0
  259. package/dist/interview/mock-response-generator.js +102 -0
  260. package/dist/interview/orchestrator.d.ts +237 -0
  261. package/dist/interview/orchestrator.js +1296 -0
  262. package/dist/interview/rate-limiter.d.ts +15 -0
  263. package/dist/interview/rate-limiter.js +55 -0
  264. package/dist/interview/response-validator.d.ts +10 -0
  265. package/dist/interview/response-validator.js +132 -0
  266. package/dist/interview/schema-inferrer.d.ts +8 -0
  267. package/dist/interview/schema-inferrer.js +71 -0
  268. package/dist/interview/schema-test-generator.d.ts +71 -0
  269. package/dist/interview/schema-test-generator.js +834 -0
  270. package/dist/interview/smart-value-generator.d.ts +155 -0
  271. package/dist/interview/smart-value-generator.js +554 -0
  272. package/dist/interview/stateful-test-runner.d.ts +19 -0
  273. package/dist/interview/stateful-test-runner.js +106 -0
  274. package/dist/interview/types.d.ts +561 -0
  275. package/dist/interview/types.js +2 -0
  276. package/dist/llm/anthropic.d.ts +41 -0
  277. package/dist/llm/anthropic.js +355 -0
  278. package/dist/llm/client.d.ts +123 -0
  279. package/dist/llm/client.js +42 -0
  280. package/dist/llm/factory.d.ts +38 -0
  281. package/dist/llm/factory.js +145 -0
  282. package/dist/llm/fallback.d.ts +140 -0
  283. package/dist/llm/fallback.js +379 -0
  284. package/dist/llm/index.d.ts +18 -0
  285. package/dist/llm/index.js +15 -0
  286. package/dist/llm/ollama.d.ts +37 -0
  287. package/dist/llm/ollama.js +330 -0
  288. package/dist/llm/openai.d.ts +25 -0
  289. package/dist/llm/openai.js +320 -0
  290. package/dist/llm/token-budget.d.ts +161 -0
  291. package/dist/llm/token-budget.js +395 -0
  292. package/dist/logging/logger.d.ts +70 -0
  293. package/dist/logging/logger.js +130 -0
  294. package/dist/metrics/collector.d.ts +106 -0
  295. package/dist/metrics/collector.js +547 -0
  296. package/dist/metrics/index.d.ts +7 -0
  297. package/dist/metrics/index.js +7 -0
  298. package/dist/metrics/prometheus.d.ts +20 -0
  299. package/dist/metrics/prometheus.js +241 -0
  300. package/dist/metrics/types.d.ts +209 -0
  301. package/dist/metrics/types.js +5 -0
  302. package/dist/persona/builtins.d.ts +54 -0
  303. package/dist/persona/builtins.js +219 -0
  304. package/dist/persona/index.d.ts +8 -0
  305. package/dist/persona/index.js +8 -0
  306. package/dist/persona/loader.d.ts +30 -0
  307. package/dist/persona/loader.js +190 -0
  308. package/dist/persona/types.d.ts +144 -0
  309. package/dist/persona/types.js +5 -0
  310. package/dist/persona/validation.d.ts +94 -0
  311. package/dist/persona/validation.js +332 -0
  312. package/dist/prompts/index.d.ts +5 -0
  313. package/dist/prompts/index.js +5 -0
  314. package/dist/prompts/templates.d.ts +180 -0
  315. package/dist/prompts/templates.js +431 -0
  316. package/dist/registry/client.d.ts +49 -0
  317. package/dist/registry/client.js +191 -0
  318. package/dist/registry/index.d.ts +7 -0
  319. package/dist/registry/index.js +6 -0
  320. package/dist/registry/types.d.ts +140 -0
  321. package/dist/registry/types.js +6 -0
  322. package/dist/scenarios/evaluator.d.ts +43 -0
  323. package/dist/scenarios/evaluator.js +206 -0
  324. package/dist/scenarios/index.d.ts +10 -0
  325. package/dist/scenarios/index.js +9 -0
  326. package/dist/scenarios/loader.d.ts +20 -0
  327. package/dist/scenarios/loader.js +285 -0
  328. package/dist/scenarios/types.d.ts +153 -0
  329. package/dist/scenarios/types.js +8 -0
  330. package/dist/security/index.d.ts +17 -0
  331. package/dist/security/index.js +18 -0
  332. package/dist/security/payloads.d.ts +61 -0
  333. package/dist/security/payloads.js +268 -0
  334. package/dist/security/security-tester.d.ts +42 -0
  335. package/dist/security/security-tester.js +582 -0
  336. package/dist/security/types.d.ts +166 -0
  337. package/dist/security/types.js +8 -0
  338. package/dist/transport/base-transport.d.ts +59 -0
  339. package/dist/transport/base-transport.js +38 -0
  340. package/dist/transport/http-transport.d.ts +67 -0
  341. package/dist/transport/http-transport.js +238 -0
  342. package/dist/transport/mcp-client.d.ts +141 -0
  343. package/dist/transport/mcp-client.js +496 -0
  344. package/dist/transport/sse-transport.d.ts +88 -0
  345. package/dist/transport/sse-transport.js +316 -0
  346. package/dist/transport/stdio-transport.d.ts +43 -0
  347. package/dist/transport/stdio-transport.js +238 -0
  348. package/dist/transport/types.d.ts +125 -0
  349. package/dist/transport/types.js +16 -0
  350. package/dist/utils/concurrency.d.ts +123 -0
  351. package/dist/utils/concurrency.js +213 -0
  352. package/dist/utils/formatters.d.ts +16 -0
  353. package/dist/utils/formatters.js +37 -0
  354. package/dist/utils/index.d.ts +8 -0
  355. package/dist/utils/index.js +8 -0
  356. package/dist/utils/jsonpath.d.ts +87 -0
  357. package/dist/utils/jsonpath.js +326 -0
  358. package/dist/utils/markdown.d.ts +113 -0
  359. package/dist/utils/markdown.js +265 -0
  360. package/dist/utils/network.d.ts +14 -0
  361. package/dist/utils/network.js +17 -0
  362. package/dist/utils/sanitize.d.ts +92 -0
  363. package/dist/utils/sanitize.js +191 -0
  364. package/dist/utils/semantic.d.ts +194 -0
  365. package/dist/utils/semantic.js +1051 -0
  366. package/dist/utils/smart-truncate.d.ts +94 -0
  367. package/dist/utils/smart-truncate.js +361 -0
  368. package/dist/utils/timeout.d.ts +153 -0
  369. package/dist/utils/timeout.js +205 -0
  370. package/dist/utils/yaml-parser.d.ts +58 -0
  371. package/dist/utils/yaml-parser.js +86 -0
  372. package/dist/validation/index.d.ts +32 -0
  373. package/dist/validation/index.js +32 -0
  374. package/dist/validation/semantic-test-generator.d.ts +50 -0
  375. package/dist/validation/semantic-test-generator.js +176 -0
  376. package/dist/validation/semantic-types.d.ts +66 -0
  377. package/dist/validation/semantic-types.js +94 -0
  378. package/dist/validation/semantic-validator.d.ts +38 -0
  379. package/dist/validation/semantic-validator.js +340 -0
  380. package/dist/verification/index.d.ts +6 -0
  381. package/dist/verification/index.js +5 -0
  382. package/dist/verification/types.d.ts +133 -0
  383. package/dist/verification/types.js +5 -0
  384. package/dist/verification/verifier.d.ts +30 -0
  385. package/dist/verification/verifier.js +309 -0
  386. package/dist/version.d.ts +19 -0
  387. package/dist/version.js +48 -0
  388. package/dist/workflow/auto-generator.d.ts +27 -0
  389. package/dist/workflow/auto-generator.js +513 -0
  390. package/dist/workflow/discovery.d.ts +40 -0
  391. package/dist/workflow/discovery.js +195 -0
  392. package/dist/workflow/executor.d.ts +82 -0
  393. package/dist/workflow/executor.js +611 -0
  394. package/dist/workflow/index.d.ts +10 -0
  395. package/dist/workflow/index.js +10 -0
  396. package/dist/workflow/loader.d.ts +24 -0
  397. package/dist/workflow/loader.js +194 -0
  398. package/dist/workflow/state-tracker.d.ts +98 -0
  399. package/dist/workflow/state-tracker.js +424 -0
  400. package/dist/workflow/types.d.ts +337 -0
  401. package/dist/workflow/types.js +5 -0
  402. package/package.json +94 -0
  403. package/schemas/bellwether-check.schema.json +651 -0
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Smart Truncation Utilities
3
+ *
4
+ * Provides intelligent content truncation that preserves structure
5
+ * for different content types (JSON, Markdown, plain text).
6
+ *
7
+ * Unlike simple string truncation, these functions:
8
+ * - Preserve JSON structure (valid JSON output)
9
+ * - Preserve Markdown headers and section structure
10
+ * - Truncate at natural boundaries (sentences, paragraphs)
11
+ * - Provide helpful truncation indicators
12
+ */
13
+ /** Content type for smart truncation */
14
+ export type ContentType = 'json' | 'markdown' | 'text';
15
+ /** Options for smart truncation */
16
+ export interface SmartTruncateOptions {
17
+ /** Maximum length in characters */
18
+ maxLength: number;
19
+ /** Content type for appropriate truncation strategy */
20
+ contentType?: ContentType;
21
+ /** Whether to preserve JSON structure (for JSON content) */
22
+ preserveJsonStructure?: boolean;
23
+ /** Whether to preserve markdown headers (for markdown content) */
24
+ preserveMarkdownHeaders?: boolean;
25
+ /** Minimum array items to show when truncating JSON arrays */
26
+ minArrayItems?: number;
27
+ /** Custom truncation indicator */
28
+ truncationIndicator?: string;
29
+ }
30
+ /** Result of smart truncation */
31
+ export interface TruncationResult {
32
+ /** The truncated content */
33
+ content: string;
34
+ /** Whether truncation occurred */
35
+ wasTruncated: boolean;
36
+ /** Original length */
37
+ originalLength: number;
38
+ /** Number of characters removed */
39
+ charactersRemoved: number;
40
+ /** Items omitted (for arrays/objects) */
41
+ itemsOmitted?: number;
42
+ }
43
+ /**
44
+ * Smart truncate content based on type.
45
+ *
46
+ * @param content - Content to truncate
47
+ * @param options - Truncation options
48
+ * @returns Truncation result
49
+ */
50
+ export declare function smartTruncate(content: string, options: SmartTruncateOptions): TruncationResult;
51
+ /**
52
+ * Simple string truncation with indicator.
53
+ *
54
+ * @param content - Content to truncate
55
+ * @param maxLength - Maximum length
56
+ * @param indicator - Truncation indicator
57
+ * @returns Truncation result
58
+ */
59
+ export declare function simpleTruncate(content: string, maxLength: number, indicator?: string): TruncationResult;
60
+ /**
61
+ * Smart truncate JSON while preserving valid structure.
62
+ *
63
+ * @param content - JSON string to truncate
64
+ * @param maxLength - Maximum length
65
+ * @param minArrayItems - Minimum array items to preserve
66
+ * @param indicator - Custom truncation indicator
67
+ * @returns Truncation result
68
+ */
69
+ export declare function smartTruncateJson(content: string, maxLength: number, minArrayItems?: number, indicator?: string): TruncationResult;
70
+ /**
71
+ * Smart truncate Markdown while preserving structure.
72
+ *
73
+ * @param content - Markdown content to truncate
74
+ * @param maxLength - Maximum length
75
+ * @param indicator - Custom truncation indicator
76
+ * @returns Truncation result
77
+ */
78
+ export declare function smartTruncateMarkdown(content: string, maxLength: number, indicator?: string): TruncationResult;
79
+ /**
80
+ * Detect content type from content.
81
+ *
82
+ * @param content - Content to analyze
83
+ * @returns Detected content type
84
+ */
85
+ export declare function detectContentType(content: string): ContentType;
86
+ /**
87
+ * Get the appropriate example length based on options.
88
+ *
89
+ * @param fullExamples - Whether to use full example length
90
+ * @param customLength - Custom length override
91
+ * @returns Example length to use
92
+ */
93
+ export declare function getExampleLength(fullExamples: boolean, customLength?: number): number;
94
+ //# sourceMappingURL=smart-truncate.d.ts.map
@@ -0,0 +1,361 @@
1
+ /**
2
+ * Smart Truncation Utilities
3
+ *
4
+ * Provides intelligent content truncation that preserves structure
5
+ * for different content types (JSON, Markdown, plain text).
6
+ *
7
+ * Unlike simple string truncation, these functions:
8
+ * - Preserve JSON structure (valid JSON output)
9
+ * - Preserve Markdown headers and section structure
10
+ * - Truncate at natural boundaries (sentences, paragraphs)
11
+ * - Provide helpful truncation indicators
12
+ */
13
+ import { EXAMPLE_OUTPUT } from '../constants.js';
14
+ // ==================== Main Functions ====================
15
+ /**
16
+ * Smart truncate content based on type.
17
+ *
18
+ * @param content - Content to truncate
19
+ * @param options - Truncation options
20
+ * @returns Truncation result
21
+ */
22
+ export function smartTruncate(content, options) {
23
+ const { maxLength, contentType = detectContentType(content), preserveJsonStructure = EXAMPLE_OUTPUT.SMART_TRUNCATE.preserveJsonStructure, preserveMarkdownHeaders = EXAMPLE_OUTPUT.SMART_TRUNCATE.preserveMarkdownHeaders, minArrayItems = EXAMPLE_OUTPUT.SMART_TRUNCATE.minArrayItems, truncationIndicator, } = options;
24
+ const originalLength = content.length;
25
+ // No truncation needed
26
+ if (originalLength <= maxLength) {
27
+ return {
28
+ content,
29
+ wasTruncated: false,
30
+ originalLength,
31
+ charactersRemoved: 0,
32
+ };
33
+ }
34
+ let result;
35
+ switch (contentType) {
36
+ case 'json':
37
+ result = preserveJsonStructure
38
+ ? smartTruncateJson(content, maxLength, minArrayItems, truncationIndicator)
39
+ : simpleTruncate(content, maxLength, truncationIndicator ?? EXAMPLE_OUTPUT.TRUNCATION_INDICATORS.json);
40
+ break;
41
+ case 'markdown':
42
+ result = preserveMarkdownHeaders
43
+ ? smartTruncateMarkdown(content, maxLength, truncationIndicator)
44
+ : simpleTruncate(content, maxLength, truncationIndicator ?? EXAMPLE_OUTPUT.TRUNCATION_INDICATORS.markdown);
45
+ break;
46
+ default:
47
+ result = simpleTruncate(content, maxLength, truncationIndicator ?? EXAMPLE_OUTPUT.TRUNCATION_INDICATORS.text);
48
+ }
49
+ return result;
50
+ }
51
+ /**
52
+ * Simple string truncation with indicator.
53
+ *
54
+ * @param content - Content to truncate
55
+ * @param maxLength - Maximum length
56
+ * @param indicator - Truncation indicator
57
+ * @returns Truncation result
58
+ */
59
+ export function simpleTruncate(content, maxLength, indicator = EXAMPLE_OUTPUT.TRUNCATION_INDICATORS.text) {
60
+ const originalLength = content.length;
61
+ if (originalLength <= maxLength) {
62
+ return {
63
+ content,
64
+ wasTruncated: false,
65
+ originalLength,
66
+ charactersRemoved: 0,
67
+ };
68
+ }
69
+ const truncateAt = maxLength - indicator.length;
70
+ if (truncateAt <= EXAMPLE_OUTPUT.MIN_TRUNCATION_INDICATOR_LENGTH) {
71
+ // Not enough room for indicator, just truncate
72
+ return {
73
+ content: content.slice(0, maxLength),
74
+ wasTruncated: true,
75
+ originalLength,
76
+ charactersRemoved: originalLength - maxLength,
77
+ };
78
+ }
79
+ // Try to truncate at a word boundary
80
+ let cutPoint = truncateAt;
81
+ const lastSpace = content.lastIndexOf(' ', truncateAt);
82
+ const lastNewline = content.lastIndexOf('\n', truncateAt);
83
+ const boundary = Math.max(lastSpace, lastNewline);
84
+ // Only use boundary if it's not too far back (within 20% of truncateAt)
85
+ if (boundary > truncateAt * 0.8) {
86
+ cutPoint = boundary;
87
+ }
88
+ return {
89
+ content: content.slice(0, cutPoint) + indicator,
90
+ wasTruncated: true,
91
+ originalLength,
92
+ charactersRemoved: originalLength - cutPoint - indicator.length,
93
+ };
94
+ }
95
+ // ==================== JSON Truncation ====================
96
+ /**
97
+ * Smart truncate JSON while preserving valid structure.
98
+ *
99
+ * @param content - JSON string to truncate
100
+ * @param maxLength - Maximum length
101
+ * @param minArrayItems - Minimum array items to preserve
102
+ * @param indicator - Custom truncation indicator
103
+ * @returns Truncation result
104
+ */
105
+ export function smartTruncateJson(content, maxLength, minArrayItems = EXAMPLE_OUTPUT.SMART_TRUNCATE.minArrayItems, indicator) {
106
+ const originalLength = content.length;
107
+ if (originalLength <= maxLength) {
108
+ return {
109
+ content,
110
+ wasTruncated: false,
111
+ originalLength,
112
+ charactersRemoved: 0,
113
+ };
114
+ }
115
+ // Try to parse as JSON
116
+ let parsed;
117
+ try {
118
+ parsed = JSON.parse(content);
119
+ }
120
+ catch {
121
+ // Not valid JSON, fall back to simple truncation
122
+ return simpleTruncate(content, maxLength, indicator ?? EXAMPLE_OUTPUT.TRUNCATION_INDICATORS.json);
123
+ }
124
+ // Recursively truncate the JSON object
125
+ const truncated = truncateJsonValue(parsed, maxLength, minArrayItems);
126
+ const result = JSON.stringify(truncated.value, null, 2);
127
+ return {
128
+ content: result,
129
+ wasTruncated: true,
130
+ originalLength,
131
+ charactersRemoved: originalLength - result.length,
132
+ itemsOmitted: truncated.itemsOmitted,
133
+ };
134
+ }
135
+ /**
136
+ * Recursively truncate a JSON value.
137
+ */
138
+ function truncateJsonValue(value, maxLength, minItems, depth = 0) {
139
+ // Prevent infinite recursion
140
+ if (depth > 10) {
141
+ return { value: '...', itemsOmitted: 0 };
142
+ }
143
+ // Primitives pass through
144
+ if (value === null || typeof value !== 'object') {
145
+ if (typeof value === 'string' && value.length > maxLength / 4) {
146
+ // Truncate long strings
147
+ return {
148
+ value: value.slice(0, Math.floor(maxLength / 4)) + '...',
149
+ itemsOmitted: 0,
150
+ };
151
+ }
152
+ return { value, itemsOmitted: 0 };
153
+ }
154
+ // Handle arrays
155
+ if (Array.isArray(value)) {
156
+ return truncateJsonArray(value, maxLength, minItems, depth);
157
+ }
158
+ // Handle objects
159
+ return truncateJsonObject(value, maxLength, minItems, depth);
160
+ }
161
+ /**
162
+ * Truncate a JSON array.
163
+ */
164
+ function truncateJsonArray(arr, maxLength, minItems, depth) {
165
+ if (arr.length === 0) {
166
+ return { value: [], itemsOmitted: 0 };
167
+ }
168
+ // Check if current serialization fits
169
+ const serialized = JSON.stringify(arr, null, 2);
170
+ if (serialized.length <= maxLength) {
171
+ return { value: arr, itemsOmitted: 0 };
172
+ }
173
+ // Calculate how many items we can keep
174
+ const itemBudget = Math.max(minItems, Math.floor(maxLength / 100));
175
+ let totalOmitted = 0;
176
+ if (arr.length <= itemBudget) {
177
+ // Truncate individual items
178
+ const truncatedItems = arr.map((item) => {
179
+ const result = truncateJsonValue(item, Math.floor(maxLength / arr.length), minItems, depth + 1);
180
+ totalOmitted += result.itemsOmitted;
181
+ return result.value;
182
+ });
183
+ return { value: truncatedItems, itemsOmitted: totalOmitted };
184
+ }
185
+ // Keep first minItems and add indicator
186
+ const kept = arr.slice(0, itemBudget).map((item) => {
187
+ const result = truncateJsonValue(item, Math.floor(maxLength / itemBudget), minItems, depth + 1);
188
+ totalOmitted += result.itemsOmitted;
189
+ return result.value;
190
+ });
191
+ const omitted = arr.length - itemBudget;
192
+ totalOmitted += omitted;
193
+ kept.push(EXAMPLE_OUTPUT.SMART_TRUNCATE.arrayOmittedTemplate.replace('{count}', String(omitted)));
194
+ return { value: kept, itemsOmitted: totalOmitted };
195
+ }
196
+ /**
197
+ * Truncate a JSON object.
198
+ */
199
+ function truncateJsonObject(obj, maxLength, minItems, depth) {
200
+ const keys = Object.keys(obj);
201
+ if (keys.length === 0) {
202
+ return { value: {}, itemsOmitted: 0 };
203
+ }
204
+ // Check if current serialization fits
205
+ const serialized = JSON.stringify(obj, null, 2);
206
+ if (serialized.length <= maxLength) {
207
+ return { value: obj, itemsOmitted: 0 };
208
+ }
209
+ // Calculate how many keys we can keep
210
+ const keyBudget = Math.max(minItems, Math.floor(maxLength / 100));
211
+ let totalOmitted = 0;
212
+ if (keys.length <= keyBudget) {
213
+ // Truncate individual values
214
+ const truncated = {};
215
+ for (const key of keys) {
216
+ const result = truncateJsonValue(obj[key], Math.floor(maxLength / keys.length), minItems, depth + 1);
217
+ truncated[key] = result.value;
218
+ totalOmitted += result.itemsOmitted;
219
+ }
220
+ return { value: truncated, itemsOmitted: totalOmitted };
221
+ }
222
+ // Keep first keyBudget keys and add indicator
223
+ const truncated = {};
224
+ const keptKeys = keys.slice(0, keyBudget);
225
+ for (const key of keptKeys) {
226
+ const result = truncateJsonValue(obj[key], Math.floor(maxLength / keyBudget), minItems, depth + 1);
227
+ truncated[key] = result.value;
228
+ totalOmitted += result.itemsOmitted;
229
+ }
230
+ const omitted = keys.length - keyBudget;
231
+ totalOmitted += omitted;
232
+ truncated['...'] = EXAMPLE_OUTPUT.SMART_TRUNCATE.objectOmittedTemplate.replace('{count}', String(omitted));
233
+ return { value: truncated, itemsOmitted: totalOmitted };
234
+ }
235
+ // ==================== Markdown Truncation ====================
236
+ /**
237
+ * Smart truncate Markdown while preserving structure.
238
+ *
239
+ * @param content - Markdown content to truncate
240
+ * @param maxLength - Maximum length
241
+ * @param indicator - Custom truncation indicator
242
+ * @returns Truncation result
243
+ */
244
+ export function smartTruncateMarkdown(content, maxLength, indicator) {
245
+ const originalLength = content.length;
246
+ const truncIndicator = indicator ?? EXAMPLE_OUTPUT.TRUNCATION_INDICATORS.markdown;
247
+ if (originalLength <= maxLength) {
248
+ return {
249
+ content,
250
+ wasTruncated: false,
251
+ originalLength,
252
+ charactersRemoved: 0,
253
+ };
254
+ }
255
+ const lines = content.split('\n');
256
+ const result = [];
257
+ let currentLength = 0;
258
+ const targetLength = maxLength - truncIndicator.length;
259
+ for (const line of lines) {
260
+ const lineLength = line.length + 1; // +1 for newline
261
+ // Always include headers (they're important for structure)
262
+ const isHeader = /^#{1,6}\s/.test(line);
263
+ if (currentLength + lineLength <= targetLength) {
264
+ result.push(line);
265
+ currentLength += lineLength;
266
+ }
267
+ else if (isHeader && currentLength + lineLength <= maxLength * 1.1) {
268
+ // Allow slight overflow for headers
269
+ result.push(line);
270
+ currentLength += lineLength;
271
+ break;
272
+ }
273
+ else {
274
+ // Try to truncate the current line at a sentence boundary
275
+ const remaining = targetLength - currentLength;
276
+ if (remaining > 50) {
277
+ const truncatedLine = truncateAtSentence(line, remaining);
278
+ if (truncatedLine.length > 0) {
279
+ result.push(truncatedLine);
280
+ }
281
+ }
282
+ break;
283
+ }
284
+ }
285
+ const truncatedContent = result.join('\n') + truncIndicator;
286
+ return {
287
+ content: truncatedContent,
288
+ wasTruncated: true,
289
+ originalLength,
290
+ charactersRemoved: originalLength - truncatedContent.length,
291
+ };
292
+ }
293
+ /**
294
+ * Truncate text at a sentence boundary.
295
+ */
296
+ function truncateAtSentence(text, maxLength) {
297
+ if (text.length <= maxLength) {
298
+ return text;
299
+ }
300
+ // Find last sentence ending before maxLength
301
+ const truncated = text.slice(0, maxLength);
302
+ const lastPeriod = truncated.lastIndexOf('. ');
303
+ const lastQuestion = truncated.lastIndexOf('? ');
304
+ const lastExclamation = truncated.lastIndexOf('! ');
305
+ const sentenceEnd = Math.max(lastPeriod, lastQuestion, lastExclamation);
306
+ if (sentenceEnd > maxLength * 0.5) {
307
+ return text.slice(0, sentenceEnd + 1);
308
+ }
309
+ // Fall back to word boundary
310
+ const lastSpace = truncated.lastIndexOf(' ');
311
+ if (lastSpace > maxLength * 0.7) {
312
+ return text.slice(0, lastSpace);
313
+ }
314
+ return truncated;
315
+ }
316
+ // ==================== Utility Functions ====================
317
+ /**
318
+ * Detect content type from content.
319
+ *
320
+ * @param content - Content to analyze
321
+ * @returns Detected content type
322
+ */
323
+ export function detectContentType(content) {
324
+ const trimmed = content.trim();
325
+ // Check for JSON
326
+ if ((trimmed.startsWith('{') && trimmed.endsWith('}')) ||
327
+ (trimmed.startsWith('[') && trimmed.endsWith(']'))) {
328
+ try {
329
+ JSON.parse(trimmed);
330
+ return 'json';
331
+ }
332
+ catch {
333
+ // Not valid JSON
334
+ }
335
+ }
336
+ // Check for Markdown indicators
337
+ if (trimmed.includes('\n#') ||
338
+ trimmed.startsWith('#') ||
339
+ /^[-*]\s/.test(trimmed) ||
340
+ /^\d+\.\s/.test(trimmed) ||
341
+ trimmed.includes('```') ||
342
+ trimmed.includes('**') ||
343
+ trimmed.includes('__')) {
344
+ return 'markdown';
345
+ }
346
+ return 'text';
347
+ }
348
+ /**
349
+ * Get the appropriate example length based on options.
350
+ *
351
+ * @param fullExamples - Whether to use full example length
352
+ * @param customLength - Custom length override
353
+ * @returns Example length to use
354
+ */
355
+ export function getExampleLength(fullExamples, customLength) {
356
+ if (customLength !== undefined) {
357
+ return customLength;
358
+ }
359
+ return fullExamples ? EXAMPLE_OUTPUT.FULL_LENGTH : EXAMPLE_OUTPUT.DEFAULT_LENGTH;
360
+ }
361
+ //# sourceMappingURL=smart-truncate.js.map
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Centralized timeout management utilities.
3
+ *
4
+ * Provides consistent timeout handling across all async operations
5
+ * to prevent indefinite hangs and improve reliability.
6
+ */
7
+ /**
8
+ * Default timeout values in milliseconds.
9
+ *
10
+ * These reference the centralized constants where applicable,
11
+ * ensuring consistency across the codebase.
12
+ */
13
+ export declare const DEFAULT_TIMEOUTS: {
14
+ /** Timeout for individual tool calls - uses INTERVIEW.TOOL_TIMEOUT */
15
+ readonly toolCall: 30000;
16
+ /** Timeout for LLM API calls - uses TIMEOUTS.INTERVIEW */
17
+ readonly llmCall: 60000;
18
+ /** Timeout for state snapshots - uses WORKFLOW.STATE_SNAPSHOT_TIMEOUT */
19
+ readonly stateSnapshot: 10000;
20
+ /** Timeout for individual probe tool calls - uses WORKFLOW.PROBE_TOOL_TIMEOUT */
21
+ readonly probeTool: 5000;
22
+ /** Timeout for resource reads - uses INTERVIEW.RESOURCE_TIMEOUT */
23
+ readonly resourceRead: 15000;
24
+ /** Timeout for HTTP requests - uses TIMEOUTS.CLOUD_API */
25
+ readonly httpRequest: 30000;
26
+ /** Timeout for SSE connection establishment */
27
+ readonly sseConnect: 10000;
28
+ /** Timeout for interview question generation (longer for local models) */
29
+ readonly questionGeneration: 120000;
30
+ /** Timeout for response analysis */
31
+ readonly responseAnalysis: 60000;
32
+ /** Timeout for profile synthesis */
33
+ readonly profileSynthesis: 120000;
34
+ };
35
+ /**
36
+ * Timeout configuration that can be passed to operations.
37
+ */
38
+ export interface TimeoutConfig {
39
+ /** Timeout in milliseconds */
40
+ timeoutMs: number;
41
+ /** Name of the operation (for error messages) */
42
+ operationName: string;
43
+ /** Whether to log timeout warnings */
44
+ logWarning?: boolean;
45
+ /** Custom error message */
46
+ errorMessage?: string;
47
+ }
48
+ /**
49
+ * Error class for timeout errors.
50
+ */
51
+ export declare class TimeoutError extends Error {
52
+ readonly operationName: string;
53
+ readonly timeoutMs: number;
54
+ constructor(operationName: string, timeoutMs: number, message?: string);
55
+ }
56
+ /**
57
+ * Error class for aborted operations.
58
+ */
59
+ export declare class AbortError extends Error {
60
+ readonly operationName: string;
61
+ constructor(operationName: string, message?: string);
62
+ }
63
+ /**
64
+ * Check if an AbortSignal is aborted and throw AbortError if so.
65
+ *
66
+ * @param signal - The AbortSignal to check
67
+ * @param operationName - Name of the operation for error messages
68
+ * @throws AbortError if the signal is aborted
69
+ */
70
+ export declare function checkAborted(signal: AbortSignal | undefined, operationName: string): void;
71
+ /**
72
+ * Wrap a promise with a timeout.
73
+ *
74
+ * @param promise - The promise to wrap
75
+ * @param timeoutMs - Timeout in milliseconds
76
+ * @param operationName - Name of the operation for error messages
77
+ * @returns The promise result or throws TimeoutError
78
+ */
79
+ export declare function withTimeout<T>(promise: Promise<T>, timeoutMs: number, operationName: string): Promise<T>;
80
+ /**
81
+ * Wrap a promise with a timeout and return a result object instead of throwing.
82
+ *
83
+ * @param promise - The promise to wrap
84
+ * @param timeoutMs - Timeout in milliseconds
85
+ * @param operationName - Name of the operation
86
+ * @returns Object with either result or error
87
+ */
88
+ export declare function withTimeoutResult<T>(promise: Promise<T>, timeoutMs: number, operationName: string): Promise<{
89
+ success: true;
90
+ result: T;
91
+ } | {
92
+ success: false;
93
+ error: TimeoutError | Error;
94
+ }>;
95
+ /**
96
+ * Create an abort controller that automatically aborts after a timeout.
97
+ *
98
+ * @param timeoutMs - Timeout in milliseconds
99
+ * @param operationName - Name of the operation
100
+ * @returns AbortController and cleanup function
101
+ */
102
+ export declare function createTimeoutAbortController(timeoutMs: number, operationName: string): {
103
+ controller: AbortController;
104
+ cleanup: () => void;
105
+ };
106
+ /**
107
+ * Execute multiple promises with individual timeouts.
108
+ * Returns results for all, including those that timed out.
109
+ *
110
+ * @param operations - Array of operations with their timeouts
111
+ * @returns Array of results (either success with value or failure with error)
112
+ */
113
+ export declare function withTimeoutAll<T>(operations: Array<{
114
+ promise: Promise<T>;
115
+ timeoutMs: number;
116
+ operationName: string;
117
+ }>): Promise<Array<{
118
+ success: true;
119
+ result: T;
120
+ } | {
121
+ success: false;
122
+ error: Error;
123
+ operationName: string;
124
+ }>>;
125
+ /**
126
+ * Execute a function with a timeout, retrying on timeout up to maxRetries.
127
+ *
128
+ * @param fn - Function to execute
129
+ * @param timeoutMs - Timeout per attempt
130
+ * @param operationName - Name of the operation
131
+ * @param maxRetries - Maximum number of retries (default: 1)
132
+ * @returns The function result
133
+ */
134
+ export declare function withTimeoutRetry<T>(fn: () => Promise<T>, timeoutMs: number, operationName: string, maxRetries?: number): Promise<T>;
135
+ /**
136
+ * Create a deadline-based timeout manager.
137
+ * Useful for operations with multiple steps that should complete within a total time.
138
+ *
139
+ * @param totalTimeoutMs - Total time allowed for all operations
140
+ * @param operationName - Name of the overall operation
141
+ * @returns Deadline manager
142
+ */
143
+ export declare function createDeadline(totalTimeoutMs: number, operationName: string): {
144
+ /** Get remaining time in milliseconds */
145
+ getRemainingMs: () => number;
146
+ /** Check if deadline has passed */
147
+ isExpired: () => boolean;
148
+ /** Get timeout for a sub-operation (remaining time or max, whichever is smaller) */
149
+ getTimeoutFor: (maxMs: number) => number;
150
+ /** Throw if deadline has passed */
151
+ checkDeadline: () => void;
152
+ };
153
+ //# sourceMappingURL=timeout.d.ts.map