@genesislcap/foundation-ai 14.407.0 → 14.408.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/dist/dts/ai-provider.d.ts +18 -2
  2. package/dist/dts/ai-provider.d.ts.map +1 -1
  3. package/dist/dts/index.d.ts +5 -1
  4. package/dist/dts/index.d.ts.map +1 -1
  5. package/dist/dts/interactions/criteria-interpretation.d.ts +11 -0
  6. package/dist/dts/interactions/criteria-interpretation.d.ts.map +1 -1
  7. package/dist/dts/providers/gemini-provider.d.ts +25 -0
  8. package/dist/dts/providers/gemini-provider.d.ts.map +1 -0
  9. package/dist/dts/transports/gemini-transport.d.ts +66 -0
  10. package/dist/dts/transports/gemini-transport.d.ts.map +1 -0
  11. package/dist/dts/types/chat-transport.types.d.ts +16 -0
  12. package/dist/dts/types/chat-transport.types.d.ts.map +1 -0
  13. package/dist/dts/types/chat.types.d.ts +157 -0
  14. package/dist/dts/types/chat.types.d.ts.map +1 -0
  15. package/dist/dts/types/config.types.d.ts +16 -2
  16. package/dist/dts/types/config.types.d.ts.map +1 -1
  17. package/dist/dts/types/criteria-types.d.ts +10 -0
  18. package/dist/dts/types/criteria-types.d.ts.map +1 -1
  19. package/dist/dts/types/index.d.ts +2 -0
  20. package/dist/dts/types/index.d.ts.map +1 -1
  21. package/dist/dts/utils/speech-to-text.d.ts +11 -0
  22. package/dist/dts/utils/speech-to-text.d.ts.map +1 -1
  23. package/dist/esm/ai-provider.js +18 -0
  24. package/dist/esm/index.js +2 -0
  25. package/dist/esm/providers/gemini-provider.js +59 -0
  26. package/dist/esm/transports/gemini-transport.js +249 -0
  27. package/dist/esm/types/chat-transport.types.js +1 -0
  28. package/dist/esm/types/chat.types.js +1 -0
  29. package/dist/esm/types/index.js +2 -0
  30. package/dist/esm/utils/speech-to-text.js +11 -0
  31. package/dist/foundation-ai.api.json +2937 -240
  32. package/dist/foundation-ai.d.ts +357 -4
  33. package/docs/api/foundation-ai.aiconfig.md +2 -2
  34. package/docs/api/foundation-ai.aiprovider.chat.md +85 -0
  35. package/docs/api/foundation-ai.aiprovider.md +22 -0
  36. package/docs/api/foundation-ai.aiprovider.streamchat.md +85 -0
  37. package/docs/api/foundation-ai.aiprovidertype.md +1 -1
  38. package/docs/api/foundation-ai.chatanimationsconfig.enabled.md +16 -0
  39. package/docs/api/foundation-ai.chatanimationsconfig.md +80 -0
  40. package/docs/api/foundation-ai.chatanimationsconfig.userconfigurable.md +16 -0
  41. package/docs/api/foundation-ai.chatattachment.content.md +14 -0
  42. package/docs/api/foundation-ai.chatattachment.md +99 -0
  43. package/docs/api/foundation-ai.chatattachment.mimetype.md +14 -0
  44. package/docs/api/foundation-ai.chatattachment.name.md +14 -0
  45. package/docs/api/foundation-ai.chatconfig.acceptedfiles.md +16 -0
  46. package/docs/api/foundation-ai.chatconfig.allowdebugdownload.md +16 -0
  47. package/docs/api/foundation-ai.chatconfig.animations.md +16 -0
  48. package/docs/api/foundation-ai.chatconfig.loadingdelay.md +16 -0
  49. package/docs/api/foundation-ai.chatconfig.maxtooliterations.md +16 -0
  50. package/docs/api/foundation-ai.chatconfig.md +177 -0
  51. package/docs/api/foundation-ai.chatconfig.showthinkingsteps.md +16 -0
  52. package/docs/api/foundation-ai.chatconfig.showtoolcalls.md +16 -0
  53. package/docs/api/foundation-ai.chatinteraction.componentname.md +14 -0
  54. package/docs/api/foundation-ai.chatinteraction.data.md +14 -0
  55. package/docs/api/foundation-ai.chatinteraction.interactionid.md +14 -0
  56. package/docs/api/foundation-ai.chatinteraction.md +118 -0
  57. package/docs/api/foundation-ai.chatinteraction.resolved.md +16 -0
  58. package/docs/api/foundation-ai.chatmessage.attachments.md +14 -0
  59. package/docs/api/foundation-ai.chatmessage.content.md +14 -0
  60. package/docs/api/foundation-ai.chatmessage.interaction.md +14 -0
  61. package/docs/api/foundation-ai.chatmessage.md +175 -0
  62. package/docs/api/foundation-ai.chatmessage.role.md +14 -0
  63. package/docs/api/foundation-ai.chatmessage.thinking.md +14 -0
  64. package/docs/api/foundation-ai.chatmessage.toolcalls.md +14 -0
  65. package/docs/api/foundation-ai.chatmessage.toolresult.md +14 -0
  66. package/docs/api/foundation-ai.chatrequestoptions.attachments.md +14 -0
  67. package/docs/api/foundation-ai.chatrequestoptions.md +118 -0
  68. package/docs/api/foundation-ai.chatrequestoptions.signal.md +14 -0
  69. package/docs/api/foundation-ai.chatrequestoptions.systemprompt.md +14 -0
  70. package/docs/api/foundation-ai.chatrequestoptions.tools.md +14 -0
  71. package/docs/api/foundation-ai.chatrole.md +16 -0
  72. package/docs/api/foundation-ai.chatstreamchunk.delta.md +14 -0
  73. package/docs/api/foundation-ai.chatstreamchunk.done.md +14 -0
  74. package/docs/api/foundation-ai.chatstreamchunk.md +99 -0
  75. package/docs/api/foundation-ai.chatstreamchunk.toolcalls.md +14 -0
  76. package/docs/api/foundation-ai.chattoolcall.args.md +14 -0
  77. package/docs/api/foundation-ai.chattoolcall.id.md +14 -0
  78. package/docs/api/foundation-ai.chattoolcall.md +99 -0
  79. package/docs/api/foundation-ai.chattoolcall.name.md +14 -0
  80. package/docs/api/foundation-ai.chattooldefinition.description.md +14 -0
  81. package/docs/api/foundation-ai.chattooldefinition.md +99 -0
  82. package/docs/api/foundation-ai.chattooldefinition.name.md +14 -0
  83. package/docs/api/foundation-ai.chattooldefinition.parameters.md +14 -0
  84. package/docs/api/foundation-ai.chattoolhandlers.md +18 -0
  85. package/docs/api/foundation-ai.chattoolresult.content.md +14 -0
  86. package/docs/api/foundation-ai.chattoolresult.md +80 -0
  87. package/docs/api/foundation-ai.chattoolresult.toolcallid.md +14 -0
  88. package/docs/api/foundation-ai.chattransport.md +58 -0
  89. package/docs/api/foundation-ai.chattransport.sendchatmessage.md +83 -0
  90. package/docs/api/foundation-ai.chattransport.streamchatmessage.md +83 -0
  91. package/docs/api/foundation-ai.criteriagroupresult.clauses.md +3 -0
  92. package/docs/api/foundation-ai.criteriagroupresult.logic.md +3 -0
  93. package/docs/api/foundation-ai.criteriagroupresult.md +10 -1
  94. package/docs/api/foundation-ai.criteriagroupresult.negated.md +3 -0
  95. package/docs/api/foundation-ai.criteriainterpretationresult.groups.md +3 -0
  96. package/docs/api/foundation-ai.criteriainterpretationresult.md +7 -0
  97. package/docs/api/foundation-ai.criteriainterpretcontext.fields.md +3 -0
  98. package/docs/api/foundation-ai.criteriainterpretcontext.md +6 -1
  99. package/docs/api/foundation-ai.fieldlike.md +5 -0
  100. package/docs/api/foundation-ai.geminiaiconfig.apikey.md +14 -0
  101. package/docs/api/foundation-ai.geminiaiconfig.md +123 -0
  102. package/docs/api/foundation-ai.geminiaiconfig.model.md +14 -0
  103. package/docs/api/foundation-ai.geminiaiconfig.providertype.md +14 -0
  104. package/docs/api/foundation-ai.geminiaiconfig.serverendpoint.md +14 -0
  105. package/docs/api/foundation-ai.geminiprovider._constructor_.md +65 -0
  106. package/docs/api/foundation-ai.geminiprovider.chat.md +83 -0
  107. package/docs/api/foundation-ai.geminiprovider.getstatus.md +18 -0
  108. package/docs/api/foundation-ai.geminiprovider.interpretcriteria.md +67 -0
  109. package/docs/api/foundation-ai.geminiprovider.md +128 -0
  110. package/docs/api/foundation-ai.geminiprovider.streamchat.md +83 -0
  111. package/docs/api/foundation-ai.geminitransport._constructor_.md +53 -0
  112. package/docs/api/foundation-ai.geminitransport.getconfig.md +21 -0
  113. package/docs/api/foundation-ai.geminitransport.md +116 -0
  114. package/docs/api/foundation-ai.geminitransport.sendchatmessage.md +83 -0
  115. package/docs/api/foundation-ai.geminitransport.sendstructuredprompt.md +53 -0
  116. package/docs/api/foundation-ai.interactionresult.md +20 -0
  117. package/docs/api/foundation-ai.isspeechrecognitionavailable.md +1 -1
  118. package/docs/api/foundation-ai.malformedfunctioncallerror._constructor_.md +53 -0
  119. package/docs/api/foundation-ai.malformedfunctioncallerror.finishmessage.md +14 -0
  120. package/docs/api/foundation-ai.malformedfunctioncallerror.md +98 -0
  121. package/docs/api/foundation-ai.md +230 -1
  122. package/docs/api/foundation-ai.resolveaiconfigoptions.md +9 -4
  123. package/docs/api/foundation-ai.resolveaiconfigoptions.model.md +3 -0
  124. package/docs/api/foundation-ai.resolveaiconfigoptions.preferchrome.md +3 -0
  125. package/docs/api/foundation-ai.resolveaiconfigoptions.provider.md +5 -2
  126. package/docs/api/foundation-ai.startspeechrecognition.md +5 -0
  127. package/docs/api-report.md.api.md +192 -11
  128. package/package.json +11 -11
@@ -1,5 +1,6 @@
1
1
  import type { CriteriaInterpretContext } from './interactions';
2
2
  import type { AIConfig, AIStatus, CriteriaInterpretationResult } from './types';
3
+ import type { ChatMessage, ChatRequestOptions, ChatStreamChunk } from './types/chat.types';
3
4
  /**
4
5
  * AI Provider interface for foundation-ai.
5
6
  *
@@ -20,6 +21,16 @@ export interface AIProvider {
20
21
  * Must be called from a user gesture (e.g. click).
21
22
  */
22
23
  triggerDownload?(): Promise<void>;
24
+ /**
25
+ * Multi-turn chat (non-streaming). Returns the assistant's response message.
26
+ * Providers that support chat (Gemini, OpenAI) implement this.
27
+ */
28
+ chat?(history: ChatMessage[], userMessage: string, options?: ChatRequestOptions): Promise<ChatMessage>;
29
+ /**
30
+ * Multi-turn chat (streaming). Yields chunks as they arrive.
31
+ * Providers that support streaming implement this.
32
+ */
33
+ streamChat?(history: ChatMessage[], userMessage: string, options?: ChatRequestOptions): AsyncIterable<ChatStreamChunk>;
23
34
  }
24
35
  /**
25
36
  * Creates an AIProvider from config.
@@ -31,9 +42,14 @@ export interface AIProvider {
31
42
  * @beta
32
43
  */
33
44
  export declare function createAIProvider(config?: AIConfig | null): AIProvider;
45
+ /**
46
+ * Options for {@link resolveAIConfig}.
47
+ *
48
+ * @beta
49
+ */
34
50
  export interface ResolveAIConfigOptions {
35
- /** Cloud provider (openai). Default: openai */
36
- provider?: 'openai';
51
+ /** Cloud provider (openai, gemini). Default: openai */
52
+ provider?: 'openai' | 'gemini';
37
53
  /** Model name (e.g. gpt-4o-mini). Default: gpt-4o-mini */
38
54
  model?: string;
39
55
  /** Prefer Chrome built-in AI when available */
@@ -1 +1 @@
1
- {"version":3,"file":"ai-provider.d.ts","sourceRoot":"","sources":["../../src/ai-provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAM/D,OAAO,KAAK,EACV,QAAQ,EACR,QAAQ,EAER,4BAA4B,EAE7B,MAAM,SAAS,CAAC;AAIjB;;;;;;;;GAQG;AACH,MAAM,WAAW,UAAU;IACzB,iBAAiB,CAAC,CAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,4BAA4B,GAAG,IAAI,CAAC,CAAC;IAEhD;;OAEG;IACH,SAAS,CAAC,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IAEvC;;;OAGG;IACH,eAAe,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACnC;AAUD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,UAAU,CAyBrE;AAED,MAAM,WAAW,sBAAsB;IACrC,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAsB1B;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,UAAU,kEAAwE,CAAC;AAEhG;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,IAAI,UAAU,CAM1C"}
1
+ {"version":3,"file":"ai-provider.d.ts","sourceRoot":"","sources":["../../src/ai-provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAQ/D,OAAO,KAAK,EACV,QAAQ,EACR,QAAQ,EAER,4BAA4B,EAG7B,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAI3F;;;;;;;;GAQG;AACH,MAAM,WAAW,UAAU;IACzB,iBAAiB,CAAC,CAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,4BAA4B,GAAG,IAAI,CAAC,CAAC;IAEhD;;OAEG;IACH,SAAS,CAAC,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IAEvC;;;OAGG;IACH,eAAe,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAElC;;;OAGG;IACH,IAAI,CAAC,CACH,OAAO,EAAE,WAAW,EAAE,EACtB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,WAAW,CAAC,CAAC;IAExB;;;OAGG;IACH,UAAU,CAAC,CACT,OAAO,EAAE,WAAW,EAAE,EACtB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,aAAa,CAAC,eAAe,CAAC,CAAC;CACnC;AAcD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,UAAU,CAmCrE;AAED;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,uDAAuD;IACvD,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC/B,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CA0B1B;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,UAAU,kEAAwE,CAAC;AAEhG;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,IAAI,UAAU,CAM1C"}
@@ -1,6 +1,10 @@
1
1
  export { AIProvider, createAIProvider, getAIProvider, resolveAIConfig } from './ai-provider';
2
+ export { GeminiProvider } from './providers/gemini-provider';
3
+ export { GeminiTransport, MalformedFunctionCallError } from './transports/gemini-transport';
2
4
  export { AI_FEATURE_FLAG, isAIFeatureEnabled } from './utils/feature-flags';
3
- export type { AIConfig, AIStatus, AIProviderType, ChromeAIConfig, ChromeAvailability, ServerAIConfig, } from './types';
5
+ export type { AIConfig, AIStatus, AIProviderType, ChromeAIConfig, ChromeAvailability, GeminiAIConfig, ServerAIConfig, } from './types';
6
+ export type { ChatAnimationsConfig, ChatAttachment, ChatConfig, ChatMessage, ChatInteraction, ChatRequestOptions, ChatRole, ChatStreamChunk, ChatToolCall, ChatToolDefinition, ChatToolHandlers, ChatToolResult, InteractionResult, } from './types/chat.types';
7
+ export type { ChatTransport } from './types/chat-transport.types';
4
8
  export type { ResolveAIConfigOptions } from './ai-provider';
5
9
  export type { CriteriaInterpretContext, FieldLike } from './interactions';
6
10
  export type { CriteriaClauseResult, CriteriaGroupResult, CriteriaInterpretationResult, } from './types/criteria-types';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC7F,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC5E,YAAY,EACV,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,cAAc,GACf,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC5D,YAAY,EAAE,wBAAwB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC1E,YAAY,EACV,oBAAoB,EACpB,mBAAmB,EACnB,4BAA4B,GAC7B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,4BAA4B,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC7F,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAC5F,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC5E,YAAY,EACV,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,cAAc,GACf,MAAM,SAAS,CAAC;AACjB,YAAY,EACV,oBAAoB,EACpB,cAAc,EACd,UAAU,EACV,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,YAAY,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC5D,YAAY,EAAE,wBAAwB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC1E,YAAY,EACV,oBAAoB,EACpB,mBAAmB,EACnB,4BAA4B,GAC7B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,4BAA4B,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -115,12 +115,23 @@ export declare const OPENAI_CRITERIA_RESPONSE_FORMAT: {
115
115
  };
116
116
  };
117
117
  };
118
+ /**
119
+ * A field descriptor accepted by criteria interpretation utilities.
120
+ * Can be a plain string name or an object with common field metadata properties.
121
+ *
122
+ * @beta
123
+ */
118
124
  export type FieldLike = string | {
119
125
  name?: string;
120
126
  field?: string;
121
127
  label?: string;
122
128
  NAME?: string;
123
129
  };
130
+ /**
131
+ * Context passed to criteria interpretation, providing available field metadata.
132
+ *
133
+ * @beta
134
+ */
124
135
  export interface CriteriaInterpretContext {
125
136
  fields?: FieldLike[];
126
137
  }
@@ -1 +1 @@
1
- {"version":3,"file":"criteria-interpretation.d.ts","sourceRoot":"","sources":["../../../src/interactions/criteria-interpretation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,UAAU,CAAC;AAwC7D;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BvB,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOlC,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAElG,MAAM,WAAW,wBAAwB;IACvC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;CACtB;AAUD;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,GAAE,SAAS,EAAO,EACxB,kBAAkB,CAAC,EAAE,MAAM,GAC1B,MAAM,CAaR;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC9B,4BAA4B,GAAG,IAAI,CAkBrC"}
1
+ {"version":3,"file":"criteria-interpretation.d.ts","sourceRoot":"","sources":["../../../src/interactions/criteria-interpretation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,UAAU,CAAC;AAwC7D;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BvB,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOlC,CAAC;AAEX;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAElG;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;CACtB;AAUD;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,GAAE,SAAS,EAAO,EACxB,kBAAkB,CAAC,EAAE,MAAM,GAC1B,MAAM,CAaR;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC9B,4BAA4B,GAAG,IAAI,CAkBrC"}
@@ -0,0 +1,25 @@
1
+ import type { AIProvider } from '../ai-provider';
2
+ import type { CriteriaInterpretContext } from '../interactions';
3
+ import { GeminiTransport } from '../transports/gemini-transport';
4
+ import type { AIStatus } from '../types';
5
+ import type { ChatMessage, ChatRequestOptions, ChatStreamChunk } from '../types/chat.types';
6
+ import type { CriteriaInterpretationResult } from '../types/criteria-types';
7
+ export interface GeminiProviderConfig {
8
+ criteriaInstructions?: string;
9
+ }
10
+ /**
11
+ * Gemini AI provider. Uses {@link GeminiTransport} to handle requests.
12
+ * Implements criteria interpretation and multi-turn chat.
13
+ *
14
+ * @beta
15
+ */
16
+ export declare class GeminiProvider implements AIProvider {
17
+ private readonly transport;
18
+ private readonly criteriaInstructions?;
19
+ constructor(config: GeminiProviderConfig, transport: GeminiTransport);
20
+ getStatus(): Promise<AIStatus>;
21
+ interpretCriteria(input: string, context: CriteriaInterpretContext): Promise<CriteriaInterpretationResult | null>;
22
+ chat(history: ChatMessage[], userMessage: string, options?: ChatRequestOptions): Promise<ChatMessage>;
23
+ streamChat(history: ChatMessage[], userMessage: string, options?: ChatRequestOptions): AsyncIterable<ChatStreamChunk>;
24
+ }
25
+ //# sourceMappingURL=gemini-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-provider.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAOhE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC5F,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AAG5E,MAAM,WAAW,oBAAoB;IACnC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;GAKG;AACH,qBAAa,cAAe,YAAW,UAAU;IAC/C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;IAC5C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAS;gBAEnC,MAAM,EAAE,oBAAoB,EAAE,SAAS,EAAE,eAAe;IAK9D,SAAS,IAAI,OAAO,CAAC,QAAQ,CAAC;IAK9B,iBAAiB,CACrB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,4BAA4B,GAAG,IAAI,CAAC;IAkBzC,IAAI,CACR,OAAO,EAAE,WAAW,EAAE,EACtB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,WAAW,CAAC;IAIhB,UAAU,CACf,OAAO,EAAE,WAAW,EAAE,EACtB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,aAAa,CAAC,eAAe,CAAC;CAYlC"}
@@ -0,0 +1,66 @@
1
+ import type { AITransport, StructuredPromptOptions } from '../types';
2
+ import type { ChatTransport } from '../types/chat-transport.types';
3
+ import type { ChatMessage, ChatRequestOptions } from '../types/chat.types';
4
+ export interface GeminiTransportConfig {
5
+ model?: string;
6
+ timeout?: number;
7
+ /**
8
+ * API key for direct calls to the Gemini API.
9
+ * Must be provided explicitly; callers are responsible for reading it from
10
+ * their environment (e.g. a build-time injected global).
11
+ */
12
+ apiKey?: string;
13
+ /**
14
+ * Server-proxy endpoint (e.g. `/gwf/ai-service/gemini/chat`).
15
+ * Only used when no API key is available. When omitted and no API key
16
+ * is found, requests will fail.
17
+ */
18
+ serverEndpoint?: string;
19
+ }
20
+ /**
21
+ * Thrown when Gemini returns a `MALFORMED_FUNCTION_CALL` finish reason,
22
+ * typically because the model tried to batch multiple tool calls using
23
+ * Python-style syntax instead of the proper API format.
24
+ *
25
+ * @beta
26
+ */
27
+ export declare class MalformedFunctionCallError extends Error {
28
+ readonly finishMessage?: string;
29
+ constructor(finishMessage?: string);
30
+ }
31
+ /**
32
+ * Transport for Gemini. Calls the Gemini REST API directly when `apiKey` is
33
+ * provided, otherwise falls back to a server-proxy endpoint (if `serverEndpoint`
34
+ * is configured).
35
+ *
36
+ * Implements `AITransport` (structured prompt) and `ChatTransport` (multi-turn chat).
37
+ *
38
+ * @beta
39
+ */
40
+ export declare class GeminiTransport implements AITransport, ChatTransport {
41
+ private readonly model;
42
+ private readonly timeout;
43
+ private readonly apiKey;
44
+ private readonly serverEndpoint;
45
+ constructor(config?: GeminiTransportConfig);
46
+ getConfig(): {
47
+ provider: 'gemini';
48
+ model: string;
49
+ };
50
+ sendStructuredPrompt(options: StructuredPromptOptions): Promise<string>;
51
+ sendChatMessage(history: ChatMessage[], userMessage: string, options?: ChatRequestOptions): Promise<ChatMessage>;
52
+ private static readonly TOKENS_PER_MILLION;
53
+ private static readonly PROMPT_COST_PER_MILLION;
54
+ private static readonly CANDIDATE_COST_PER_MILLION;
55
+ private static readonly COST_DECIMAL_PLACES;
56
+ private logTokenUsage;
57
+ private toGeminiContents;
58
+ private fromGeminiResponse;
59
+ private buildEndpoint;
60
+ private static readonly MAX_RETRIES;
61
+ private static readonly RATE_LIMIT_STATUS;
62
+ private static readonly BACKOFF_BASE_MS;
63
+ private post;
64
+ private toDirectPayload;
65
+ }
66
+ //# sourceMappingURL=gemini-transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-transport.d.ts","sourceRoot":"","sources":["../../../src/transports/gemini-transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAEV,WAAW,EACX,kBAAkB,EAEnB,MAAM,qBAAqB,CAAC;AAO7B,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAUD;;;;;;GAMG;AACH,qBAAa,0BAA2B,SAAQ,KAAK;IACvC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM;gBAAtB,aAAa,CAAC,EAAE,MAAM;CAI5C;AAED;;;;;;;;GAQG;AACH,qBAAa,eAAgB,YAAW,WAAW,EAAE,aAAa;IAChE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqB;gBAExC,MAAM,GAAE,qBAA0B;IAQ9C,SAAS,IAAI;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;IAM5C,oBAAoB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBvE,eAAe,CACnB,OAAO,EAAE,WAAW,EAAE,EACtB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,WAAW,CAAC;IA4BvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAa;IACvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAAO;IACtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAAO;IACzD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAK;IAEhD,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,gBAAgB;IAgDxB,OAAO,CAAC,kBAAkB;IAwD1B,OAAO,CAAC,aAAa;IAyBrB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAK;IACxC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAO;IAChD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAQ;YAEjC,IAAI;IAgDlB,OAAO,CAAC,eAAe;CAexB"}
@@ -0,0 +1,16 @@
1
+ import type { ChatMessage, ChatRequestOptions, ChatStreamChunk } from './chat.types';
2
+ /**
3
+ * Transport interface for chat-capable AI providers.
4
+ *
5
+ * @remarks
6
+ * Implement alongside `AITransport` for providers that support multi-turn chat
7
+ * conversations (e.g. Gemini, OpenAI). The `streamChatMessage` method is optional —
8
+ * providers that don't support streaming may omit it.
9
+ *
10
+ * @beta
11
+ */
12
+ export interface ChatTransport {
13
+ sendChatMessage(history: ChatMessage[], userMessage: string, options?: ChatRequestOptions): Promise<ChatMessage>;
14
+ streamChatMessage?(history: ChatMessage[], userMessage: string, options?: ChatRequestOptions): AsyncIterable<ChatStreamChunk>;
15
+ }
16
+ //# sourceMappingURL=chat-transport.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-transport.types.d.ts","sourceRoot":"","sources":["../../../src/types/chat-transport.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAErF;;;;;;;;;GASG;AACH,MAAM,WAAW,aAAa;IAC5B,eAAe,CACb,OAAO,EAAE,WAAW,EAAE,EACtB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,WAAW,CAAC,CAAC;IAExB,iBAAiB,CAAC,CAChB,OAAO,EAAE,WAAW,EAAE,EACtB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,aAAa,CAAC,eAAe,CAAC,CAAC;CACnC"}
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Role of a message in a chat conversation.
3
+ *
4
+ * @beta
5
+ */
6
+ export type ChatRole = 'user' | 'assistant' | 'system' | 'tool';
7
+ /**
8
+ * A tool call requested by the assistant.
9
+ *
10
+ * @beta
11
+ */
12
+ export interface ChatToolCall {
13
+ id: string;
14
+ name: string;
15
+ args: Record<string, unknown>;
16
+ }
17
+ /**
18
+ * The result of executing a tool call.
19
+ *
20
+ * @beta
21
+ */
22
+ export interface ChatToolResult {
23
+ toolCallId: string;
24
+ content: string;
25
+ }
26
+ /**
27
+ * The result of a user interaction component.
28
+ *
29
+ * @beta
30
+ */
31
+ export type InteractionResult<T = unknown> = {
32
+ status: 'approved' | 'rejected';
33
+ payload?: T;
34
+ message?: string;
35
+ };
36
+ /**
37
+ * A user interaction component request.
38
+ *
39
+ * @beta
40
+ */
41
+ export interface ChatInteraction {
42
+ interactionId: string;
43
+ componentName: string;
44
+ data: any;
45
+ /** Set to true once the interaction has been resolved. Used to render a read-only state on re-render. */
46
+ resolved?: boolean;
47
+ }
48
+ /**
49
+ * A file attachment included with a user message.
50
+ *
51
+ * @beta
52
+ */
53
+ export interface ChatAttachment {
54
+ name: string;
55
+ content: string;
56
+ mimeType: string;
57
+ }
58
+ /**
59
+ * A single message in a chat conversation.
60
+ *
61
+ * @beta
62
+ */
63
+ export interface ChatMessage {
64
+ role: ChatRole;
65
+ content: string;
66
+ toolCalls?: ChatToolCall[];
67
+ toolResult?: ChatToolResult;
68
+ attachments?: ChatAttachment[];
69
+ interaction?: ChatInteraction;
70
+ thinking?: boolean;
71
+ }
72
+ /**
73
+ * JSON Schema-based tool definition for function calling.
74
+ *
75
+ * @beta
76
+ */
77
+ export interface ChatToolDefinition {
78
+ name: string;
79
+ description: string;
80
+ parameters: Record<string, unknown>;
81
+ }
82
+ /**
83
+ * Map of tool name to async handler function.
84
+ *
85
+ * @beta
86
+ */
87
+ export type ChatToolHandlers = Record<string, (args: Record<string, unknown>, context: {
88
+ requestInteraction: <T = unknown>(componentName: string, data: any) => Promise<T>;
89
+ }) => Promise<unknown>>;
90
+ /**
91
+ * Options for a chat request.
92
+ *
93
+ * @beta
94
+ */
95
+ export interface ChatRequestOptions {
96
+ systemPrompt?: string;
97
+ tools?: ChatToolDefinition[];
98
+ attachments?: ChatAttachment[];
99
+ signal?: AbortSignal;
100
+ }
101
+ /**
102
+ * A streaming chunk from a chat response.
103
+ *
104
+ * @beta
105
+ */
106
+ export interface ChatStreamChunk {
107
+ delta: string;
108
+ done: boolean;
109
+ toolCalls?: ChatToolCall[];
110
+ }
111
+ /**
112
+ * Configuration for the animations feature.
113
+ *
114
+ * @beta
115
+ */
116
+ export interface ChatAnimationsConfig {
117
+ /**
118
+ * When true, a multiselect control is shown in the settings panel so the
119
+ * user can toggle individual animations on or off.
120
+ */
121
+ userConfigurable: boolean;
122
+ /**
123
+ * Initially enabled animations. When omitted all animations are enabled by
124
+ * default.
125
+ */
126
+ enabled?: string[];
127
+ }
128
+ /**
129
+ * Display and behaviour configuration for the chat assistant.
130
+ *
131
+ * For toggle flags (`showToolCalls`, `showThinkingSteps`):
132
+ * - `true` — default on, user can toggle off
133
+ * - `false` — default off, user can toggle on
134
+ * - `null` / `undefined` — completely disabled, no UI control shown
135
+ *
136
+ * @beta
137
+ */
138
+ export interface ChatConfig {
139
+ /** Show tool call details in the chat UI. */
140
+ showToolCalls?: boolean | null;
141
+ /** Show model thinking/reasoning steps. */
142
+ showThinkingSteps?: boolean | null;
143
+ /** Show a button to download the full chat history as JSON. */
144
+ allowDebugDownload?: boolean;
145
+ /** Comma-separated list of accepted file extensions for upload, e.g., ".txt,.md,.csv". If undefined or empty, file uploads are disabled. */
146
+ acceptedFiles?: string;
147
+ /**
148
+ * Seconds to wait before showing the loading spinner. Default: 5.
149
+ * Set to 0 to show the spinner immediately when a request is in flight.
150
+ */
151
+ loadingDelay?: number;
152
+ /** Animations feature configuration. */
153
+ animations?: ChatAnimationsConfig;
154
+ /** Maximum number of tool call iterations per turn. Default: 50. */
155
+ maxToolIterations?: number;
156
+ }
157
+ //# sourceMappingURL=chat.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.types.d.ts","sourceRoot":"","sources":["../../../src/types/chat.types.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * @beta
5
5
  */
6
- export type AIProviderType = 'openai' | 'chrome' | 'none';
6
+ export type AIProviderType = 'openai' | 'chrome' | 'gemini' | 'none';
7
7
  /**
8
8
  * Base provider-level configuration.
9
9
  *
@@ -46,11 +46,25 @@ export interface ChromeAIConfig extends AIProviderConfig {
46
46
  temperature?: number;
47
47
  topK?: number;
48
48
  }
49
+ /**
50
+ * Gemini server-proxy AI configuration (client calls your server; server calls Gemini).
51
+ *
52
+ * @remarks
53
+ * API key stays on the server. URL defaults to /gwf/ai-service/gemini/chat.
54
+ *
55
+ * @beta
56
+ */
57
+ export interface GeminiAIConfig extends AIProviderConfig {
58
+ providerType: 'gemini';
59
+ model?: string;
60
+ serverEndpoint?: string;
61
+ apiKey?: string;
62
+ }
49
63
  /**
50
64
  * Union type for provider-specific configs.
51
65
  * Extend when adding new providers.
52
66
  *
53
67
  * @beta
54
68
  */
55
- export type AIConfig = ServerAIConfig | ChromeAIConfig;
69
+ export type AIConfig = ServerAIConfig | ChromeAIConfig | GeminiAIConfig;
56
70
  //# sourceMappingURL=config.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.types.d.ts","sourceRoot":"","sources":["../../../src/types/config.types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE1D;;;;;;;;GAQG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,6DAA6D;AAC7D,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;AAErE;;;;;;;;GAQG;AACH,MAAM,WAAW,cAAe,SAAQ,gBAAgB;IACtD,QAAQ,EAAE,oBAAoB,CAAC;CAChC;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,cAAe,SAAQ,gBAAgB;IACtD,YAAY,CAAC,EAAE,QAAQ,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,GAAG,cAAc,GAAG,cAAc,CAAC"}
1
+ {"version":3,"file":"config.types.d.ts","sourceRoot":"","sources":["../../../src/types/config.types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AAErE;;;;;;;;GAQG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,6DAA6D;AAC7D,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;AAErE;;;;;;;;GAQG;AACH,MAAM,WAAW,cAAe,SAAQ,gBAAgB;IACtD,QAAQ,EAAE,oBAAoB,CAAC;CAChC;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,cAAe,SAAQ,gBAAgB;IACtD,YAAY,CAAC,EAAE,QAAQ,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,cAAe,SAAQ,gBAAgB;IACtD,YAAY,EAAE,QAAQ,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,GAAG,cAAc,GAAG,cAAc,GAAG,cAAc,CAAC"}
@@ -9,11 +9,21 @@ export interface CriteriaClauseResult {
9
9
  operator: string;
10
10
  value: string | number | boolean | null;
11
11
  }
12
+ /**
13
+ * A group of criteria clauses combined by a logical operator.
14
+ *
15
+ * @beta
16
+ */
12
17
  export interface CriteriaGroupResult {
13
18
  logic: 'and' | 'or';
14
19
  negated?: boolean;
15
20
  clauses: CriteriaClauseResult[];
16
21
  }
22
+ /**
23
+ * Top-level result returned by criteria interpretation.
24
+ *
25
+ * @beta
26
+ */
17
27
  export interface CriteriaInterpretationResult {
18
28
  groups: CriteriaGroupResult[];
19
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"criteria-types.d.ts","sourceRoot":"","sources":["../../../src/types/criteria-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;CACzC;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,oBAAoB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,mBAAmB,EAAE,CAAC;CAC/B"}
1
+ {"version":3,"file":"criteria-types.d.ts","sourceRoot":"","sources":["../../../src/types/criteria-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;CACzC;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,oBAAoB,EAAE,CAAC;CACjC;AAED;;;;GAIG;AACH,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,mBAAmB,EAAE,CAAC;CAC/B"}
@@ -1,3 +1,5 @@
1
+ export * from './chat-transport.types';
2
+ export * from './chat.types';
1
3
  export * from './config.types';
2
4
  export * from './criteria-types';
3
5
  export * from './status.types';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC"}
@@ -4,8 +4,19 @@
4
4
  *
5
5
  * @beta
6
6
  */
7
+ /**
8
+ * Returns true if the Web Speech API is available in the current environment.
9
+ *
10
+ * @beta
11
+ */
7
12
  export declare function isSpeechRecognitionAvailable(): boolean;
8
13
  export type SpeechRecognitionResultHandler = (transcript: string, isFinal: boolean) => void;
9
14
  export type SpeechRecognitionErrorHandler = (error: string) => void;
15
+ /**
16
+ * Starts continuous speech recognition, calling `onResult` with each transcript update.
17
+ * Returns a stop function, or null if speech recognition is unavailable.
18
+ *
19
+ * @beta
20
+ */
10
21
  export declare function startSpeechRecognition(onResult: SpeechRecognitionResultHandler, onError?: SpeechRecognitionErrorHandler): (() => void) | null;
11
22
  //# sourceMappingURL=speech-to-text.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"speech-to-text.d.ts","sourceRoot":"","sources":["../../../src/utils/speech-to-text.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,wBAAgB,4BAA4B,IAAI,OAAO,CAKtD;AAED,MAAM,MAAM,8BAA8B,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AAC5F,MAAM,MAAM,6BAA6B,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AAEpE,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,8BAA8B,EACxC,OAAO,CAAC,EAAE,6BAA6B,GACtC,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAmDrB"}
1
+ {"version":3,"file":"speech-to-text.d.ts","sourceRoot":"","sources":["../../../src/utils/speech-to-text.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH,wBAAgB,4BAA4B,IAAI,OAAO,CAKtD;AAED,MAAM,MAAM,8BAA8B,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AAC5F,MAAM,MAAM,6BAA6B,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AAEpE;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,8BAA8B,EACxC,OAAO,CAAC,EAAE,6BAA6B,GACtC,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAmDrB"}
@@ -2,14 +2,19 @@ import { __awaiter } from "tslib";
2
2
  import { DI } from '@microsoft/fast-foundation';
3
3
  import { ChromeProvider } from './providers/chrome-provider';
4
4
  import { DefaultAIProvider } from './providers/default-provider';
5
+ import { GeminiProvider } from './providers/gemini-provider';
5
6
  import { OpenAIProvider } from './providers/openai-provider';
6
7
  import { ChromePromptTransport } from './transports/chrome-prompt-transport';
8
+ import { GeminiTransport } from './transports/gemini-transport';
7
9
  import { ServerOpenAITransport } from './transports/server-openai-transport';
8
10
  import { logger } from './utils';
9
11
  import { isAIFeatureEnabled } from './utils/feature-flags';
10
12
  function isChromeConfig(config) {
11
13
  return 'providerType' in config && config.providerType === 'chrome';
12
14
  }
15
+ function isGeminiConfig(config) {
16
+ return 'providerType' in config && config.providerType === 'gemini';
17
+ }
13
18
  function isServerAIConfig(config) {
14
19
  return !!config.provider;
15
20
  }
@@ -31,6 +36,16 @@ export function createAIProvider(config) {
31
36
  logger.debug('createAIProvider: using ChromeProvider');
32
37
  return new ChromeProvider(config);
33
38
  }
39
+ if (config && isGeminiConfig(config)) {
40
+ logger.debug('createAIProvider: using GeminiProvider');
41
+ const transport = new GeminiTransport({
42
+ model: config.model,
43
+ timeout: config.timeout,
44
+ serverEndpoint: config.serverEndpoint,
45
+ apiKey: config.apiKey,
46
+ });
47
+ return new GeminiProvider({ criteriaInstructions: config.criteriaInstructions }, transport);
48
+ }
34
49
  if (config && isServerAIConfig(config)) {
35
50
  if (config.provider !== 'openai') {
36
51
  logger.warn('createAIProvider: only openai server provider supported for now, using default');
@@ -70,6 +85,9 @@ export function resolveAIConfig() {
70
85
  }
71
86
  logger.warn('resolveAIConfig: Chrome not available', availability);
72
87
  }
88
+ if (provider === 'gemini') {
89
+ return { providerType: 'gemini', model };
90
+ }
73
91
  return { provider, model };
74
92
  });
75
93
  }
package/dist/esm/index.js CHANGED
@@ -1,3 +1,5 @@
1
1
  export { AIProvider, createAIProvider, getAIProvider, resolveAIConfig } from './ai-provider';
2
+ export { GeminiProvider } from './providers/gemini-provider';
3
+ export { GeminiTransport, MalformedFunctionCallError } from './transports/gemini-transport';
2
4
  export { AI_FEATURE_FLAG, isAIFeatureEnabled } from './utils/feature-flags';
3
5
  export { isSpeechRecognitionAvailable, startSpeechRecognition } from './utils/speech-to-text';
@@ -0,0 +1,59 @@
1
+ import { __asyncDelegator, __asyncGenerator, __asyncValues, __await, __awaiter } from "tslib";
2
+ import { buildCriteriaSystemPrompt, buildCriteriaUserPrompt, CRITERIA_JSON_SCHEMA, parseCriteriaResponse, } from '../interactions';
3
+ import { logger } from '../utils';
4
+ /**
5
+ * Gemini AI provider. Uses {@link GeminiTransport} to handle requests.
6
+ * Implements criteria interpretation and multi-turn chat.
7
+ *
8
+ * @beta
9
+ */
10
+ export class GeminiProvider {
11
+ constructor(config, transport) {
12
+ this.transport = transport;
13
+ this.criteriaInstructions = config.criteriaInstructions;
14
+ }
15
+ getStatus() {
16
+ return __awaiter(this, void 0, void 0, function* () {
17
+ const config = this.transport.getConfig();
18
+ return { provider: 'gemini', model: config.model };
19
+ });
20
+ }
21
+ interpretCriteria(input, context) {
22
+ return __awaiter(this, void 0, void 0, function* () {
23
+ var _a;
24
+ const fields = (_a = context === null || context === void 0 ? void 0 : context.fields) !== null && _a !== void 0 ? _a : [];
25
+ const systemPrompt = buildCriteriaSystemPrompt(fields, this.criteriaInstructions);
26
+ const userPrompt = buildCriteriaUserPrompt(input);
27
+ try {
28
+ const raw = yield this.transport.sendStructuredPrompt({
29
+ systemPrompt,
30
+ userPrompt,
31
+ responseSchema: CRITERIA_JSON_SCHEMA,
32
+ });
33
+ return parseCriteriaResponse(raw);
34
+ }
35
+ catch (e) {
36
+ logger.error('GeminiProvider interpretCriteria failed:', e);
37
+ return null;
38
+ }
39
+ });
40
+ }
41
+ chat(history, userMessage, options) {
42
+ return __awaiter(this, void 0, void 0, function* () {
43
+ return this.transport.sendChatMessage(history, userMessage, options);
44
+ });
45
+ }
46
+ streamChat(history, userMessage, options) {
47
+ return __asyncGenerator(this, arguments, function* streamChat_1() {
48
+ if ('streamChatMessage' in this.transport &&
49
+ typeof this.transport.streamChatMessage === 'function') {
50
+ yield __await(yield* __asyncDelegator(__asyncValues(this.transport.streamChatMessage(history, userMessage, options))));
51
+ }
52
+ else {
53
+ // Fallback: non-streaming chat exposed as a single chunk
54
+ const msg = yield __await(this.transport.sendChatMessage(history, userMessage, options));
55
+ yield yield __await({ delta: msg.content, done: true, toolCalls: msg.toolCalls });
56
+ }
57
+ });
58
+ }
59
+ }