@elizaos/agent 2.0.3-beta.2 → 2.0.3-beta.3

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 (381) hide show
  1. package/__tests__/view-user-journeys.d.ts.map +1 -1
  2. package/__tests__/view-user-journeys.js +52 -41
  3. package/actions/context-signal.d.ts +2 -2
  4. package/actions/files.d.ts +9 -0
  5. package/actions/files.d.ts.map +1 -0
  6. package/actions/files.js +183 -0
  7. package/actions/index.d.ts +17 -17
  8. package/api/accounts-routes.d.ts +1 -1
  9. package/api/accounts-routes.js +1 -1
  10. package/api/agent-admin-routes.d.ts +1 -1
  11. package/api/agent-admin-routes.js +2 -2
  12. package/api/agent-model.d.ts +1 -1
  13. package/api/agent-status-routes.d.ts +1 -3
  14. package/api/agent-status-routes.d.ts.map +1 -1
  15. package/api/agent-status-routes.js +0 -2
  16. package/api/approval-routes.d.ts +38 -0
  17. package/api/approval-routes.d.ts.map +1 -0
  18. package/api/approval-routes.js +223 -0
  19. package/api/background-routes.d.ts +13 -0
  20. package/api/background-routes.d.ts.map +1 -0
  21. package/api/background-routes.js +91 -0
  22. package/api/binance-skill-helpers.d.ts +2 -2
  23. package/api/binance-skill-helpers.js +2 -2
  24. package/api/builtin-views.d.ts.map +1 -1
  25. package/api/builtin-views.js +44 -4
  26. package/api/character-routes.d.ts +1 -1
  27. package/api/chat-augmentation.d.ts.map +1 -1
  28. package/api/chat-augmentation.js +17 -0
  29. package/api/chat-routes.d.ts +29 -2
  30. package/api/chat-routes.d.ts.map +1 -1
  31. package/api/chat-routes.js +76 -1
  32. package/api/commands-routes.d.ts +10 -8
  33. package/api/commands-routes.d.ts.map +1 -1
  34. package/api/commands-routes.js +17 -59
  35. package/api/config-routes.d.ts +1 -1
  36. package/api/config-routes.d.ts.map +1 -1
  37. package/api/config-routes.js +0 -2
  38. package/api/connector-routes.d.ts +1 -1
  39. package/api/conversation-metadata.d.ts +1 -1
  40. package/api/conversation-metadata.d.ts.map +1 -1
  41. package/api/conversation-metadata.js +0 -1
  42. package/api/conversation-routes.d.ts +4 -3
  43. package/api/conversation-routes.d.ts.map +1 -1
  44. package/api/conversation-routes.js +34 -1
  45. package/api/documents-service-loader.d.ts +0 -4
  46. package/api/documents-service-loader.d.ts.map +1 -1
  47. package/api/documents-service-loader.js +0 -2
  48. package/api/files-routes.d.ts +14 -0
  49. package/api/files-routes.d.ts.map +1 -0
  50. package/api/files-routes.js +47 -0
  51. package/api/first-run-routes.d.ts +1 -1
  52. package/api/health-routes.d.ts +2 -2
  53. package/api/index.d.ts +40 -39
  54. package/api/index.d.ts.map +1 -1
  55. package/api/index.js +1 -0
  56. package/api/interactions-routes.d.ts +33 -0
  57. package/api/interactions-routes.d.ts.map +1 -0
  58. package/api/interactions-routes.js +63 -0
  59. package/api/media-runtime.d.ts +2 -1
  60. package/api/media-runtime.d.ts.map +1 -1
  61. package/api/media-runtime.js +64 -7
  62. package/api/media-store.d.ts +36 -0
  63. package/api/media-store.d.ts.map +1 -1
  64. package/api/media-store.js +141 -2
  65. package/api/memory-bounds.d.ts +0 -1
  66. package/api/memory-bounds.d.ts.map +1 -1
  67. package/api/memory-bounds.js +0 -1
  68. package/api/misc-routes.d.ts +1 -1
  69. package/api/model-provider-helpers.d.ts +2 -2
  70. package/api/model-provider-helpers.js +2 -2
  71. package/api/permissions-routes-extra.d.ts +1 -1
  72. package/api/permissions-routes.d.ts +1 -1
  73. package/api/permissions-routes.d.ts.map +1 -1
  74. package/api/permissions-routes.js +8 -7
  75. package/api/plugin-discovery-helpers.d.ts +5 -6
  76. package/api/plugin-discovery-helpers.d.ts.map +1 -1
  77. package/api/plugin-discovery-helpers.js +3 -4
  78. package/api/plugin-runtime-apply.d.ts +2 -2
  79. package/api/plugin-runtime-apply.d.ts.map +1 -1
  80. package/api/plugin-runtime-apply.js +74 -0
  81. package/api/provider-switch-config.d.ts +1 -1
  82. package/api/provider-switch-routes.d.ts +2 -2
  83. package/api/registry-routes.d.ts +1 -1
  84. package/api/registry-service.d.ts +1 -1
  85. package/api/remote-capability-routes.d.ts +2 -2
  86. package/api/remote-capability-routes.d.ts.map +1 -1
  87. package/api/remote-capability-routes.js +19 -0
  88. package/api/server-autonomy-helpers.d.ts +2 -2
  89. package/api/server-helpers-auth.d.ts +10 -0
  90. package/api/server-helpers-auth.d.ts.map +1 -1
  91. package/api/server-helpers-auth.js +16 -210
  92. package/api/server-helpers-config.d.ts +1 -1
  93. package/api/server-helpers-mcp.d.ts +2 -2
  94. package/api/server-helpers-plugin.d.ts +1 -1
  95. package/api/server-helpers-swarm.d.ts +3 -3
  96. package/api/server-helpers-swarm.d.ts.map +1 -1
  97. package/api/server-helpers-swarm.js +15 -5
  98. package/api/server-helpers-wallet.d.ts +1 -1
  99. package/api/server-helpers.d.ts +4 -4
  100. package/api/server-lazy-routes.d.ts +40 -38
  101. package/api/server-lazy-routes.d.ts.map +1 -1
  102. package/api/server-lazy-routes.js +7 -0
  103. package/api/server-route-dispatch.d.ts +2 -2
  104. package/api/server-route-dispatch.d.ts.map +1 -1
  105. package/api/server-route-dispatch.js +7 -0
  106. package/api/server-types.d.ts +9 -7
  107. package/api/server-types.d.ts.map +1 -1
  108. package/api/server.d.ts +19 -19
  109. package/api/server.d.ts.map +1 -1
  110. package/api/server.js +111 -17
  111. package/api/static-file-server.d.ts +2 -2
  112. package/api/static-file-server.js +2 -2
  113. package/api/subscription-routes.d.ts +4 -4
  114. package/api/subscription-routes.js +3 -4
  115. package/api/suggestions-routes.d.ts +1 -1
  116. package/api/suggestions-routes.d.ts.map +1 -1
  117. package/api/suggestions-routes.js +2 -3
  118. package/api/terminal-execution-routing.d.ts +1 -1
  119. package/api/training-service-like.d.ts +1 -1
  120. package/api/trajectory-fallback-routes.d.ts.map +1 -1
  121. package/api/trajectory-fallback-routes.js +21 -1
  122. package/api/update-routes.d.ts +1 -1
  123. package/api/view-registry-types.d.ts +1 -1
  124. package/api/views-registry.d.ts +14 -4
  125. package/api/views-registry.d.ts.map +1 -1
  126. package/api/views-registry.js +50 -26
  127. package/api/views-routes.d.ts +1 -1
  128. package/api/views-routes.d.ts.map +1 -1
  129. package/api/views-routes.js +131 -14
  130. package/api/views-search-index.d.ts +1 -1
  131. package/api/wallet-capability.d.ts +3 -3
  132. package/api/wallet-rpc.d.ts +1 -1
  133. package/api/wallet.d.ts +3 -3
  134. package/api/wallet.d.ts.map +1 -1
  135. package/api/wallet.js +4 -3
  136. package/api/workbench-context.d.ts +1 -1
  137. package/api/workbench-helpers.d.ts +3 -3
  138. package/api/workbench-helpers.js +3 -3
  139. package/api/workbench-routes.d.ts +2 -2
  140. package/api/workbench-vfs-routes.d.ts +1 -1
  141. package/api/ws-event-replay.d.ts +1 -2
  142. package/api/ws-event-replay.d.ts.map +1 -1
  143. package/api/ws-event-replay.js +1 -2
  144. package/api/x-relay-routes.d.ts +2 -2
  145. package/api/x402-route-validation.d.ts +4 -0
  146. package/api/x402-route-validation.d.ts.map +1 -0
  147. package/api/x402-route-validation.js +6 -0
  148. package/assets/view-heroes/background.png +0 -0
  149. package/auth/account-storage.d.ts +1 -1
  150. package/auth/anthropic.d.ts +1 -1
  151. package/auth/credentials.d.ts +2 -2
  152. package/auth/index.d.ts +7 -7
  153. package/auth/oauth-flow.d.ts +2 -2
  154. package/auth/openai-codex.d.ts +1 -1
  155. package/awareness/index.d.ts +1 -1
  156. package/config/config.js +0 -1
  157. package/config/env-vars.d.ts +1 -1
  158. package/config/env-vars.d.ts.map +1 -1
  159. package/config/env-vars.js +0 -1
  160. package/config/index.d.ts +10 -10
  161. package/config/model-metadata.d.ts +1 -1
  162. package/config/owner-contacts.d.ts +1 -1
  163. package/config/schema.d.ts +1 -1
  164. package/hooks/discovery.d.ts +1 -1
  165. package/hooks/eligibility.d.ts +2 -2
  166. package/hooks/index.d.ts +2 -2
  167. package/hooks/loader.d.ts +2 -2
  168. package/hooks/registry.d.ts +1 -1
  169. package/index.d.ts +87 -85
  170. package/index.d.ts.map +1 -1
  171. package/index.js +11 -3
  172. package/package.json +54 -44
  173. package/providers/media-provider.d.ts +1 -1
  174. package/providers/page-scoped-context.d.ts.map +1 -1
  175. package/providers/page-scoped-context.js +1 -70
  176. package/providers/relevant-conversations.d.ts.map +1 -1
  177. package/providers/relevant-conversations.js +8 -9
  178. package/providers/workspace.d.ts +1 -1
  179. package/runtime/actions/web-fetch.d.ts.map +1 -1
  180. package/runtime/actions/web-fetch.js +23 -3
  181. package/runtime/actions/web-search.d.ts +32 -0
  182. package/runtime/actions/web-search.d.ts.map +1 -0
  183. package/runtime/actions/web-search.js +245 -0
  184. package/runtime/advanced-capabilities-config.d.ts +1 -1
  185. package/runtime/boot-telemetry.d.ts +1 -1
  186. package/runtime/conversation-compactor-runtime.d.ts +1 -1
  187. package/runtime/conversation-compactor-runtime.js +1 -1
  188. package/runtime/conversation-compactor.d.ts +1 -1
  189. package/runtime/core-plugins.d.ts.map +1 -1
  190. package/runtime/core-plugins.js +9 -0
  191. package/runtime/custom-actions.d.ts +18 -9
  192. package/runtime/custom-actions.d.ts.map +1 -1
  193. package/runtime/custom-actions.js +85 -23
  194. package/runtime/eliza-plugin.d.ts.map +1 -1
  195. package/runtime/eliza-plugin.js +15 -1
  196. package/runtime/eliza.d.ts +9 -7
  197. package/runtime/eliza.d.ts.map +1 -1
  198. package/runtime/eliza.js +86 -23
  199. package/runtime/first-time-setup.d.ts +1 -3
  200. package/runtime/first-time-setup.d.ts.map +1 -1
  201. package/runtime/first-time-setup.js +0 -2
  202. package/runtime/index.d.ts +18 -18
  203. package/runtime/load-plugin-from-vfs.d.ts +2 -2
  204. package/runtime/mobile-dns.d.ts.map +1 -1
  205. package/runtime/mobile-dns.js +2 -5
  206. package/runtime/operations/classifier.d.ts +1 -1
  207. package/runtime/operations/cold-strategy.d.ts +1 -1
  208. package/runtime/operations/health-checks.d.ts +1 -1
  209. package/runtime/operations/health.d.ts +1 -1
  210. package/runtime/operations/index.d.ts +10 -10
  211. package/runtime/operations/manager.d.ts +3 -3
  212. package/runtime/operations/reload-hot.d.ts +1 -1
  213. package/runtime/operations/repository.d.ts +1 -1
  214. package/runtime/operations/vault-bridge.d.ts +1 -1
  215. package/runtime/plugin-collector.d.ts +6 -1
  216. package/runtime/plugin-collector.d.ts.map +1 -1
  217. package/runtime/plugin-collector.js +11 -28
  218. package/runtime/plugin-lifecycle.d.ts.map +1 -1
  219. package/runtime/plugin-lifecycle.js +1 -0
  220. package/runtime/plugin-resolver.d.ts +2 -2
  221. package/runtime/plugin-resolver.d.ts.map +1 -1
  222. package/runtime/plugin-resolver.js +113 -65
  223. package/runtime/plugin-types.d.ts +1 -1
  224. package/runtime/prompt-optimization.d.ts +4 -4
  225. package/runtime/remote-coding-runner-gate.d.ts +7 -0
  226. package/runtime/remote-coding-runner-gate.d.ts.map +1 -0
  227. package/runtime/remote-coding-runner-gate.js +36 -0
  228. package/runtime/roles/src/index.d.ts +4 -4
  229. package/runtime/roles.d.ts +2 -2
  230. package/runtime/sandbox-character.d.ts +1 -1
  231. package/runtime/tool-call-cache/cache.d.ts +1 -1
  232. package/runtime/tool-call-cache/disk-store.d.ts +1 -1
  233. package/runtime/tool-call-cache/index.d.ts +6 -6
  234. package/runtime/tool-call-cache/key.d.ts +1 -1
  235. package/runtime/tool-call-cache/redact.d.ts +1 -1
  236. package/runtime/tool-call-cache/registry.d.ts +1 -1
  237. package/runtime/tool-call-cache-wrapper.d.ts +7 -9
  238. package/runtime/tool-call-cache-wrapper.d.ts.map +1 -1
  239. package/runtime/tool-call-cache-wrapper.js +6 -11
  240. package/runtime/trajectory-export.d.ts +3 -3
  241. package/runtime/trajectory-internals.d.ts +2 -1
  242. package/runtime/trajectory-internals.d.ts.map +1 -1
  243. package/runtime/trajectory-persistence.d.ts +5 -5
  244. package/runtime/trajectory-steps-reader.d.ts +1 -1
  245. package/runtime/trajectory-steps-writer.d.ts +1 -1
  246. package/runtime/trajectory-storage.d.ts +4 -4
  247. package/runtime/view-action-affinity.d.ts +18 -15
  248. package/runtime/view-action-affinity.d.ts.map +1 -1
  249. package/runtime/view-action-affinity.js +26 -29
  250. package/runtime/web-search-tools.d.ts +4 -1
  251. package/runtime/web-search-tools.d.ts.map +1 -1
  252. package/runtime/web-search-tools.js +37 -9
  253. package/security/index.d.ts +3 -3
  254. package/services/approval/index.d.ts +9 -0
  255. package/services/approval/index.d.ts.map +1 -0
  256. package/services/approval/index.js +8 -0
  257. package/services/approval/service.d.ts +35 -0
  258. package/services/approval/service.d.ts.map +1 -0
  259. package/services/approval/service.js +40 -0
  260. package/services/approval/sql.d.ts +18 -0
  261. package/services/approval/sql.d.ts.map +1 -0
  262. package/services/approval/sql.js +104 -0
  263. package/services/approval/store.d.ts +39 -0
  264. package/services/approval/store.d.ts.map +1 -0
  265. package/services/approval/store.js +534 -0
  266. package/services/approval/types.d.ts +207 -0
  267. package/services/approval/types.d.ts.map +1 -0
  268. package/services/approval/types.js +34 -0
  269. package/services/character-persistence.d.ts +2 -2
  270. package/services/client-chat-sender.d.ts +1 -1
  271. package/services/config-plugin-manager.d.ts +2 -2
  272. package/services/connector-setup-service.d.ts +1 -1
  273. package/services/cove-quote-x509.d.ts +1 -1
  274. package/services/cove-quote.d.ts +2 -2
  275. package/services/dstack-tee-provider.d.ts +1 -1
  276. package/services/file-storage.d.ts +20 -0
  277. package/services/file-storage.d.ts.map +1 -0
  278. package/services/file-storage.js +70 -0
  279. package/services/global-pause/index.d.ts +8 -0
  280. package/services/global-pause/index.d.ts.map +1 -0
  281. package/services/global-pause/index.js +7 -0
  282. package/services/global-pause/service.d.ts +29 -0
  283. package/services/global-pause/service.d.ts.map +1 -0
  284. package/services/global-pause/service.js +34 -0
  285. package/services/global-pause/store.d.ts +31 -0
  286. package/services/global-pause/store.d.ts.map +1 -0
  287. package/services/global-pause/store.js +83 -0
  288. package/services/handoff/index.d.ts +8 -0
  289. package/services/handoff/index.d.ts.map +1 -0
  290. package/services/handoff/index.js +7 -0
  291. package/services/handoff/service.d.ts +29 -0
  292. package/services/handoff/service.d.ts.map +1 -0
  293. package/services/handoff/service.js +34 -0
  294. package/services/handoff/store.d.ts +76 -0
  295. package/services/handoff/store.d.ts.map +1 -0
  296. package/services/handoff/store.js +148 -0
  297. package/services/index.d.ts +30 -31
  298. package/services/index.d.ts.map +1 -1
  299. package/services/index.js +0 -6
  300. package/services/js-runtime-bridge.d.ts.map +1 -1
  301. package/services/js-runtime-bridge.js +8 -2
  302. package/services/knowledge-graph/index.d.ts +4 -4
  303. package/services/knowledge-graph/service.d.ts +2 -2
  304. package/services/pending-prompts/index.d.ts +8 -0
  305. package/services/pending-prompts/index.d.ts.map +1 -0
  306. package/services/pending-prompts/index.js +7 -0
  307. package/services/pending-prompts/service.d.ts +34 -0
  308. package/services/pending-prompts/service.d.ts.map +1 -0
  309. package/services/pending-prompts/service.js +68 -0
  310. package/services/pending-prompts/store.d.ts +70 -0
  311. package/services/pending-prompts/store.d.ts.map +1 -0
  312. package/services/pending-prompts/store.js +191 -0
  313. package/services/plugin-compiler.d.ts +1 -1
  314. package/services/plugin-installer.d.ts.map +1 -1
  315. package/services/plugin-installer.js +21 -11
  316. package/services/plugin-manager-types.d.ts +1 -1
  317. package/services/proactive-interaction-decider.d.ts +62 -11
  318. package/services/proactive-interaction-decider.d.ts.map +1 -1
  319. package/services/proactive-interaction-decider.js +223 -35
  320. package/services/push/apns-provider.d.ts +1 -1
  321. package/services/push/fcm-provider.d.ts +1 -1
  322. package/services/push/notification-push-service.d.ts +2 -2
  323. package/services/registry-client-app-meta.d.ts +1 -1
  324. package/services/registry-client-endpoints.d.ts +2 -2
  325. package/services/registry-client-local.d.ts +1 -1
  326. package/services/registry-client-network.d.ts +1 -1
  327. package/services/registry-client-queries.d.ts +1 -1
  328. package/services/registry-client.d.ts +3 -3
  329. package/services/relationships-graph.d.ts +1 -1
  330. package/services/remote-capability-cloud-sandbox.d.ts +3 -3
  331. package/services/remote-capability-endpoint-conformance.d.ts +1 -1
  332. package/services/remote-capability-endpoint-provider.d.ts +4 -4
  333. package/services/remote-capability-url-endpoint-providers.d.ts +1 -1
  334. package/services/remote-plugin-adapter.d.ts.map +1 -1
  335. package/services/remote-plugin-adapter.js +3 -0
  336. package/services/remote-plugin-bridge.d.ts.map +1 -1
  337. package/services/remote-plugin-bridge.js +97 -26
  338. package/services/remote-signing-service.d.ts +4 -4
  339. package/services/research-task-executor.d.ts +1 -1
  340. package/services/sandbox-manager.d.ts +1 -1
  341. package/services/self-updater.d.ts +1 -1
  342. package/services/self-updater.d.ts.map +1 -1
  343. package/services/self-updater.js +23 -9
  344. package/services/shell-execution-router.d.ts +1 -1
  345. package/services/shell-execution-router.d.ts.map +1 -1
  346. package/services/shell-execution-router.js +19 -2
  347. package/services/tee-boot-gate-state.d.ts +1 -1
  348. package/services/tee-boot-gate.d.ts +4 -4
  349. package/services/tee-confidential-inference.d.ts +3 -3
  350. package/services/tee-key-release.d.ts +2 -2
  351. package/services/tee-model-key-boot.d.ts +4 -4
  352. package/services/tee-policy.d.ts +1 -1
  353. package/services/tee-production-profile.d.ts +1 -1
  354. package/services/tee-release-policy.d.ts +1 -1
  355. package/services/tee-revocation.d.ts +2 -2
  356. package/services/tee-runtime-config.d.ts +1 -1
  357. package/services/tee-sealed-volume.d.ts +3 -3
  358. package/services/tee-signer-backend.d.ts +3 -3
  359. package/services/update-checker.d.ts +1 -1
  360. package/services/vault-signer-backend.d.ts +1 -1
  361. package/services/vfs-git.d.ts +1 -1
  362. package/test-support/index.d.ts +3 -3
  363. package/triggers/runtime.d.ts +1 -1
  364. package/triggers/scheduling.d.ts +3 -22
  365. package/triggers/scheduling.d.ts.map +1 -1
  366. package/triggers/scheduling.js +2 -214
  367. package/tui/agent-terminal-tui.d.ts.map +1 -1
  368. package/tui/agent-terminal-tui.js +174 -72
  369. package/types/index.d.ts +3 -3
  370. package/api/nfa-routes.d.ts +0 -6
  371. package/api/nfa-routes.d.ts.map +0 -1
  372. package/api/nfa-routes.js +0 -125
  373. package/api/server-auth.d.ts +0 -46
  374. package/api/server-auth.d.ts.map +0 -1
  375. package/api/server-auth.js +0 -504
  376. package/runtime/restart.d.ts +0 -9
  377. package/runtime/restart.d.ts.map +0 -1
  378. package/runtime/restart.js +0 -8
  379. package/test-utils/sqlite-compat.d.ts +0 -23
  380. package/test-utils/sqlite-compat.d.ts.map +0 -1
  381. package/test-utils/sqlite-compat.js +0 -214
@@ -0,0 +1,70 @@
1
+ /**
2
+ * `PendingPromptsStore` — backing store for open scheduled-task prompts.
3
+ *
4
+ * When a `ScheduledTask` whose `completionCheck.kind === "user_replied_within"`
5
+ * (or implicit `user_acknowledged`) fires, the runner records the open prompt
6
+ * here keyed by `roomId`. When an inbound message arrives the planner uses
7
+ * `list(roomId)` to decide whether to route to `complete` / `acknowledge` on
8
+ * the open task instead of treating it as a fresh request.
9
+ *
10
+ * Retention: open prompts are retained for `expiresAt + reopenWindowHours`
11
+ * (default 24h) so late inbound replies still correlate. After the reopen
12
+ * window the entry is purged.
13
+ *
14
+ * Backing storage: runtime cache, keyed per room. Bounded per-room slot count
15
+ * to defend against unbounded growth in a noisy chat.
16
+ */
17
+ import type { IAgentRuntime } from "@elizaos/core";
18
+ export type ExpectedReplyKind = "any" | "yes_no" | "approval" | "free_form";
19
+ export interface PendingPrompt {
20
+ taskId: string;
21
+ promptSnippet: string;
22
+ firedAt: string;
23
+ expectedReplyKind: ExpectedReplyKind;
24
+ expiresAt?: string;
25
+ }
26
+ export interface PendingPromptWithRoom extends PendingPrompt {
27
+ roomId: string;
28
+ }
29
+ export interface RecordedPendingPrompt extends PendingPrompt {
30
+ roomId: string;
31
+ /**
32
+ * Soft-purge cut-off. After this instant the entry is no longer returned by
33
+ * `list()` and is dropped on the next read. Set to
34
+ * `expiresAt + reopenWindowHours * 3600s`, or `firedAt + 24h` when no
35
+ * `expiresAt` was provided.
36
+ */
37
+ retainUntilIso: string;
38
+ }
39
+ export interface PendingPromptRecordInput {
40
+ taskId: string;
41
+ roomId: string;
42
+ promptSnippet: string;
43
+ firedAt: string;
44
+ expectedReplyKind?: ExpectedReplyKind;
45
+ expiresAt?: string;
46
+ /** override the default 24h reopen window */
47
+ reopenWindowHours?: number;
48
+ }
49
+ export interface PendingPromptsStore {
50
+ /** Record that a task with an open prompt has fired into a room. */
51
+ record(input: PendingPromptRecordInput): Promise<RecordedPendingPrompt>;
52
+ /** List open prompts for a room. Excludes prompts past their retain window. */
53
+ list(roomId: string, opts?: {
54
+ lookbackMinutes?: number;
55
+ now?: Date;
56
+ }): Promise<PendingPrompt[]>;
57
+ /** List open prompts across every indexed room for UI/provider surfaces. */
58
+ listAll(opts?: {
59
+ lookbackMinutes?: number;
60
+ now?: Date;
61
+ }): Promise<PendingPromptWithRoom[]>;
62
+ /** Resolve a pending prompt (called when the runner records a terminal verb). */
63
+ resolve(roomId: string, taskId: string): Promise<void>;
64
+ /** Remove all entries for a task during lifecycle cleanup. */
65
+ forgetTask(taskId: string): Promise<void>;
66
+ /** Remove every recorded entry during lifecycle cleanup. */
67
+ clearAll(): Promise<void>;
68
+ }
69
+ export declare function createPendingPromptsStore(runtime: IAgentRuntime): PendingPromptsStore;
70
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/services/pending-prompts/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAOnD,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,CAAC;AAE5E,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAsB,SAAQ,aAAa;IAC1D,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAsB,SAAQ,aAAa;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,oEAAoE;IACpE,MAAM,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACxE,+EAA+E;IAC/E,IAAI,CACF,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,IAAI,CAAA;KAAE,GAC9C,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAC5B,4EAA4E;IAC5E,OAAO,CAAC,IAAI,CAAC,EAAE;QACb,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,GAAG,CAAC,EAAE,IAAI,CAAC;KACZ,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC;IACrC,iFAAiF;IACjF,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,8DAA8D;IAC9D,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,4DAA4D;IAC5D,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAuED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,aAAa,GACrB,mBAAmB,CA8JrB"}
@@ -0,0 +1,191 @@
1
+ /**
2
+ * `PendingPromptsStore` — backing store for open scheduled-task prompts.
3
+ *
4
+ * When a `ScheduledTask` whose `completionCheck.kind === "user_replied_within"`
5
+ * (or implicit `user_acknowledged`) fires, the runner records the open prompt
6
+ * here keyed by `roomId`. When an inbound message arrives the planner uses
7
+ * `list(roomId)` to decide whether to route to `complete` / `acknowledge` on
8
+ * the open task instead of treating it as a fresh request.
9
+ *
10
+ * Retention: open prompts are retained for `expiresAt + reopenWindowHours`
11
+ * (default 24h) so late inbound replies still correlate. After the reopen
12
+ * window the entry is purged.
13
+ *
14
+ * Backing storage: runtime cache, keyed per room. Bounded per-room slot count
15
+ * to defend against unbounded growth in a noisy chat.
16
+ */
17
+ const PROMPT_SNIPPET_MAX_LENGTH = 120;
18
+ const DEFAULT_REOPEN_WINDOW_HOURS = 24;
19
+ const PER_ROOM_MAX_PROMPTS = 16;
20
+ const ROOM_INDEX_KEY = "eliza:lifeops:pending-prompts:rooms:v1";
21
+ function roomCacheKey(roomId) {
22
+ return `eliza:lifeops:pending-prompts:room:${roomId}:v1`;
23
+ }
24
+ function clampSnippet(value) {
25
+ const trimmed = value.trim();
26
+ if (trimmed.length <= PROMPT_SNIPPET_MAX_LENGTH) {
27
+ return trimmed;
28
+ }
29
+ return `${trimmed.slice(0, PROMPT_SNIPPET_MAX_LENGTH - 1).trimEnd()}…`;
30
+ }
31
+ function isValidIso(value) {
32
+ if (typeof value !== "string" || value.length === 0)
33
+ return false;
34
+ return Number.isFinite(Date.parse(value));
35
+ }
36
+ function computeRetainUntil(firedAt, expiresAt, reopenWindowHours) {
37
+ const baseMs = expiresAt ? Date.parse(expiresAt) : Date.parse(firedAt);
38
+ if (!Number.isFinite(baseMs)) {
39
+ throw new Error("[pending-prompts] cannot compute retain window");
40
+ }
41
+ const retainMs = baseMs + reopenWindowHours * 3_600_000;
42
+ return new Date(retainMs).toISOString();
43
+ }
44
+ async function loadRoom(cache, roomId) {
45
+ const stored = await cache.getCache(roomCacheKey(roomId));
46
+ return Array.isArray(stored) ? stored : [];
47
+ }
48
+ async function saveRoom(cache, roomId, entries) {
49
+ await cache.setCache(roomCacheKey(roomId), entries);
50
+ await registerRoom(cache, roomId);
51
+ }
52
+ async function registerRoom(cache, roomId) {
53
+ const stored = await cache.getCache(ROOM_INDEX_KEY);
54
+ const next = new Set(Array.isArray(stored) ? stored : []);
55
+ next.add(roomId);
56
+ await cache.setCache(ROOM_INDEX_KEY, [...next]);
57
+ }
58
+ async function listRooms(cache) {
59
+ const stored = await cache.getCache(ROOM_INDEX_KEY);
60
+ return Array.isArray(stored) ? stored : [];
61
+ }
62
+ export function createPendingPromptsStore(runtime) {
63
+ const cache = runtime;
64
+ const store = {
65
+ async record(input) {
66
+ if (!input.roomId || typeof input.roomId !== "string") {
67
+ throw new Error("[pending-prompts] roomId is required");
68
+ }
69
+ if (!input.taskId || typeof input.taskId !== "string") {
70
+ throw new Error("[pending-prompts] taskId is required");
71
+ }
72
+ if (!isValidIso(input.firedAt)) {
73
+ throw new Error("[pending-prompts] firedAt must be ISO-8601");
74
+ }
75
+ if (input.expiresAt !== undefined && !isValidIso(input.expiresAt)) {
76
+ throw new Error("[pending-prompts] expiresAt must be ISO-8601");
77
+ }
78
+ const reopenWindowHours = typeof input.reopenWindowHours === "number" &&
79
+ input.reopenWindowHours > 0
80
+ ? input.reopenWindowHours
81
+ : DEFAULT_REOPEN_WINDOW_HOURS;
82
+ const recorded = {
83
+ roomId: input.roomId,
84
+ taskId: input.taskId,
85
+ promptSnippet: clampSnippet(input.promptSnippet),
86
+ firedAt: input.firedAt,
87
+ expectedReplyKind: input.expectedReplyKind ?? "any",
88
+ retainUntilIso: computeRetainUntil(input.firedAt, input.expiresAt, reopenWindowHours),
89
+ };
90
+ if (input.expiresAt !== undefined) {
91
+ recorded.expiresAt = input.expiresAt;
92
+ }
93
+ const existing = await loadRoom(cache, input.roomId);
94
+ const filtered = existing.filter((entry) => entry.taskId !== input.taskId);
95
+ filtered.push(recorded);
96
+ // Bound per-room growth: keep newest N entries (FIFO eviction).
97
+ const trimmed = filtered.length > PER_ROOM_MAX_PROMPTS
98
+ ? filtered.slice(-PER_ROOM_MAX_PROMPTS)
99
+ : filtered;
100
+ await saveRoom(cache, input.roomId, trimmed);
101
+ return recorded;
102
+ },
103
+ async list(roomId, opts = {}) {
104
+ const now = opts.now ?? new Date();
105
+ const lookbackCutoffMs = typeof opts.lookbackMinutes === "number" && opts.lookbackMinutes > 0
106
+ ? now.getTime() - opts.lookbackMinutes * 60_000
107
+ : null;
108
+ const stored = await loadRoom(cache, roomId);
109
+ let mutated = false;
110
+ const live = [];
111
+ for (const entry of stored) {
112
+ const retainMs = Date.parse(entry.retainUntilIso);
113
+ if (Number.isFinite(retainMs) && retainMs <= now.getTime()) {
114
+ mutated = true;
115
+ continue;
116
+ }
117
+ live.push(entry);
118
+ }
119
+ if (mutated) {
120
+ await saveRoom(cache, roomId, live);
121
+ }
122
+ const visible = live.filter((entry) => {
123
+ if (lookbackCutoffMs === null)
124
+ return true;
125
+ const firedMs = Date.parse(entry.firedAt);
126
+ return Number.isFinite(firedMs) && firedMs >= lookbackCutoffMs;
127
+ });
128
+ return visible
129
+ .slice()
130
+ .sort((a, b) => Date.parse(b.firedAt) - Date.parse(a.firedAt))
131
+ .map((entry) => {
132
+ const projected = {
133
+ taskId: entry.taskId,
134
+ promptSnippet: entry.promptSnippet,
135
+ firedAt: entry.firedAt,
136
+ expectedReplyKind: entry.expectedReplyKind,
137
+ };
138
+ if (entry.expiresAt !== undefined) {
139
+ projected.expiresAt = entry.expiresAt;
140
+ }
141
+ return projected;
142
+ });
143
+ },
144
+ async listAll(opts = {}) {
145
+ const rooms = await listRooms(cache);
146
+ const perRoom = await Promise.all(rooms.map(async (roomId) => (await store.list(roomId, opts)).map((prompt) => ({
147
+ ...prompt,
148
+ roomId,
149
+ }))));
150
+ return perRoom
151
+ .flat()
152
+ .sort((a, b) => Date.parse(b.firedAt) - Date.parse(a.firedAt));
153
+ },
154
+ async resolve(roomId, taskId) {
155
+ const existing = await loadRoom(cache, roomId);
156
+ const next = existing.filter((entry) => entry.taskId !== taskId);
157
+ if (next.length === existing.length) {
158
+ return;
159
+ }
160
+ await saveRoom(cache, roomId, next);
161
+ },
162
+ async forgetTask(taskId) {
163
+ const rooms = await listRooms(cache);
164
+ for (const roomId of rooms) {
165
+ const existing = await loadRoom(cache, roomId);
166
+ const next = existing.filter((entry) => entry.taskId !== taskId);
167
+ if (next.length !== existing.length) {
168
+ await saveRoom(cache, roomId, next);
169
+ }
170
+ }
171
+ },
172
+ async clearAll() {
173
+ const rooms = await listRooms(cache);
174
+ for (const roomId of rooms) {
175
+ if (typeof cache.deleteCache === "function") {
176
+ await cache.deleteCache(roomCacheKey(roomId));
177
+ }
178
+ else {
179
+ await cache.setCache(roomCacheKey(roomId), []);
180
+ }
181
+ }
182
+ if (typeof cache.deleteCache === "function") {
183
+ await cache.deleteCache(ROOM_INDEX_KEY);
184
+ }
185
+ else {
186
+ await cache.setCache(ROOM_INDEX_KEY, []);
187
+ }
188
+ },
189
+ };
190
+ return store;
191
+ }
@@ -1,5 +1,5 @@
1
1
  import * as esbuild from "esbuild";
2
- import type { VirtualFilesystemService } from "./virtual-filesystem.ts";
2
+ import type { VirtualFilesystemService } from "./virtual-filesystem.js";
3
3
  export type PluginCompilerFormat = "esm" | "cjs";
4
4
  export interface PluginCompilerOptions {
5
5
  vfs: VirtualFilesystemService;
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-installer.d.ts","sourceRoot":"","sources":["../../src/services/plugin-installer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAWH,OAAO,EAAiB,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAU9E,uEAAuE;AACvE,eAAO,MAAM,kBAAkB,QACiB,CAAC;AAKjD,uFAAuF;AACvF,eAAO,MAAM,YAAY,QAA0B,CAAC;AAEpD,wDAAwD;AACxD,eAAO,MAAM,aAAa,QAAyC,CAAC;AAKpE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAIzD;AAQD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAInD;AAYD,MAAM,MAAM,YAAY,GACpB,WAAW,GACX,aAAa,GACb,iBAAiB,GACjB,YAAY,GACZ,aAAa,GACb,YAAY,GACZ,UAAU,GACV,OAAO,CAAC;AAEZ,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,YAAY,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,eAAe,KAAK,IAAI,CAAC;AAEnE,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAiBD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAExD;AAoED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,CAYnE;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,gBAAgB,EAC7B,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,aAAa,CAAC,CAIxB;AAmKD;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,gBAAgB,EAC7B,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,aAAa,CAAC,CAcxB;AAMD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAE5E;AA6DD;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,CAAC,CAQ1B;AAgKD,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,MAAM,CAAC,CA2BjB;AAsLD,uDAAuD;AACvD,wBAAgB,oBAAoB,IAAI,KAAK,CAAC;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC,CAUD"}
1
+ {"version":3,"file":"plugin-installer.d.ts","sourceRoot":"","sources":["../../src/services/plugin-installer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAWH,OAAO,EAAiB,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAU9E,uEAAuE;AACvE,eAAO,MAAM,kBAAkB,QACiB,CAAC;AAKjD,uFAAuF;AACvF,eAAO,MAAM,YAAY,QAA0B,CAAC;AAEpD,wDAAwD;AACxD,eAAO,MAAM,aAAa,QAAyC,CAAC;AAKpE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAIzD;AAQD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAInD;AAYD,MAAM,MAAM,YAAY,GACpB,WAAW,GACX,aAAa,GACb,iBAAiB,GACjB,YAAY,GACZ,aAAa,GACb,YAAY,GACZ,UAAU,GACV,OAAO,CAAC;AAEZ,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,YAAY,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,eAAe,KAAK,IAAI,CAAC;AAEnE,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAiBD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAExD;AAoED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,CAenE;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,gBAAgB,EAC7B,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,aAAa,CAAC,CAIxB;AAmKD;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,gBAAgB,EAC7B,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,aAAa,CAAC,CAcxB;AAMD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAE5E;AA6DD;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,CAAC,CAQ1B;AAgKD,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,MAAM,CAAC,CA2BjB;AAgMD,uDAAuD;AACvD,wBAAgB,oBAAoB,IAAI,KAAK,CAAC;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC,CAUD"}
@@ -130,7 +130,10 @@ function resolveInstallVersion(canonicalName, info, requestedVersion) {
130
130
  export async function detectPackageManager() {
131
131
  for (const cmd of ["bun", "npm"]) {
132
132
  try {
133
- await execFileAsync(cmd, ["--version"]);
133
+ await execFileAsync(cmd, ["--version"], {
134
+ // npm is a `.cmd` shim on Windows; Node can't spawn it without a shell.
135
+ shell: process.platform === "win32",
136
+ });
134
137
  return cmd;
135
138
  }
136
139
  catch (err) {
@@ -409,13 +412,10 @@ async function runInstallSpec(pm, spec, targetDir) {
409
412
  });
410
413
  break;
411
414
  default:
412
- await execFileAsync("npm", [
413
- "install",
414
- "--ignore-scripts",
415
- spec,
416
- "--prefix",
417
- targetDir,
418
- ]);
415
+ await execFileAsync("npm", ["install", "--ignore-scripts", spec, "--prefix", targetDir],
416
+ // npm is a `.cmd` shim on Windows; Node can't spawn it without a shell.
417
+ // `spec` is validated by assertValidPackageName/assertValidVersion.
418
+ { shell: process.platform === "win32" });
419
419
  }
420
420
  }
421
421
  async function readInstalledVersion(targetDir, packageName, fallbackVersion) {
@@ -537,11 +537,18 @@ async function gitCloneInstall(info, targetDir, onProgress) {
537
537
  message: "Installing dependencies...",
538
538
  });
539
539
  const pm = await detectPackageManager();
540
- await execFileAsync(pm, ["install", "--ignore-scripts"], { cwd: tempDir });
540
+ await execFileAsync(pm, ["install", "--ignore-scripts"], {
541
+ cwd: tempDir,
542
+ // `pm` is npm.cmd on Windows when bun is absent; needs a shell to resolve.
543
+ shell: process.platform === "win32",
544
+ });
541
545
  const registrySourceDir = resolveRegistrySourceDir(tempDir, info.directory);
542
546
  if (registrySourceDir !== tempDir) {
543
547
  try {
544
- await execFileAsync(pm, ["run", "build"], { cwd: registrySourceDir });
548
+ await execFileAsync(pm, ["run", "build"], {
549
+ cwd: registrySourceDir,
550
+ shell: process.platform === "win32",
551
+ });
545
552
  }
546
553
  catch (buildErr) {
547
554
  logger.warn(`[plugin-installer] build step failed for ${info.name}: ${buildErr instanceof Error ? buildErr.message : String(buildErr)}`);
@@ -565,7 +572,10 @@ async function gitCloneInstall(info, targetDir, onProgress) {
565
572
  }
566
573
  let buildFailed = false;
567
574
  try {
568
- await execFileAsync(pm, ["run", "build"], { cwd: tsDir });
575
+ await execFileAsync(pm, ["run", "build"], {
576
+ cwd: tsDir,
577
+ shell: process.platform === "win32",
578
+ });
569
579
  }
570
580
  catch (buildErr) {
571
581
  buildFailed = true;
@@ -1,4 +1,4 @@
1
- import type { AppUiExtensionConfig, RegistryAppMeta, RegistryAppSessionFeature, RegistryAppSessionMeta, RegistryAppSessionMode, RegistryAppViewerMeta, RegistryPluginInfo as RegistryClientPluginInfo, RegistrySearchResult as RegistryClientSearchResult } from "./registry-client-types.ts";
1
+ import type { AppUiExtensionConfig, RegistryAppMeta, RegistryAppSessionFeature, RegistryAppSessionMeta, RegistryAppSessionMode, RegistryAppViewerMeta, RegistryPluginInfo as RegistryClientPluginInfo, RegistrySearchResult as RegistryClientSearchResult } from "./registry-client-types.js";
2
2
  export type { AppUiExtensionConfig };
3
3
  export type RegistryVersionSupport = RegistryClientPluginInfo["supports"];
4
4
  export type RegistryPluginNpmInfo = RegistryClientPluginInfo["npm"];
@@ -1,10 +1,10 @@
1
1
  /**
2
2
  * Proactive-interaction decider (#8792).
3
3
  *
4
- * Consumes UI interaction events (view switches today; slash/shortcut wireable
5
- * the same way) and decides whether to surface a single scoped, helpful comment
6
- * through the existing `routeAutonomyTextToUser` → `proactive-message` pipeline
7
- * with `source: "proactive-interaction"`.
4
+ * Consumes UI interaction events (view switches, slash commands, shortcuts) and
5
+ * decides whether to surface a single scoped, helpful offer through either the
6
+ * existing `routeAutonomyTextToUser` → `proactive-message` pipeline with
7
+ * `source: "proactive-interaction"` or the low-priority notification rail.
8
8
  *
9
9
  * Two layers, both testable in isolation:
10
10
  * - {@link decideProactiveComment} — the pure policy + governance decision
@@ -13,21 +13,66 @@
13
13
  * subscribes to the event bus, runs the small-model judge, and routes the
14
14
  * admitted comment.
15
15
  */
16
- import { type IAgentRuntime, type ViewSwitchedPayload } from "@elizaos/core";
17
- import { type ProactiveInteractionGate } from "./proactive-interaction-gate.ts";
16
+ import { type IAgentRuntime, type ShortcutFiredPayload, type SlashCommandInvokedPayload, type ViewSwitchedPayload } from "@elizaos/core";
17
+ import { type ProactiveInteractionGate } from "./proactive-interaction-gate.js";
18
18
  /** Source tag for proactive comments driven by UI interactions. */
19
19
  export declare const PROACTIVE_INTERACTION_SOURCE = "proactive-interaction";
20
- /** A model judge: given a view-switch context, return an offer or null. */
21
- export type ProactiveJudge = (payload: ViewSwitchedPayload) => Promise<string | null>;
20
+ /** Any interaction the decider reacts to (#8792). */
21
+ export type InteractionPayload = ViewSwitchedPayload | SlashCommandInvokedPayload | ShortcutFiredPayload;
22
+ /**
23
+ * Runtime setting key for the user-facing "Proactive suggestions" control
24
+ * (off/subtle/chatty). Read via `runtime.getSetting`, it takes precedence over
25
+ * the `ELIZA_PROACTIVE_INTERACTIONS` env default inside the gate resolver.
26
+ */
27
+ export declare const PROACTIVE_CHATTINESS_SETTING_KEY = "ELIZA_PROACTIVE_INTERACTIONS";
28
+ /** Where an admitted proactive offer should be delivered. */
29
+ export type ProactiveDelivery = "chat" | "notify";
30
+ /** A scoped offer from the judge, normalized before governance/admission. */
31
+ export interface ProactiveOffer {
32
+ text: string;
33
+ delivery: ProactiveDelivery;
34
+ title?: string;
35
+ deepLink?: string;
36
+ groupKey?: string;
37
+ }
38
+ /** A model judge: given an interaction context, return an offer or null. */
39
+ export type ProactiveJudgeResult = string | ProactiveOffer | null;
40
+ export type ProactiveJudge = (payload: InteractionPayload) => Promise<ProactiveJudgeResult>;
22
41
  export interface DecideProactiveInput {
23
- payload: ViewSwitchedPayload;
42
+ payload: InteractionPayload;
24
43
  gate: ProactiveInteractionGate;
25
44
  judge: ProactiveJudge;
26
45
  now: number;
27
46
  }
47
+ /**
48
+ * Control / dismiss / help shortcuts that must never trigger a proactive comment
49
+ * (#8792). These are gestures, not intent: commenting on them is noise, and —
50
+ * critically — the small-model judge runs BEFORE the governance gate, so letting
51
+ * them reach the judge would spend a TEXT_SMALL call per keystroke. Denying them
52
+ * here (a surface of `null`) skips the judge entirely. Navigation-bearing
53
+ * shortcuts ("open X") report `VIEW_SWITCHED` through the navigate route instead,
54
+ * so SHORTCUT_FIRED stays a small, high-signal channel for non-navigation
55
+ * capability-invokes (e.g. opening the command palette).
56
+ */
57
+ export declare const NON_PROACTIVE_SHORTCUT_IDS: ReadonlySet<string>;
58
+ /**
59
+ * The governance surface for an interaction, or `null` when policy says never
60
+ * comment. Explicitly-typed slash commands return `null`: the user already
61
+ * expressed intent and the command produced its own reply, so a proactive
62
+ * comment would be double-talk (#8792 open question). Control/dismiss shortcuts
63
+ * are denied (see {@link NON_PROACTIVE_SHORTCUT_IDS}). View switches key on the
64
+ * view; remaining (intent-bearing) shortcuts key on the shortcut id.
65
+ */
66
+ export declare function interactionSurface(payload: InteractionPayload): string | null;
28
67
  export interface DecideProactiveResult {
29
68
  /** The comment to surface, or null when none should be sent. */
30
69
  text: string | null;
70
+ /** Delivery rail for the admitted text. Null when no text is admitted. */
71
+ delivery: ProactiveDelivery | null;
72
+ /** Optional notification headline when delivery is notify. */
73
+ title?: string;
74
+ deepLink?: string;
75
+ groupKey?: string;
31
76
  reason: string;
32
77
  }
33
78
  /**
@@ -41,13 +86,19 @@ export interface DecideProactiveResult {
41
86
  * call and records the emission.
42
87
  */
43
88
  export declare function decideProactiveComment(input: DecideProactiveInput): Promise<DecideProactiveResult>;
44
- /** Build the small-model judge prompt for a view switch. */
45
- export declare function buildProactiveJudgePrompt(payload: ViewSwitchedPayload): string;
89
+ /** Build the small-model judge prompt for an interaction. */
90
+ export declare function buildProactiveJudgePrompt(payload: InteractionPayload): string;
91
+ /** Parse the judge model output into a typed offer or null. */
92
+ export declare function parseProactiveJudgeDecisionOutput(raw: unknown): ProactiveOffer | null;
46
93
  /** Parse the judge model output into an offer string or null. */
47
94
  export declare function parseProactiveJudgeOutput(raw: unknown): string | null;
48
95
  export interface ProactiveDeciderWiring {
49
96
  /** Route an admitted comment to the user (proactive-message pipeline). */
50
97
  route: (text: string) => Promise<void>;
98
+ /** Route an admitted low-urgency offer to the notification rail. */
99
+ notify?: (offer: ProactiveOffer) => Promise<void>;
100
+ /** Suppress comments while a foreground chat turn is already speaking/typing. */
101
+ shouldSuppress?: () => boolean;
51
102
  gate: ProactiveInteractionGate;
52
103
  /** Override the clock (tests). */
53
104
  now?: () => number;
@@ -1 +1 @@
1
- {"version":3,"file":"proactive-interaction-decider.d.ts","sourceRoot":"","sources":["../../src/services/proactive-interaction-decider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAEL,KAAK,aAAa,EAGlB,KAAK,mBAAmB,EACzB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,KAAK,wBAAwB,EAE9B,MAAM,iCAAiC,CAAC;AAEzC,mEAAmE;AACnE,eAAO,MAAM,4BAA4B,0BAA0B,CAAC;AAEpE,2EAA2E;AAC3E,MAAM,MAAM,cAAc,GAAG,CAC3B,OAAO,EAAE,mBAAmB,KACzB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AAE5B,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,mBAAmB,CAAC;IAC7B,IAAI,EAAE,wBAAwB,CAAC;IAC/B,KAAK,EAAE,cAAc,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,qBAAqB;IACpC,gEAAgE;IAChE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,qBAAqB,CAAC,CAuBhC;AASD,4DAA4D;AAC5D,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,mBAAmB,GAC3B,MAAM,CAGR;AAED,iEAAiE;AACjE,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAqBrE;AAED,MAAM,WAAW,sBAAsB;IACrC,0EAA0E;IAC1E,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,EAAE,wBAAwB,CAAC;IAC/B,kCAAkC;IAClC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,mCAAmC,CACjD,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,sBAAsB,GAC7B,IAAI,CAoDN"}
1
+ {"version":3,"file":"proactive-interaction-decider.d.ts","sourceRoot":"","sources":["../../src/services/proactive-interaction-decider.ts"],"names":[],"mappings":"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"}