@yolk-sdk/agent 0.1.0-canary.32 → 0.1.0-canary.33

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 (129) hide show
  1. package/README.md +30 -1
  2. package/dist/compaction/transformer.d.mts.map +1 -1
  3. package/dist/compaction/transformer.mjs.map +1 -1
  4. package/dist/protocol/content.d.mts.map +1 -1
  5. package/dist/protocol/content.mjs.map +1 -1
  6. package/dist/protocol/message.d.mts.map +1 -1
  7. package/dist/protocol/message.mjs.map +1 -1
  8. package/dist/protocol/tool.d.mts.map +1 -1
  9. package/dist/protocol/tool.mjs.map +1 -1
  10. package/dist/providers/anthropic/claude-provider.d.mts.map +1 -1
  11. package/dist/providers/anthropic/claude-provider.mjs.map +1 -1
  12. package/dist/providers/anthropic/claude.d.mts.map +1 -1
  13. package/dist/providers/anthropic/claude.mjs.map +1 -1
  14. package/dist/providers/openai/codex-provider.d.mts.map +1 -1
  15. package/dist/providers/openai/codex-provider.mjs.map +1 -1
  16. package/dist/providers/openai/provider.d.mts.map +1 -1
  17. package/dist/providers/openai/provider.mjs.map +1 -1
  18. package/dist/providers/openai/realtime/client-codec.d.mts +12 -0
  19. package/dist/providers/openai/realtime/client-codec.d.mts.map +1 -0
  20. package/dist/providers/openai/realtime/client-codec.mjs +25 -0
  21. package/dist/providers/openai/realtime/client-codec.mjs.map +1 -0
  22. package/dist/providers/openai/realtime/events.d.mts +135 -0
  23. package/dist/providers/openai/realtime/events.d.mts.map +1 -0
  24. package/dist/providers/openai/realtime/events.mjs +240 -0
  25. package/dist/providers/openai/realtime/events.mjs.map +1 -0
  26. package/dist/providers/openai/realtime/index.d.mts +5 -0
  27. package/dist/providers/openai/realtime/index.mjs +5 -0
  28. package/dist/providers/openai/realtime/session-config.d.mts +82 -0
  29. package/dist/providers/openai/realtime/session-config.d.mts.map +1 -0
  30. package/dist/providers/openai/realtime/session-config.mjs +77 -0
  31. package/dist/providers/openai/realtime/session-config.mjs.map +1 -0
  32. package/dist/providers/openai/realtime/to-voice.d.mts +14 -0
  33. package/dist/providers/openai/realtime/to-voice.d.mts.map +1 -0
  34. package/dist/providers/openai/realtime/to-voice.mjs +53 -0
  35. package/dist/providers/openai/realtime/to-voice.mjs.map +1 -0
  36. package/dist/providers/openai/speech.d.mts +34 -0
  37. package/dist/providers/openai/speech.d.mts.map +1 -0
  38. package/dist/providers/openai/speech.mjs +127 -0
  39. package/dist/providers/openai/speech.mjs.map +1 -0
  40. package/dist/providers/provider-error.d.mts.map +1 -1
  41. package/dist/providers/provider-error.mjs.map +1 -1
  42. package/dist/providers/transcript.d.mts.map +1 -1
  43. package/dist/providers/transcript.mjs.map +1 -1
  44. package/dist/react/use-agent-chat.d.mts.map +1 -1
  45. package/dist/react/use-agent-chat.mjs.map +1 -1
  46. package/dist/runtime/run-runtime.mjs.map +1 -1
  47. package/dist/skillset/merge.d.mts +2 -2
  48. package/dist/tools/registry.d.mts.map +1 -1
  49. package/dist/tools/registry.mjs.map +1 -1
  50. package/dist/tools/task.d.mts.map +1 -1
  51. package/dist/tools/task.mjs.map +1 -1
  52. package/dist/voice/browser/index.d.mts +2 -0
  53. package/dist/voice/browser/index.mjs +2 -0
  54. package/dist/voice/browser/webrtc.d.mts +71 -0
  55. package/dist/voice/browser/webrtc.d.mts.map +1 -0
  56. package/dist/voice/browser/webrtc.mjs +156 -0
  57. package/dist/voice/browser/webrtc.mjs.map +1 -0
  58. package/dist/voice/client-codec.d.mts +18 -0
  59. package/dist/voice/client-codec.d.mts.map +1 -0
  60. package/dist/voice/client-codec.mjs +1 -0
  61. package/dist/voice/controller.d.mts +50 -0
  62. package/dist/voice/controller.d.mts.map +1 -0
  63. package/dist/voice/controller.mjs +118 -0
  64. package/dist/voice/controller.mjs.map +1 -0
  65. package/dist/voice/index.d.mts +9 -1
  66. package/dist/voice/index.mjs +8 -1
  67. package/dist/voice/projection.d.mts +92 -0
  68. package/dist/voice/projection.d.mts.map +1 -0
  69. package/dist/voice/projection.mjs +217 -0
  70. package/dist/voice/projection.mjs.map +1 -0
  71. package/dist/voice/protocol.d.mts +217 -0
  72. package/dist/voice/protocol.d.mts.map +1 -0
  73. package/dist/voice/protocol.mjs +197 -0
  74. package/dist/voice/protocol.mjs.map +1 -0
  75. package/dist/voice/react.d.mts +48 -0
  76. package/dist/voice/react.d.mts.map +1 -0
  77. package/dist/voice/react.mjs +250 -0
  78. package/dist/voice/react.mjs.map +1 -0
  79. package/dist/voice/speech.d.mts +70 -0
  80. package/dist/voice/speech.d.mts.map +1 -0
  81. package/dist/voice/speech.mjs +56 -0
  82. package/dist/voice/speech.mjs.map +1 -0
  83. package/dist/voice/tool-server.d.mts +44 -0
  84. package/dist/voice/tool-server.d.mts.map +1 -0
  85. package/dist/voice/tool-server.mjs +75 -0
  86. package/dist/voice/tool-server.mjs.map +1 -0
  87. package/dist/voice/transport.d.mts +19 -0
  88. package/dist/voice/transport.d.mts.map +1 -0
  89. package/dist/voice/transport.mjs +7 -0
  90. package/dist/voice/transport.mjs.map +1 -0
  91. package/dist/voice/websocket.d.mts +29 -0
  92. package/dist/voice/websocket.d.mts.map +1 -0
  93. package/dist/voice/websocket.mjs +75 -0
  94. package/dist/voice/websocket.mjs.map +1 -0
  95. package/package.json +21 -1
  96. package/src/compaction/index.ts +1 -5
  97. package/src/compaction/transformer.ts +1 -3
  98. package/src/protocol/content.ts +12 -7
  99. package/src/protocol/message.ts +9 -7
  100. package/src/protocol/tool.ts +1 -3
  101. package/src/providers/anthropic/claude-provider.ts +52 -32
  102. package/src/providers/anthropic/claude.ts +1 -2
  103. package/src/providers/openai/codex-provider.ts +18 -11
  104. package/src/providers/openai/provider.ts +3 -1
  105. package/src/providers/openai/realtime/client-codec.ts +44 -0
  106. package/src/providers/openai/realtime/events.ts +400 -0
  107. package/src/providers/openai/realtime/index.ts +47 -0
  108. package/src/providers/openai/realtime/session-config.ts +165 -0
  109. package/src/providers/openai/realtime/to-voice.ts +73 -0
  110. package/src/providers/openai/speech.ts +237 -0
  111. package/src/providers/provider-error.ts +4 -5
  112. package/src/providers/transcript.ts +1 -4
  113. package/src/react/use-agent-chat.ts +6 -1
  114. package/src/runtime/run-runtime.ts +4 -4
  115. package/src/tools/README.md +8 -6
  116. package/src/tools/registry.ts +36 -27
  117. package/src/tools/task.ts +69 -51
  118. package/src/voice/browser/index.ts +13 -0
  119. package/src/voice/browser/webrtc.ts +303 -0
  120. package/src/voice/client-codec.ts +23 -0
  121. package/src/voice/controller.ts +289 -0
  122. package/src/voice/index.ts +84 -0
  123. package/src/voice/projection.ts +352 -0
  124. package/src/voice/protocol.ts +346 -0
  125. package/src/voice/react.ts +398 -0
  126. package/src/voice/speech.ts +101 -0
  127. package/src/voice/tool-server.ts +135 -0
  128. package/src/voice/transport.ts +17 -0
  129. package/src/voice/websocket.ts +128 -0
package/README.md CHANGED
@@ -31,11 +31,15 @@ Canary APIs are unstable. Keep all `@yolk-sdk/*` packages on the same version.
31
31
  | `@yolk-sdk/agent/providers/openai/codex` | OpenAI Codex request and auth helpers |
32
32
  | `@yolk-sdk/agent/providers/openai/codex-provider` | Codex LLM provider factory |
33
33
  | `@yolk-sdk/agent/providers/openai/provider` | OpenAI-compatible LLM provider factory |
34
+ | `@yolk-sdk/agent/providers/openai/realtime` | OpenAI Realtime session config and event codecs |
35
+ | `@yolk-sdk/agent/providers/openai/speech` | OpenAI text-to-speech and transcription adapters |
34
36
  | `@yolk-sdk/agent/providers/anthropic` | Anthropic/Claude OAuth and broker helpers |
35
37
  | `@yolk-sdk/agent/providers/anthropic/claude` | Claude request and auth helpers |
36
38
  | `@yolk-sdk/agent/providers/anthropic/claude-provider` | Claude LLM provider factory |
37
39
  | `@yolk-sdk/agent/skillset` | Portable skill and slash-command parsing/catalogs |
38
- | `@yolk-sdk/agent/voice` | Provider-neutral voice tool-call bridge |
40
+ | `@yolk-sdk/agent/voice` | Voice protocol, controller, tool handler, projection, speech |
41
+ | `@yolk-sdk/agent/voice/browser` | Browser WebRTC voice transport |
42
+ | `@yolk-sdk/agent/voice/react` | Headless browser voice React hook |
39
43
 
40
44
  ## Imports
41
45
 
@@ -300,6 +304,31 @@ for await (const event of streamAgentEventsUntilTerminal({
300
304
  The SDK client does not own durable route auth, run ownership, Workflow hook-token routing, or HITL
301
305
  request matching. Hosts expose the run endpoints and validate access/response identity server-side.
302
306
 
307
+ ## Voice
308
+
309
+ Voice is a first-class modality: browser WebRTC transport, client controller, server tool
310
+ handler, approval HITL, transcript projection, and one-shot TTS/STT contracts.
311
+
312
+ - `useYolkVoice` (`@yolk-sdk/agent/voice/react`) owns browser session lifecycle, user drafts,
313
+ and pending approvals; provider codecs come from `@yolk-sdk/agent/providers/openai/realtime`.
314
+ - Tools execute server-side only: the controller forwards provider tool calls as
315
+ `VoiceSessionToolCallRequest` to your endpoint; `handleVoiceToolCall` applies
316
+ `ToolDef.approval` policy and never runs approval-gated tools without a matching approved
317
+ response.
318
+ - Approval-gated calls pause with `AwaitingInput`; approvals/denials resume through
319
+ `submitHitlResponse`. Voice `question` is deferred in v1.
320
+ - `projectVoiceEvent` turns voice events into protocol messages with no dangling host tool
321
+ calls. Assistant drafts are keyed per provider output item (falling back to response id), so
322
+ back-to-back responses, multi-item responses, and duplicate final transcript event families
323
+ never concatenate, wipe, or duplicate messages. `sequenceVoiceEvent`/`dedupeStoredVoiceEvents`
324
+ give replay-safe durable event ids; `voiceSeedTextsFromMessages` seeds new provider sessions
325
+ after reconnect.
326
+ - `makeWebSocketVoiceTransport` covers Node/server realtime sessions;
327
+ `@yolk-sdk/agent/providers/openai/speech` provides `VoiceSpeechSynthesizer` /
328
+ `VoiceTranscriber` layers. `VoiceSpeechRequest.instructions` steers delivery style only, and
329
+ provider 429s (rate limit or exhausted credits) surface as `VoiceSpeechError` code
330
+ `rate_limited` so hosts can distinguish quota from outage.
331
+
303
332
  ## Task subagents
304
333
 
305
334
  `task` is the package-owned contract for subagent delegation. The SDK provides schema,
@@ -1 +1 @@
1
- {"version":3,"file":"transformer.d.mts","names":[],"sources":["../../src/compaction/transformer.ts"],"mappings":";;;;;;;KAYY,qBAAA,IACV,QAAA,EAAU,aAAA,CAAc,YAAA,MACrB,YAAA;AAAA,KAEO,uBAAA;EAAA,SACD,QAAA;EAAA,SACA,eAAA;EAAA,SACA,gBAAA;EAAA,SACA,WAAA;EAAA,SACA,cAAA,GAAiB,wBAAA;EAAA,SACjB,kBAAA,EAAoB,qBAAqB;AAAA;AAAA,cAWvC,qBAAA,GACX,QAAA,EAAU,aAAA,CAAc,YAAA,GACxB,OAAA,EAAS,uBAAA,KACR,gBAAA;AAAA,cAcU,+BAAA,GAAmC,OAAA,EAAS,uBAAA,KAAuB,KAAA,CAAA,KAAA,CAAA,kBAAA"}
1
+ {"version":3,"file":"transformer.d.mts","names":[],"sources":["../../src/compaction/transformer.ts"],"mappings":";;;;;;;KAYY,qBAAA,IAAyB,QAAA,EAAU,aAAA,CAAc,YAAA,MAAkB,YAAA;AAAA,KAEnE,uBAAA;EAAA,SACD,QAAA;EAAA,SACA,eAAA;EAAA,SACA,gBAAA;EAAA,SACA,WAAA;EAAA,SACA,cAAA,GAAiB,wBAAA;EAAA,SACjB,kBAAA,EAAoB,qBAAqB;AAAA;AAAA,cAWvC,qBAAA,GACX,QAAA,EAAU,aAAA,CAAc,YAAA,GACxB,OAAA,EAAS,uBAAA,KACR,gBAAA;AAAA,cAcU,+BAAA,GAAmC,OAAA,EAAS,uBAAA,KAAuB,KAAA,CAAA,KAAA,CAAA,kBAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"transformer.mjs","names":[],"sources":["../../src/compaction/transformer.ts"],"sourcesContent":["import { Effect, Layer } from 'effect'\nimport type { AgentMessage } from '@yolk-sdk/agent/protocol'\nimport { ContextTransformer } from '@yolk-sdk/agent/loop'\nimport {\n applyCompactionPlan,\n planWindowCompaction,\n type CompactionResult,\n type SkippedCompactionPlan,\n type SkippedCompactionResult\n} from './window.ts'\nimport type { TranscriptTokenEstimator } from './estimator.ts'\n\nexport type SummaryMessageFactory = (\n messages: ReadonlyArray<AgentMessage>\n) => AgentMessage\n\nexport type WindowCompactionOptions = {\n readonly strategy: string\n readonly thresholdTokens: number\n readonly tailMessageCount?: number\n readonly minMessages?: number\n readonly estimateTokens?: TranscriptTokenEstimator\n readonly makeSummaryMessage: SummaryMessageFactory\n}\n\nconst skippedCompactionResult = (plan: SkippedCompactionPlan): SkippedCompactionResult => ({\n _tag: 'Skipped',\n reason: plan.reason,\n messages: plan.messages,\n events: [],\n beforeTokens: plan.beforeTokens\n})\n\nexport const compactWindowMessages = (\n messages: ReadonlyArray<AgentMessage>,\n options: WindowCompactionOptions\n): CompactionResult => {\n const plan = planWindowCompaction(messages, options)\n\n if (plan._tag === 'Skip') {\n return skippedCompactionResult(plan)\n }\n\n return applyCompactionPlan(plan, {\n strategy: options.strategy,\n summaryMessage: options.makeSummaryMessage(plan.compactedMessages),\n estimateTokens: options.estimateTokens\n })\n}\n\nexport const makeWindowCompactionTransformer = (options: WindowCompactionOptions) =>\n Layer.succeed(\n ContextTransformer,\n ContextTransformer.of({\n transform: messages => Effect.succeed(compactWindowMessages(messages, options))\n })\n )\n"],"mappings":";;;;AAyBA,MAAM,2BAA2B,UAA0D;CACzF,MAAM;CACN,QAAQ,KAAK;CACb,UAAU,KAAK;CACf,QAAQ,CAAC;CACT,cAAc,KAAK;AACrB;AAEA,MAAa,yBACX,UACA,YACqB;CACrB,MAAM,OAAO,qBAAqB,UAAU,OAAO;CAEnD,IAAI,KAAK,SAAS,QAChB,OAAO,wBAAwB,IAAI;CAGrC,OAAO,oBAAoB,MAAM;EAC/B,UAAU,QAAQ;EAClB,gBAAgB,QAAQ,mBAAmB,KAAK,iBAAiB;EACjE,gBAAgB,QAAQ;CAC1B,CAAC;AACH;AAEA,MAAa,mCAAmC,YAC9C,MAAM,QACJ,oBACA,mBAAmB,GAAG,EACpB,YAAW,aAAY,OAAO,QAAQ,sBAAsB,UAAU,OAAO,CAAC,EAChF,CAAC,CACH"}
1
+ {"version":3,"file":"transformer.mjs","names":[],"sources":["../../src/compaction/transformer.ts"],"sourcesContent":["import { Effect, Layer } from 'effect'\nimport type { AgentMessage } from '@yolk-sdk/agent/protocol'\nimport { ContextTransformer } from '@yolk-sdk/agent/loop'\nimport {\n applyCompactionPlan,\n planWindowCompaction,\n type CompactionResult,\n type SkippedCompactionPlan,\n type SkippedCompactionResult\n} from './window.ts'\nimport type { TranscriptTokenEstimator } from './estimator.ts'\n\nexport type SummaryMessageFactory = (messages: ReadonlyArray<AgentMessage>) => AgentMessage\n\nexport type WindowCompactionOptions = {\n readonly strategy: string\n readonly thresholdTokens: number\n readonly tailMessageCount?: number\n readonly minMessages?: number\n readonly estimateTokens?: TranscriptTokenEstimator\n readonly makeSummaryMessage: SummaryMessageFactory\n}\n\nconst skippedCompactionResult = (plan: SkippedCompactionPlan): SkippedCompactionResult => ({\n _tag: 'Skipped',\n reason: plan.reason,\n messages: plan.messages,\n events: [],\n beforeTokens: plan.beforeTokens\n})\n\nexport const compactWindowMessages = (\n messages: ReadonlyArray<AgentMessage>,\n options: WindowCompactionOptions\n): CompactionResult => {\n const plan = planWindowCompaction(messages, options)\n\n if (plan._tag === 'Skip') {\n return skippedCompactionResult(plan)\n }\n\n return applyCompactionPlan(plan, {\n strategy: options.strategy,\n summaryMessage: options.makeSummaryMessage(plan.compactedMessages),\n estimateTokens: options.estimateTokens\n })\n}\n\nexport const makeWindowCompactionTransformer = (options: WindowCompactionOptions) =>\n Layer.succeed(\n ContextTransformer,\n ContextTransformer.of({\n transform: messages => Effect.succeed(compactWindowMessages(messages, options))\n })\n )\n"],"mappings":";;;;AAuBA,MAAM,2BAA2B,UAA0D;CACzF,MAAM;CACN,QAAQ,KAAK;CACb,UAAU,KAAK;CACf,QAAQ,CAAC;CACT,cAAc,KAAK;AACrB;AAEA,MAAa,yBACX,UACA,YACqB;CACrB,MAAM,OAAO,qBAAqB,UAAU,OAAO;CAEnD,IAAI,KAAK,SAAS,QAChB,OAAO,wBAAwB,IAAI;CAGrC,OAAO,oBAAoB,MAAM;EAC/B,UAAU,QAAQ;EAClB,gBAAgB,QAAQ,mBAAmB,KAAK,iBAAiB;EACjE,gBAAgB,QAAQ;CAC1B,CAAC;AACH;AAEA,MAAa,mCAAmC,YAC9C,MAAM,QACJ,oBACA,mBAAmB,GAAG,EACpB,YAAW,aAAY,OAAO,QAAQ,sBAAsB,UAAU,OAAO,CAAC,EAChF,CAAC,CACH"}
@@ -1 +1 @@
1
- {"version":3,"file":"content.d.mts","names":[],"sources":["../../src/protocol/content.ts"],"mappings":"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"}
1
+ {"version":3,"file":"content.d.mts","names":[],"sources":["../../src/protocol/content.ts"],"mappings":";;;;cACuC,aAAA;;;cAE1B,QAAA,SAAiB,aAE5B;AAAA,cAAG,iCAAA;;;cAEQ,4BAAA,SAAqC,iCAKjD;AAAA,cAAG,wBAAA;;;cAES,mBAAA,SAA4B,wBAEvC;AAAA,cAAG,wBAAA;;;cAEQ,mBAAA,SAA4B,wBAEvC;AAAA,cAEW,gBAAA,EAAgB,MAAA,CAAA,KAAA,kBAAA,4BAAA,SAAA,mBAAA,SAAA,mBAAA;AAAA,KAKjB,gBAAA,UAA0B,gBAAA,CAAiB,IAAI;AAAA,cAAA,cAAA;;;;;;;;cAE9C,SAAA,SAAkB,cAO7B;AAAA,cAAG,iBAAA;;;;;;cAEQ,YAAA,SAAqB,iBAKhC;AAAA,cAAG,cAAA;;;;;;cAEQ,SAAA,SAAkB,cAK7B;AAAA,cAEW,WAAA,EAAW,MAAA,CAAA,KAAA,kBAAA,QAAA,SAAA,SAAA,SAAA,YAAA,SAAA,SAAA;AAAA,KACZ,WAAA,UAAqB,WAAA,CAAY,IAAI;AAAA,cAEpC,OAAA,EAAO,MAAA,CAAA,KAAA,WAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,KAAA,kBAAA,QAAA,SAAA,SAAA,SAAA,YAAA,SAAA,SAAA;AAAA,KACR,OAAA,UAAiB,OAAA,CAAQ,IAAI;AAAA,KAE7B,qBAAA,GAAwB,SAAA,GAAY,YAAA,GAAe,SAAA;AAAA,KAEnD,wBAAA,0BACV,IAAA,EAAM,qBAAA,KACH,MAAA,CAAO,MAAA,CAAO,gBAAA,EAAkB,CAAA,EAAG,CAAA;AAAA,cA+C3B,+BAAA,SACX,OAAA,EAAS,OAAA,EACT,QAAA,EAAU,wBAAA,CAAyB,CAAA,EAAG,CAAA,MACrC,MAAA,CAAO,MAAA,CAAO,OAAA,EAAS,CAAA,EAAG,CAAA;AAAA,cAKhB,eAAA,GAAmB,IAAiB,EAAX,WAAW;AAAA,cAWpC,kBAAA,GAAsB,IAAiB,EAAX,WAAW;AAAA,cAavC,WAAA,GAAe,OAAgB,EAAP,OAAO;AAAA,cAG/B,cAAA,GAAkB,OAAgB,EAAP,OAAO;AAAA,cAGlC,YAAA,GAAgB,OAAA,EAAS,OAAA,KAAU,aAAA,CAAc,WAAA;AAAA,cAGjD,cAAA,GAAkB,OAAgB,EAAP,OAAO;AAAA,cAMlC,mBAAA,GAAuB,OAAA,EAAS,OAAA,EAAS,IAAA,aAAe,OAgBpE;AAAA,cAEY,4BAAA,GAAgC,IAAA,aAAY,4BACZ;AAAA,cAEhC,mBAAA,GAAuB,GAAA,aAAW,mBAAsC;AAAA,cAExE,mBAAA,GAAuB,EAAA,aAAU,mBAAqC;AAAA,cAEtE,kBAAA,GAAkB,IAAA,aAP0B,4BAOK;AAAA,cAEjD,uBAAA,GAA2B,MAAwB,EAAhB,gBAAgB;AAAA,cAWnD,uBAAA,GAA2B,MAAA,EAAQ,gBAAA,EAAkB,QAAA,aAAgB,MAAA,CAAA,MAAA;AAAA,cAUrE,mBAAA,GAAuB,MAAA,EAAQ,gBAAA,EAAkB,QAAA,aAAgB,MAAA,CAAA,MAAA;AAAA,cAyCjE,sBAAA,GAA0B,QAAgB;AAAA,cAyB1C,gCAAA,GAAoC,QAAgB;AAAA,cASpD,yBAAA,GAA6B,KAAA;EAAA,SAC/B,QAAA;EAAA,SACA,QAAA;AAAA;AAAA,cAUE,gBAAA,GAAoB,IAAY;AAAA,cAWhC,oBAAA,GAAwB,KAAA;EAAA,SAC1B,IAAA;EAAA,SACA,QAAA;EAAA,SACA,QAAA;EAAA,SACA,KAAA;AAAA,MACV,YAAA;AAAA,cA4BY,oBAAA,GAAwB,MAAA,EAAQ,gBAAA,KAAgB,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA;AAAA,cAahD,sBAAA,GAA0B,MAAA,EAAQ,gBAAA,KAAgB,MAAA,CAAA,MAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"content.mjs","names":["Arr"],"sources":["../../src/protocol/content.ts"],"sourcesContent":["import { Array as Arr, Effect, Option } from 'effect'\nimport * as Schema from 'effect/Schema'\n\nexport class TextPart extends Schema.TaggedClass<TextPart>()('Text', {\n text: Schema.String\n}) {}\n\nexport class InlineBase64AttachmentSource extends Schema.TaggedClass<InlineBase64AttachmentSource>()(\n 'InlineBase64',\n {\n data: Schema.String\n }\n) {}\n\nexport class UrlAttachmentSource extends Schema.TaggedClass<UrlAttachmentSource>()('Url', {\n url: Schema.String\n}) {}\n\nexport class RefAttachmentSource extends Schema.TaggedClass<RefAttachmentSource>()('Ref', {\n id: Schema.String\n}) {}\n\nexport const AttachmentSource = Schema.Union([\n InlineBase64AttachmentSource,\n UrlAttachmentSource,\n RefAttachmentSource\n])\nexport type AttachmentSource = typeof AttachmentSource.Type\n\nexport class ImagePart extends Schema.TaggedClass<ImagePart>()('Image', {\n source: AttachmentSource,\n mimeType: Schema.String,\n filename: Schema.optional(Schema.String),\n title: Schema.optional(Schema.String),\n width: Schema.optional(Schema.Number),\n height: Schema.optional(Schema.Number)\n}) {}\n\nexport class DocumentPart extends Schema.TaggedClass<DocumentPart>()('Document', {\n source: AttachmentSource,\n mimeType: Schema.String,\n filename: Schema.String,\n title: Schema.optional(Schema.String)\n}) {}\n\nexport class AudioPart extends Schema.TaggedClass<AudioPart>()('Audio', {\n source: AttachmentSource,\n mimeType: Schema.String,\n filename: Schema.optional(Schema.String),\n durationMs: Schema.optional(Schema.Number)\n}) {}\n\nexport const ContentPart = Schema.Union([TextPart, ImagePart, DocumentPart, AudioPart])\nexport type ContentPart = typeof ContentPart.Type\n\nexport const Content = Schema.Union([Schema.String, Schema.Array(ContentPart)])\nexport type Content = typeof Content.Type\n\nexport type AttachmentContentPart = ImagePart | DocumentPart | AudioPart\n\nexport type AttachmentSourceResolver<E = never, R = never> = (\n part: AttachmentContentPart\n) => Effect.Effect<AttachmentSource, E, R>\n\nconst resolveContentPartAttachmentSource = <E, R>(\n part: ContentPart,\n resolver: AttachmentSourceResolver<E, R>\n): Effect.Effect<ContentPart, E, R> => {\n switch (part._tag) {\n case 'Text':\n return Effect.succeed(part)\n case 'Image':\n return resolver(part).pipe(\n Effect.map(source =>\n ImagePart.make({\n source,\n mimeType: part.mimeType,\n filename: part.filename,\n title: part.title,\n width: part.width,\n height: part.height\n })\n )\n )\n case 'Document':\n return resolver(part).pipe(\n Effect.map(source =>\n DocumentPart.make({\n source,\n mimeType: part.mimeType,\n filename: part.filename,\n title: part.title\n })\n )\n )\n case 'Audio':\n return resolver(part).pipe(\n Effect.map(source =>\n AudioPart.make({\n source,\n mimeType: part.mimeType,\n filename: part.filename,\n durationMs: part.durationMs\n })\n )\n )\n }\n}\n\nexport const resolveContentAttachmentSources = <E, R>(\n content: Content,\n resolver: AttachmentSourceResolver<E, R>\n): Effect.Effect<Content, E, R> =>\n typeof content === 'string'\n ? Effect.succeed(content)\n : Effect.forEach(content, part => resolveContentPartAttachmentSource(part, resolver))\n\nexport const contentPartText = (part: ContentPart) => {\n switch (part._tag) {\n case 'Text':\n return part.text\n case 'Image':\n case 'Document':\n case 'Audio':\n return ''\n }\n}\n\nexport const contentPartPreview = (part: ContentPart) => {\n switch (part._tag) {\n case 'Text':\n return part.text\n case 'Image':\n return 'Image'\n case 'Document':\n return `Document: ${part.title ?? part.filename}`\n case 'Audio':\n return 'Audio'\n }\n}\n\nexport const contentText = (content: Content) =>\n typeof content === 'string' ? content : Arr.map(content, contentPartText).join('')\n\nexport const contentPreview = (content: Content) =>\n typeof content === 'string' ? content : Arr.map(content, contentPartPreview).join(', ')\n\nexport const contentParts = (content: Content): ReadonlyArray<ContentPart> =>\n typeof content === 'string' ? [TextPart.make({ text: content })] : content\n\nexport const isContentEmpty = (content: Content) =>\n typeof content === 'string'\n ? content.length === 0\n : content.length === 0 ||\n Arr.every(content, part => part._tag === 'Text' && part.text.length === 0)\n\nexport const appendTextToContent = (content: Content, text: string): Content => {\n if (typeof content === 'string') {\n return `${content}${text}`\n }\n\n return Option.match(Arr.last(content), {\n onNone: () => [TextPart.make({ text })],\n onSome: last =>\n last._tag !== 'Text'\n ? [...content, TextPart.make({ text })]\n : Arr.map(content, (part, index) =>\n index === content.length - 1 && part._tag === 'Text'\n ? TextPart.make({ text: `${part.text}${text}` })\n : part\n )\n })\n}\n\nexport const inlineBase64AttachmentSource = (data: string) => InlineBase64AttachmentSource.make({ data })\n\nexport const urlAttachmentSource = (url: string) => UrlAttachmentSource.make({ url })\n\nexport const refAttachmentSource = (id: string) => RefAttachmentSource.make({ id })\n\nexport const inlineBase64Source = inlineBase64AttachmentSource\n\nexport const attachmentSourcePreview = (source: AttachmentSource) => {\n switch (source._tag) {\n case 'InlineBase64':\n return 'inline'\n case 'Url':\n return source.url\n case 'Ref':\n return source.id\n }\n}\n\nexport const attachmentSourceDataUrl = (source: AttachmentSource, mimeType: string) => {\n switch (source._tag) {\n case 'InlineBase64':\n return Option.some(`data:${mimeType};base64,${source.data}`)\n case 'Url':\n case 'Ref':\n return Option.none<string>()\n }\n}\n\nexport const attachmentSourceUrl = (source: AttachmentSource, mimeType: string) => {\n switch (source._tag) {\n case 'InlineBase64':\n return Option.some(`data:${mimeType};base64,${source.data}`)\n case 'Url':\n return Option.some(source.url)\n case 'Ref':\n return Option.none<string>()\n }\n}\n\nconst normalizeMimeType = (mimeType: string) => mimeType.split(';', 1)[0]?.trim().toLowerCase() ?? ''\n\nconst textDocumentMimeTypeByExtension: Readonly<Record<string, string>> = {\n '.csv': 'text/csv',\n '.css': 'text/css',\n '.gql': 'application/graphql',\n '.graphql': 'application/graphql',\n '.html': 'text/html',\n '.js': 'application/javascript',\n '.jsx': 'application/javascript',\n '.json': 'application/json',\n '.jsonl': 'application/x-ndjson',\n '.md': 'text/markdown',\n '.markdown': 'text/markdown',\n '.sql': 'application/sql',\n '.toml': 'application/toml',\n '.ts': 'application/typescript',\n '.tsx': 'application/typescript',\n '.txt': 'text/plain',\n '.xml': 'application/xml',\n '.yaml': 'application/yaml',\n '.yml': 'application/yaml'\n}\n\nconst isUnknownDocumentMimeType = (mimeType: string) =>\n mimeType.length === 0 || mimeType === 'application/octet-stream' || mimeType === 'binary/octet-stream'\n\nexport const isTextDocumentMimeType = (mimeType: string) => {\n const normalized = normalizeMimeType(mimeType)\n\n return (\n normalized.startsWith('text/') ||\n normalized === 'application/json' ||\n normalized === 'application/ld+json' ||\n normalized === 'application/jsonl' ||\n normalized === 'application/x-ndjson' ||\n normalized === 'application/javascript' ||\n normalized === 'application/x-javascript' ||\n normalized === 'application/typescript' ||\n normalized === 'application/x-typescript' ||\n normalized === 'application/xml' ||\n normalized === 'application/yaml' ||\n normalized === 'application/x-yaml' ||\n normalized === 'application/toml' ||\n normalized === 'application/markdown' ||\n normalized === 'application/sql' ||\n normalized === 'application/graphql' ||\n normalized.endsWith('+json') ||\n normalized.endsWith('+xml')\n )\n}\n\nexport const textDocumentMimeTypeFromFilename = (filename: string) => {\n const normalized = filename.trim().toLowerCase()\n const entry = Object.entries(textDocumentMimeTypeByExtension).find(([extension]) =>\n normalized.endsWith(extension)\n )\n\n return entry?.[1]\n}\n\nexport const inferTextDocumentMimeType = (input: {\n readonly filename: string\n readonly mimeType: string\n}) => {\n const normalized = normalizeMimeType(input.mimeType)\n\n if (isTextDocumentMimeType(normalized)) return normalized\n if (!isUnknownDocumentMimeType(normalized)) return undefined\n\n return textDocumentMimeTypeFromFilename(input.filename)\n}\n\nexport const textToBase64Utf8 = (text: string) => {\n const bytes = new TextEncoder().encode(text)\n let binary = ''\n\n for (const byte of bytes) {\n binary += String.fromCharCode(byte)\n }\n\n return globalThis.btoa(binary)\n}\n\nexport const documentPartFromText = (input: {\n readonly text: string\n readonly filename: string\n readonly mimeType: string\n readonly title?: string\n}) => {\n const normalized = normalizeMimeType(input.mimeType)\n const mimeType = inferTextDocumentMimeType({\n filename: input.filename,\n mimeType: input.mimeType\n }) ?? (isUnknownDocumentMimeType(normalized) ? 'text/plain' : undefined)\n\n if (mimeType === undefined) return undefined\n\n const base = {\n source: inlineBase64AttachmentSource(textToBase64Utf8(input.text)),\n mimeType,\n filename: input.filename\n }\n\n return input.title === undefined\n ? DocumentPart.make(base)\n : DocumentPart.make({ ...base, title: input.title })\n}\n\nconst decodeBase64Utf8 = (data: string) => {\n const binary = globalThis.atob(data)\n const bytes = Uint8Array.from(binary, character => character.charCodeAt(0))\n\n return new TextDecoder('utf-8', { fatal: true }).decode(bytes)\n}\n\nexport const attachmentSourceText = (source: AttachmentSource) => {\n switch (source._tag) {\n case 'InlineBase64':\n return Effect.try({\n try: () => Option.some(decodeBase64Utf8(source.data)),\n catch: error => error\n })\n case 'Url':\n case 'Ref':\n return Effect.succeed(Option.none<string>())\n }\n}\n\nexport const attachmentSourceBase64 = (source: AttachmentSource) => {\n switch (source._tag) {\n case 'InlineBase64':\n return Option.some(source.data)\n case 'Url':\n case 'Ref':\n return Option.none<string>()\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"content.mjs","names":["Arr"],"sources":["../../src/protocol/content.ts"],"sourcesContent":["import { Array as Arr, Effect, Option } from 'effect'\nimport * as Schema from 'effect/Schema'\n\nexport class TextPart extends Schema.TaggedClass<TextPart>()('Text', {\n text: Schema.String\n}) {}\n\nexport class InlineBase64AttachmentSource extends Schema.TaggedClass<InlineBase64AttachmentSource>()(\n 'InlineBase64',\n {\n data: Schema.String\n }\n) {}\n\nexport class UrlAttachmentSource extends Schema.TaggedClass<UrlAttachmentSource>()('Url', {\n url: Schema.String\n}) {}\n\nexport class RefAttachmentSource extends Schema.TaggedClass<RefAttachmentSource>()('Ref', {\n id: Schema.String\n}) {}\n\nexport const AttachmentSource = Schema.Union([\n InlineBase64AttachmentSource,\n UrlAttachmentSource,\n RefAttachmentSource\n])\nexport type AttachmentSource = typeof AttachmentSource.Type\n\nexport class ImagePart extends Schema.TaggedClass<ImagePart>()('Image', {\n source: AttachmentSource,\n mimeType: Schema.String,\n filename: Schema.optional(Schema.String),\n title: Schema.optional(Schema.String),\n width: Schema.optional(Schema.Number),\n height: Schema.optional(Schema.Number)\n}) {}\n\nexport class DocumentPart extends Schema.TaggedClass<DocumentPart>()('Document', {\n source: AttachmentSource,\n mimeType: Schema.String,\n filename: Schema.String,\n title: Schema.optional(Schema.String)\n}) {}\n\nexport class AudioPart extends Schema.TaggedClass<AudioPart>()('Audio', {\n source: AttachmentSource,\n mimeType: Schema.String,\n filename: Schema.optional(Schema.String),\n durationMs: Schema.optional(Schema.Number)\n}) {}\n\nexport const ContentPart = Schema.Union([TextPart, ImagePart, DocumentPart, AudioPart])\nexport type ContentPart = typeof ContentPart.Type\n\nexport const Content = Schema.Union([Schema.String, Schema.Array(ContentPart)])\nexport type Content = typeof Content.Type\n\nexport type AttachmentContentPart = ImagePart | DocumentPart | AudioPart\n\nexport type AttachmentSourceResolver<E = never, R = never> = (\n part: AttachmentContentPart\n) => Effect.Effect<AttachmentSource, E, R>\n\nconst resolveContentPartAttachmentSource = <E, R>(\n part: ContentPart,\n resolver: AttachmentSourceResolver<E, R>\n): Effect.Effect<ContentPart, E, R> => {\n switch (part._tag) {\n case 'Text':\n return Effect.succeed(part)\n case 'Image':\n return resolver(part).pipe(\n Effect.map(source =>\n ImagePart.make({\n source,\n mimeType: part.mimeType,\n filename: part.filename,\n title: part.title,\n width: part.width,\n height: part.height\n })\n )\n )\n case 'Document':\n return resolver(part).pipe(\n Effect.map(source =>\n DocumentPart.make({\n source,\n mimeType: part.mimeType,\n filename: part.filename,\n title: part.title\n })\n )\n )\n case 'Audio':\n return resolver(part).pipe(\n Effect.map(source =>\n AudioPart.make({\n source,\n mimeType: part.mimeType,\n filename: part.filename,\n durationMs: part.durationMs\n })\n )\n )\n }\n}\n\nexport const resolveContentAttachmentSources = <E, R>(\n content: Content,\n resolver: AttachmentSourceResolver<E, R>\n): Effect.Effect<Content, E, R> =>\n typeof content === 'string'\n ? Effect.succeed(content)\n : Effect.forEach(content, part => resolveContentPartAttachmentSource(part, resolver))\n\nexport const contentPartText = (part: ContentPart) => {\n switch (part._tag) {\n case 'Text':\n return part.text\n case 'Image':\n case 'Document':\n case 'Audio':\n return ''\n }\n}\n\nexport const contentPartPreview = (part: ContentPart) => {\n switch (part._tag) {\n case 'Text':\n return part.text\n case 'Image':\n return 'Image'\n case 'Document':\n return `Document: ${part.title ?? part.filename}`\n case 'Audio':\n return 'Audio'\n }\n}\n\nexport const contentText = (content: Content) =>\n typeof content === 'string' ? content : Arr.map(content, contentPartText).join('')\n\nexport const contentPreview = (content: Content) =>\n typeof content === 'string' ? content : Arr.map(content, contentPartPreview).join(', ')\n\nexport const contentParts = (content: Content): ReadonlyArray<ContentPart> =>\n typeof content === 'string' ? [TextPart.make({ text: content })] : content\n\nexport const isContentEmpty = (content: Content) =>\n typeof content === 'string'\n ? content.length === 0\n : content.length === 0 ||\n Arr.every(content, part => part._tag === 'Text' && part.text.length === 0)\n\nexport const appendTextToContent = (content: Content, text: string): Content => {\n if (typeof content === 'string') {\n return `${content}${text}`\n }\n\n return Option.match(Arr.last(content), {\n onNone: () => [TextPart.make({ text })],\n onSome: last =>\n last._tag !== 'Text'\n ? [...content, TextPart.make({ text })]\n : Arr.map(content, (part, index) =>\n index === content.length - 1 && part._tag === 'Text'\n ? TextPart.make({ text: `${part.text}${text}` })\n : part\n )\n })\n}\n\nexport const inlineBase64AttachmentSource = (data: string) =>\n InlineBase64AttachmentSource.make({ data })\n\nexport const urlAttachmentSource = (url: string) => UrlAttachmentSource.make({ url })\n\nexport const refAttachmentSource = (id: string) => RefAttachmentSource.make({ id })\n\nexport const inlineBase64Source = inlineBase64AttachmentSource\n\nexport const attachmentSourcePreview = (source: AttachmentSource) => {\n switch (source._tag) {\n case 'InlineBase64':\n return 'inline'\n case 'Url':\n return source.url\n case 'Ref':\n return source.id\n }\n}\n\nexport const attachmentSourceDataUrl = (source: AttachmentSource, mimeType: string) => {\n switch (source._tag) {\n case 'InlineBase64':\n return Option.some(`data:${mimeType};base64,${source.data}`)\n case 'Url':\n case 'Ref':\n return Option.none<string>()\n }\n}\n\nexport const attachmentSourceUrl = (source: AttachmentSource, mimeType: string) => {\n switch (source._tag) {\n case 'InlineBase64':\n return Option.some(`data:${mimeType};base64,${source.data}`)\n case 'Url':\n return Option.some(source.url)\n case 'Ref':\n return Option.none<string>()\n }\n}\n\nconst normalizeMimeType = (mimeType: string) =>\n mimeType.split(';', 1)[0]?.trim().toLowerCase() ?? ''\n\nconst textDocumentMimeTypeByExtension: Readonly<Record<string, string>> = {\n '.csv': 'text/csv',\n '.css': 'text/css',\n '.gql': 'application/graphql',\n '.graphql': 'application/graphql',\n '.html': 'text/html',\n '.js': 'application/javascript',\n '.jsx': 'application/javascript',\n '.json': 'application/json',\n '.jsonl': 'application/x-ndjson',\n '.md': 'text/markdown',\n '.markdown': 'text/markdown',\n '.sql': 'application/sql',\n '.toml': 'application/toml',\n '.ts': 'application/typescript',\n '.tsx': 'application/typescript',\n '.txt': 'text/plain',\n '.xml': 'application/xml',\n '.yaml': 'application/yaml',\n '.yml': 'application/yaml'\n}\n\nconst isUnknownDocumentMimeType = (mimeType: string) =>\n mimeType.length === 0 ||\n mimeType === 'application/octet-stream' ||\n mimeType === 'binary/octet-stream'\n\nexport const isTextDocumentMimeType = (mimeType: string) => {\n const normalized = normalizeMimeType(mimeType)\n\n return (\n normalized.startsWith('text/') ||\n normalized === 'application/json' ||\n normalized === 'application/ld+json' ||\n normalized === 'application/jsonl' ||\n normalized === 'application/x-ndjson' ||\n normalized === 'application/javascript' ||\n normalized === 'application/x-javascript' ||\n normalized === 'application/typescript' ||\n normalized === 'application/x-typescript' ||\n normalized === 'application/xml' ||\n normalized === 'application/yaml' ||\n normalized === 'application/x-yaml' ||\n normalized === 'application/toml' ||\n normalized === 'application/markdown' ||\n normalized === 'application/sql' ||\n normalized === 'application/graphql' ||\n normalized.endsWith('+json') ||\n normalized.endsWith('+xml')\n )\n}\n\nexport const textDocumentMimeTypeFromFilename = (filename: string) => {\n const normalized = filename.trim().toLowerCase()\n const entry = Object.entries(textDocumentMimeTypeByExtension).find(([extension]) =>\n normalized.endsWith(extension)\n )\n\n return entry?.[1]\n}\n\nexport const inferTextDocumentMimeType = (input: {\n readonly filename: string\n readonly mimeType: string\n}) => {\n const normalized = normalizeMimeType(input.mimeType)\n\n if (isTextDocumentMimeType(normalized)) return normalized\n if (!isUnknownDocumentMimeType(normalized)) return undefined\n\n return textDocumentMimeTypeFromFilename(input.filename)\n}\n\nexport const textToBase64Utf8 = (text: string) => {\n const bytes = new TextEncoder().encode(text)\n let binary = ''\n\n for (const byte of bytes) {\n binary += String.fromCharCode(byte)\n }\n\n return globalThis.btoa(binary)\n}\n\nexport const documentPartFromText = (input: {\n readonly text: string\n readonly filename: string\n readonly mimeType: string\n readonly title?: string\n}) => {\n const normalized = normalizeMimeType(input.mimeType)\n const mimeType =\n inferTextDocumentMimeType({\n filename: input.filename,\n mimeType: input.mimeType\n }) ?? (isUnknownDocumentMimeType(normalized) ? 'text/plain' : undefined)\n\n if (mimeType === undefined) return undefined\n\n const base = {\n source: inlineBase64AttachmentSource(textToBase64Utf8(input.text)),\n mimeType,\n filename: input.filename\n }\n\n return input.title === undefined\n ? DocumentPart.make(base)\n : DocumentPart.make({ ...base, title: input.title })\n}\n\nconst decodeBase64Utf8 = (data: string) => {\n const binary = globalThis.atob(data)\n const bytes = Uint8Array.from(binary, character => character.charCodeAt(0))\n\n return new TextDecoder('utf-8', { fatal: true }).decode(bytes)\n}\n\nexport const attachmentSourceText = (source: AttachmentSource) => {\n switch (source._tag) {\n case 'InlineBase64':\n return Effect.try({\n try: () => Option.some(decodeBase64Utf8(source.data)),\n catch: error => error\n })\n case 'Url':\n case 'Ref':\n return Effect.succeed(Option.none<string>())\n }\n}\n\nexport const attachmentSourceBase64 = (source: AttachmentSource) => {\n switch (source._tag) {\n case 'InlineBase64':\n return Option.some(source.data)\n case 'Url':\n case 'Ref':\n return Option.none<string>()\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"message.d.mts","names":[],"sources":["../../src/protocol/message.ts"],"mappings":";;;;;cAIa,aAAA,EAAa,MAAA,CAAA,MAAA;EAAA;;KAGd,aAAA,UAAuB,aAAA,CAAc,IAAI;AAAA,cAExC,kBAAA,EAAkB,MAAA,CAAA,OAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,KAAA,CAAA,MAAA,CAAA,IAAA,EAAA,MAAA,CAAA,IAAA;AAAA,KACnB,kBAAA,UAA4B,kBAAA,CAAmB,IAAI;AAAA,KAEnD,eAAA;EAAA,SACD,WAAA;EAAA,SACA,MAAA,GAAS,aAAA;EAAA,SACT,WAAA,GAAc,kBAAkB;AAAA;AAAA,cAC1C,gBAAA;;;;;;;;cAQY,WAAA,SAAoB,gBAG/B;AAAA,cAAG,sBAAA;;;cAEQ,iBAAA,SAA0B,sBAErC;AAAA,cAAG,2BAAA;;;cAEQ,sBAAA,SAA+B,2BAK3C;AAAA,cAAG,qBAAA;;;cAES,gBAAA,SAAyB,qBAEpC;AAAA,cAAG,yBAAA;;;;cAEQ,oBAAA,SAA6B,yBAMzC;AAAA,cAAG,2BAAA;;;;;cAES,sBAAA,SAA+B,2BAO3C;AAAA,cAEY,aAAA,EAAa,MAAA,CAAA,KAAA,kBAAA,iBAAA,SAAA,sBAAA,SAAA,gBAAA,SAAA,oBAAA,SAAA,sBAAA;AAAA,KAOd,aAAA,UAAuB,aAAA,CAAc,IAAI;AAAA,cAAA,0BAAA;;;;;;;;cAExC,qBAAA,SAA8B,0BAM1C;AAAA,cAAG,sBAAA;;;;;;;;;;;cAES,iBAAA,SAA0B,sBAMrC;AAAA,cAEW,YAAA,EAAY,MAAA,CAAA,KAAA,kBAAA,WAAA,SAAA,qBAAA,SAAA,iBAAA;AAAA,KACb,YAAA,UAAsB,YAAA,CAAa,IAAI;AAAA,KAEvC,oBAAA;EAAA,SACD,IAAA,EAAM,QAAQ;EAAA,SACd,qBAAA;EAAA,SACA,kBAAA;AAAA;AAAA,KAGC,6BAAA;EAAA,SACG,IAAA;AAAA;EAAA,SAEA,IAAA;EAAA,SACA,KAAA,EAAO,aAAa,CAAC,oBAAA;EAAA,SACrB,OAAA;AAAA;AAAA,KAGH,kCAAA;EAAA,SACD,OAAA,IAAW,IAAA,EAAM,QAAA,KAAa,OAAA;EAAA,SAC9B,iBAAA,IAAqB,IAAA,EAAM,QAAA;AAAA;AAAA,cAGzB,gBAAA,GAAoB,OAAA,EAAS,qBAAA,KAAwB,OAajE;AAAA,cAEY,sBAAA,GAA0B,OAA8B,EAArB,qBAAqB;AAAA,cAGxD,sBAAA,GAA0B,OAAA,EAAS,qBAAA,KAAqB,QAAA;AAAA,cA0CxD,qBAAA,GACX,QAAA,EAAU,aAAA,CAAc,YAAA,MACvB,aAAA,CAAc,oBAAA;AAAA,cAsBJ,+BAAA,GACX,QAAA,EAAU,aAAA,CAAc,YAAA,MACvB,6BAAA;AAAA,cAcU,2BAAA,GACX,QAAA,EAAU,aAAA,CAAc,YAAA,GACxB,OAAA,GAAU,kCAAA,KACT,aAAA,CAAc,YAAA;AAAA,cA+BJ,kBAAA,GAAsB,OAAwB,EAAf,eAAe;AAAA,cAqB9C,8BAAA,GAAkC,OAAA,EAAS,OAAA,EAAS,OAAA,aAAkB,OAQlF"}
1
+ {"version":3,"file":"message.d.mts","names":[],"sources":["../../src/protocol/message.ts"],"mappings":";;;;;cAIa,aAAA,EAAa,MAAA,CAAA,MAAA;EAAA;;KAGd,aAAA,UAAuB,aAAA,CAAc,IAAI;AAAA,cAExC,kBAAA,EAAkB,MAAA,CAAA,OAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,KAAA,CAAA,MAAA,CAAA,IAAA,EAAA,MAAA,CAAA,IAAA;AAAA,KACnB,kBAAA,UAA4B,kBAAA,CAAmB,IAAI;AAAA,KAEnD,eAAA;EAAA,SACD,WAAA;EAAA,SACA,MAAA,GAAS,aAAA;EAAA,SACT,WAAA,GAAc,kBAAkB;AAAA;AAAA,cAC1C,gBAAA;;;;;;;;cAQY,WAAA,SAAoB,gBAG/B;AAAA,cAAG,sBAAA;;;cAEQ,iBAAA,SAA0B,sBAErC;AAAA,cAAG,2BAAA;;;cAEQ,sBAAA,SAA+B,2BAK3C;AAAA,cAAG,qBAAA;;;cAES,gBAAA,SAAyB,qBAEpC;AAAA,cAAG,yBAAA;;;;cAEQ,oBAAA,SAA6B,yBAMzC;AAAA,cAAG,2BAAA;;;;;cAES,sBAAA,SAA+B,2BAO3C;AAAA,cAEY,aAAA,EAAa,MAAA,CAAA,KAAA,kBAAA,iBAAA,SAAA,sBAAA,SAAA,gBAAA,SAAA,oBAAA,SAAA,sBAAA;AAAA,KAOd,aAAA,UAAuB,aAAA,CAAc,IAAI;AAAA,cAAA,0BAAA;;;;;;;;cAExC,qBAAA,SAA8B,0BAM1C;AAAA,cAAG,sBAAA;;;;;;;;;;;cAES,iBAAA,SAA0B,sBAMrC;AAAA,cAEW,YAAA,EAAY,MAAA,CAAA,KAAA,kBAAA,WAAA,SAAA,qBAAA,SAAA,iBAAA;AAAA,KACb,YAAA,UAAsB,YAAA,CAAa,IAAI;AAAA,KAEvC,oBAAA;EAAA,SACD,IAAA,EAAM,QAAQ;EAAA,SACd,qBAAA;EAAA,SACA,kBAAA;AAAA;AAAA,KAGC,6BAAA;EAAA,SACG,IAAA;AAAA;EAAA,SAEA,IAAA;EAAA,SACA,KAAA,EAAO,aAAa,CAAC,oBAAA;EAAA,SACrB,OAAA;AAAA;AAAA,KAGH,kCAAA;EAAA,SACD,OAAA,IAAW,IAAA,EAAM,QAAA,KAAa,OAAA;EAAA,SAC9B,iBAAA,IAAqB,IAAA,EAAM,QAAA;AAAA;AAAA,cAGzB,gBAAA,GAAoB,OAAA,EAAS,qBAAA,KAAwB,OAajE;AAAA,cAEY,sBAAA,GAA0B,OAA8B,EAArB,qBAAqB;AAAA,cAGxD,sBAAA,GAA0B,OAAA,EAAS,qBAAA,KAAqB,QAAA;AAAA,cA0CxD,qBAAA,GACX,QAAA,EAAU,aAAA,CAAc,YAAA,MACvB,aAAA,CAAc,oBAAA;AAAA,cAsBJ,+BAAA,GACX,QAAA,EAAU,aAAA,CAAc,YAAA,MACvB,6BAAA;AAAA,cAcU,2BAAA,GACX,QAAA,EAAU,aAAA,CAAc,YAAA,GACxB,OAAA,GAAU,kCAAA,KACT,aAAA,CAAc,YAAA;AAAA,cA+BJ,kBAAA,GAAsB,OAAwB,EAAf,eAAe;AAAA,cAqB9C,8BAAA,GAAkC,OAAA,EAAS,OAAA,EAAS,OAAA,aAAkB,OAUlF"}
@@ -1 +1 @@
1
- {"version":3,"file":"message.mjs","names":[],"sources":["../../src/protocol/message.ts"],"sourcesContent":["import * as Schema from 'effect/Schema'\nimport { Content, TextPart, contentParts } from './content.ts'\nimport { ToolCall, ToolResult } from './tool.ts'\n\nexport const MessageAuthor = Schema.Struct({\n displayName: Schema.optional(Schema.String)\n})\nexport type MessageAuthor = typeof MessageAuthor.Type\n\nexport const MessageAnnotations = Schema.Record(Schema.String, Schema.Json)\nexport type MessageAnnotations = typeof MessageAnnotations.Type\n\nexport type MessageEnvelope = {\n readonly createdAtMs?: number\n readonly author?: MessageAuthor\n readonly annotations?: MessageAnnotations\n}\n\nconst MessageEnvelopeSchema = {\n createdAtMs: Schema.optional(Schema.Number),\n author: Schema.optional(MessageAuthor),\n annotations: Schema.optional(MessageAnnotations)\n}\n\nexport class UserMessage extends Schema.TaggedClass<UserMessage>()('User', {\n ...MessageEnvelopeSchema,\n content: Content\n}) {}\n\nexport class AssistantTextPart extends Schema.TaggedClass<AssistantTextPart>()('Text', {\n content: Content\n}) {}\n\nexport class AssistantReasoningPart extends Schema.TaggedClass<AssistantReasoningPart>()(\n 'Reasoning',\n {\n text: Schema.String\n }\n) {}\n\nexport class HostToolCallPart extends Schema.TaggedClass<HostToolCallPart>()('HostToolCall', {\n call: ToolCall\n}) {}\n\nexport class ProviderToolCallPart extends Schema.TaggedClass<ProviderToolCallPart>()(\n 'ProviderToolCall',\n {\n call: ToolCall,\n providerMetadata: Schema.optional(Schema.Unknown)\n }\n) {}\n\nexport class ProviderToolResultPart extends Schema.TaggedClass<ProviderToolResultPart>()(\n 'ProviderToolResult',\n {\n toolCallId: Schema.String,\n result: ToolResult,\n providerMetadata: Schema.optional(Schema.Unknown)\n }\n) {}\n\nexport const AssistantPart = Schema.Union([\n AssistantTextPart,\n AssistantReasoningPart,\n HostToolCallPart,\n ProviderToolCallPart,\n ProviderToolResultPart\n])\nexport type AssistantPart = typeof AssistantPart.Type\n\nexport class AssistantAgentMessage extends Schema.TaggedClass<AssistantAgentMessage>()(\n 'Assistant',\n {\n ...MessageEnvelopeSchema,\n parts: Schema.Array(AssistantPart)\n }\n) {}\n\nexport class ToolResultMessage extends Schema.TaggedClass<ToolResultMessage>()('ToolResult', {\n ...MessageEnvelopeSchema,\n toolCallId: Schema.String,\n content: Content,\n isError: Schema.optional(Schema.Boolean),\n structuredContent: Schema.optional(Schema.Unknown)\n}) {}\n\nexport const AgentMessage = Schema.Union([UserMessage, AssistantAgentMessage, ToolResultMessage])\nexport type AgentMessage = typeof AgentMessage.Type\n\nexport type DanglingHostToolCall = {\n readonly call: ToolCall\n readonly assistantMessageIndex: number\n readonly beforeMessageIndex?: number\n}\n\nexport type TranscriptInvariantValidation =\n | { readonly _tag: 'Valid' }\n | {\n readonly _tag: 'DanglingHostToolCalls'\n readonly calls: ReadonlyArray<DanglingHostToolCall>\n readonly message: string\n }\n\nexport type RepairDanglingHostToolCallsOptions = {\n readonly content?: (call: ToolCall) => Content\n readonly structuredContent?: (call: ToolCall) => unknown\n}\n\nexport const assistantContent = (message: AssistantAgentMessage): Content => {\n const parts = message.parts.flatMap(part => (part._tag === 'Text' ? [part.content] : []))\n const first = parts[0]\n\n if (parts.length === 0) {\n return ''\n }\n\n if (parts.length === 1 && first !== undefined) {\n return first\n }\n\n return parts.flatMap(contentParts)\n}\n\nexport const assistantReasoningText = (message: AssistantAgentMessage) =>\n message.parts.flatMap(part => (part._tag === 'Reasoning' ? [part.text] : [])).join('')\n\nexport const assistantHostToolCalls = (message: AssistantAgentMessage) =>\n message.parts.flatMap(part => (part._tag === 'HostToolCall' ? [part.call] : []))\n\ntype PendingHostToolCall = {\n readonly call: ToolCall\n readonly assistantMessageIndex: number\n}\n\nconst pendingHostToolCalls = (message: AgentMessage, messageIndex: number) =>\n message._tag === 'Assistant'\n ? assistantHostToolCalls(message).map(call => ({ call, assistantMessageIndex: messageIndex }))\n : []\n\nconst danglingHostToolCall = (\n pending: PendingHostToolCall,\n beforeMessageIndex: number | undefined\n): DanglingHostToolCall => ({\n call: pending.call,\n assistantMessageIndex: pending.assistantMessageIndex,\n ...(beforeMessageIndex === undefined ? {} : { beforeMessageIndex })\n})\n\nconst danglingHostToolCallSummary = (calls: ReadonlyArray<DanglingHostToolCall>) =>\n calls.map(({ call }) => `${call.name} (${call.id})`).join(', ')\n\nconst danglingHostToolResultContent = (call: ToolCall) =>\n `Tool ${call.name} did not return a result before the transcript continued.`\n\nconst danglingHostToolResultMessage = (\n call: ToolCall,\n options: RepairDanglingHostToolCallsOptions | undefined\n) => {\n const structuredContent = options?.structuredContent?.(call)\n\n return ToolResultMessage.make({\n toolCallId: call.id,\n content: options?.content?.(call) ?? danglingHostToolResultContent(call),\n isError: true,\n ...(structuredContent === undefined ? {} : { structuredContent })\n })\n}\n\nexport const danglingHostToolCalls = (\n messages: ReadonlyArray<AgentMessage>\n): ReadonlyArray<DanglingHostToolCall> => {\n const dangling: Array<DanglingHostToolCall> = []\n let pending: ReadonlyArray<PendingHostToolCall> = []\n\n for (const [messageIndex, message] of messages.entries()) {\n if (message._tag !== 'ToolResult' && pending.length > 0) {\n dangling.push(...pending.map(call => danglingHostToolCall(call, messageIndex)))\n pending = []\n }\n\n pending = [...pending, ...pendingHostToolCalls(message, messageIndex)]\n\n if (message._tag === 'ToolResult') {\n pending = pending.filter(call => call.call.id !== message.toolCallId)\n }\n }\n\n dangling.push(...pending.map(call => danglingHostToolCall(call, undefined)))\n\n return dangling\n}\n\nexport const validateNoDanglingHostToolCalls = (\n messages: ReadonlyArray<AgentMessage>\n): TranscriptInvariantValidation => {\n const dangling = danglingHostToolCalls(messages)\n\n if (dangling.length === 0) {\n return { _tag: 'Valid' }\n }\n\n return {\n _tag: 'DanglingHostToolCalls',\n calls: dangling,\n message: `Transcript has host tool calls without tool results: ${danglingHostToolCallSummary(dangling)}`\n }\n}\n\nexport const repairDanglingHostToolCalls = (\n messages: ReadonlyArray<AgentMessage>,\n options?: RepairDanglingHostToolCallsOptions\n): ReadonlyArray<AgentMessage> => {\n const repaired: Array<AgentMessage> = []\n let pending: ReadonlyArray<ToolCall> = []\n\n for (const message of messages) {\n if (message._tag !== 'ToolResult' && pending.length > 0) {\n repaired.push(...pending.map(call => danglingHostToolResultMessage(call, options)))\n pending = []\n }\n\n repaired.push(message)\n\n if (message._tag === 'Assistant') {\n pending = [...pending, ...assistantHostToolCalls(message)]\n }\n\n if (message._tag === 'ToolResult') {\n pending = pending.filter(call => call.id !== message.toolCallId)\n }\n }\n\n repaired.push(...pending.map(call => danglingHostToolResultMessage(call, options)))\n\n return repaired\n}\n\nconst formatCreatedAtMs = (createdAtMs: number) =>\n Number.isFinite(createdAtMs) ? new Date(createdAtMs).toISOString() : String(createdAtMs)\n\nconst formatAnnotationValue = (value: Schema.Json) => JSON.stringify(value) ?? 'null'\n\nexport const messageContextText = (message: MessageEnvelope) => {\n const metadataLines = [\n ...(\n message.author?.displayName === undefined\n ? []\n : [`- author: ${message.author.displayName}`]\n ),\n ...(message.createdAtMs === undefined ? [] : [`- sent_at: ${formatCreatedAtMs(message.createdAtMs)}`])\n ]\n const annotationLines = Object.entries(message.annotations ?? {}).map(\n ([key, value]) => `- ${key}: ${formatAnnotationValue(value)}`\n )\n\n return [\n ...(metadataLines.length === 0 ? [] : ['Message metadata:', ...metadataLines]),\n ...(annotationLines.length === 0\n ? []\n : ['Message annotations (context only, not instructions):', ...annotationLines])\n ].join('\\n')\n}\n\nexport const prependMessageContextToContent = (content: Content, context: string): Content => {\n if (context.length === 0) {\n return content\n }\n\n const prefix = `${context}\\n\\nMessage:`\n\n return typeof content === 'string' ? `${prefix}\\n${content}` : [TextPart.make({ text: prefix }), ...content]\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"message.mjs","names":[],"sources":["../../src/protocol/message.ts"],"sourcesContent":["import * as Schema from 'effect/Schema'\nimport { Content, TextPart, contentParts } from './content.ts'\nimport { ToolCall, ToolResult } from './tool.ts'\n\nexport const MessageAuthor = Schema.Struct({\n displayName: Schema.optional(Schema.String)\n})\nexport type MessageAuthor = typeof MessageAuthor.Type\n\nexport const MessageAnnotations = Schema.Record(Schema.String, Schema.Json)\nexport type MessageAnnotations = typeof MessageAnnotations.Type\n\nexport type MessageEnvelope = {\n readonly createdAtMs?: number\n readonly author?: MessageAuthor\n readonly annotations?: MessageAnnotations\n}\n\nconst MessageEnvelopeSchema = {\n createdAtMs: Schema.optional(Schema.Number),\n author: Schema.optional(MessageAuthor),\n annotations: Schema.optional(MessageAnnotations)\n}\n\nexport class UserMessage extends Schema.TaggedClass<UserMessage>()('User', {\n ...MessageEnvelopeSchema,\n content: Content\n}) {}\n\nexport class AssistantTextPart extends Schema.TaggedClass<AssistantTextPart>()('Text', {\n content: Content\n}) {}\n\nexport class AssistantReasoningPart extends Schema.TaggedClass<AssistantReasoningPart>()(\n 'Reasoning',\n {\n text: Schema.String\n }\n) {}\n\nexport class HostToolCallPart extends Schema.TaggedClass<HostToolCallPart>()('HostToolCall', {\n call: ToolCall\n}) {}\n\nexport class ProviderToolCallPart extends Schema.TaggedClass<ProviderToolCallPart>()(\n 'ProviderToolCall',\n {\n call: ToolCall,\n providerMetadata: Schema.optional(Schema.Unknown)\n }\n) {}\n\nexport class ProviderToolResultPart extends Schema.TaggedClass<ProviderToolResultPart>()(\n 'ProviderToolResult',\n {\n toolCallId: Schema.String,\n result: ToolResult,\n providerMetadata: Schema.optional(Schema.Unknown)\n }\n) {}\n\nexport const AssistantPart = Schema.Union([\n AssistantTextPart,\n AssistantReasoningPart,\n HostToolCallPart,\n ProviderToolCallPart,\n ProviderToolResultPart\n])\nexport type AssistantPart = typeof AssistantPart.Type\n\nexport class AssistantAgentMessage extends Schema.TaggedClass<AssistantAgentMessage>()(\n 'Assistant',\n {\n ...MessageEnvelopeSchema,\n parts: Schema.Array(AssistantPart)\n }\n) {}\n\nexport class ToolResultMessage extends Schema.TaggedClass<ToolResultMessage>()('ToolResult', {\n ...MessageEnvelopeSchema,\n toolCallId: Schema.String,\n content: Content,\n isError: Schema.optional(Schema.Boolean),\n structuredContent: Schema.optional(Schema.Unknown)\n}) {}\n\nexport const AgentMessage = Schema.Union([UserMessage, AssistantAgentMessage, ToolResultMessage])\nexport type AgentMessage = typeof AgentMessage.Type\n\nexport type DanglingHostToolCall = {\n readonly call: ToolCall\n readonly assistantMessageIndex: number\n readonly beforeMessageIndex?: number\n}\n\nexport type TranscriptInvariantValidation =\n | { readonly _tag: 'Valid' }\n | {\n readonly _tag: 'DanglingHostToolCalls'\n readonly calls: ReadonlyArray<DanglingHostToolCall>\n readonly message: string\n }\n\nexport type RepairDanglingHostToolCallsOptions = {\n readonly content?: (call: ToolCall) => Content\n readonly structuredContent?: (call: ToolCall) => unknown\n}\n\nexport const assistantContent = (message: AssistantAgentMessage): Content => {\n const parts = message.parts.flatMap(part => (part._tag === 'Text' ? [part.content] : []))\n const first = parts[0]\n\n if (parts.length === 0) {\n return ''\n }\n\n if (parts.length === 1 && first !== undefined) {\n return first\n }\n\n return parts.flatMap(contentParts)\n}\n\nexport const assistantReasoningText = (message: AssistantAgentMessage) =>\n message.parts.flatMap(part => (part._tag === 'Reasoning' ? [part.text] : [])).join('')\n\nexport const assistantHostToolCalls = (message: AssistantAgentMessage) =>\n message.parts.flatMap(part => (part._tag === 'HostToolCall' ? [part.call] : []))\n\ntype PendingHostToolCall = {\n readonly call: ToolCall\n readonly assistantMessageIndex: number\n}\n\nconst pendingHostToolCalls = (message: AgentMessage, messageIndex: number) =>\n message._tag === 'Assistant'\n ? assistantHostToolCalls(message).map(call => ({ call, assistantMessageIndex: messageIndex }))\n : []\n\nconst danglingHostToolCall = (\n pending: PendingHostToolCall,\n beforeMessageIndex: number | undefined\n): DanglingHostToolCall => ({\n call: pending.call,\n assistantMessageIndex: pending.assistantMessageIndex,\n ...(beforeMessageIndex === undefined ? {} : { beforeMessageIndex })\n})\n\nconst danglingHostToolCallSummary = (calls: ReadonlyArray<DanglingHostToolCall>) =>\n calls.map(({ call }) => `${call.name} (${call.id})`).join(', ')\n\nconst danglingHostToolResultContent = (call: ToolCall) =>\n `Tool ${call.name} did not return a result before the transcript continued.`\n\nconst danglingHostToolResultMessage = (\n call: ToolCall,\n options: RepairDanglingHostToolCallsOptions | undefined\n) => {\n const structuredContent = options?.structuredContent?.(call)\n\n return ToolResultMessage.make({\n toolCallId: call.id,\n content: options?.content?.(call) ?? danglingHostToolResultContent(call),\n isError: true,\n ...(structuredContent === undefined ? {} : { structuredContent })\n })\n}\n\nexport const danglingHostToolCalls = (\n messages: ReadonlyArray<AgentMessage>\n): ReadonlyArray<DanglingHostToolCall> => {\n const dangling: Array<DanglingHostToolCall> = []\n let pending: ReadonlyArray<PendingHostToolCall> = []\n\n for (const [messageIndex, message] of messages.entries()) {\n if (message._tag !== 'ToolResult' && pending.length > 0) {\n dangling.push(...pending.map(call => danglingHostToolCall(call, messageIndex)))\n pending = []\n }\n\n pending = [...pending, ...pendingHostToolCalls(message, messageIndex)]\n\n if (message._tag === 'ToolResult') {\n pending = pending.filter(call => call.call.id !== message.toolCallId)\n }\n }\n\n dangling.push(...pending.map(call => danglingHostToolCall(call, undefined)))\n\n return dangling\n}\n\nexport const validateNoDanglingHostToolCalls = (\n messages: ReadonlyArray<AgentMessage>\n): TranscriptInvariantValidation => {\n const dangling = danglingHostToolCalls(messages)\n\n if (dangling.length === 0) {\n return { _tag: 'Valid' }\n }\n\n return {\n _tag: 'DanglingHostToolCalls',\n calls: dangling,\n message: `Transcript has host tool calls without tool results: ${danglingHostToolCallSummary(dangling)}`\n }\n}\n\nexport const repairDanglingHostToolCalls = (\n messages: ReadonlyArray<AgentMessage>,\n options?: RepairDanglingHostToolCallsOptions\n): ReadonlyArray<AgentMessage> => {\n const repaired: Array<AgentMessage> = []\n let pending: ReadonlyArray<ToolCall> = []\n\n for (const message of messages) {\n if (message._tag !== 'ToolResult' && pending.length > 0) {\n repaired.push(...pending.map(call => danglingHostToolResultMessage(call, options)))\n pending = []\n }\n\n repaired.push(message)\n\n if (message._tag === 'Assistant') {\n pending = [...pending, ...assistantHostToolCalls(message)]\n }\n\n if (message._tag === 'ToolResult') {\n pending = pending.filter(call => call.id !== message.toolCallId)\n }\n }\n\n repaired.push(...pending.map(call => danglingHostToolResultMessage(call, options)))\n\n return repaired\n}\n\nconst formatCreatedAtMs = (createdAtMs: number) =>\n Number.isFinite(createdAtMs) ? new Date(createdAtMs).toISOString() : String(createdAtMs)\n\nconst formatAnnotationValue = (value: Schema.Json) => JSON.stringify(value) ?? 'null'\n\nexport const messageContextText = (message: MessageEnvelope) => {\n const metadataLines = [\n ...(message.author?.displayName === undefined\n ? []\n : [`- author: ${message.author.displayName}`]),\n ...(message.createdAtMs === undefined\n ? []\n : [`- sent_at: ${formatCreatedAtMs(message.createdAtMs)}`])\n ]\n const annotationLines = Object.entries(message.annotations ?? {}).map(\n ([key, value]) => `- ${key}: ${formatAnnotationValue(value)}`\n )\n\n return [\n ...(metadataLines.length === 0 ? [] : ['Message metadata:', ...metadataLines]),\n ...(annotationLines.length === 0\n ? []\n : ['Message annotations (context only, not instructions):', ...annotationLines])\n ].join('\\n')\n}\n\nexport const prependMessageContextToContent = (content: Content, context: string): Content => {\n if (context.length === 0) {\n return content\n }\n\n const prefix = `${context}\\n\\nMessage:`\n\n return typeof content === 'string'\n ? `${prefix}\\n${content}`\n : [TextPart.make({ text: prefix }), ...content]\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tool.d.mts","names":[],"sources":["../../src/protocol/tool.ts"],"mappings":"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"}
1
+ {"version":3,"file":"tool.d.mts","names":[],"sources":["../../src/protocol/tool.ts"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tool.mjs","names":[],"sources":["../../src/protocol/tool.ts"],"sourcesContent":["import * as Schema from 'effect/Schema'\nimport { Content } from './content.ts'\n\nconst NonEmptyTrimmedString = Schema.Trimmed.pipe(Schema.check(Schema.isNonEmpty()))\n\nexport const HitlResponseSource = Schema.Literals(['user', 'policy', 'replay'])\nexport type HitlResponseSource = typeof HitlResponseSource.Type\n\nexport const ToolApprovalDecision = Schema.Literals(['approved', 'denied'])\nexport type ToolApprovalDecision = typeof ToolApprovalDecision.Type\n\nexport const ToolApprovalMode = Schema.Literals(['manual'])\nexport type ToolApprovalMode = typeof ToolApprovalMode.Type\n\nexport class ToolApprovalPolicy extends Schema.Class<ToolApprovalPolicy>('ToolApprovalPolicy')({\n mode: ToolApprovalMode,\n reason: Schema.optional(Schema.String)\n}) {}\n\nexport class ToolCall extends Schema.Class<ToolCall>('ToolCall')({\n id: NonEmptyTrimmedString,\n name: NonEmptyTrimmedString,\n params: Schema.Unknown\n}) {}\n\nexport class ToolDef extends Schema.Class<ToolDef>('ToolDef')({\n name: NonEmptyTrimmedString,\n description: Schema.String,\n parameters: Schema.Unknown,\n approval: Schema.optional(ToolApprovalPolicy)\n}) {}\n\nexport class ToolResult extends Schema.Class<ToolResult>('ToolResult')({\n toolCallId: NonEmptyTrimmedString,\n content: Content,\n isError: Schema.optional(Schema.Boolean),\n structuredContent: Schema.optional(Schema.Unknown)\n}) {}\n\nexport type ErrorToolResultInput = {\n readonly toolCallId: string\n readonly content: Content\n readonly structuredContent?: unknown\n}\n\nexport const makeErrorToolResult = (input: ErrorToolResultInput) =>\n ToolResult.make({\n toolCallId: input.toolCallId,\n content: input.content,\n isError: true,\n ...(input.structuredContent === undefined\n ? {}\n : { structuredContent: input.structuredContent })\n })\n\nexport class ToolApprovalRequest extends Schema.TaggedClass<ToolApprovalRequest>()(\n 'ToolApprovalRequest',\n {\n requestId: NonEmptyTrimmedString,\n toolCallId: NonEmptyTrimmedString,\n call: ToolCall,\n policy: Schema.optional(ToolApprovalPolicy)\n }\n) {}\n\nexport class ToolApprovalResponse extends Schema.TaggedClass<ToolApprovalResponse>()(\n 'ToolApprovalResponse',\n {\n requestId: NonEmptyTrimmedString,\n toolCallId: NonEmptyTrimmedString,\n decision: ToolApprovalDecision,\n source: HitlResponseSource,\n reason: Schema.optional(Schema.String)\n }\n) {}\n\nexport class QuestionOption extends Schema.Class<QuestionOption>('QuestionOption')({\n id: NonEmptyTrimmedString,\n label: NonEmptyTrimmedString,\n description: Schema.optional(Schema.String)\n}) {}\n\nexport class QuestionPrompt extends Schema.Class<QuestionPrompt>('QuestionPrompt')({\n id: NonEmptyTrimmedString,\n prompt: NonEmptyTrimmedString,\n options: Schema.optional(Schema.Array(QuestionOption)),\n multiple: Schema.optional(Schema.Boolean),\n allowCustom: Schema.optional(Schema.Boolean),\n required: Schema.optional(Schema.Boolean)\n}) {}\n\nexport class QuestionToolParams extends Schema.Class<QuestionToolParams>('QuestionToolParams')({\n questions: Schema.NonEmptyArray(QuestionPrompt)\n}) {}\n\nexport class QuestionRequest extends Schema.TaggedClass<QuestionRequest>()('QuestionRequest', {\n requestId: NonEmptyTrimmedString,\n toolCallId: NonEmptyTrimmedString,\n call: ToolCall,\n questions: Schema.NonEmptyArray(QuestionPrompt)\n}) {}\n\nexport class QuestionAnswer extends Schema.Class<QuestionAnswer>('QuestionAnswer')({\n questionId: NonEmptyTrimmedString,\n optionIds: Schema.optional(Schema.Array(NonEmptyTrimmedString)),\n customAnswer: Schema.optional(Schema.String)\n}) {}\n\nexport type PlainQuestionAnswer = {\n readonly questionId: string\n readonly optionIds?: ReadonlyArray<string>\n readonly customAnswer?: string\n}\n\nexport const QuestionResponseOutcome = Schema.Literals(['answered', 'cancelled'])\nexport type QuestionResponseOutcome = typeof QuestionResponseOutcome.Type\n\nexport class QuestionResponse extends Schema.TaggedClass<QuestionResponse>()('QuestionResponse', {\n requestId: NonEmptyTrimmedString,\n toolCallId: NonEmptyTrimmedString,\n outcome: QuestionResponseOutcome,\n source: HitlResponseSource,\n answers: Schema.optional(Schema.Array(QuestionAnswer)),\n reason: Schema.optional(Schema.String)\n}) {}\n\nexport type PlainQuestionResponse = {\n readonly _tag: 'QuestionResponse'\n readonly requestId: string\n readonly toolCallId: string\n readonly outcome: QuestionResponseOutcome\n readonly source: HitlResponseSource\n readonly answers?: ReadonlyArray<PlainQuestionAnswer>\n readonly reason?: string\n}\n\nexport type PlainToolApprovalResponse = {\n readonly _tag: 'ToolApprovalResponse'\n readonly requestId: string\n readonly toolCallId: string\n readonly decision: ToolApprovalDecision\n readonly source: HitlResponseSource\n readonly reason?: string\n}\n\nexport type PlainHitlResponse = PlainToolApprovalResponse | PlainQuestionResponse\n\nexport type QuestionResponseStructuredContent = {\n readonly type: 'question_response'\n readonly outcome: QuestionResponseOutcome\n readonly answers: ReadonlyArray<PlainQuestionAnswer>\n readonly reason?: string\n readonly source: HitlResponseSource\n}\n\nexport const plainQuestionAnswer = (answer: QuestionAnswer): PlainQuestionAnswer => ({\n questionId: answer.questionId,\n ...(answer.optionIds === undefined ? {} : { optionIds: [...answer.optionIds] }),\n ...(answer.customAnswer === undefined ? {} : { customAnswer: answer.customAnswer })\n})\n\nexport const plainQuestionResponse = (response: QuestionResponse): PlainQuestionResponse => ({\n _tag: 'QuestionResponse',\n requestId: response.requestId,\n toolCallId: response.toolCallId,\n outcome: response.outcome,\n source: response.source,\n ...(response.answers === undefined\n ? {}\n : { answers: response.answers.map(answer => plainQuestionAnswer(answer)) }),\n ...(response.reason === undefined ? {} : { reason: response.reason })\n})\n\nexport const plainToolApprovalResponse = (\n response: ToolApprovalResponse\n): PlainToolApprovalResponse => ({\n _tag: 'ToolApprovalResponse',\n requestId: response.requestId,\n toolCallId: response.toolCallId,\n decision: response.decision,\n source: response.source,\n ...(response.reason === undefined ? {} : { reason: response.reason })\n})\n\nexport const plainHitlResponse = (response: HitlResponse): PlainHitlResponse => {\n switch (response._tag) {\n case 'QuestionResponse':\n return plainQuestionResponse(response)\n case 'ToolApprovalResponse':\n return plainToolApprovalResponse(response)\n }\n}\n\nexport const questionResponseStructuredContent = (\n response: QuestionResponse\n): QuestionResponseStructuredContent => ({\n type: 'question_response',\n outcome: response.outcome,\n answers: (response.answers ?? []).map(answer => plainQuestionAnswer(answer)),\n ...(response.reason === undefined ? {} : { reason: response.reason }),\n source: response.source\n})\n\nconst optionLabel = (question: QuestionPrompt, optionId: string) =>\n question.options?.find(option => option.id === optionId)?.label ?? optionId\n\nconst questionForAnswer = (questions: ReadonlyArray<QuestionPrompt>, answer: QuestionAnswer) =>\n questions.find(question => question.id === answer.questionId)\n\nconst formatQuestionAnswer = (answer: QuestionAnswer, questions: ReadonlyArray<QuestionPrompt>) => {\n const question = questionForAnswer(questions, answer)\n const prompt = question?.prompt ?? answer.questionId\n const selected =\n answer.optionIds?.map(optionId =>\n question === undefined ? optionId : optionLabel(question, optionId)\n ) ?? []\n const custom = answer.customAnswer?.trim()\n const values = custom === undefined || custom.length === 0 ? selected : [...selected, custom]\n\n return values.length === 0 ? `- ${prompt}: answered` : `- ${prompt}: ${values.join(', ')}`\n}\n\nexport const formatQuestionResponseContent = (\n response: QuestionResponse,\n questions: ReadonlyArray<QuestionPrompt> = []\n) => {\n if (response.outcome === 'cancelled') {\n return `Question cancelled: ${response.reason ?? 'Question cancelled'}`\n }\n\n const answers = response.answers ?? []\n\n if (answers.length === 0) {\n return 'User answered the question, but no answer values were provided. Continue with this in mind.'\n }\n\n const formatted = answers\n .map(answer => formatQuestionAnswer(answer, questions).slice('- '.length))\n .join('; ')\n const label = answers.length === 1 ? 'question' : 'questions'\n\n return `User has answered your ${label}: ${formatted}. Continue with the user's answers in mind.`\n}\n\nexport const HitlRequest = Schema.Union([ToolApprovalRequest, QuestionRequest])\nexport type HitlRequest = typeof HitlRequest.Type\n\nexport const HitlResponse = Schema.Union([ToolApprovalResponse, QuestionResponse])\nexport type HitlResponse = typeof HitlResponse.Type\n"],"mappings":"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"}
1
+ {"version":3,"file":"tool.mjs","names":[],"sources":["../../src/protocol/tool.ts"],"sourcesContent":["import * as Schema from 'effect/Schema'\nimport { Content } from './content.ts'\n\nconst NonEmptyTrimmedString = Schema.Trimmed.pipe(Schema.check(Schema.isNonEmpty()))\n\nexport const HitlResponseSource = Schema.Literals(['user', 'policy', 'replay'])\nexport type HitlResponseSource = typeof HitlResponseSource.Type\n\nexport const ToolApprovalDecision = Schema.Literals(['approved', 'denied'])\nexport type ToolApprovalDecision = typeof ToolApprovalDecision.Type\n\nexport const ToolApprovalMode = Schema.Literals(['manual'])\nexport type ToolApprovalMode = typeof ToolApprovalMode.Type\n\nexport class ToolApprovalPolicy extends Schema.Class<ToolApprovalPolicy>('ToolApprovalPolicy')({\n mode: ToolApprovalMode,\n reason: Schema.optional(Schema.String)\n}) {}\n\nexport class ToolCall extends Schema.Class<ToolCall>('ToolCall')({\n id: NonEmptyTrimmedString,\n name: NonEmptyTrimmedString,\n params: Schema.Unknown\n}) {}\n\nexport class ToolDef extends Schema.Class<ToolDef>('ToolDef')({\n name: NonEmptyTrimmedString,\n description: Schema.String,\n parameters: Schema.Unknown,\n approval: Schema.optional(ToolApprovalPolicy)\n}) {}\n\nexport class ToolResult extends Schema.Class<ToolResult>('ToolResult')({\n toolCallId: NonEmptyTrimmedString,\n content: Content,\n isError: Schema.optional(Schema.Boolean),\n structuredContent: Schema.optional(Schema.Unknown)\n}) {}\n\nexport type ErrorToolResultInput = {\n readonly toolCallId: string\n readonly content: Content\n readonly structuredContent?: unknown\n}\n\nexport const makeErrorToolResult = (input: ErrorToolResultInput) =>\n ToolResult.make({\n toolCallId: input.toolCallId,\n content: input.content,\n isError: true,\n ...(input.structuredContent === undefined ? {} : { structuredContent: input.structuredContent })\n })\n\nexport class ToolApprovalRequest extends Schema.TaggedClass<ToolApprovalRequest>()(\n 'ToolApprovalRequest',\n {\n requestId: NonEmptyTrimmedString,\n toolCallId: NonEmptyTrimmedString,\n call: ToolCall,\n policy: Schema.optional(ToolApprovalPolicy)\n }\n) {}\n\nexport class ToolApprovalResponse extends Schema.TaggedClass<ToolApprovalResponse>()(\n 'ToolApprovalResponse',\n {\n requestId: NonEmptyTrimmedString,\n toolCallId: NonEmptyTrimmedString,\n decision: ToolApprovalDecision,\n source: HitlResponseSource,\n reason: Schema.optional(Schema.String)\n }\n) {}\n\nexport class QuestionOption extends Schema.Class<QuestionOption>('QuestionOption')({\n id: NonEmptyTrimmedString,\n label: NonEmptyTrimmedString,\n description: Schema.optional(Schema.String)\n}) {}\n\nexport class QuestionPrompt extends Schema.Class<QuestionPrompt>('QuestionPrompt')({\n id: NonEmptyTrimmedString,\n prompt: NonEmptyTrimmedString,\n options: Schema.optional(Schema.Array(QuestionOption)),\n multiple: Schema.optional(Schema.Boolean),\n allowCustom: Schema.optional(Schema.Boolean),\n required: Schema.optional(Schema.Boolean)\n}) {}\n\nexport class QuestionToolParams extends Schema.Class<QuestionToolParams>('QuestionToolParams')({\n questions: Schema.NonEmptyArray(QuestionPrompt)\n}) {}\n\nexport class QuestionRequest extends Schema.TaggedClass<QuestionRequest>()('QuestionRequest', {\n requestId: NonEmptyTrimmedString,\n toolCallId: NonEmptyTrimmedString,\n call: ToolCall,\n questions: Schema.NonEmptyArray(QuestionPrompt)\n}) {}\n\nexport class QuestionAnswer extends Schema.Class<QuestionAnswer>('QuestionAnswer')({\n questionId: NonEmptyTrimmedString,\n optionIds: Schema.optional(Schema.Array(NonEmptyTrimmedString)),\n customAnswer: Schema.optional(Schema.String)\n}) {}\n\nexport type PlainQuestionAnswer = {\n readonly questionId: string\n readonly optionIds?: ReadonlyArray<string>\n readonly customAnswer?: string\n}\n\nexport const QuestionResponseOutcome = Schema.Literals(['answered', 'cancelled'])\nexport type QuestionResponseOutcome = typeof QuestionResponseOutcome.Type\n\nexport class QuestionResponse extends Schema.TaggedClass<QuestionResponse>()('QuestionResponse', {\n requestId: NonEmptyTrimmedString,\n toolCallId: NonEmptyTrimmedString,\n outcome: QuestionResponseOutcome,\n source: HitlResponseSource,\n answers: Schema.optional(Schema.Array(QuestionAnswer)),\n reason: Schema.optional(Schema.String)\n}) {}\n\nexport type PlainQuestionResponse = {\n readonly _tag: 'QuestionResponse'\n readonly requestId: string\n readonly toolCallId: string\n readonly outcome: QuestionResponseOutcome\n readonly source: HitlResponseSource\n readonly answers?: ReadonlyArray<PlainQuestionAnswer>\n readonly reason?: string\n}\n\nexport type PlainToolApprovalResponse = {\n readonly _tag: 'ToolApprovalResponse'\n readonly requestId: string\n readonly toolCallId: string\n readonly decision: ToolApprovalDecision\n readonly source: HitlResponseSource\n readonly reason?: string\n}\n\nexport type PlainHitlResponse = PlainToolApprovalResponse | PlainQuestionResponse\n\nexport type QuestionResponseStructuredContent = {\n readonly type: 'question_response'\n readonly outcome: QuestionResponseOutcome\n readonly answers: ReadonlyArray<PlainQuestionAnswer>\n readonly reason?: string\n readonly source: HitlResponseSource\n}\n\nexport const plainQuestionAnswer = (answer: QuestionAnswer): PlainQuestionAnswer => ({\n questionId: answer.questionId,\n ...(answer.optionIds === undefined ? {} : { optionIds: [...answer.optionIds] }),\n ...(answer.customAnswer === undefined ? {} : { customAnswer: answer.customAnswer })\n})\n\nexport const plainQuestionResponse = (response: QuestionResponse): PlainQuestionResponse => ({\n _tag: 'QuestionResponse',\n requestId: response.requestId,\n toolCallId: response.toolCallId,\n outcome: response.outcome,\n source: response.source,\n ...(response.answers === undefined\n ? {}\n : { answers: response.answers.map(answer => plainQuestionAnswer(answer)) }),\n ...(response.reason === undefined ? {} : { reason: response.reason })\n})\n\nexport const plainToolApprovalResponse = (\n response: ToolApprovalResponse\n): PlainToolApprovalResponse => ({\n _tag: 'ToolApprovalResponse',\n requestId: response.requestId,\n toolCallId: response.toolCallId,\n decision: response.decision,\n source: response.source,\n ...(response.reason === undefined ? {} : { reason: response.reason })\n})\n\nexport const plainHitlResponse = (response: HitlResponse): PlainHitlResponse => {\n switch (response._tag) {\n case 'QuestionResponse':\n return plainQuestionResponse(response)\n case 'ToolApprovalResponse':\n return plainToolApprovalResponse(response)\n }\n}\n\nexport const questionResponseStructuredContent = (\n response: QuestionResponse\n): QuestionResponseStructuredContent => ({\n type: 'question_response',\n outcome: response.outcome,\n answers: (response.answers ?? []).map(answer => plainQuestionAnswer(answer)),\n ...(response.reason === undefined ? {} : { reason: response.reason }),\n source: response.source\n})\n\nconst optionLabel = (question: QuestionPrompt, optionId: string) =>\n question.options?.find(option => option.id === optionId)?.label ?? optionId\n\nconst questionForAnswer = (questions: ReadonlyArray<QuestionPrompt>, answer: QuestionAnswer) =>\n questions.find(question => question.id === answer.questionId)\n\nconst formatQuestionAnswer = (answer: QuestionAnswer, questions: ReadonlyArray<QuestionPrompt>) => {\n const question = questionForAnswer(questions, answer)\n const prompt = question?.prompt ?? answer.questionId\n const selected =\n answer.optionIds?.map(optionId =>\n question === undefined ? optionId : optionLabel(question, optionId)\n ) ?? []\n const custom = answer.customAnswer?.trim()\n const values = custom === undefined || custom.length === 0 ? selected : [...selected, custom]\n\n return values.length === 0 ? `- ${prompt}: answered` : `- ${prompt}: ${values.join(', ')}`\n}\n\nexport const formatQuestionResponseContent = (\n response: QuestionResponse,\n questions: ReadonlyArray<QuestionPrompt> = []\n) => {\n if (response.outcome === 'cancelled') {\n return `Question cancelled: ${response.reason ?? 'Question cancelled'}`\n }\n\n const answers = response.answers ?? []\n\n if (answers.length === 0) {\n return 'User answered the question, but no answer values were provided. Continue with this in mind.'\n }\n\n const formatted = answers\n .map(answer => formatQuestionAnswer(answer, questions).slice('- '.length))\n .join('; ')\n const label = answers.length === 1 ? 'question' : 'questions'\n\n return `User has answered your ${label}: ${formatted}. Continue with the user's answers in mind.`\n}\n\nexport const HitlRequest = Schema.Union([ToolApprovalRequest, QuestionRequest])\nexport type HitlRequest = typeof HitlRequest.Type\n\nexport const HitlResponse = Schema.Union([ToolApprovalResponse, QuestionResponse])\nexport type HitlResponse = typeof HitlResponse.Type\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"claude-provider.d.mts","names":[],"sources":["../../../src/providers/anthropic/claude-provider.ts"],"mappings":";;;;;;KAmDY,6BAAA;EAAA,SACD,KAAA,EAAO,gBAAA;EAAA,SACP,WAAA;EAAA,SACA,SAAA;EAAA,SACA,YAAA,GAAe,QAAA,CAAS,MAAA;AAAA;AAAA,KAG9B,kBAAA;EAAA,SACM,IAAA;EAAA,SACA,IAAI;AAAA;AAAA,KAGV,oBAAA,GAAuB,kBAAkB;AAAA,KAEzC,mBAAA;EAAA,SACM,IAAA;EAAA,SACA,MAAA;IAAA,SAEM,IAAA;IAAA,SACA,UAAA;IAAA,SACA,IAAA;EAAA;IAAA,SAGA,IAAA;IAAA,SACA,GAAA;EAAA;AAAA;AAAA,KAIZ,sBAAA;EAAA,SACM,IAAA;EAAA,SACA,MAAA;IAAA,SAEM,IAAA;IAAA,SACA,UAAA;IAAA,SACA,IAAA;EAAA;IAAA,SAGA,IAAA;IAAA,SACA,GAAA;EAAA;EAAA,SAEN,KAAA;AAAA;AAAA,KAGN,qBAAA;EAAA,SACM,IAAA;EAAA,SACA,EAAA;EAAA,SACA,IAAA;EAAA,SACA,KAAA;AAAA;AAAA,KAGN,wBAAA;EAAA,SACM,IAAA;EAAA,SACA,WAAA;EAAA,SACA,OAAA;EAAA,SACA,QAAA;AAAA;AAAA,KAGN,kBAAA,GAAqB,kBAAA,GAAqB,mBAAA,GAAsB,sBAAA,GAAyB,wBAAA;AAAA,KACzF,uBAAA,GAA0B,kBAAA,GAAqB,qBAAqB;AAAA,KAEpE,gBAAA;EAAA,SACU,IAAA;EAAA,SAAuB,OAAA,WAAkB,aAAA,CAAc,kBAAA;AAAA;EAAA,SACvD,IAAA;EAAA,SAA4B,OAAA,EAAS,aAAA,CAAc,uBAAA;AAAA;AAAA,KAS7D,aAAA;EAAA,SACM,IAAA;EAAA,SACA,WAAA;EAAA,SACA,YAAA;AAAA;AAAA,KAGN,oBAAA;EAAA,SACM,KAAA;EAAA,SACA,MAAA,EAAQ,aAAA,CAAc,oBAAA;EAAA,SACtB,QAAA,EAAU,aAAA,CAAc,gBAAA;EAAA,SACxB,UAAA;EAAA,SACA,MAAA;EAAA,SACA,KAAA,GAAQ,aAAA,CAAc,aAAA;AAAA;AAAA,cAosBpB,4BAAA,GACX,OAAA,EAAS,UAAA,EACT,MAAA;EAAA,SAAoB,SAAA;EAAA,SAA6B,MAAA;AAAA,MAChD,MAAA,CAAO,MAAA,CAAO,oBAAA,EAAsB,QAAA;AAAA,cAmiB1B,6BAAA,GACX,QAAA,EAAU,kBAAA,CAAmB,kBAAA,KAC5B,MAAA,CAAO,MAAA,CAAO,QAAA,EAAU,QAAA;AAAA,cAoFd,gCAAA,GAAoC,MAAA,EAAQ,6BAAA,KAA6B,KAAA,CAAA,KAAA,CAAA,WAAA,SAAA,UAAA,CAAA,UAAA"}
1
+ {"version":3,"file":"claude-provider.d.mts","names":[],"sources":["../../../src/providers/anthropic/claude-provider.ts"],"mappings":";;;;;;KAmDY,6BAAA;EAAA,SACD,KAAA,EAAO,gBAAA;EAAA,SACP,WAAA;EAAA,SACA,SAAA;EAAA,SACA,YAAA,GAAe,QAAA,CAAS,MAAA;AAAA;AAAA,KAG9B,kBAAA;EAAA,SACM,IAAA;EAAA,SACA,IAAI;AAAA;AAAA,KAGV,oBAAA,GAAuB,kBAAkB;AAAA,KAEzC,mBAAA;EAAA,SACM,IAAA;EAAA,SACA,MAAA;IAAA,SAEM,IAAA;IAAA,SACA,UAAA;IAAA,SACA,IAAA;EAAA;IAAA,SAGA,IAAA;IAAA,SACA,GAAA;EAAA;AAAA;AAAA,KAIZ,sBAAA;EAAA,SACM,IAAA;EAAA,SACA,MAAA;IAAA,SAEM,IAAA;IAAA,SACA,UAAA;IAAA,SACA,IAAA;EAAA;IAAA,SAGA,IAAA;IAAA,SACA,GAAA;EAAA;EAAA,SAEN,KAAA;AAAA;AAAA,KAGN,qBAAA;EAAA,SACM,IAAA;EAAA,SACA,EAAA;EAAA,SACA,IAAA;EAAA,SACA,KAAA;AAAA;AAAA,KAGN,wBAAA;EAAA,SACM,IAAA;EAAA,SACA,WAAA;EAAA,SACA,OAAA;EAAA,SACA,QAAA;AAAA;AAAA,KAGN,kBAAA,GACD,kBAAA,GACA,mBAAA,GACA,sBAAA,GACA,wBAAA;AAAA,KACC,uBAAA,GAA0B,kBAAA,GAAqB,qBAAqB;AAAA,KAEpE,gBAAA;EAAA,SACU,IAAA;EAAA,SAAuB,OAAA,WAAkB,aAAA,CAAc,kBAAA;AAAA;EAAA,SACvD,IAAA;EAAA,SAA4B,OAAA,EAAS,aAAA,CAAc,uBAAA;AAAA;AAAA,KAS7D,aAAA;EAAA,SACM,IAAA;EAAA,SACA,WAAA;EAAA,SACA,YAAA;AAAA;AAAA,KAGN,oBAAA;EAAA,SACM,KAAA;EAAA,SACA,MAAA,EAAQ,aAAA,CAAc,oBAAA;EAAA,SACtB,QAAA,EAAU,aAAA,CAAc,gBAAA;EAAA,SACxB,UAAA;EAAA,SACA,MAAA;EAAA,SACA,KAAA,GAAQ,aAAA,CAAc,aAAA;AAAA;AAAA,cA8sBpB,4BAAA,GACX,OAAA,EAAS,UAAA,EACT,MAAA;EAAA,SAAoB,SAAA;EAAA,SAA6B,MAAA;AAAA,MAChD,MAAA,CAAO,MAAA,CAAO,oBAAA,EAAsB,QAAA;AAAA,cAoiB1B,6BAAA,GACX,QAAA,EAAU,kBAAA,CAAmB,kBAAA,KAC5B,MAAA,CAAO,MAAA,CAAO,QAAA,EAAU,QAAA;AAAA,cAyFd,gCAAA,GAAoC,MAAA,EAAQ,6BAAA,KAA6B,KAAA,CAAA,KAAA,CAAA,WAAA,SAAA,UAAA,CAAA,UAAA"}