@superblocksteam/vite-plugin-file-sync 2.0.67 → 2.0.68-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/dist/ai-service/agent/tools/apis/analysis.d.ts.map +1 -1
  2. package/dist/ai-service/agent/tools/apis/analysis.js +4 -0
  3. package/dist/ai-service/agent/tools/apis/analysis.js.map +1 -1
  4. package/dist/ai-service/agent/tools/apis/api-executor.d.ts +9 -1
  5. package/dist/ai-service/agent/tools/apis/api-executor.d.ts.map +1 -1
  6. package/dist/ai-service/agent/tools/apis/api-executor.js +4 -1
  7. package/dist/ai-service/agent/tools/apis/api-executor.js.map +1 -1
  8. package/dist/ai-service/agent/tools/apis/api-validation-orchestrator.d.ts +1 -0
  9. package/dist/ai-service/agent/tools/apis/api-validation-orchestrator.d.ts.map +1 -1
  10. package/dist/ai-service/agent/tools/apis/api-validation-orchestrator.js +1 -1
  11. package/dist/ai-service/agent/tools/apis/api-validation-orchestrator.js.map +1 -1
  12. package/dist/ai-service/agent/tools/apis/test-api.d.ts +5 -0
  13. package/dist/ai-service/agent/tools/apis/test-api.d.ts.map +1 -1
  14. package/dist/ai-service/agent/tools/apis/test-api.js +37 -18
  15. package/dist/ai-service/agent/tools/apis/test-api.js.map +1 -1
  16. package/dist/ai-service/agent/tools/build-delete-file.d.ts.map +1 -1
  17. package/dist/ai-service/agent/tools/build-delete-file.js +29 -0
  18. package/dist/ai-service/agent/tools/build-delete-file.js.map +1 -1
  19. package/dist/ai-service/agent/tools/integrations/execute-request.d.ts.map +1 -1
  20. package/dist/ai-service/agent/tools/integrations/execute-request.js +5 -4
  21. package/dist/ai-service/agent/tools/integrations/execute-request.js.map +1 -1
  22. package/dist/ai-service/agent/tools.d.ts.map +1 -1
  23. package/dist/ai-service/agent/tools.js +17 -6
  24. package/dist/ai-service/agent/tools.js.map +1 -1
  25. package/dist/ai-service/agent/tools2/entity-permissions.d.ts +23 -20
  26. package/dist/ai-service/agent/tools2/entity-permissions.d.ts.map +1 -1
  27. package/dist/ai-service/agent/tools2/entity-permissions.js +15 -11
  28. package/dist/ai-service/agent/tools2/entity-permissions.js.map +1 -1
  29. package/dist/ai-service/agent/tools2/example.js +2 -2
  30. package/dist/ai-service/agent/tools2/example.js.map +1 -1
  31. package/dist/ai-service/agent/tools2/index.d.ts +1 -1
  32. package/dist/ai-service/agent/tools2/index.d.ts.map +1 -1
  33. package/dist/ai-service/agent/tools2/index.js +1 -1
  34. package/dist/ai-service/agent/tools2/index.js.map +1 -1
  35. package/dist/ai-service/agent/tools2/registry.d.ts +4 -4
  36. package/dist/ai-service/agent/tools2/registry.d.ts.map +1 -1
  37. package/dist/ai-service/agent/tools2/registry.js +42 -29
  38. package/dist/ai-service/agent/tools2/registry.js.map +1 -1
  39. package/dist/ai-service/agent/tools2/tools/read.d.ts +1 -1
  40. package/dist/ai-service/agent/tools2/types.d.ts +36 -15
  41. package/dist/ai-service/agent/tools2/types.d.ts.map +1 -1
  42. package/dist/ai-service/agent/tools2/types.js.map +1 -1
  43. package/dist/ai-service/chat/chat-session-store.d.ts +5 -7
  44. package/dist/ai-service/chat/chat-session-store.d.ts.map +1 -1
  45. package/dist/ai-service/chat/chat-session-store.js +36 -17
  46. package/dist/ai-service/chat/chat-session-store.js.map +1 -1
  47. package/dist/ai-service/chat/extract-history.d.ts +0 -85
  48. package/dist/ai-service/chat/extract-history.d.ts.map +1 -1
  49. package/dist/ai-service/chat/extract-history.js +3 -239
  50. package/dist/ai-service/chat/extract-history.js.map +1 -1
  51. package/dist/ai-service/index.d.ts +26 -4
  52. package/dist/ai-service/index.d.ts.map +1 -1
  53. package/dist/ai-service/index.js +125 -4
  54. package/dist/ai-service/index.js.map +1 -1
  55. package/dist/ai-service/judge/debug-browser.d.ts +8 -0
  56. package/dist/ai-service/judge/debug-browser.d.ts.map +1 -0
  57. package/dist/ai-service/judge/debug-browser.js +79 -0
  58. package/dist/ai-service/judge/debug-browser.js.map +1 -0
  59. package/dist/ai-service/judge/index.d.ts +12 -0
  60. package/dist/ai-service/judge/index.d.ts.map +1 -0
  61. package/dist/ai-service/judge/index.js +11 -0
  62. package/dist/ai-service/judge/index.js.map +1 -0
  63. package/dist/ai-service/judge/integration/mcp-client.d.ts +82 -0
  64. package/dist/ai-service/judge/integration/mcp-client.d.ts.map +1 -0
  65. package/dist/ai-service/judge/integration/mcp-client.js +276 -0
  66. package/dist/ai-service/judge/integration/mcp-client.js.map +1 -0
  67. package/dist/ai-service/judge/integration/playwright-bridge.d.ts +142 -0
  68. package/dist/ai-service/judge/integration/playwright-bridge.d.ts.map +1 -0
  69. package/dist/ai-service/judge/integration/playwright-bridge.js +217 -0
  70. package/dist/ai-service/judge/integration/playwright-bridge.js.map +1 -0
  71. package/dist/ai-service/judge/judge-eval-http.d.ts +3 -0
  72. package/dist/ai-service/judge/judge-eval-http.d.ts.map +1 -0
  73. package/dist/ai-service/judge/judge-eval-http.js +541 -0
  74. package/dist/ai-service/judge/judge-eval-http.js.map +1 -0
  75. package/dist/ai-service/judge/judge-eval-service-runner.d.ts +35 -0
  76. package/dist/ai-service/judge/judge-eval-service-runner.d.ts.map +1 -0
  77. package/dist/ai-service/judge/judge-eval-service-runner.js +124 -0
  78. package/dist/ai-service/judge/judge-eval-service-runner.js.map +1 -0
  79. package/dist/ai-service/judge/judge-executor.d.ts +65 -0
  80. package/dist/ai-service/judge/judge-executor.d.ts.map +1 -0
  81. package/dist/ai-service/judge/judge-executor.js +334 -0
  82. package/dist/ai-service/judge/judge-executor.js.map +1 -0
  83. package/dist/ai-service/judge/judge-service.d.ts +161 -0
  84. package/dist/ai-service/judge/judge-service.d.ts.map +1 -0
  85. package/dist/ai-service/judge/judge-service.js +241 -0
  86. package/dist/ai-service/judge/judge-service.js.map +1 -0
  87. package/dist/ai-service/judge/prompts/evaluation-criteria.d.ts +37 -0
  88. package/dist/ai-service/judge/prompts/evaluation-criteria.d.ts.map +1 -0
  89. package/dist/ai-service/judge/prompts/evaluation-criteria.js +283 -0
  90. package/dist/ai-service/judge/prompts/evaluation-criteria.js.map +1 -0
  91. package/dist/ai-service/judge/prompts/system-prompt.d.ts +30 -0
  92. package/dist/ai-service/judge/prompts/system-prompt.d.ts.map +1 -0
  93. package/dist/ai-service/judge/prompts/system-prompt.js +212 -0
  94. package/dist/ai-service/judge/prompts/system-prompt.js.map +1 -0
  95. package/dist/ai-service/judge/storage/csv-storage.d.ts +99 -0
  96. package/dist/ai-service/judge/storage/csv-storage.d.ts.map +1 -0
  97. package/dist/ai-service/judge/storage/csv-storage.js +274 -0
  98. package/dist/ai-service/judge/storage/csv-storage.js.map +1 -0
  99. package/dist/ai-service/judge/storage/index.d.ts +9 -0
  100. package/dist/ai-service/judge/storage/index.d.ts.map +1 -0
  101. package/dist/ai-service/judge/storage/index.js +7 -0
  102. package/dist/ai-service/judge/storage/index.js.map +1 -0
  103. package/dist/ai-service/judge/storage/interface.d.ts +51 -0
  104. package/dist/ai-service/judge/storage/interface.d.ts.map +1 -0
  105. package/dist/ai-service/judge/storage/interface.js +8 -0
  106. package/dist/ai-service/judge/storage/interface.js.map +1 -0
  107. package/dist/ai-service/judge/storage/types.d.ts +54 -0
  108. package/dist/ai-service/judge/storage/types.d.ts.map +1 -0
  109. package/dist/ai-service/judge/storage/types.js +7 -0
  110. package/dist/ai-service/judge/storage/types.js.map +1 -0
  111. package/dist/ai-service/judge/tools/index.d.ts +22 -0
  112. package/dist/ai-service/judge/tools/index.d.ts.map +1 -0
  113. package/dist/ai-service/judge/tools/index.js +29 -0
  114. package/dist/ai-service/judge/tools/index.js.map +1 -0
  115. package/dist/ai-service/judge/tools/playwright-action.d.ts +18 -0
  116. package/dist/ai-service/judge/tools/playwright-action.d.ts.map +1 -0
  117. package/dist/ai-service/judge/tools/playwright-action.js +171 -0
  118. package/dist/ai-service/judge/tools/playwright-action.js.map +1 -0
  119. package/dist/ai-service/judge/tools/submit-feedback.d.ts +41 -0
  120. package/dist/ai-service/judge/tools/submit-feedback.d.ts.map +1 -0
  121. package/dist/ai-service/judge/tools/submit-feedback.js +150 -0
  122. package/dist/ai-service/judge/tools/submit-feedback.js.map +1 -0
  123. package/dist/ai-service/judge/types.d.ts +169 -0
  124. package/dist/ai-service/judge/types.d.ts.map +1 -0
  125. package/dist/ai-service/judge/types.js +8 -0
  126. package/dist/ai-service/judge/types.js.map +1 -0
  127. package/dist/ai-service/llm/context/constants.d.ts +7 -0
  128. package/dist/ai-service/llm/context/constants.d.ts.map +1 -1
  129. package/dist/ai-service/llm/context/constants.js +7 -0
  130. package/dist/ai-service/llm/context/constants.js.map +1 -1
  131. package/dist/ai-service/llm/context/context.d.ts +8 -1
  132. package/dist/ai-service/llm/context/context.d.ts.map +1 -1
  133. package/dist/ai-service/llm/context/context.js +47 -12
  134. package/dist/ai-service/llm/context/context.js.map +1 -1
  135. package/dist/ai-service/llm/context/internal-types.d.ts +1 -0
  136. package/dist/ai-service/llm/context/internal-types.d.ts.map +1 -1
  137. package/dist/ai-service/llm/context/internal-types.js.map +1 -1
  138. package/dist/ai-service/llm/context/manager.d.ts +2 -1
  139. package/dist/ai-service/llm/context/manager.d.ts.map +1 -1
  140. package/dist/ai-service/llm/context/manager.js +2 -1
  141. package/dist/ai-service/llm/context/manager.js.map +1 -1
  142. package/dist/ai-service/llm/context/utils/message-utils.d.ts +10 -0
  143. package/dist/ai-service/llm/context/utils/message-utils.d.ts.map +1 -1
  144. package/dist/ai-service/llm/context/utils/message-utils.js +74 -0
  145. package/dist/ai-service/llm/context/utils/message-utils.js.map +1 -1
  146. package/dist/ai-service/llm/error.d.ts +1 -1
  147. package/dist/ai-service/llm/interaction/adapters/vercel.d.ts.map +1 -1
  148. package/dist/ai-service/llm/interaction/adapters/vercel.js.map +1 -1
  149. package/dist/ai-service/llm/interaction/provider.d.ts +10 -9
  150. package/dist/ai-service/llm/interaction/provider.d.ts.map +1 -1
  151. package/dist/ai-service/llmobs/middleware/stream-text.d.ts +8 -8
  152. package/dist/ai-service/llmobs/middleware/stream-text.d.ts.map +1 -1
  153. package/dist/ai-service/llmobs/middleware/stream-text.js.map +1 -1
  154. package/dist/ai-service/llmobs/tracer.d.ts.map +1 -1
  155. package/dist/ai-service/llmobs/tracer.js +2 -1
  156. package/dist/ai-service/llmobs/tracer.js.map +1 -1
  157. package/dist/ai-service/mcp/embedded-playwright-mcp-server.d.ts +53 -0
  158. package/dist/ai-service/mcp/embedded-playwright-mcp-server.d.ts.map +1 -0
  159. package/dist/ai-service/mcp/embedded-playwright-mcp-server.js +541 -0
  160. package/dist/ai-service/mcp/embedded-playwright-mcp-server.js.map +1 -0
  161. package/dist/ai-service/mcp/playwright-server.d.ts +114 -0
  162. package/dist/ai-service/mcp/playwright-server.d.ts.map +1 -0
  163. package/dist/ai-service/mcp/playwright-server.js +109 -0
  164. package/dist/ai-service/mcp/playwright-server.js.map +1 -0
  165. package/dist/ai-service/state-machine/clark-fsm.d.ts +4 -1
  166. package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
  167. package/dist/ai-service/state-machine/clark-fsm.js +3 -1
  168. package/dist/ai-service/state-machine/clark-fsm.js.map +1 -1
  169. package/dist/ai-service/state-machine/handlers/idle.d.ts.map +1 -1
  170. package/dist/ai-service/state-machine/handlers/idle.js +3 -1
  171. package/dist/ai-service/state-machine/handlers/idle.js.map +1 -1
  172. package/dist/ai-service/state-machine/handlers/runtime-reviewing.d.ts.map +1 -1
  173. package/dist/ai-service/state-machine/handlers/runtime-reviewing.js +4 -1
  174. package/dist/ai-service/state-machine/handlers/runtime-reviewing.js.map +1 -1
  175. package/dist/ai-service/state-machine/helpers/context-id.d.ts +1 -1
  176. package/dist/ai-service/state-machine/helpers/context-id.d.ts.map +1 -1
  177. package/dist/ai-service/state-machine/helpers/context-id.js +6 -7
  178. package/dist/ai-service/state-machine/helpers/context-id.js.map +1 -1
  179. package/dist/ai-service/state-machine/mocks.d.ts +1 -0
  180. package/dist/ai-service/state-machine/mocks.d.ts.map +1 -1
  181. package/dist/ai-service/state-machine/mocks.js +5 -1
  182. package/dist/ai-service/state-machine/mocks.js.map +1 -1
  183. package/dist/server-rpc/client.js +1 -1
  184. package/dist/server-rpc/client.js.map +1 -1
  185. package/dist/socket-manager.d.ts.map +1 -1
  186. package/dist/socket-manager.js +26 -6
  187. package/dist/socket-manager.js.map +1 -1
  188. package/dist/sync-service/index.d.ts +5 -0
  189. package/dist/sync-service/index.d.ts.map +1 -1
  190. package/dist/sync-service/index.js +13 -1
  191. package/dist/sync-service/index.js.map +1 -1
  192. package/package.json +7 -6
@@ -1,88 +1,3 @@
1
1
  import type { AiChatMessage } from "@superblocksteam/library-shared/types";
2
- /**
3
- * Pure functions for filtering and processing chat message history
4
- * These functions extract conversation context suitable for LLM prompts
5
- */
6
- /**
7
- * Get up to the last N messages from the array
8
- */
9
- export declare function getLimitedRecentMessages(messages: AiChatMessage[], limit?: number): AiChatMessage[];
10
- /**
11
- * Find the index of the most recent user message
12
- */
13
- export declare function findLastUserMessageIndex(messages: AiChatMessage[]): number;
14
- export declare function findLastMessageIndex(messages: AiChatMessage[], filter: (message: AiChatMessage) => boolean, n?: number): number;
15
- /**
16
- * Remove messages from the given index onwards
17
- */
18
- export declare function removeMessagesFromIndex(messages: AiChatMessage[], fromIndex: number): AiChatMessage[];
19
- /**
20
- * Find the summary message index in the current exchange (looking backwards)
21
- */
22
- export declare function findSummaryIndex(messages: AiChatMessage[], currentIndex: number): number;
23
- /**
24
- * Check if a message should be included in history (text type only)
25
- */
26
- export declare function isTextType(message: AiChatMessage | undefined): boolean;
27
- /**
28
- * Check if an assistant message comes after a summary in its exchange
29
- */
30
- export declare function isAssistantMessageAfterSummary(messages: AiChatMessage[], messageIndex: number, message: AiChatMessage): boolean;
31
- /**
32
- * Process messages to extract valid user-assistant exchanges
33
- */
34
- export declare function processMessageExchanges(messages: AiChatMessage[]): Array<{
35
- role: "user" | "assistant";
36
- content: string;
37
- }>;
38
- /**
39
- * Process a single exchange to extract the user message and main assistant response
40
- */
41
- export declare function processSingleExchange(exchange: {
42
- userMessage: AiChatMessage;
43
- assistantMessages: AiChatMessage[];
44
- }): Array<{
45
- role: "user" | "assistant";
46
- content: string;
47
- }>;
48
- /**
49
- * Identify complete message exchanges (user prompt + assistant responses) in the conversation
50
- * An exchange starts with a user message and includes all subsequent assistant messages until the next user message
51
- */
52
- export declare function identifyMessageExchanges(messages: AiChatMessage[]): Array<{
53
- userMessage: AiChatMessage;
54
- assistantMessages: AiChatMessage[];
55
- startIndex: number;
56
- endIndex: number;
57
- }>;
58
- /**
59
- * Determine the outcome of a message exchange based on subsequent user actions
60
- */
61
- export declare function determineExchangeOutcome(exchange: {
62
- userMessage: AiChatMessage;
63
- assistantMessages: AiChatMessage[];
64
- startIndex: number;
65
- endIndex: number;
66
- }, allMessages: AiChatMessage[]): "accepted" | "rejected" | "unknown";
67
2
  export declare function getLastUserMessage(messages: AiChatMessage[]): AiChatMessage | undefined;
68
- /**
69
- * Extract productive conversation history for LLM context
70
- *
71
- * 1. Removes the most recent user message and anything after it (incomplete exchange)
72
- * 2. Identifies complete message exchanges (user prompt + assistant responses)
73
- * 3. Categorizes exchanges by outcome (accepted, rejected, unknown)
74
- * 4. Filters for accepted exchanges
75
- * 5. Optionally includes the most recent exchange if outcome is unknown
76
- * 6. Sorts exchanges by original order and flattens to messages
77
- * 7. Processes messages to apply filtering and summary logic
78
- */
79
- export declare const extractProductiveHistoryForContext: typeof _extractProductiveHistoryForContext;
80
- declare function _extractProductiveHistoryForContext(messages: AiChatMessage[], options?: {
81
- maxAcceptedExchanges?: number;
82
- includeRecentUnknown?: boolean;
83
- }): Array<{
84
- role: "user" | "assistant";
85
- content: string;
86
- }>;
87
- export {};
88
3
  //# sourceMappingURL=extract-history.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"extract-history.d.ts","sourceRoot":"","sources":["../../../src/ai-service/chat/extract-history.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAE3E;;;GAGG;AAEH;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,aAAa,EAAE,EACzB,KAAK,GAAE,MAAY,GAClB,aAAa,EAAE,CAEjB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,CAE1E;AAGD,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,aAAa,EAAE,EACzB,MAAM,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,EAC3C,CAAC,GAAE,MAAU,GACZ,MAAM,CAeR;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,aAAa,EAAE,EACzB,SAAS,EAAE,MAAM,GAChB,aAAa,EAAE,CAEjB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,aAAa,EAAE,EACzB,YAAY,EAAE,MAAM,GACnB,MAAM,CAeR;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS,GAAG,OAAO,CAEtE;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,aAAa,EAAE,EACzB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,aAAa,GACrB,OAAO,CAOT;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC;IACxE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC,CA2BD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE;IAC9C,WAAW,EAAE,aAAa,CAAC;IAC3B,iBAAiB,EAAE,aAAa,EAAE,CAAC;CACpC,GAAG,KAAK,CAAC;IACR,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC,CAuCD;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC;IACzE,WAAW,EAAE,aAAa,CAAC;IAC3B,iBAAiB,EAAE,aAAa,EAAE,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CA+CD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE;IACR,WAAW,EAAE,aAAa,CAAC;IAC3B,iBAAiB,EAAE,aAAa,EAAE,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,EACD,WAAW,EAAE,aAAa,EAAE,GAC3B,UAAU,GAAG,UAAU,GAAG,SAAS,CAqBrC;AAED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,aAAa,EAAE,GACxB,aAAa,GAAG,SAAS,CAG3B;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kCAAkC,4CAM9C,CAAC;AACF,iBAAS,mCAAmC,CAC1C,QAAQ,EAAE,aAAa,EAAE,EACzB,OAAO,GAAE;IACP,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAC3B,GACL,KAAK,CAAC;IACP,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC,CAiED"}
1
+ {"version":3,"file":"extract-history.d.ts","sourceRoot":"","sources":["../../../src/ai-service/chat/extract-history.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAsB3E,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,aAAa,EAAE,GACxB,aAAa,GAAG,SAAS,CAG3B"}
@@ -1,259 +1,23 @@
1
1
  import { getLogger } from "../../util/logger.js";
2
- import llmobs from "../llmobs/index.js";
3
- /**
4
- * Pure functions for filtering and processing chat message history
5
- * These functions extract conversation context suitable for LLM prompts
6
- */
7
- /**
8
- * Get up to the last N messages from the array
9
- */
10
- export function getLimitedRecentMessages(messages, limit = 100) {
11
- return messages.slice(-limit);
12
- }
13
2
  /**
14
3
  * Find the index of the most recent user message
15
4
  */
16
- export function findLastUserMessageIndex(messages) {
17
- return findLastMessageIndex(messages, (msg) => msg.role === "user");
18
- }
19
- // 0-indexed: 0 = last, 1 = second last, etc.
20
- export function findLastMessageIndex(messages, filter, n = 0) {
5
+ function findLastUserMessageIndex(messages) {
21
6
  let count = 0;
22
7
  for (let i = messages.length - 1; i >= 0; i--) {
23
8
  getLogger().info(`Checking message at index ${i}: ${JSON.stringify(messages[i])}`);
24
- if (!filter(messages[i])) {
9
+ if (messages[i].role !== "user") {
25
10
  continue;
26
11
  }
27
12
  count++;
28
- if (count > n) {
13
+ if (count > 0) {
29
14
  return i;
30
15
  }
31
16
  }
32
17
  return -1;
33
18
  }
34
- /**
35
- * Remove messages from the given index onwards
36
- */
37
- export function removeMessagesFromIndex(messages, fromIndex) {
38
- return fromIndex >= 0 ? messages.slice(0, fromIndex) : [...messages];
39
- }
40
- /**
41
- * Find the summary message index in the current exchange (looking backwards)
42
- */
43
- export function findSummaryIndex(messages, currentIndex) {
44
- for (let j = currentIndex; j >= 0; j--) {
45
- const prevMessage = messages[j];
46
- // Found summary message
47
- if (prevMessage?.role === "assistant" && prevMessage?.group === "summary") {
48
- return j;
49
- }
50
- // Stop looking if we hit a user message (start of exchange)
51
- if (prevMessage?.role === "user") {
52
- break;
53
- }
54
- }
55
- return -1;
56
- }
57
- /**
58
- * Check if a message should be included in history (text type only)
59
- */
60
- export function isTextType(message) {
61
- return Boolean(message && message.type === "text");
62
- }
63
- /**
64
- * Check if an assistant message comes after a summary in its exchange
65
- */
66
- export function isAssistantMessageAfterSummary(messages, messageIndex, message) {
67
- if (message.role !== "assistant" || !isTextType(message)) {
68
- return false;
69
- }
70
- const summaryIndex = findSummaryIndex(messages, messageIndex);
71
- return summaryIndex >= 0 && messageIndex > summaryIndex;
72
- }
73
- /**
74
- * Process messages to extract valid user-assistant exchanges
75
- */
76
- export function processMessageExchanges(messages) {
77
- const processedMessages = [];
78
- for (let i = 0; i < messages.length; i++) {
79
- const message = messages[i];
80
- // Include user messages with type "text"
81
- if (message?.role === "user" && isTextType(message)) {
82
- processedMessages.push({
83
- role: "user",
84
- content: message.content,
85
- });
86
- }
87
- // Include assistant messages that come after summary and have type "text"
88
- if (message && isAssistantMessageAfterSummary(messages, i, message)) {
89
- processedMessages.push({
90
- role: "assistant",
91
- content: message.content,
92
- });
93
- }
94
- }
95
- return processedMessages;
96
- }
97
- /**
98
- * Process a single exchange to extract the user message and main assistant response
99
- */
100
- export function processSingleExchange(exchange) {
101
- const result = [];
102
- // Include user message if it's text type
103
- if (isTextType(exchange.userMessage)) {
104
- result.push({
105
- role: "user",
106
- content: exchange.userMessage.content,
107
- });
108
- }
109
- // Find the summary message and include only the first assistant message after it
110
- let summaryIndex = -1;
111
- for (let i = 0; i < exchange.assistantMessages.length; i++) {
112
- const msg = exchange.assistantMessages[i];
113
- if (msg?.role === "assistant" && msg?.group === "summary") {
114
- summaryIndex = i;
115
- break;
116
- }
117
- }
118
- // Include the first assistant message after summary with text type
119
- if (summaryIndex >= 0) {
120
- for (let i = summaryIndex + 1; i < exchange.assistantMessages.length; i++) {
121
- const msg = exchange.assistantMessages[i];
122
- if (msg?.role === "assistant" && isTextType(msg)) {
123
- result.push({
124
- role: "assistant",
125
- content: msg.content,
126
- });
127
- break; // Only include the first one
128
- }
129
- }
130
- }
131
- return result;
132
- }
133
- /**
134
- * Identify complete message exchanges (user prompt + assistant responses) in the conversation
135
- * An exchange starts with a user message and includes all subsequent assistant messages until the next user message
136
- */
137
- export function identifyMessageExchanges(messages) {
138
- const exchanges = [];
139
- let currentExchange = null;
140
- for (let i = 0; i < messages.length; i++) {
141
- const message = messages[i];
142
- if (message?.role === "user") {
143
- // If we have a current exchange, finalize it
144
- if (currentExchange) {
145
- exchanges.push({
146
- ...currentExchange,
147
- endIndex: i - 1,
148
- });
149
- }
150
- // Start a new exchange
151
- currentExchange = {
152
- userMessage: message,
153
- assistantMessages: [],
154
- startIndex: i,
155
- };
156
- }
157
- else if (message?.role === "assistant" && currentExchange) {
158
- // Add assistant message to current exchange
159
- currentExchange.assistantMessages.push(message);
160
- }
161
- }
162
- // Finalize the last exchange if it exists
163
- if (currentExchange) {
164
- exchanges.push({
165
- ...currentExchange,
166
- endIndex: messages.length - 1,
167
- });
168
- }
169
- return exchanges;
170
- }
171
- /**
172
- * Determine the outcome of a message exchange based on subsequent user actions
173
- */
174
- export function determineExchangeOutcome(exchange, allMessages) {
175
- // Look for acceptance/rejection messages after this exchange
176
- const messagesAfterExchange = allMessages.slice(exchange.endIndex + 1);
177
- for (const message of messagesAfterExchange) {
178
- if (message.role === "user") {
179
- if (message.type === "draftAccepted") {
180
- return "accepted";
181
- }
182
- if (message.type === "draftRejected") {
183
- return "rejected";
184
- }
185
- // If we hit another user text message before finding acceptance/rejection,
186
- // the outcome is unknown (user moved on without explicitly accepting/rejecting)
187
- if (message.type === "text") {
188
- return "unknown";
189
- }
190
- }
191
- }
192
- return "unknown";
193
- }
194
19
  export function getLastUserMessage(messages) {
195
20
  const lastUserIndex = findLastUserMessageIndex(messages);
196
21
  return lastUserIndex >= 0 ? messages[lastUserIndex] : undefined;
197
22
  }
198
- /**
199
- * Extract productive conversation history for LLM context
200
- *
201
- * 1. Removes the most recent user message and anything after it (incomplete exchange)
202
- * 2. Identifies complete message exchanges (user prompt + assistant responses)
203
- * 3. Categorizes exchanges by outcome (accepted, rejected, unknown)
204
- * 4. Filters for accepted exchanges
205
- * 5. Optionally includes the most recent exchange if outcome is unknown
206
- * 6. Sorts exchanges by original order and flattens to messages
207
- * 7. Processes messages to apply filtering and summary logic
208
- */
209
- export const extractProductiveHistoryForContext = llmobs.wrap({
210
- kind: "task",
211
- name: "extractProductiveHistoryForContext",
212
- }, _extractProductiveHistoryForContext);
213
- function _extractProductiveHistoryForContext(messages, options = {}) {
214
- const { maxAcceptedExchanges = 2, includeRecentUnknown = true } = options;
215
- // Step 1: Remove only truly incomplete exchanges (user message with no assistant response)
216
- let messagesToProcess = messages;
217
- const lastUserIndex = findLastUserMessageIndex(messages);
218
- if (lastUserIndex >= 0) {
219
- // Check if this user message has any assistant responses after it
220
- const hasAssistantResponse = messages
221
- .slice(lastUserIndex + 1)
222
- .some((msg) => msg?.role === "assistant");
223
- // Only remove if there's no assistant response (truly incomplete)
224
- if (!hasAssistantResponse) {
225
- messagesToProcess = removeMessagesFromIndex(messages, lastUserIndex);
226
- }
227
- }
228
- // Step 2: Identify complete message exchanges
229
- const exchanges = identifyMessageExchanges(messagesToProcess);
230
- // Step 3: Categorize exchanges by outcome
231
- const exchangesWithOutcomes = exchanges.map((exchange) => ({
232
- ...exchange,
233
- outcome: determineExchangeOutcome(exchange, messages),
234
- }));
235
- // Step 4: Filter exchanges based on acceptance criteria
236
- const acceptedExchanges = exchangesWithOutcomes
237
- .filter((exchange) => exchange.outcome === "accepted")
238
- .slice(-maxAcceptedExchanges); // Take the most recent accepted exchanges
239
- let finalExchanges = acceptedExchanges;
240
- // Step 5: Optionally include the most recent exchange if it has unknown outcome
241
- // This covers the draft case where the user has not accepted or rejected the draft
242
- if (includeRecentUnknown && exchanges.length > 0) {
243
- const mostRecentExchange = exchangesWithOutcomes[exchangesWithOutcomes.length - 1];
244
- if (mostRecentExchange?.outcome === "unknown" &&
245
- !acceptedExchanges.includes(mostRecentExchange)) {
246
- finalExchanges = [...acceptedExchanges, mostRecentExchange];
247
- }
248
- }
249
- // Step 6: Sort by original order and process each exchange individually
250
- const sortedExchanges = finalExchanges.sort((a, b) => a.startIndex - b.startIndex);
251
- // Step 7: Process each exchange individually to maintain proper boundaries
252
- const processedMessages = [];
253
- for (const exchange of sortedExchanges) {
254
- const exchangeMessages = processSingleExchange(exchange);
255
- processedMessages.push(...exchangeMessages);
256
- }
257
- return processedMessages;
258
- }
259
23
  //# sourceMappingURL=extract-history.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"extract-history.js","sourceRoot":"","sources":["../../../src/ai-service/chat/extract-history.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extract-history.js","sourceRoot":"","sources":["../../../src/ai-service/chat/extract-history.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGjD;;GAEG;AACH,SAAS,wBAAwB,CAAC,QAAyB;IACzD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,SAAS,EAAE,CAAC,IAAI,CACd,6BAA6B,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,EAAE,CAClE,CAAC;QACF,IAAI,QAAQ,CAAC,CAAC,CAAE,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACjC,SAAS;QACX,CAAC;QACD,KAAK,EAAE,CAAC;QACR,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,QAAyB;IAEzB,MAAM,aAAa,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IACzD,OAAO,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAClE,CAAC"}
@@ -2,9 +2,10 @@ import { TracedEventEmitter } from "@superblocksteam/shared";
2
2
  import { ChatSessionStore } from "./chat/chat-session-store.js";
3
3
  import { AppContextStore } from "./context/app-context.js";
4
4
  import type { FileSystemManager } from "../file-system-manager.js";
5
- import type { AiServiceConfig, AiServiceEvents, EditorClient, UserChange, ApiUpdate } from "./types.ts";
6
5
  import type { SourceTracker } from "../source-tracker.js";
7
- import type { AiGenerateRequest, AiExplainCodeRequest, PromptContext, RuntimeErrorData } from "@superblocksteam/library-shared/types";
6
+ import type { JudgeEvaluationOptions, JudgeEvaluationResult } from "./judge/judge-service.js";
7
+ import type { AiServiceConfig, AiServiceEvents, EditorClient, UserChange, ApiUpdate } from "./types.ts";
8
+ import type { AiGenerateRequest, AiExplainCodeRequest, LLMProviderConfig, PromptContext, RuntimeErrorData } from "@superblocksteam/library-shared/types";
8
9
  export { AiServiceFeatureFlags } from "./features.js";
9
10
  export declare class AiService extends TracedEventEmitter<AiServiceEvents> {
10
11
  private readonly config;
@@ -25,6 +26,7 @@ export declare class AiService extends TracedEventEmitter<AiServiceEvents> {
25
26
  private readonly entityPermissionStore;
26
27
  private _onGenerationCompleteCallback;
27
28
  private tokenManagerJwt?;
29
+ private readonly mcpServerManager;
28
30
  get appContext(): AppContextStore;
29
31
  constructor(config: AiServiceConfig);
30
32
  /**
@@ -44,8 +46,8 @@ export declare class AiService extends TracedEventEmitter<AiServiceEvents> {
44
46
  handleAiGenerate(request: AiGenerateRequest, peer: EditorClient, peerId: string): Promise<void>;
45
47
  handleAiExplainCode(request: AiExplainCodeRequest, peer: EditorClient): Promise<void>;
46
48
  private submitAcceptanceEvaluation;
47
- handleUserAcceptedDraft(peer: EditorClient): Promise<void>;
48
- handleUserRejectedDraft(peer: EditorClient): Promise<void>;
49
+ handleUserAcceptedDraft(peer: EditorClient, silently?: boolean): Promise<void>;
50
+ handleUserRejectedDraft(peer: EditorClient, silently?: boolean): Promise<void>;
49
51
  handleUserCanceled(): Promise<void>;
50
52
  handleUserConnected(peer: EditorClient, peerId: string): void;
51
53
  handleUserDisconnected(peerId: string): void;
@@ -60,8 +62,28 @@ export declare class AiService extends TracedEventEmitter<AiServiceEvents> {
60
62
  jwt: string;
61
63
  promptContext?: PromptContext;
62
64
  }, peer: EditorClient): Promise<void>;
65
+ /**
66
+ * Handles judge evaluation requests.
67
+ *
68
+ * Evaluates an application against a prompt using the judge system.
69
+ * The evaluation is automatically stored to CSV for later analysis.
70
+ *
71
+ * @param request - Judge evaluation request
72
+ * @returns Evaluation result with scores and feedback
73
+ */
74
+ handleJudgeEvaluation(request: {
75
+ promptId: string;
76
+ prompt: string;
77
+ appId: string;
78
+ appUrl: string;
79
+ jwt: string;
80
+ llmConfig?: LLMProviderConfig;
81
+ options?: Partial<JudgeEvaluationOptions>;
82
+ storageStateData?: any;
83
+ }): Promise<JudgeEvaluationResult>;
63
84
  handleUserChange(change: UserChange): void;
64
85
  handleNewChat(): Promise<void>;
86
+ handleTruncateChatAfterTimestamp(sinceTimestamp: number): Promise<void>;
65
87
  handleApiUpdate(update: ApiUpdate): Promise<void>;
66
88
  isBusy(): boolean;
67
89
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai-service/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai-service/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AAgBjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAwC3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EACV,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAEV,eAAe,EACf,eAAe,EACf,YAAY,EACZ,UAAU,EACV,SAAS,EACV,MAAM,YAAY,CAAC;AAYpB,OAAO,KAAK,EACV,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAGjB,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAmBtD,qBAAa,SAAU,SAAQ,kBAAkB,CAAC,eAAe,CAAC;IAyBpD,OAAO,CAAC,QAAQ,CAAC,MAAM;IAxBnC,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,aAAa,CAAgB;IACrC,SAAgB,gBAAgB,EAAE,gBAAgB,CAAC;IACnD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoC;IACjE,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CACD;IACrC,OAAO,CAAC,6BAA6B,CAA2B;IAChE,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA6B;IAE9D,IAAW,UAAU,IAAI,eAAe,CAEvC;gBAE4B,MAAM,EAAE,eAAe;IAqIpD;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKjC;;;OAGG;IACG,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAK7C,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,4BAA4B;IAoGpC,OAAO,CAAC,MAAM;IAQd,OAAO,CAAC,6BAA6B;IAWxB,gBAAgB,CAC3B,OAAO,EAAE,iBAAiB,EAC1B,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC;IAuCH,mBAAmB,CAC9B,OAAO,EAAE,oBAAoB,EAC7B,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC;IA4NhB,OAAO,CAAC,0BAA0B;IAqBrB,uBAAuB,CAClC,IAAI,EAAE,YAAY,EAClB,QAAQ,CAAC,EAAE,OAAO,GACjB,OAAO,CAAC,IAAI,CAAC;IAkBH,uBAAuB,CAClC,IAAI,EAAE,YAAY,EAClB,QAAQ,CAAC,EAAE,OAAO,GACjB,OAAO,CAAC,IAAI,CAAC;IAqBH,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQzC,mBAAmB,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAuE7D,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAiBnD,OAAO,CAAC,mBAAmB;IAQpB,sBAAsB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAyB1C,kBAAkB,CAAC,SAAS,EAAE,gBAAgB;IAoB9C,uBAAuB,CAAC,EAAE,EAAE,MAAM;IAYlC,2BAA2B,IAAI,IAAI;IAUnC,4BAA4B,IAAI,IAAI;IAY9B,0BAA0B,CACrC,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,aAAa,CAAA;KAAE,EACvE,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC;IAQhB;;;;;;;;OAQG;IACU,qBAAqB,CAAC,OAAO,EAAE;QAC1C,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,SAAS,CAAC,EAAE,iBAAiB,CAAC;QAC9B,OAAO,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,CAAC;QAC1C,gBAAgB,CAAC,EAAE,GAAG,CAAC;KACxB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IA4H3B,gBAAgB,CAAC,MAAM,EAAE,UAAU;IAU7B,aAAa;IAYb,gCAAgC,CAAC,cAAc,EAAE,MAAM;IAuBvD,eAAe,CAAC,MAAM,EAAE,SAAS;IAkBvC,MAAM,IAAI,OAAO;IAQxB;;;;OAIG;IACI,YAAY,IAAI,OAAO;IAS9B;;;;;;OAMG;IACU,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC;IAYzD;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAQpB,gCAAgC,IAAI,OAAO,CAAC,OAAO,CAAC;IAY1D,gBAAgB,CAAC,aAAa,EAAE,aAAa,GAAG,SAAS;IAQzD,oBAAoB,CAAC,iBAAiB,EAAE,iBAAiB;IAMhE,OAAO,CAAC,sBAAsB;CAoC/B"}