@skaile/workspaces 1.14.1 → 1.15.1

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 (193) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/NOTICE +13 -0
  3. package/dist/app-sdk/index.js +1 -1
  4. package/dist/{asset-feeds-ZQLJ2DCP.js → asset-feeds-MWEMXMZA.js} +5 -5
  5. package/dist/{asset-feeds-ZQLJ2DCP.js.map → asset-feeds-MWEMXMZA.js.map} +1 -1
  6. package/dist/asset-manager/index.js +5 -5
  7. package/dist/asset-manager/installer.js +1 -1
  8. package/dist/bridge/drivers/claude-sdk.js +31 -26
  9. package/dist/bridge/drivers/claude-sdk.js.map +1 -1
  10. package/dist/bridge/drivers/codex.js +1 -1
  11. package/dist/bridge/drivers/continue.js +2 -2
  12. package/dist/bridge/drivers/echo.js +1 -1
  13. package/dist/bridge/drivers/gemini.js +3 -3
  14. package/dist/bridge/drivers/goose.js +2 -2
  15. package/dist/bridge/drivers/omp.js +1 -1
  16. package/dist/bridge/drivers/opencode.js +2 -2
  17. package/dist/bridge/drivers/qwen.js +3 -3
  18. package/dist/bridge/index.js +2 -2
  19. package/dist/bridge/src/drivers/claude-sdk.d.ts +12 -56
  20. package/dist/bridge/src/drivers/claude-sdk.d.ts.map +1 -1
  21. package/dist/channels/adapters/msteams/activity.d.ts +70 -0
  22. package/dist/channels/adapters/msteams/activity.d.ts.map +1 -0
  23. package/dist/channels/adapters/msteams/client.d.ts +46 -0
  24. package/dist/channels/adapters/msteams/client.d.ts.map +1 -0
  25. package/dist/channels/adapters/msteams/index.d.ts +81 -0
  26. package/dist/channels/adapters/msteams/index.d.ts.map +1 -0
  27. package/dist/channels/adapters/msteams/jwt.d.ts +27 -0
  28. package/dist/channels/adapters/msteams/jwt.d.ts.map +1 -0
  29. package/dist/channels/adapters/msteams.d.ts +2 -0
  30. package/dist/channels/adapters/msteams.js +595 -0
  31. package/dist/channels/adapters/msteams.js.map +1 -0
  32. package/dist/channels/index.d.ts +2 -0
  33. package/dist/channels/index.js +1069 -0
  34. package/dist/channels/index.js.map +1 -0
  35. package/dist/channels/src/adapter.d.ts +54 -0
  36. package/dist/channels/src/adapter.d.ts.map +1 -0
  37. package/dist/channels/src/dedupe.d.ts +67 -0
  38. package/dist/channels/src/dedupe.d.ts.map +1 -0
  39. package/dist/channels/src/egress/output-mirror.d.ts +63 -0
  40. package/dist/channels/src/egress/output-mirror.d.ts.map +1 -0
  41. package/dist/channels/src/egress/vendor/auto-close-streaming.d.ts +26 -0
  42. package/dist/channels/src/egress/vendor/auto-close-streaming.d.ts.map +1 -0
  43. package/dist/channels/src/egress/vendor/chunked-message-stream.d.ts +79 -0
  44. package/dist/channels/src/egress/vendor/chunked-message-stream.d.ts.map +1 -0
  45. package/dist/channels/src/egress/vendor/markdown-to-mrkdwn.d.ts +21 -0
  46. package/dist/channels/src/egress/vendor/markdown-to-mrkdwn.d.ts.map +1 -0
  47. package/dist/channels/src/egress/vendor/message-stream.d.ts +57 -0
  48. package/dist/channels/src/egress/vendor/message-stream.d.ts.map +1 -0
  49. package/dist/channels/src/engine.d.ts +125 -0
  50. package/dist/channels/src/engine.d.ts.map +1 -0
  51. package/dist/channels/src/format/adaptive-card.d.ts +17 -0
  52. package/dist/channels/src/format/adaptive-card.d.ts.map +1 -0
  53. package/dist/channels/src/format/mrkdwn.d.ts +4 -0
  54. package/dist/channels/src/format/mrkdwn.d.ts.map +1 -0
  55. package/dist/channels/src/format/types.d.ts +9 -0
  56. package/dist/channels/src/format/types.d.ts.map +1 -0
  57. package/dist/channels/src/index.d.ts +17 -0
  58. package/dist/channels/src/index.d.ts.map +1 -0
  59. package/dist/channels/src/mention/lookup-tool.d.ts +23 -0
  60. package/dist/channels/src/mention/lookup-tool.d.ts.map +1 -0
  61. package/dist/channels/src/mention/normalize.d.ts +27 -0
  62. package/dist/channels/src/mention/normalize.d.ts.map +1 -0
  63. package/dist/channels/src/mention/render.d.ts +10 -0
  64. package/dist/channels/src/mention/render.d.ts.map +1 -0
  65. package/dist/channels/src/ports.d.ts +71 -0
  66. package/dist/channels/src/ports.d.ts.map +1 -0
  67. package/dist/channels/src/types.d.ts +169 -0
  68. package/dist/channels/src/types.d.ts.map +1 -0
  69. package/dist/{chunk-A7GDV5BV.js → chunk-2BQBWWFX.js} +2 -2
  70. package/dist/{chunk-A7GDV5BV.js.map → chunk-2BQBWWFX.js.map} +1 -1
  71. package/dist/{chunk-MWE7DEGC.js → chunk-344DEXZS.js} +3 -3
  72. package/dist/{chunk-MWE7DEGC.js.map → chunk-344DEXZS.js.map} +1 -1
  73. package/dist/{chunk-T2H2ZCU4.js → chunk-73HV7RV3.js} +3 -3
  74. package/dist/{chunk-T2H2ZCU4.js.map → chunk-73HV7RV3.js.map} +1 -1
  75. package/dist/{chunk-HLIN4HRK.js → chunk-ACWCVB5Q.js} +2 -2
  76. package/dist/{chunk-HLIN4HRK.js.map → chunk-ACWCVB5Q.js.map} +1 -1
  77. package/dist/{chunk-P5VLR3L7.js → chunk-BI2NKPA4.js} +8 -4
  78. package/dist/chunk-BI2NKPA4.js.map +1 -0
  79. package/dist/{chunk-4RI4TNMO.js → chunk-DB264AVQ.js} +2 -2
  80. package/dist/{chunk-4RI4TNMO.js.map → chunk-DB264AVQ.js.map} +1 -1
  81. package/dist/{chunk-IIGWJE5T.js → chunk-DPUZJI45.js} +3 -3
  82. package/dist/{chunk-IIGWJE5T.js.map → chunk-DPUZJI45.js.map} +1 -1
  83. package/dist/{chunk-ZWPXSHMW.js → chunk-EKGB4ZWR.js} +336 -100
  84. package/dist/chunk-EKGB4ZWR.js.map +1 -0
  85. package/dist/chunk-F2IBDVBP.js +72 -0
  86. package/dist/chunk-F2IBDVBP.js.map +1 -0
  87. package/dist/{chunk-G73FOLLO.js → chunk-M5GJT3D7.js} +3 -3
  88. package/dist/{chunk-G73FOLLO.js.map → chunk-M5GJT3D7.js.map} +1 -1
  89. package/dist/{chunk-CS6NFRNQ.js → chunk-MJEUK6VJ.js} +2 -2
  90. package/dist/{chunk-CS6NFRNQ.js.map → chunk-MJEUK6VJ.js.map} +1 -1
  91. package/dist/{chunk-NIZNN42B.js → chunk-MNKUZUN2.js} +3 -3
  92. package/dist/{chunk-NIZNN42B.js.map → chunk-MNKUZUN2.js.map} +1 -1
  93. package/dist/{chunk-AF2NTM4B.js → chunk-NRXVS7E4.js} +6 -6
  94. package/dist/{chunk-AF2NTM4B.js.map → chunk-NRXVS7E4.js.map} +1 -1
  95. package/dist/{chunk-CC6LFFTI.js → chunk-O5VCUU6D.js} +4 -4
  96. package/dist/{chunk-CC6LFFTI.js.map → chunk-O5VCUU6D.js.map} +1 -1
  97. package/dist/{chunk-UDUFMVJD.js → chunk-RADBQ5XJ.js} +7 -7
  98. package/dist/{chunk-UDUFMVJD.js.map → chunk-RADBQ5XJ.js.map} +1 -1
  99. package/dist/{chunk-TSB46BHR.js → chunk-RDE43ORT.js} +4 -4
  100. package/dist/{chunk-TSB46BHR.js.map → chunk-RDE43ORT.js.map} +1 -1
  101. package/dist/{chunk-KECY74AL.js → chunk-SRWIVMJI.js} +4 -4
  102. package/dist/{chunk-KECY74AL.js.map → chunk-SRWIVMJI.js.map} +1 -1
  103. package/dist/{chunk-VK24PIAB.js → chunk-TFIFNDT2.js} +3 -3
  104. package/dist/{chunk-VK24PIAB.js.map → chunk-TFIFNDT2.js.map} +1 -1
  105. package/dist/{chunk-BIAA3N2A.js → chunk-Z6NGK5YC.js} +3 -3
  106. package/dist/{chunk-BIAA3N2A.js.map → chunk-Z6NGK5YC.js.map} +1 -1
  107. package/dist/cli/index.js +41 -41
  108. package/dist/connectors/config.js +1 -1
  109. package/dist/connectors/index.js +1 -1
  110. package/dist/core/index.js +1 -1
  111. package/dist/deploy/index.js +1 -1
  112. package/dist/{ensure-sources-O7X3LYLG.js → ensure-sources-QGL44IRI.js} +8 -8
  113. package/dist/{ensure-sources-O7X3LYLG.js.map → ensure-sources-QGL44IRI.js.map} +1 -1
  114. package/dist/factory-assets/connectors/box.js +1 -1
  115. package/dist/factory-assets/connectors/deploy.js +1 -1
  116. package/dist/factory-assets/connectors/devserver.js +1 -1
  117. package/dist/factory-assets/connectors/flow/adapter.js +1 -1
  118. package/dist/factory-assets/connectors/flow/engine.js +1 -1
  119. package/dist/factory-assets/connectors/flow/run-flow.js +2 -2
  120. package/dist/factory-assets/connectors/flow.js +1 -1
  121. package/dist/factory-assets/connectors/git.js +1 -1
  122. package/dist/factory-assets/connectors/gmail.js +1 -1
  123. package/dist/factory-assets/connectors/googledrive.js +1 -1
  124. package/dist/factory-assets/connectors/local.js +1 -1
  125. package/dist/factory-assets/connectors/mattermost.js +1 -1
  126. package/dist/factory-assets/connectors/memory.js +1 -1
  127. package/dist/factory-assets/connectors/minio.js +1 -1
  128. package/dist/factory-assets/connectors/postgres.js +1 -1
  129. package/dist/factory-assets/connectors/s3.js +1 -1
  130. package/dist/factory-assets/connectors/sharepoint.js +1 -1
  131. package/dist/factory-assets/connectors/sqlite.js +1 -1
  132. package/dist/factory-assets/connectors/static-server.js +1 -1
  133. package/dist/factory-assets/connectors/tunnel.js +1 -1
  134. package/dist/factory-assets/connectors/webdav.js +1 -1
  135. package/dist/factory-assets/connectors/xstate-store.js +1 -1
  136. package/dist/factory-assets/connectors/xstate.js +1 -1
  137. package/dist/{flows-TIUWM7SZ.js → flows-FHWBCLXF.js} +3 -3
  138. package/dist/{flows-TIUWM7SZ.js.map → flows-FHWBCLXF.js.map} +1 -1
  139. package/dist/{helpers-DNTGJSA5.js → helpers-FMWODXTW.js} +8 -8
  140. package/dist/{helpers-DNTGJSA5.js.map → helpers-FMWODXTW.js.map} +1 -1
  141. package/dist/library/index.js +4 -4
  142. package/dist/library/install.js +1 -1
  143. package/dist/{library-publish-XKQN6RTR.js → library-publish-7YDHQGBN.js} +10 -10
  144. package/dist/{library-publish-XKQN6RTR.js.map → library-publish-7YDHQGBN.js.map} +1 -1
  145. package/dist/{open-library-2BWIUK4F.js → open-library-O6T3ELPK.js} +9 -9
  146. package/dist/{open-library-2BWIUK4F.js.map → open-library-O6T3ELPK.js.map} +1 -1
  147. package/dist/{paths-KOKCMBL5.js → paths-5QJJBAND.js} +7 -7
  148. package/dist/{paths-KOKCMBL5.js.map → paths-5QJJBAND.js.map} +1 -1
  149. package/dist/{plugin-store-QMJ2B3VM.js → plugin-store-ZBJZ7F6D.js} +3 -3
  150. package/dist/{plugin-store-QMJ2B3VM.js.map → plugin-store-ZBJZ7F6D.js.map} +1 -1
  151. package/dist/{project-4NPDM7R3.js → project-HAMLHLD5.js} +9 -9
  152. package/dist/{project-4NPDM7R3.js.map → project-HAMLHLD5.js.map} +1 -1
  153. package/dist/runner/index.js +8 -8
  154. package/dist/runner/src/serve.d.ts +138 -1
  155. package/dist/runner/src/serve.d.ts.map +1 -1
  156. package/dist/sdk/asset-manager.js +5 -5
  157. package/dist/sdk/bridge.js +2 -2
  158. package/dist/sdk/core.js +1 -1
  159. package/dist/sdk/flow.js +1 -1
  160. package/dist/sdk/index.js +8 -8
  161. package/dist/sdk/runner.js +8 -8
  162. package/dist/sdk/session.js +2 -2
  163. package/dist/sdk/transport/ws.js +1 -1
  164. package/dist/sdk/transport.js +1 -1
  165. package/dist/sdk/types.js +1 -1
  166. package/dist/session/index.js +2 -2
  167. package/dist/session/src/dispatcher.d.ts.map +1 -1
  168. package/dist/{setup-TNHKXCBL.js → setup-WJPNUE32.js} +5 -5
  169. package/dist/{setup-TNHKXCBL.js.map → setup-WJPNUE32.js.map} +1 -1
  170. package/dist/{source-HVMQJZU7.js → source-ITDH4367.js} +10 -10
  171. package/dist/{source-HVMQJZU7.js.map → source-ITDH4367.js.map} +1 -1
  172. package/dist/{source-manifest-publish-JN62UMZD.js → source-manifest-publish-RMHC7R6M.js} +11 -11
  173. package/dist/{source-manifest-publish-JN62UMZD.js.map → source-manifest-publish-RMHC7R6M.js.map} +1 -1
  174. package/dist/transport/index.js +1 -1
  175. package/dist/transport/ws.js +1 -1
  176. package/dist/tui/index.js +8 -8
  177. package/dist/types/index.js +1 -1
  178. package/dist/types/src/events.d.ts +74 -1
  179. package/dist/types/src/events.d.ts.map +1 -1
  180. package/dist/types/src/flow.d.ts +34 -0
  181. package/dist/types/src/flow.d.ts.map +1 -1
  182. package/dist/types/src/index.d.ts +2 -2
  183. package/dist/types/src/index.d.ts.map +1 -1
  184. package/dist/types/src/protocol.d.ts +6 -0
  185. package/dist/types/src/protocol.d.ts.map +1 -1
  186. package/dist/types/src/version.d.ts +23 -1
  187. package/dist/types/src/version.d.ts.map +1 -1
  188. package/dist/workspace-plugin/adapters/mcp.js +1 -1
  189. package/dist/workspace-plugin/adapters/omp.js +3 -3
  190. package/dist/workspace-plugin/index.js +1 -1
  191. package/package.json +15 -2
  192. package/dist/chunk-P5VLR3L7.js.map +0 -1
  193. package/dist/chunk-ZWPXSHMW.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  import { fetchProviderModels } from '../../chunk-BMQKMOQY.js';
2
2
  import { classifyGenericErrorMessage } from '../../chunk-GAH4YRCI.js';
3
- import { BUILTIN_DRIVER_CATALOG, AgentDriver, getBridgeLogger } from '../../chunk-HLIN4HRK.js';
3
+ import { BUILTIN_DRIVER_CATALOG, AgentDriver, getBridgeLogger } from '../../chunk-ACWCVB5Q.js';
4
4
  import '../../chunk-6E6PKKAD.js';
5
5
  import '../../chunk-JB35MVBN.js';
6
6
  import '../../chunk-NSBPE2FW.js';
@@ -1,6 +1,6 @@
1
- import { SubprocessCliDriver, mapApiKeysToEnv, extractText, extractCost, extractTokens } from '../../chunk-NIZNN42B.js';
1
+ import { SubprocessCliDriver, mapApiKeysToEnv, extractText, extractCost, extractTokens } from '../../chunk-MNKUZUN2.js';
2
2
  import '../../chunk-GAH4YRCI.js';
3
- import { BUILTIN_DRIVER_CATALOG, getBridgeLogger } from '../../chunk-HLIN4HRK.js';
3
+ import { BUILTIN_DRIVER_CATALOG, getBridgeLogger } from '../../chunk-ACWCVB5Q.js';
4
4
  import '../../chunk-6E6PKKAD.js';
5
5
  import '../../chunk-JB35MVBN.js';
6
6
  import '../../chunk-NSBPE2FW.js';
@@ -1,5 +1,5 @@
1
1
  import { dispatchCapability } from '../../chunk-RRVQAE5D.js';
2
- import { BUILTIN_DRIVER_CATALOG, AgentDriver, getBridgeLogger } from '../../chunk-HLIN4HRK.js';
2
+ import { BUILTIN_DRIVER_CATALOG, AgentDriver, getBridgeLogger } from '../../chunk-ACWCVB5Q.js';
3
3
  import '../../chunk-6E6PKKAD.js';
4
4
  import '../../chunk-JB35MVBN.js';
5
5
  import '../../chunk-NSBPE2FW.js';
@@ -1,8 +1,8 @@
1
- export { GeminiDriver, GeminiFamilyDriver, geminiDriverTarget } from '../../chunk-CC6LFFTI.js';
2
- import '../../chunk-NIZNN42B.js';
1
+ export { GeminiDriver, GeminiFamilyDriver, geminiDriverTarget } from '../../chunk-O5VCUU6D.js';
2
+ import '../../chunk-MNKUZUN2.js';
3
3
  import '../../chunk-BMQKMOQY.js';
4
4
  import '../../chunk-GAH4YRCI.js';
5
- import '../../chunk-HLIN4HRK.js';
5
+ import '../../chunk-ACWCVB5Q.js';
6
6
  import '../../chunk-6E6PKKAD.js';
7
7
  import '../../chunk-JB35MVBN.js';
8
8
  import '../../chunk-NSBPE2FW.js';
@@ -1,6 +1,6 @@
1
- import { SubprocessCliDriver, mapApiKeysToEnv, extractText, extractCost, extractTokens } from '../../chunk-NIZNN42B.js';
1
+ import { SubprocessCliDriver, mapApiKeysToEnv, extractText, extractCost, extractTokens } from '../../chunk-MNKUZUN2.js';
2
2
  import '../../chunk-GAH4YRCI.js';
3
- import { BUILTIN_DRIVER_CATALOG, getBridgeLogger } from '../../chunk-HLIN4HRK.js';
3
+ import { BUILTIN_DRIVER_CATALOG, getBridgeLogger } from '../../chunk-ACWCVB5Q.js';
4
4
  import '../../chunk-6E6PKKAD.js';
5
5
  import '../../chunk-JB35MVBN.js';
6
6
  import '../../chunk-NSBPE2FW.js';
@@ -1,5 +1,5 @@
1
1
  import { classifyGenericErrorMessage } from '../../chunk-GAH4YRCI.js';
2
- import { BUILTIN_DRIVER_CATALOG, AgentDriver, getBridgeLogger } from '../../chunk-HLIN4HRK.js';
2
+ import { BUILTIN_DRIVER_CATALOG, AgentDriver, getBridgeLogger } from '../../chunk-ACWCVB5Q.js';
3
3
  import '../../chunk-6E6PKKAD.js';
4
4
  import '../../chunk-JB35MVBN.js';
5
5
  import '../../chunk-NSBPE2FW.js';
@@ -1,6 +1,6 @@
1
- import { SubprocessCliDriver, mapApiKeysToEnv, extractText, extractCost, extractTokens } from '../../chunk-NIZNN42B.js';
1
+ import { SubprocessCliDriver, mapApiKeysToEnv, extractText, extractCost, extractTokens } from '../../chunk-MNKUZUN2.js';
2
2
  import '../../chunk-GAH4YRCI.js';
3
- import { BUILTIN_DRIVER_CATALOG, getBridgeLogger } from '../../chunk-HLIN4HRK.js';
3
+ import { BUILTIN_DRIVER_CATALOG, getBridgeLogger } from '../../chunk-ACWCVB5Q.js';
4
4
  import '../../chunk-6E6PKKAD.js';
5
5
  import '../../chunk-JB35MVBN.js';
6
6
  import '../../chunk-NSBPE2FW.js';
@@ -1,8 +1,8 @@
1
- import { GeminiFamilyDriver } from '../../chunk-CC6LFFTI.js';
2
- import '../../chunk-NIZNN42B.js';
1
+ import { GeminiFamilyDriver } from '../../chunk-O5VCUU6D.js';
2
+ import '../../chunk-MNKUZUN2.js';
3
3
  import { fetchProviderModels } from '../../chunk-BMQKMOQY.js';
4
4
  import '../../chunk-GAH4YRCI.js';
5
- import { BUILTIN_DRIVER_CATALOG, getBridgeLogger } from '../../chunk-HLIN4HRK.js';
5
+ import { BUILTIN_DRIVER_CATALOG, getBridgeLogger } from '../../chunk-ACWCVB5Q.js';
6
6
  import '../../chunk-6E6PKKAD.js';
7
7
  import '../../chunk-JB35MVBN.js';
8
8
  import '../../chunk-NSBPE2FW.js';
@@ -1,9 +1,9 @@
1
- export { BridgeRuntime, EventNormalizer, createRuntime, detectFileChange, detectFileChanges, summarizeToolCall, summarizeToolResult, validateApiKey } from '../chunk-G73FOLLO.js';
1
+ export { BridgeRuntime, EventNormalizer, createRuntime, detectFileChange, detectFileChanges, summarizeToolCall, summarizeToolResult, validateApiKey } from '../chunk-M5GJT3D7.js';
2
2
  export { CLOUD_SECRET_ENV_KEYS, SUPPORTED_CLOUDS, buildClaudeCloudEnv } from '../chunk-ISQWMBKD.js';
3
3
  export { dispatchCapability, filterRenderCapabilities, renderFallback } from '../chunk-RRVQAE5D.js';
4
4
  export { STATIC_MODELS, fetchProviderModels, getModels, getStaticModels } from '../chunk-BMQKMOQY.js';
5
5
  export { AccountUnavailableError, AuthError, classifyClaudeSdkError, reclassifyAuthAsAccountUnavailable } from '../chunk-GAH4YRCI.js';
6
- export { AgentDriver, BUILTIN_DRIVER_CATALOG, DRIVER_CATALOG, createDriver, getBridgeLogger, listDrivers, listModelsForDriver, registerBuiltinDrivers } from '../chunk-HLIN4HRK.js';
6
+ export { AgentDriver, BUILTIN_DRIVER_CATALOG, DRIVER_CATALOG, createDriver, getBridgeLogger, listDrivers, listModelsForDriver, registerBuiltinDrivers } from '../chunk-ACWCVB5Q.js';
7
7
  import '../chunk-6E6PKKAD.js';
8
8
  import '../chunk-JB35MVBN.js';
9
9
  import '../chunk-NSBPE2FW.js';
@@ -2,55 +2,6 @@ import type { TokenUsage } from "@skaile/workspaces/types";
2
2
  import type { DriverTarget } from "@skaile/workspaces/plugin-registry";
3
3
  import { type ModelEntry } from "../models.js";
4
4
  import { type AgentConfig, AgentDriver, type DriverInfo, type SlashCommandInfo } from "../types.js";
5
- /**
6
- * Agent driver for the Anthropic Claude Agent SDK.
7
- *
8
- * Runs the agent in-process — no subprocess is spawned. Anthropic models only.
9
- *
10
- * @remarks
11
- * **Lazy-loading** — `@anthropic-ai/claude-agent-sdk` is imported dynamically inside
12
- * `start()` so it remains an optional peer dependency. If the package is not installed
13
- * an actionable error is thrown. The CJS/ESM `require` polyfill at the top of this file
14
- * is required because the SDK bundles ajv which uses `require()` internally.
15
- *
16
- * **Session continuity** — each `prompt()` tries to feed into a live SDK query via
17
- * `streamInput()` (persistent multi-turn mode). When no live query exists it starts a
18
- * new one, applying a three-level resume chain:
19
- * 1. `resumeSessionId` from config (explicit caller resume)
20
- * 2. `sessionId` captured from the current driver lifetime
21
- * 3. `continue: true` (resume most recent session in cwd from disk)
22
- *
23
- * **Tool synthesis** — emits `tool_call` and `tool_execution_end` events that the
24
- * runner's activity tracker needs for file-change detection. These are not native SDK
25
- * events; they are synthesised from `assistant` and `user` SDK messages.
26
- *
27
- * **agentName** — maps to the `agent` SDK query option. The SDK reads
28
- * `.claude/agents/<agentName>.md` from `cwd` for model, tools, and system prompt.
29
- * Requires the agent file to have been rendered by `asset-manager` (claudeCodeRenderer)
30
- * during `skaile install`. Ignored by other drivers.
31
- *
32
- * **mcpServers** — `AgentConfig.mcpServers` passes in-process MCP server instances to
33
- * the SDK's `mcpServers` query option. Used by `workspaces/connectors` to inject
34
- * resource tools as native `tool_use`. Ignored by other drivers.
35
- *
36
- * @docLink packages/bridge/drivers#claude-sdk-driver
37
- */
38
- /**
39
- * One-shot recovery budgets for a single logical {@link ClaudeSdkDriver.prompt}
40
- * turn. Each recovery path owns an independent budget so an earlier recovery of
41
- * one kind never starves a later recovery of a different kind — most
42
- * importantly, a stale-resume retry must not consume the auth self-heal budget,
43
- * because the fresh session it starts can still hit an expired credential.
44
- * Total retries stay bounded (at most one per kind).
45
- */
46
- interface RetryBudget {
47
- /** A stale-resume ("No conversation found") retry has been spent. */
48
- staleResume: boolean;
49
- /** A poisoned-transcript scrub retry has been spent. */
50
- poison: boolean;
51
- /** An auth self-heal (`onAuthError`) retry has been spent. */
52
- auth: boolean;
53
- }
54
5
  export declare class ClaudeSdkDriver extends AgentDriver {
55
6
  readonly driverInfo: DriverInfo;
56
7
  private readonly log;
@@ -75,11 +26,10 @@ export declare class ClaudeSdkDriver extends AgentDriver {
75
26
  /** Rejects when the current turn errors. */
76
27
  private turnReject;
77
28
  /**
78
- * The in-flight turn's promise, awaited when a new prompt supersedes a pending question.
79
- * Deliberately outlives {@link completeTurn} / {@link failTurn} only {@link prompt}'s
80
- * `finally` clears it, and not on a retry recursion. Nulling it earlier reopens #436.
29
+ * Settled tail for complete logical prompts. Rejections are swallowed only on
30
+ * the tail so one failed turn cannot wedge later callers.
81
31
  */
82
- private turnPromise;
32
+ private promptTail;
83
33
  /** Guards against duplicate agent_end emissions per turn. */
84
34
  private turnCompleted;
85
35
  /** `Date.now()` of the most recent SDK message — the watchdog's liveness signal. */
@@ -92,7 +42,7 @@ export declare class ClaudeSdkDriver extends AgentDriver {
92
42
  * been spent. Read by {@link failTurn} to decide whether to defer the
93
43
  * `agent-event: error` emission for a self-healable auth error.
94
44
  *
95
- * Set unconditionally at the top of every {@link prompt} invocation; never
45
+ * Set unconditionally at the top of every {@link runPrompt} attempt; never
96
46
  * reset elsewhere — the next call's set is the only legitimate transition.
97
47
  */
98
48
  private authSelfHealUsed;
@@ -166,7 +116,14 @@ export declare class ClaudeSdkDriver extends AgentDriver {
166
116
  * "No conversation found with session ID …" — a recoverable stale-resume error that
167
117
  * occurs after a container crash that prevented the SDK from flushing its session file.
168
118
  */
169
- prompt(message: string, _budget?: RetryBudget): Promise<void>;
119
+ prompt(message: string): Promise<void>;
120
+ /**
121
+ * Runs one complete logical prompt inside its acquired FIFO slot.
122
+ *
123
+ * Retries recurse here rather than through {@link prompt}, so they cannot
124
+ * enqueue behind themselves and deadlock.
125
+ */
126
+ private runPrompt;
170
127
  /**
171
128
  * Arm the per-turn inactivity watchdog. Self-rescheduling rather than a single
172
129
  * absolute timer so any mid-turn SDK message pushes the deadline out; the
@@ -436,5 +393,4 @@ export declare class ClaudeSdkDriver extends AgentDriver {
436
393
  * inside `start()` — this target export never pulls it at module top.
437
394
  */
438
395
  export declare const claudeSdkDriverTarget: DriverTarget<AgentConfig>;
439
- export {};
440
396
  //# sourceMappingURL=claude-sdk.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"claude-sdk.d.ts","sourceRoot":"","sources":["../../../../bridge/src/drivers/claude-sdk.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-sdk.d.ts","sourceRoot":"","sources":["../../../../bridge/src/drivers/claude-sdk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Minimal hand-rolled Bot Framework activity types and their normalization
3
+ * into the channels core's {@link ChannelMessage} (spec §7.1.2). No botbuilder:
4
+ * only the fields the adapter actually reads are typed.
5
+ */
6
+ import type { IdentityPort } from "../../src/ports.js";
7
+ import type { ChannelActor, ChannelMessage, ConversationKey } from "../../src/types.js";
8
+ /** A Bot Framework activity, reduced to the fields the Teams adapter consumes. */
9
+ export type TeamsActivity = {
10
+ /** "message", "messageReaction", "conversationUpdate", … */
11
+ type: string;
12
+ id: string;
13
+ timestamp?: string;
14
+ serviceUrl: string;
15
+ /** Always "msteams" for Teams traffic. */
16
+ channelId: string;
17
+ from: {
18
+ id: string;
19
+ name?: string;
20
+ aadObjectId?: string;
21
+ };
22
+ conversation: {
23
+ id: string;
24
+ tenantId?: string;
25
+ conversationType?: string;
26
+ };
27
+ /** The bot the activity was addressed to. */
28
+ recipient: {
29
+ id: string;
30
+ name?: string;
31
+ };
32
+ text?: string;
33
+ entities?: Array<{
34
+ type: string;
35
+ mentioned?: {
36
+ id: string;
37
+ name?: string;
38
+ };
39
+ text?: string;
40
+ }>;
41
+ replyToId?: string;
42
+ /** Action.Submit payload, e.g. `{ option }` from a question card. */
43
+ value?: unknown;
44
+ channelData?: {
45
+ tenant?: {
46
+ id: string;
47
+ };
48
+ };
49
+ };
50
+ /**
51
+ * `"19:x@thread;messageid=123"` → key `msteams:19:x@thread/123`; no messageid →
52
+ * channel-level key.
53
+ */
54
+ export declare function conversationKeyFromActivity(a: TeamsActivity): ConversationKey;
55
+ /** Teams tenant id — `conversation.tenantId` with the channelData fallback. */
56
+ export declare function tenantIdOfActivity(a: TeamsActivity): string | undefined;
57
+ /** The sending user as a {@link ChannelActor} (AAD object id preferred as externalId). */
58
+ export declare function actorOfActivity(a: TeamsActivity): ChannelActor;
59
+ /**
60
+ * Normalizes a message activity into a ChannelMessage (spec §7.1.2):
61
+ * payload { type:"prompt", prompt: textWithMentionTokensStripped },
62
+ * meta.channel { platform:"msteams", conversationKey, eventId: a.id, tenantId,
63
+ * actor, messageRef }, meta.mentions via normalize (bot recipient id ⇒ isBot
64
+ * entity). A text-less Action.Submit (question-card answer) uses its `option`
65
+ * as the prompt. Returns null for non-message activities and for the bot's own
66
+ * messages (a.from.id === a.recipient.id — the adapter-level loop filter,
67
+ * spec §8).
68
+ */
69
+ export declare function activityToChannelMessage(a: TeamsActivity, identity: IdentityPort): Promise<ChannelMessage | null>;
70
+ //# sourceMappingURL=activity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../../../../channels/adapters/msteams/activity.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvD,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAc,MAAM,oBAAoB,CAAC;AAMpG,kFAAkF;AAClF,MAAM,MAAM,aAAa,GAAG;IAC1B,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,YAAY,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3E,6CAA6C;IAC7C,SAAS,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE;YAAE,EAAE,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;CAC3C,CAAC;AAEF;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,CAAC,EAAE,aAAa,GAAG,eAAe,CAQ7E;AAED,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS,CAEvE;AAED,0FAA0F;AAC1F,wBAAgB,eAAe,CAAC,CAAC,EAAE,aAAa,GAAG,YAAY,CAO9D;AA0CD;;;;;;;;;GASG;AACH,wBAAsB,wBAAwB,CAC5C,CAAC,EAAE,aAAa,EAChB,QAAQ,EAAE,YAAY,GACrB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CA2ChC"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * The shared bottom-layer Bot Framework REST client (spec §4.1) — written once
3
+ * here, reused by the later agent-side tool-face step. Raw fetch only; no
4
+ * botbuilder.
5
+ */
6
+ /** Options for {@link MsTeamsClient}. */
7
+ export type MsTeamsClientOptions = {
8
+ appId: string;
9
+ clientSecret: string;
10
+ /** Default "https://login.microsoftonline.com/botframework.com" — injectable for mocks. */
11
+ loginBaseUrl?: string;
12
+ fetchImpl?: typeof fetch;
13
+ now?: () => number;
14
+ };
15
+ /** A failed connector-service call, with the HTTP status for callers to branch on. */
16
+ export declare class MsTeamsApiError extends Error {
17
+ readonly status: number;
18
+ constructor(status: number, message: string);
19
+ }
20
+ /**
21
+ * Minimal Bot Framework connector-service client: client_credentials token
22
+ * acquisition (cached) plus activity post/update against a channel-provided
23
+ * serviceUrl. Honors 429 Retry-After with jittered backoff, max 3 tries.
24
+ */
25
+ export declare class MsTeamsClient {
26
+ private readonly opts;
27
+ private readonly fetchImpl;
28
+ private readonly now;
29
+ private token?;
30
+ constructor(opts: MsTeamsClientOptions);
31
+ /** client_credentials token for scope https://api.botframework.com/.default; cached until exp-60s. */
32
+ getToken(): Promise<string>;
33
+ /** POST {serviceUrl}/v3/conversations/{conversationId}/activities[/{replyToId}] → { id }. */
34
+ postActivity(serviceUrl: string, conversationId: string, activity: Record<string, unknown>, replyToId?: string): Promise<{
35
+ id: string;
36
+ }>;
37
+ /** PUT {serviceUrl}/v3/conversations/{conversationId}/activities/{activityId}. Same retry policy. */
38
+ updateActivity(serviceUrl: string, conversationId: string, activityId: string, activity: Record<string, unknown>): Promise<void>;
39
+ private activitiesUrl;
40
+ /**
41
+ * Authorized JSON request honoring 429 Retry-After with jittered backoff,
42
+ * max 3 tries. One 401 forces a fresh token and a single immediate retry.
43
+ */
44
+ private request;
45
+ }
46
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../channels/adapters/msteams/client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,yCAAyC;AACzC,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,2FAA2F;IAC3F,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB,CAAC;AAEF,sFAAsF;AACtF,qBAAa,eAAgB,SAAQ,KAAK;IAEtC,QAAQ,CAAC,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM;CAKlB;AAID;;;;GAIG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAuB;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,KAAK,CAAC,CAAuC;gBAEzC,IAAI,EAAE,oBAAoB;IAMtC,sGAAsG;IAChG,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC;IAsBjC,6FAA6F;IACvF,YAAY,CAChB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAW1B,qGAAqG;IAC/F,cAAc,CAClB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC;IAKhB,OAAO,CAAC,aAAa;IAKrB;;;OAGG;YACW,OAAO;CA6BtB"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * MS Teams {@link ChannelAdapter}: Bot Framework webhook ingress (JWT-verified,
3
+ * fast-acked) + connector-service egress via {@link MsTeamsClient}. Raw fetch
4
+ * only — no botbuilder. Identity stays with the engine: the adapter only tags
5
+ * `isBot` mention entities and never resolves users itself (Decision 16).
6
+ */
7
+ import type { AdapterContext, ChannelAdapter } from "../../src/adapter.js";
8
+ import type { ActorQuery, ChannelActor, ConversationHealth, ConversationKey, MessageRef, OutboundMessage, ReplyTarget, SurfaceCapabilities } from "../../src/types.js";
9
+ export * from "./activity.js";
10
+ export * from "./client.js";
11
+ export * from "./jwt.js";
12
+ /** Options for {@link MsTeamsAdapter}. */
13
+ export type MsTeamsAdapterOptions = {
14
+ /** Skaile's multi-tenant Entra app id (non-secret; the secret comes via CredentialPort). */
15
+ appId: string;
16
+ /** Default "/channels/msteams/messages". */
17
+ ingressPath?: string;
18
+ openIdMetadataUrl?: string;
19
+ loginBaseUrl?: string;
20
+ fetchImpl?: typeof fetch;
21
+ };
22
+ /**
23
+ * The MS Teams adapter (spec §6, plan Task 10). Webhook-style: `start` only
24
+ * registers the ingress route — there is no outbound socket. Egress posting
25
+ * requires the conversation to have been seen on ingress (serviceUrl + tenant
26
+ * are remembered per conversationKey; Bot Framework provides no directory).
27
+ */
28
+ export declare class MsTeamsAdapter implements ChannelAdapter {
29
+ readonly platform: "msteams";
30
+ readonly capabilities: SurfaceCapabilities;
31
+ private readonly opts;
32
+ private ctx?;
33
+ /** tenantId → lazily-created provider client (promise-cached to collapse races). */
34
+ private readonly clients;
35
+ /** Ingress-observed conversation facts, keyed by conversationKey (thread AND channel level). */
36
+ private readonly conversations;
37
+ /** Ingress-observed actors by externalId — the lookupActor roster. */
38
+ private readonly roster;
39
+ /** post() idempotency: dedupeKey → prior ref, TTL {@link DEDUPE_TTL_MS}. */
40
+ private readonly posted;
41
+ constructor(opts: MsTeamsAdapterOptions);
42
+ /** Registers the ingress route on the host; no connection is opened. */
43
+ start(ctx: AdapterContext): Promise<void>;
44
+ /** Drops the context and per-tenant clients; the host owns route teardown. */
45
+ stop(): Promise<void>;
46
+ /**
47
+ * The Bot Framework messaging endpoint. Guarded by a `Promise.race` at
48
+ * `ackDeadlineMs - 1000`: if processing overruns, Teams still gets its 200
49
+ * and at-least-once redelivery covers the rest.
50
+ */
51
+ readonly handleRequest: (req: Request) => Promise<Response>;
52
+ private processRequest;
53
+ /** Records serviceUrl + tenant under the thread key AND its channel-level key. */
54
+ private rememberConversation;
55
+ /** Grows the lookupActor roster from the sender and mention entities (bot excluded). */
56
+ private rememberActors;
57
+ /** Maps a messageReaction activity onto InboundReaction events (one per emoji). */
58
+ private forwardReactions;
59
+ /** Posts a message; a repeated `dedupeKey` returns the prior ref with no second side effect. */
60
+ post(target: ReplyTarget, msg: OutboundMessage, dedupeKey: string): Promise<MessageRef>;
61
+ /** Replaces a previously posted activity's content in place. */
62
+ update(ref: MessageRef, msg: OutboundMessage): Promise<void>;
63
+ /** Native Teams typing indicator — fire-and-forget, never deduped. */
64
+ indicateTyping(target: ReplyTarget): Promise<void>;
65
+ /** Preflight: a typing probe proves the bot can post; 403/404 → actionable problem. */
66
+ verifyConversation(key: ConversationKey): Promise<ConversationHealth>;
67
+ /** Resolves from the ingress-observed roster only (Graph lookup is platform glue, later). */
68
+ lookupActor(query: ActorQuery): Promise<ChannelActor | undefined>;
69
+ /** Decision 11: Adaptive Card for questions with options; markdown text otherwise. */
70
+ private buildActivity;
71
+ /** serviceUrl + native conversation id for a target — threadRef.raw first, ingress memory else. */
72
+ private resolveTarget;
73
+ /** Conversation facts under the exact key, falling back to its channel-level key. */
74
+ private infoFor;
75
+ /** One MsTeamsClient per tenant, built from CredentialPort (kind must be "msteams"). */
76
+ private clientForConversation;
77
+ private clientForTenant;
78
+ /** Live dedupe hit for `key`, sweeping expired entries opportunistically. */
79
+ private dedupeGet;
80
+ }
81
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../channels/adapters/msteams/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3E,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,eAAe,EAEf,UAAU,EACV,eAAe,EACf,WAAW,EACX,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAa5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AAiBzB,0CAA0C;AAC1C,MAAM,MAAM,qBAAqB,GAAG;IAClC,4FAA4F;IAC5F,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B,CAAC;AASF;;;;;GAKG;AACH,qBAAa,cAAe,YAAW,cAAc;IACnD,QAAQ,CAAC,QAAQ,EAAG,SAAS,CAAU;IACvC,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAYxC;IAEF,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAwB;IAC7C,OAAO,CAAC,GAAG,CAAC,CAAiB;IAC7B,oFAAoF;IACpF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6C;IACrE,gGAAgG;IAChG,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgD;IAC9E,sEAAsE;IACtE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;IAC1D,4EAA4E;IAC5E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6D;gBAExE,IAAI,EAAE,qBAAqB;IAIvC,wEAAwE;IAClE,KAAK,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ/C,8EAA8E;IACxE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B;;;;OAIG;IACH,QAAQ,CAAC,aAAa,GAAU,KAAK,OAAO,KAAG,OAAO,CAAC,QAAQ,CAAC,CAU9D;YAEY,cAAc;IA0C5B,kFAAkF;IAClF,OAAO,CAAC,oBAAoB;IAQ5B,wFAAwF;IACxF,OAAO,CAAC,cAAc;IAgBtB,mFAAmF;YACrE,gBAAgB;IA6B9B,gGAAgG;IAC1F,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAqB7F,gEAAgE;IAC1D,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAelE,sEAAsE;IAChE,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxD,uFAAuF;IACjF,kBAAkB,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAmB3E,6FAA6F;IACvF,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAWvE,sFAAsF;IACtF,OAAO,CAAC,aAAa;IAoBrB,mGAAmG;IACnG,OAAO,CAAC,aAAa;IAgBrB,qFAAqF;IACrF,OAAO,CAAC,OAAO;IAOf,wFAAwF;IACxF,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,eAAe;IAuBvB,6EAA6E;IAC7E,OAAO,CAAC,SAAS;CAOlB"}
@@ -0,0 +1,27 @@
1
+ /** Options for {@link validateBotFrameworkJwt}. */
2
+ export type JwtValidationOptions = {
3
+ /** The Skaile-published multi-tenant Entra app id — the expected `aud`. */
4
+ appId: string;
5
+ /** Default "https://login.botframework.com/v1/.well-known/openidconfiguration". */
6
+ openIdMetadataUrl?: string;
7
+ /** Default 300_000 (5 min). */
8
+ clockSkewMs?: number;
9
+ fetchImpl?: typeof fetch;
10
+ now?: () => number;
11
+ };
12
+ /** Outcome of {@link validateBotFrameworkJwt} — `reason` is safe to log, never secret. */
13
+ export type JwtValidationResult = {
14
+ ok: true;
15
+ } | {
16
+ ok: false;
17
+ reason: string;
18
+ };
19
+ /**
20
+ * Validates a Bot Framework channel→bot JWT (RS256 via the published JWKS):
21
+ * Bearer present, alg RS256, iss "https://api.botframework.com", aud === appId,
22
+ * exp/nbf within skew, serviceurl claim === the activity's serviceUrl.
23
+ * JWKS keys cached in-module by kid for 24h; an unknown kid forces one
24
+ * rate-limited refetch (key rotation) before the token is rejected.
25
+ */
26
+ export declare function validateBotFrameworkJwt(authorizationHeader: string | undefined, activityServiceUrl: string, opts: JwtValidationOptions): Promise<JwtValidationResult>;
27
+ //# sourceMappingURL=jwt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../../../channels/adapters/msteams/jwt.ts"],"names":[],"mappings":"AAuBA,mDAAmD;AACnD,MAAM,MAAM,oBAAoB,GAAG;IACjC,2EAA2E;IAC3E,KAAK,EAAE,MAAM,CAAC;IACd,mFAAmF;IACnF,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB,CAAC;AAEF,0FAA0F;AAC1F,MAAM,MAAM,mBAAmB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AA0E/E;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAC3C,mBAAmB,EAAE,MAAM,GAAG,SAAS,EACvC,kBAAkB,EAAE,MAAM,EAC1B,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,mBAAmB,CAAC,CAkD9B"}
@@ -0,0 +1,2 @@
1
+ // Auto-generated by _scripts/emit-dts-sidecars.ts — do not edit by hand.
2
+ export * from "./msteams/index.js";