funolio-agent 1.0.53 → 1.1.65

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 (276) hide show
  1. package/dist/approval.d.ts +1 -6
  2. package/dist/approval.d.ts.map +1 -1
  3. package/dist/approval.js +2 -7
  4. package/dist/approval.js.map +1 -1
  5. package/dist/auth/credential-reader.d.ts.map +1 -1
  6. package/dist/auth/credential-reader.js +4 -3
  7. package/dist/auth/credential-reader.js.map +1 -1
  8. package/dist/auth/token-refresh.d.ts +8 -0
  9. package/dist/auth/token-refresh.d.ts.map +1 -1
  10. package/dist/auth/token-refresh.js +82 -52
  11. package/dist/auth/token-refresh.js.map +1 -1
  12. package/dist/auto-organizer.d.ts.map +1 -1
  13. package/dist/auto-organizer.js +6 -7
  14. package/dist/auto-organizer.js.map +1 -1
  15. package/dist/bench-prefix.d.ts +16 -0
  16. package/dist/bench-prefix.d.ts.map +1 -0
  17. package/dist/bench-prefix.js +25 -0
  18. package/dist/bench-prefix.js.map +1 -0
  19. package/dist/bot-manager.d.ts +5 -1
  20. package/dist/bot-manager.d.ts.map +1 -1
  21. package/dist/bot-manager.js +46 -27
  22. package/dist/bot-manager.js.map +1 -1
  23. package/dist/chat-sync.d.ts +42 -0
  24. package/dist/chat-sync.d.ts.map +1 -0
  25. package/dist/chat-sync.js +95 -0
  26. package/dist/chat-sync.js.map +1 -0
  27. package/dist/clerk-model.d.ts +7 -0
  28. package/dist/clerk-model.d.ts.map +1 -1
  29. package/dist/clerk-model.js +42 -8
  30. package/dist/clerk-model.js.map +1 -1
  31. package/dist/cli-bootstrap-history.d.ts +10 -0
  32. package/dist/cli-bootstrap-history.d.ts.map +1 -0
  33. package/dist/cli-bootstrap-history.js +112 -0
  34. package/dist/cli-bootstrap-history.js.map +1 -0
  35. package/dist/cli-models.d.ts +8 -0
  36. package/dist/cli-models.d.ts.map +1 -0
  37. package/dist/cli-models.js +91 -0
  38. package/dist/cli-models.js.map +1 -0
  39. package/dist/cli-session-epoch.d.ts +13 -3
  40. package/dist/cli-session-epoch.d.ts.map +1 -1
  41. package/dist/cli-session-epoch.js +53 -4
  42. package/dist/cli-session-epoch.js.map +1 -1
  43. package/dist/cli-session-registry.d.ts +35 -0
  44. package/dist/cli-session-registry.d.ts.map +1 -0
  45. package/dist/cli-session-registry.js +177 -0
  46. package/dist/cli-session-registry.js.map +1 -0
  47. package/dist/cli.js +62 -0
  48. package/dist/cli.js.map +1 -1
  49. package/dist/codex-app-server-manager.d.ts +189 -0
  50. package/dist/codex-app-server-manager.d.ts.map +1 -0
  51. package/dist/codex-app-server-manager.js +1468 -0
  52. package/dist/codex-app-server-manager.js.map +1 -0
  53. package/dist/commands/init.d.ts.map +1 -1
  54. package/dist/commands/init.js +8 -30
  55. package/dist/commands/init.js.map +1 -1
  56. package/dist/commands/pool.d.ts +32 -0
  57. package/dist/commands/pool.d.ts.map +1 -1
  58. package/dist/commands/pool.js +145 -66
  59. package/dist/commands/pool.js.map +1 -1
  60. package/dist/commands/setup.d.ts +4 -1
  61. package/dist/commands/setup.d.ts.map +1 -1
  62. package/dist/commands/setup.js +9 -25
  63. package/dist/commands/setup.js.map +1 -1
  64. package/dist/commands/start.d.ts +21 -0
  65. package/dist/commands/start.d.ts.map +1 -1
  66. package/dist/commands/start.js +559 -63
  67. package/dist/commands/start.js.map +1 -1
  68. package/dist/commands/status.d.ts.map +1 -1
  69. package/dist/commands/status.js +5 -2
  70. package/dist/commands/status.js.map +1 -1
  71. package/dist/completion-marker.d.ts +7 -0
  72. package/dist/completion-marker.d.ts.map +1 -0
  73. package/dist/completion-marker.js +28 -0
  74. package/dist/completion-marker.js.map +1 -0
  75. package/dist/config.d.ts +7 -2
  76. package/dist/config.d.ts.map +1 -1
  77. package/dist/config.js +184 -60
  78. package/dist/config.js.map +1 -1
  79. package/dist/context-window.d.ts +37 -1
  80. package/dist/context-window.d.ts.map +1 -1
  81. package/dist/context-window.js +210 -17
  82. package/dist/context-window.js.map +1 -1
  83. package/dist/live-activity.d.ts +31 -0
  84. package/dist/live-activity.d.ts.map +1 -0
  85. package/dist/live-activity.js +36 -0
  86. package/dist/live-activity.js.map +1 -0
  87. package/dist/local-chat-execution.d.ts +114 -0
  88. package/dist/local-chat-execution.d.ts.map +1 -0
  89. package/dist/local-chat-execution.js +349 -0
  90. package/dist/local-chat-execution.js.map +1 -0
  91. package/dist/local-cli-pty-manager.d.ts +186 -0
  92. package/dist/local-cli-pty-manager.d.ts.map +1 -1
  93. package/dist/local-cli-pty-manager.js +2581 -164
  94. package/dist/local-cli-pty-manager.js.map +1 -1
  95. package/dist/local-conversation-gateway.d.ts +110 -0
  96. package/dist/local-conversation-gateway.d.ts.map +1 -0
  97. package/dist/local-conversation-gateway.js +175 -0
  98. package/dist/local-conversation-gateway.js.map +1 -0
  99. package/dist/local-data.d.ts +276 -5
  100. package/dist/local-data.d.ts.map +1 -1
  101. package/dist/local-data.js +1201 -86
  102. package/dist/local-data.js.map +1 -1
  103. package/dist/local-db.d.ts +6 -0
  104. package/dist/local-db.d.ts.map +1 -1
  105. package/dist/local-db.js +428 -2
  106. package/dist/local-db.js.map +1 -1
  107. package/dist/local-funnel.d.ts.map +1 -1
  108. package/dist/local-funnel.js +6 -5
  109. package/dist/local-funnel.js.map +1 -1
  110. package/dist/local-server.d.ts +55 -0
  111. package/dist/local-server.d.ts.map +1 -1
  112. package/dist/local-server.js +3281 -441
  113. package/dist/local-server.js.map +1 -1
  114. package/dist/managed-process-registry.d.ts +59 -0
  115. package/dist/managed-process-registry.d.ts.map +1 -0
  116. package/dist/managed-process-registry.js +390 -0
  117. package/dist/managed-process-registry.js.map +1 -0
  118. package/dist/mcp/claude-config-writer.d.ts +5 -5
  119. package/dist/mcp/claude-config-writer.d.ts.map +1 -1
  120. package/dist/mcp/claude-config-writer.js +19 -11
  121. package/dist/mcp/claude-config-writer.js.map +1 -1
  122. package/dist/mcp/index.d.ts +4 -2
  123. package/dist/mcp/index.d.ts.map +1 -1
  124. package/dist/mcp/index.js.map +1 -1
  125. package/dist/mcp/sync-cli-config.d.ts +42 -4
  126. package/dist/mcp/sync-cli-config.d.ts.map +1 -1
  127. package/dist/mcp/sync-cli-config.js +497 -17
  128. package/dist/mcp/sync-cli-config.js.map +1 -1
  129. package/dist/message-loop.d.ts +6 -0
  130. package/dist/message-loop.d.ts.map +1 -1
  131. package/dist/message-loop.js +281 -89
  132. package/dist/message-loop.js.map +1 -1
  133. package/dist/mqtt-client.d.ts +44 -1
  134. package/dist/mqtt-client.d.ts.map +1 -1
  135. package/dist/mqtt-client.js +284 -46
  136. package/dist/mqtt-client.js.map +1 -1
  137. package/dist/mqtt-data-relay.d.ts +44 -0
  138. package/dist/mqtt-data-relay.d.ts.map +1 -0
  139. package/dist/mqtt-data-relay.js +106 -0
  140. package/dist/mqtt-data-relay.js.map +1 -0
  141. package/dist/oauth.d.ts.map +1 -1
  142. package/dist/oauth.js +69 -29
  143. package/dist/oauth.js.map +1 -1
  144. package/dist/orchestration/capabilities.d.ts +13 -0
  145. package/dist/orchestration/capabilities.d.ts.map +1 -0
  146. package/dist/orchestration/capabilities.js +152 -0
  147. package/dist/orchestration/capabilities.js.map +1 -0
  148. package/dist/orchestration/dispatch-executor.d.ts +83 -0
  149. package/dist/orchestration/dispatch-executor.d.ts.map +1 -0
  150. package/dist/orchestration/dispatch-executor.js +266 -0
  151. package/dist/orchestration/dispatch-executor.js.map +1 -0
  152. package/dist/orchestration/dispatch-hint.d.ts +134 -0
  153. package/dist/orchestration/dispatch-hint.d.ts.map +1 -0
  154. package/dist/orchestration/dispatch-hint.js +247 -0
  155. package/dist/orchestration/dispatch-hint.js.map +1 -0
  156. package/dist/orchestration/dispatch-runner.d.ts +106 -0
  157. package/dist/orchestration/dispatch-runner.d.ts.map +1 -0
  158. package/dist/orchestration/dispatch-runner.js +604 -0
  159. package/dist/orchestration/dispatch-runner.js.map +1 -0
  160. package/dist/orchestration/dispatch-tools.d.ts +167 -0
  161. package/dist/orchestration/dispatch-tools.d.ts.map +1 -0
  162. package/dist/orchestration/dispatch-tools.js +328 -0
  163. package/dist/orchestration/dispatch-tools.js.map +1 -0
  164. package/dist/orchestration/front-door-policy.d.ts +35 -10
  165. package/dist/orchestration/front-door-policy.d.ts.map +1 -1
  166. package/dist/orchestration/front-door-policy.js +30 -267
  167. package/dist/orchestration/front-door-policy.js.map +1 -1
  168. package/dist/orchestration/orchestrator-dispatch-prompt.d.ts +43 -0
  169. package/dist/orchestration/orchestrator-dispatch-prompt.d.ts.map +1 -0
  170. package/dist/orchestration/orchestrator-dispatch-prompt.js +267 -0
  171. package/dist/orchestration/orchestrator-dispatch-prompt.js.map +1 -0
  172. package/dist/orchestration/orchestrator-operating-prompt.d.ts +15 -0
  173. package/dist/orchestration/orchestrator-operating-prompt.d.ts.map +1 -1
  174. package/dist/orchestration/orchestrator-operating-prompt.js +206 -20
  175. package/dist/orchestration/orchestrator-operating-prompt.js.map +1 -1
  176. package/dist/orchestration/plan-import.d.ts +39 -0
  177. package/dist/orchestration/plan-import.d.ts.map +1 -0
  178. package/dist/orchestration/plan-import.js +547 -0
  179. package/dist/orchestration/plan-import.js.map +1 -0
  180. package/dist/orchestration/validation.d.ts +40 -0
  181. package/dist/orchestration/validation.d.ts.map +1 -0
  182. package/dist/orchestration/validation.js +203 -0
  183. package/dist/orchestration/validation.js.map +1 -0
  184. package/dist/orchestration/worker-operating-prompt.d.ts +2 -0
  185. package/dist/orchestration/worker-operating-prompt.d.ts.map +1 -1
  186. package/dist/orchestration/worker-operating-prompt.js +36 -46
  187. package/dist/orchestration/worker-operating-prompt.js.map +1 -1
  188. package/dist/orchestrator.d.ts +214 -33
  189. package/dist/orchestrator.d.ts.map +1 -1
  190. package/dist/orchestrator.js +2200 -1100
  191. package/dist/orchestrator.js.map +1 -1
  192. package/dist/providers/anthropic.d.ts.map +1 -1
  193. package/dist/providers/anthropic.js +8 -4
  194. package/dist/providers/anthropic.js.map +1 -1
  195. package/dist/providers/claude-cli-prompt.d.ts.map +1 -1
  196. package/dist/providers/claude-cli-prompt.js +49 -5
  197. package/dist/providers/claude-cli-prompt.js.map +1 -1
  198. package/dist/providers/claude-cli.d.ts.map +1 -1
  199. package/dist/providers/claude-cli.js +81 -5
  200. package/dist/providers/claude-cli.js.map +1 -1
  201. package/dist/providers/codex-cli.d.ts +10 -6
  202. package/dist/providers/codex-cli.d.ts.map +1 -1
  203. package/dist/providers/codex-cli.js +204 -26
  204. package/dist/providers/codex-cli.js.map +1 -1
  205. package/dist/providers/google.d.ts.map +1 -1
  206. package/dist/providers/google.js +15 -5
  207. package/dist/providers/google.js.map +1 -1
  208. package/dist/providers/index.d.ts +15 -1
  209. package/dist/providers/index.d.ts.map +1 -1
  210. package/dist/providers/index.js.map +1 -1
  211. package/dist/providers/openai.d.ts +1 -1
  212. package/dist/providers/openai.d.ts.map +1 -1
  213. package/dist/providers/openai.js +13 -5
  214. package/dist/providers/openai.js.map +1 -1
  215. package/dist/response-guard.js +1 -1
  216. package/dist/response-guard.js.map +1 -1
  217. package/dist/server-adapter.d.ts +8 -0
  218. package/dist/server-adapter.d.ts.map +1 -1
  219. package/dist/server-adapter.js +7 -0
  220. package/dist/server-adapter.js.map +1 -1
  221. package/dist/service-mode.d.ts +1 -1
  222. package/dist/service-mode.d.ts.map +1 -1
  223. package/dist/service-mode.js +64 -1
  224. package/dist/service-mode.js.map +1 -1
  225. package/dist/service-setup-only.d.ts +8 -0
  226. package/dist/service-setup-only.d.ts.map +1 -0
  227. package/dist/service-setup-only.js +37 -0
  228. package/dist/service-setup-only.js.map +1 -0
  229. package/dist/slash-commands.d.ts +21 -0
  230. package/dist/slash-commands.d.ts.map +1 -0
  231. package/dist/slash-commands.js +99 -0
  232. package/dist/slash-commands.js.map +1 -0
  233. package/dist/subagent/index.d.ts +4 -2
  234. package/dist/subagent/index.d.ts.map +1 -1
  235. package/dist/subagent/index.js.map +1 -1
  236. package/dist/summarization-pipeline.d.ts.map +1 -1
  237. package/dist/summarization-pipeline.js +1 -9
  238. package/dist/summarization-pipeline.js.map +1 -1
  239. package/dist/token-counter.d.ts.map +1 -1
  240. package/dist/token-counter.js +11 -4
  241. package/dist/token-counter.js.map +1 -1
  242. package/dist/tool-filter.d.ts.map +1 -1
  243. package/dist/tool-filter.js +10 -6
  244. package/dist/tool-filter.js.map +1 -1
  245. package/dist/tools/admin-tools.d.ts.map +1 -1
  246. package/dist/tools/admin-tools.js +20 -5
  247. package/dist/tools/admin-tools.js.map +1 -1
  248. package/dist/tools/index.d.ts.map +1 -1
  249. package/dist/tools/index.js +2 -1
  250. package/dist/tools/index.js.map +1 -1
  251. package/dist/tools/run-command.d.ts.map +1 -1
  252. package/dist/tools/run-command.js +5 -1
  253. package/dist/tools/run-command.js.map +1 -1
  254. package/dist/tools/search-conversation-history.d.ts +16 -0
  255. package/dist/tools/search-conversation-history.d.ts.map +1 -0
  256. package/dist/tools/search-conversation-history.js +334 -0
  257. package/dist/tools/search-conversation-history.js.map +1 -0
  258. package/dist/tools/todo-tasks.d.ts.map +1 -1
  259. package/dist/tools/todo-tasks.js +77 -5
  260. package/dist/tools/todo-tasks.js.map +1 -1
  261. package/dist/usage-log.d.ts +62 -0
  262. package/dist/usage-log.d.ts.map +1 -0
  263. package/dist/usage-log.js +98 -0
  264. package/dist/usage-log.js.map +1 -0
  265. package/dist/wizard-state.d.ts +20 -0
  266. package/dist/wizard-state.d.ts.map +1 -1
  267. package/dist/wizard-state.js +90 -3
  268. package/dist/wizard-state.js.map +1 -1
  269. package/dist/wizard-support.d.ts.map +1 -1
  270. package/dist/wizard-support.js +27 -1
  271. package/dist/wizard-support.js.map +1 -1
  272. package/dist/workflow-engine.d.ts +44 -2
  273. package/dist/workflow-engine.d.ts.map +1 -1
  274. package/dist/workflow-engine.js +932 -111
  275. package/dist/workflow-engine.js.map +1 -1
  276. package/package.json +2 -2
@@ -49,7 +49,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
49
49
  exports.countTurns = countTurns;
50
50
  exports.parseTurns = parseTurns;
51
51
  exports.getRecentTurns = getRecentTurns;
52
+ exports.getBotScopedRecentTurns = getBotScopedRecentTurns;
52
53
  exports.getPromptContextWindow = getPromptContextWindow;
54
+ exports.findLastCompletedCrossBotTurn = findLastCompletedCrossBotTurn;
55
+ exports.formatCrossBotPreviousTurn = formatCrossBotPreviousTurn;
53
56
  exports.formatTurnsForPrompt = formatTurnsForPrompt;
54
57
  exports.shouldSummarize = shouldSummarize;
55
58
  exports.getTurnsForSummarization = getTurnsForSummarization;
@@ -103,49 +106,239 @@ function parseTurns(messages) {
103
106
  * Get the last N turns for a conversation.
104
107
  */
105
108
  function getRecentTurns(conversationId, count = 5) {
106
- const messages = data.getMessages(conversationId, { limit: 10000 });
109
+ const activeAssistantMessageIds = new Set(data.listActiveAssistantMessageIds(conversationId));
110
+ const messages = data.getMessages(conversationId, { limit: 10000 }).filter((msg) => {
111
+ if (msg.role !== 'assistant')
112
+ return true;
113
+ if (!msg.id)
114
+ return true;
115
+ return !activeAssistantMessageIds.has(msg.id);
116
+ });
107
117
  const turns = parseTurns(messages);
108
118
  return turns.slice(-count);
109
119
  }
120
+ function getCompletedAssistantResponses(turn) {
121
+ return turn.responses.filter((response) => {
122
+ if (response.role !== 'assistant')
123
+ return false;
124
+ return !!String(response.content || '').trim();
125
+ });
126
+ }
127
+ function normalizeCompletedTurn(turn) {
128
+ const completedResponses = getCompletedAssistantResponses(turn);
129
+ if (completedResponses.length === 0)
130
+ return null;
131
+ return {
132
+ ...turn,
133
+ responses: completedResponses,
134
+ };
135
+ }
136
+ function getCompletedTurns(turns) {
137
+ const completed = [];
138
+ for (const turn of turns) {
139
+ const normalized = normalizeCompletedTurn(turn);
140
+ if (normalized)
141
+ completed.push(normalized);
142
+ }
143
+ return completed;
144
+ }
145
+ function matchesBotScope(message, botId, botName) {
146
+ const normalizedBotId = String(botId || '').trim();
147
+ const normalizedBotName = String(botName || '').trim().toLowerCase();
148
+ if (normalizedBotId && message.bot_id === normalizedBotId)
149
+ return true;
150
+ if (normalizedBotName && String(message.agent_name || '').trim().toLowerCase() === normalizedBotName)
151
+ return true;
152
+ return false;
153
+ }
154
+ function filterTurnsForBotScope(turns, opts) {
155
+ const normalizedBotId = String(opts?.botId || '').trim();
156
+ const normalizedBotName = String(opts?.botName || '').trim().toLowerCase();
157
+ if (!normalizedBotId && !normalizedBotName)
158
+ return turns;
159
+ const filtered = [];
160
+ for (const turn of turns) {
161
+ const responses = turn.responses.filter((response) => {
162
+ if (response.role !== 'assistant')
163
+ return false;
164
+ return matchesBotScope(response, normalizedBotId, normalizedBotName);
165
+ });
166
+ if (responses.length === 0)
167
+ continue;
168
+ filtered.push({
169
+ ...turn,
170
+ responses,
171
+ });
172
+ }
173
+ return filtered;
174
+ }
175
+ function isConversationSafeForBotScopedSummary(conversationId, botId, botName) {
176
+ const normalizedBotId = String(botId || '').trim();
177
+ const normalizedBotName = String(botName || '').trim().toLowerCase();
178
+ if (!normalizedBotId && !normalizedBotName)
179
+ return true;
180
+ const messages = data.getMessages(conversationId, { limit: 10000 });
181
+ let sawAssistant = false;
182
+ for (const message of messages) {
183
+ if (message.role !== 'assistant')
184
+ continue;
185
+ sawAssistant = true;
186
+ if (!matchesBotScope(message, normalizedBotId, normalizedBotName))
187
+ return false;
188
+ }
189
+ return sawAssistant;
190
+ }
191
+ function getBotScopedRecentTurns(conversationId, botId, botName, count = 5) {
192
+ const activeAssistantMessageIds = new Set(data.listActiveAssistantMessageIds(conversationId));
193
+ const messages = data.getMessages(conversationId, { limit: 10000 }).filter((msg) => {
194
+ if (msg.role !== 'assistant')
195
+ return true;
196
+ if (!msg.id)
197
+ return true;
198
+ return !activeAssistantMessageIds.has(msg.id);
199
+ });
200
+ const turns = parseTurns(messages);
201
+ return filterTurnsForBotScope(turns, { botId, botName }).slice(-count);
202
+ }
110
203
  /**
111
204
  * Build the prompt context window for a conversation.
112
205
  * If the conversation is a fresh manual continuation under the same topic,
113
206
  * carry forward the latest summary + recent turns from the prior topic conversation.
114
207
  */
115
- function getPromptContextWindow(conversationId, count = 5) {
116
- const currentSummary = getLatestRollingSummary(conversationId);
117
- const currentTurns = getRecentTurns(conversationId, count);
118
- const currentConversation = data.getConversation(conversationId);
119
- const currentMessageCount = currentConversation?.message_count ?? 0;
120
- if (!currentSummary && currentMessageCount <= 1) {
121
- const previousConversation = data.getPreviousConversationInTopic(conversationId);
122
- if (previousConversation) {
123
- const previousSummary = getLatestRollingSummary(previousConversation.id);
124
- const previousTurns = getRecentTurns(previousConversation.id, count);
125
- if (previousSummary || previousTurns.length > 0) {
208
+ function getPromptContextWindow(conversationId, count = 5, opts) {
209
+ // Only carry forward from a previous conversation when this one is still
210
+ // brand-new. A first conversation in a topic still needs its own current
211
+ // rolling summary/recent turns after it has real history.
212
+ const previousConversationInTopic = data.getPreviousConversationInTopic(conversationId);
213
+ const currentSummary = opts?.botId
214
+ ? (isConversationSafeForBotScopedSummary(conversationId, opts.botId, opts.botName)
215
+ ? getLatestRollingSummary(conversationId)
216
+ : null)
217
+ : getLatestRollingSummary(conversationId);
218
+ const currentTurns = opts?.botId
219
+ ? getBotScopedRecentTurns(conversationId, opts.botId, opts.botName, count)
220
+ : getRecentTurns(conversationId, count);
221
+ const currentCompletedTurns = getCompletedTurns(currentTurns);
222
+ const normalizedTargetBotId = String(opts?.targetBotId || opts?.botId || '').trim();
223
+ const normalizedTargetBotName = String(opts?.targetBotName || opts?.botName || '').trim().toLowerCase();
224
+ if (!currentSummary && currentCompletedTurns.length === 0) {
225
+ if (previousConversationInTopic) {
226
+ const previousSummary = opts?.botId
227
+ ? (isConversationSafeForBotScopedSummary(previousConversationInTopic.id, opts.botId, opts.botName)
228
+ ? getLatestRollingSummary(previousConversationInTopic.id)
229
+ : null)
230
+ : getLatestRollingSummary(previousConversationInTopic.id);
231
+ const previousTurns = opts?.botId
232
+ ? getBotScopedRecentTurns(previousConversationInTopic.id, opts.botId, opts.botName, count)
233
+ : getRecentTurns(previousConversationInTopic.id, count);
234
+ const previousCompletedTurns = getCompletedTurns(previousTurns);
235
+ if (previousSummary || previousCompletedTurns.length > 0) {
126
236
  return {
127
237
  summary: previousSummary,
128
- turns: previousTurns,
129
- sourceConversationId: previousConversation.id,
238
+ turns: previousCompletedTurns,
239
+ sourceConversationId: previousConversationInTopic.id,
130
240
  carriedForward: true,
241
+ mode: 'same_topic_continuation',
242
+ allowBootstrap: true,
243
+ lastCrossBotTurn: findLastCompletedCrossBotTurnInTurns(previousCompletedTurns, normalizedTargetBotId, normalizedTargetBotName),
131
244
  };
132
245
  }
133
246
  }
247
+ // A brand-new topic/conversation should not echo its first user turn back
248
+ // as synthetic prompt history. In that case, start with no summary/turns.
249
+ return {
250
+ summary: null,
251
+ turns: [],
252
+ sourceConversationId: conversationId,
253
+ carriedForward: false,
254
+ mode: 'new_topic',
255
+ allowBootstrap: false,
256
+ lastCrossBotTurn: null,
257
+ };
134
258
  }
135
259
  return {
136
260
  summary: currentSummary,
137
- turns: currentTurns,
261
+ turns: currentCompletedTurns,
138
262
  sourceConversationId: conversationId,
139
263
  carriedForward: false,
264
+ mode: 'current_conversation',
265
+ allowBootstrap: !!currentSummary?.summary_text?.trim() || currentCompletedTurns.length > 0,
266
+ lastCrossBotTurn: findLastCompletedCrossBotTurnInTurns(currentCompletedTurns, normalizedTargetBotId, normalizedTargetBotName),
140
267
  };
141
268
  }
269
+ function findLastCompletedCrossBotTurnInTurns(turns, targetBotId, targetBotName) {
270
+ const normalizedTargetBotId = String(targetBotId || '').trim();
271
+ const normalizedTargetBotName = String(targetBotName || '').trim().toLowerCase();
272
+ if (!normalizedTargetBotId && !normalizedTargetBotName)
273
+ return null;
274
+ if (turns.length === 0)
275
+ return null;
276
+ // The handoff unit is the immediately previous completed user-prompt
277
+ // window, not an arbitrary older turn and not just the final assistant
278
+ // message inside that turn.
279
+ const previousCompletedTurn = turns[turns.length - 1];
280
+ const hasDifferentBot = previousCompletedTurn.responses.some((response) => {
281
+ if (response.role !== 'assistant')
282
+ return false;
283
+ const respBotId = String(response.bot_id || '').trim();
284
+ const respBotName = String(response.agent_name || '').trim().toLowerCase();
285
+ if (normalizedTargetBotId && respBotId)
286
+ return respBotId !== normalizedTargetBotId;
287
+ if (normalizedTargetBotName && respBotName)
288
+ return respBotName !== normalizedTargetBotName;
289
+ return false;
290
+ });
291
+ return hasDifferentBot ? previousCompletedTurn : null;
292
+ }
293
+ /**
294
+ * Find the last completed turn in the conversation that contains at least one
295
+ * assistant response from a bot other than the target.
296
+ *
297
+ * "Completed" means the turn has at least one finished assistant response
298
+ * (still-streaming rows are filtered out by getRecentTurns via
299
+ * listActiveAssistantMessageIds). Since the caller's new user message has
300
+ * already been saved by the time this runs, the most recent turn in parse
301
+ * order will typically have no completed responses yet — we walk backward
302
+ * to find the most recent one that does, then check its responders.
303
+ *
304
+ * Returns the turn when the trigger condition is met; null otherwise.
305
+ */
306
+ function findLastCompletedCrossBotTurn(conversationId, targetBotId) {
307
+ const normalizedTargetBotId = String(targetBotId || '').trim();
308
+ if (!normalizedTargetBotId)
309
+ return null;
310
+ return getPromptContextWindow(conversationId, 10, { targetBotId: normalizedTargetBotId }).lastCrossBotTurn || null;
311
+ }
312
+ /**
313
+ * Format a single turn for cross-bot context injection into a user prompt.
314
+ * Wraps the turn with [Previous turn from another bot - for context only]
315
+ * and [End previous turn] markers so the receiving bot knows what it is.
316
+ */
317
+ function formatCrossBotPreviousTurn(turn) {
318
+ const lines = [];
319
+ lines.push('[Previous turn from another bot - for context only]');
320
+ const userContent = String(turn.userMessage.content || '').trim();
321
+ lines.push(`USER: ${userContent}`);
322
+ for (const response of turn.responses) {
323
+ if (response.role !== 'assistant')
324
+ continue;
325
+ const content = String(response.content || '').trim();
326
+ if (!content)
327
+ continue;
328
+ const name = String(response.agent_name || 'ASSISTANT').toUpperCase();
329
+ lines.push(`${name}: ${content}`);
330
+ }
331
+ lines.push('[End previous turn]');
332
+ return lines.join('\n');
333
+ }
142
334
  /**
143
335
  * Format turns as text for inclusion in prompts.
144
336
  */
145
337
  function formatTurnsForPrompt(turns) {
146
- if (turns.length === 0)
338
+ const completedTurns = getCompletedTurns(turns);
339
+ if (completedTurns.length === 0)
147
340
  return '(no recent messages)';
148
- return turns.map(turn => {
341
+ return completedTurns.map(turn => {
149
342
  const lines = [];
150
343
  lines.push(`USER: ${turn.userMessage.content}`);
151
344
  for (const resp of turn.responses) {
@@ -1 +1 @@
1
- {"version":3,"file":"context-window.js","sourceRoot":"","sources":["../src/context-window.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context-window.js","sourceRoot":"","sources":["../src/context-window.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Live Activity Event Model
3
+ *
4
+ * Normalized event types emitted during an assistant turn.
5
+ * These drive the curated live activity lane in the chat UI,
6
+ * separate from the main reply body text.
7
+ */
8
+ export type LiveActivityType = 'current_task' | 'subagent_started' | 'subagent_working' | 'working' | 'completed' | 'tool_call' | 'tool_result';
9
+ export interface LiveActivityEvent {
10
+ type: LiveActivityType;
11
+ /** Short user-facing label */
12
+ label: string;
13
+ /** Optional longer description (e.g., sub-agent prompt) */
14
+ detail?: string;
15
+ /** Unique key for update-in-place (e.g., child file path or tool_use ID) */
16
+ key?: string;
17
+ /** Timestamp */
18
+ timestamp: number;
19
+ /** For tool_result activities: did the tool fail? */
20
+ isError?: boolean;
21
+ }
22
+ /**
23
+ * Map a tool_use name to a user-friendly activity label.
24
+ * Returns null if the tool should not be surfaced in the activity lane.
25
+ */
26
+ export declare function toolUseToActivityLabel(toolName: string): string | null;
27
+ /**
28
+ * Extract a short user-facing label from an Agent tool_use input.
29
+ */
30
+ export declare function agentToolUseToLabel(input: Record<string, any>): string;
31
+ //# sourceMappingURL=live-activity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-activity.d.ts","sourceRoot":"","sources":["../src/live-activity.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,gBAAgB,GACxB,cAAc,GACd,kBAAkB,GAClB,kBAAkB,GAClB,SAAS,GACT,WAAW,GACX,WAAW,GACX,aAAa,CAAC;AAElB,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,gBAAgB,CAAC;IACvB,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gBAAgB;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOtE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAMtE"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ /**
3
+ * Live Activity Event Model
4
+ *
5
+ * Normalized event types emitted during an assistant turn.
6
+ * These drive the curated live activity lane in the chat UI,
7
+ * separate from the main reply body text.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.toolUseToActivityLabel = toolUseToActivityLabel;
11
+ exports.agentToolUseToLabel = agentToolUseToLabel;
12
+ /**
13
+ * Map a tool_use name to a user-friendly activity label.
14
+ * Returns null if the tool should not be surfaced in the activity lane.
15
+ */
16
+ function toolUseToActivityLabel(toolName) {
17
+ switch (toolName) {
18
+ case 'Agent':
19
+ return null; // Handled separately as subagent_started when explicitly surfaced.
20
+ default:
21
+ return null;
22
+ }
23
+ }
24
+ /**
25
+ * Extract a short user-facing label from an Agent tool_use input.
26
+ */
27
+ function agentToolUseToLabel(input) {
28
+ const description = input?.description || input?.task || '';
29
+ if (description)
30
+ return String(description).slice(0, 120);
31
+ const subagentType = input?.subagent_type || '';
32
+ if (subagentType)
33
+ return `${subagentType} agent`;
34
+ return 'Working on subtask';
35
+ }
36
+ //# sourceMappingURL=live-activity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-activity.js","sourceRoot":"","sources":["../src/live-activity.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AA6BH,wDAOC;AAKD,kDAMC;AAtBD;;;GAGG;AACH,SAAgB,sBAAsB,CAAC,QAAgB;IACrD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,OAAO;YACV,OAAO,IAAI,CAAC,CAAC,mEAAmE;QAClF;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CAAC,KAA0B;IAC5D,MAAM,WAAW,GAAG,KAAK,EAAE,WAAW,IAAI,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC;IAC5D,IAAI,WAAW;QAAE,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAG,KAAK,EAAE,aAAa,IAAI,EAAE,CAAC;IAChD,IAAI,YAAY;QAAE,OAAO,GAAG,YAAY,QAAQ,CAAC;IACjD,OAAO,oBAAoB,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,114 @@
1
+ import * as data from './local-data';
2
+ export type JobStatus = 'pending' | 'queued' | 'running' | 'completed' | 'failed' | 'cancelled';
3
+ export interface ChatAttachment {
4
+ id?: string;
5
+ filename?: string;
6
+ fileType?: string;
7
+ mimeType?: string;
8
+ sizeBytes?: number;
9
+ dataUrl?: string;
10
+ storagePath?: string;
11
+ }
12
+ export interface CreateJobParams {
13
+ message: string;
14
+ conversationId?: string;
15
+ botId?: string;
16
+ botIds?: string[];
17
+ projectId?: string;
18
+ topicId?: string;
19
+ model?: string;
20
+ temperature?: number;
21
+ max_tokens?: number;
22
+ attachments?: ChatAttachment[];
23
+ pinnedMessageIds?: string[];
24
+ orchestrate?: boolean;
25
+ orchestrationEnabled?: boolean;
26
+ }
27
+ export interface CreateJobResultJob {
28
+ id: string;
29
+ botId: string;
30
+ status: JobStatus;
31
+ }
32
+ export interface CreateJobResult {
33
+ conversationId: string;
34
+ jobs: CreateJobResultJob[];
35
+ }
36
+ export interface ListJobsEntry {
37
+ id: string;
38
+ botId: string;
39
+ status: JobStatus;
40
+ output?: unknown;
41
+ error?: string | null;
42
+ createdAt?: string | Date;
43
+ completedAt?: string | Date | null;
44
+ }
45
+ export interface ListJobsResult {
46
+ jobs: ListJobsEntry[];
47
+ }
48
+ export type ChatJobEventType = 'token' | 'text' | 'chunk' | 'tool_call' | 'tool_result' | 'tool_results' | 'error' | 'done' | 'cancelled' | 'status' | 'metadata' | 'stats' | 'usage' | 'orchestrator_plan' | 'orchestrator_status' | 'orchestrator_synthesis' | 'orchestrator_cancelled' | 'bot_result' | 'worker_step_started' | 'worker_step_progress' | 'worker_step_result' | 'worker_step_failed' | 'quick_delegation';
49
+ export interface ChatJobEvent {
50
+ type: ChatJobEventType;
51
+ rawType?: string;
52
+ data?: unknown;
53
+ seq?: number;
54
+ streamId?: string;
55
+ executionId?: string;
56
+ ts?: string;
57
+ timestamp?: number;
58
+ [key: string]: unknown;
59
+ }
60
+ export interface GetJobStatusResult {
61
+ id: string;
62
+ botId: string;
63
+ conversationId: string;
64
+ status: JobStatus;
65
+ output?: unknown;
66
+ error?: string | null;
67
+ createdAt?: string | Date;
68
+ startedAt?: string | Date | null;
69
+ completedAt?: string | Date | null;
70
+ liveEvents?: number;
71
+ liveDone?: boolean;
72
+ }
73
+ export interface CancelResult {
74
+ success: boolean;
75
+ }
76
+ export interface ChatExecutionGateway {
77
+ createJob(params: CreateJobParams): Promise<CreateJobResult>;
78
+ listJobs(conversationId: string): Promise<ListJobsResult>;
79
+ streamJob(jobId: string): AsyncIterable<ChatJobEvent>;
80
+ getJobStatus(jobId: string): Promise<GetJobStatusResult>;
81
+ cancelJob(jobId: string): Promise<CancelResult>;
82
+ }
83
+ export interface LocalChatExecutionDeps {
84
+ runQueuedChatJobs: () => void;
85
+ runningChatJobControllers: Map<string, AbortController>;
86
+ finalizeCancelledChatJobMessage: (job: data.ChatJobRow) => void;
87
+ persistInlineAttachments?: (conversationId: string, attachments: ChatAttachmentInput[]) => StoredAttachment[];
88
+ }
89
+ interface ChatAttachmentInput {
90
+ id?: string;
91
+ filename: string;
92
+ mimeType: string;
93
+ sizeBytes: number;
94
+ dataUrl?: string;
95
+ }
96
+ interface StoredAttachment {
97
+ id: string;
98
+ filename: string;
99
+ mimeType: string;
100
+ sizeBytes: number;
101
+ fileType: string;
102
+ storagePath: string | null;
103
+ }
104
+ export declare class LocalChatExecution implements ChatExecutionGateway {
105
+ private deps;
106
+ constructor(deps: LocalChatExecutionDeps);
107
+ createJob(params: CreateJobParams): Promise<CreateJobResult>;
108
+ listJobs(conversationId: string): Promise<ListJobsResult>;
109
+ streamJob(jobId: string): AsyncIterable<ChatJobEvent>;
110
+ getJobStatus(jobId: string): Promise<GetJobStatusResult>;
111
+ cancelJob(jobId: string): Promise<CancelResult>;
112
+ }
113
+ export {};
114
+ //# sourceMappingURL=local-chat-execution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-chat-execution.d.ts","sourceRoot":"","sources":["../src/local-chat-execution.ts"],"names":[],"mappings":"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"}