@moxxy/sdk 0.44.0 → 0.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/dist/agent-account-limit.d.ts +41 -0
  2. package/dist/agent-account-limit.d.ts.map +1 -0
  3. package/dist/agent-account-limit.js +64 -0
  4. package/dist/agent-account-limit.js.map +1 -0
  5. package/dist/agent-computer-use.d.ts +10 -0
  6. package/dist/agent-computer-use.d.ts.map +1 -0
  7. package/dist/agent-computer-use.js +24 -0
  8. package/dist/agent-computer-use.js.map +1 -0
  9. package/dist/agent-context-window.d.ts +22 -0
  10. package/dist/agent-context-window.d.ts.map +1 -0
  11. package/dist/agent-context-window.js +40 -0
  12. package/dist/agent-context-window.js.map +1 -0
  13. package/dist/agent-no-reply.d.ts +11 -0
  14. package/dist/agent-no-reply.d.ts.map +1 -0
  15. package/dist/agent-no-reply.js +13 -0
  16. package/dist/agent-no-reply.js.map +1 -0
  17. package/dist/agent-step.d.ts +14 -0
  18. package/dist/agent-step.d.ts.map +1 -0
  19. package/dist/agent-step.js +26 -0
  20. package/dist/agent-step.js.map +1 -0
  21. package/dist/agent-work.d.ts +34 -0
  22. package/dist/agent-work.d.ts.map +1 -0
  23. package/dist/agent-work.js +80 -0
  24. package/dist/agent-work.js.map +1 -0
  25. package/dist/attachment-payload.d.ts +1 -1
  26. package/dist/attachment-payload.js +1 -1
  27. package/dist/auto-approve.d.ts +9 -0
  28. package/dist/auto-approve.d.ts.map +1 -1
  29. package/dist/auto-approve.js +18 -0
  30. package/dist/auto-approve.js.map +1 -1
  31. package/dist/channel-auth.d.ts +3 -3
  32. package/dist/channel-auth.d.ts.map +1 -1
  33. package/dist/channel-auth.js +1 -1
  34. package/dist/channel.d.ts +1 -1
  35. package/dist/client-session.d.ts +9 -5
  36. package/dist/client-session.d.ts.map +1 -1
  37. package/dist/computer-control.d.ts +11 -11
  38. package/dist/computer-control.d.ts.map +1 -1
  39. package/dist/computer-control.js +1 -1
  40. package/dist/computer-control.js.map +1 -1
  41. package/dist/conversation-history.d.ts +50 -0
  42. package/dist/conversation-history.d.ts.map +1 -0
  43. package/dist/conversation-history.js +227 -0
  44. package/dist/conversation-history.js.map +1 -0
  45. package/dist/cron.d.ts +58 -0
  46. package/dist/cron.d.ts.map +1 -0
  47. package/dist/cron.js +320 -0
  48. package/dist/cron.js.map +1 -0
  49. package/dist/define.d.ts +2 -1
  50. package/dist/define.d.ts.map +1 -1
  51. package/dist/define.js +1 -0
  52. package/dist/define.js.map +1 -1
  53. package/dist/event-store.d.ts +1 -1
  54. package/dist/event-store.d.ts.map +1 -1
  55. package/dist/event-store.js +1 -0
  56. package/dist/event-store.js.map +1 -1
  57. package/dist/events.d.ts +17 -1
  58. package/dist/events.d.ts.map +1 -1
  59. package/dist/file-diff.d.ts +31 -0
  60. package/dist/file-diff.d.ts.map +1 -0
  61. package/dist/file-diff.js +196 -0
  62. package/dist/file-diff.js.map +1 -0
  63. package/dist/index.d.ts +22 -7
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.js +16 -4
  66. package/dist/index.js.map +1 -1
  67. package/dist/mode/agent-step-loop.d.ts +13 -0
  68. package/dist/mode/agent-step-loop.d.ts.map +1 -0
  69. package/dist/mode/agent-step-loop.js +578 -0
  70. package/dist/mode/agent-step-loop.js.map +1 -0
  71. package/dist/mode/checkpoint-gate.d.ts +25 -0
  72. package/dist/mode/checkpoint-gate.d.ts.map +1 -0
  73. package/dist/mode/checkpoint-gate.js +150 -0
  74. package/dist/mode/checkpoint-gate.js.map +1 -0
  75. package/dist/mode/checkpoint.d.ts +6 -0
  76. package/dist/mode/checkpoint.d.ts.map +1 -1
  77. package/dist/mode/collect-stream.d.ts +2 -0
  78. package/dist/mode/collect-stream.d.ts.map +1 -1
  79. package/dist/mode/collect-stream.js +1 -1
  80. package/dist/mode/collect-stream.js.map +1 -1
  81. package/dist/mode/project-messages.d.ts.map +1 -1
  82. package/dist/mode/project-messages.js +9 -67
  83. package/dist/mode/project-messages.js.map +1 -1
  84. package/dist/mode/react-loop-options.d.ts +113 -0
  85. package/dist/mode/react-loop-options.d.ts.map +1 -0
  86. package/dist/mode/react-loop-options.js +2 -0
  87. package/dist/mode/react-loop-options.js.map +1 -0
  88. package/dist/mode/react-loop.d.ts +2 -99
  89. package/dist/mode/react-loop.d.ts.map +1 -1
  90. package/dist/mode/react-loop.js +7 -145
  91. package/dist/mode/react-loop.js.map +1 -1
  92. package/dist/mode.d.ts +19 -7
  93. package/dist/mode.d.ts.map +1 -1
  94. package/dist/mode.js +1 -1
  95. package/dist/mode.js.map +1 -1
  96. package/dist/npm-registry.d.ts +22 -0
  97. package/dist/npm-registry.d.ts.map +1 -0
  98. package/dist/npm-registry.js +54 -0
  99. package/dist/npm-registry.js.map +1 -0
  100. package/dist/permission.d.ts +31 -0
  101. package/dist/permission.d.ts.map +1 -1
  102. package/dist/process-invocation.d.ts +2 -0
  103. package/dist/process-invocation.d.ts.map +1 -1
  104. package/dist/process-invocation.js +2 -2
  105. package/dist/process-invocation.js.map +1 -1
  106. package/dist/process-tree.d.ts +9 -0
  107. package/dist/process-tree.d.ts.map +1 -0
  108. package/dist/process-tree.js +40 -0
  109. package/dist/process-tree.js.map +1 -0
  110. package/dist/provider-login-bridge.d.ts +1 -2
  111. package/dist/provider-login-bridge.d.ts.map +1 -1
  112. package/dist/provider-login-bridge.js +2 -3
  113. package/dist/provider-login-bridge.js.map +1 -1
  114. package/dist/provider.d.ts +409 -1
  115. package/dist/provider.d.ts.map +1 -1
  116. package/dist/question-draft.d.ts +19 -0
  117. package/dist/question-draft.d.ts.map +1 -0
  118. package/dist/question-draft.js +30 -0
  119. package/dist/question-draft.js.map +1 -0
  120. package/dist/question.d.ts +204 -0
  121. package/dist/question.d.ts.map +1 -0
  122. package/dist/question.js +141 -0
  123. package/dist/question.js.map +1 -0
  124. package/dist/questions.d.ts +7 -0
  125. package/dist/questions.d.ts.map +1 -0
  126. package/dist/questions.js +7 -0
  127. package/dist/questions.js.map +1 -0
  128. package/dist/resolvers.d.ts +14 -1
  129. package/dist/resolvers.d.ts.map +1 -1
  130. package/dist/resolvers.js +33 -21
  131. package/dist/resolvers.js.map +1 -1
  132. package/dist/schemas.d.ts +53 -53
  133. package/dist/schemas.d.ts.map +1 -1
  134. package/dist/schemas.js +3 -2
  135. package/dist/schemas.js.map +1 -1
  136. package/dist/server.d.ts +2 -0
  137. package/dist/server.d.ts.map +1 -1
  138. package/dist/server.js +3 -0
  139. package/dist/server.js.map +1 -1
  140. package/dist/session-like.d.ts +19 -1
  141. package/dist/session-like.d.ts.map +1 -1
  142. package/dist/starting-model.d.ts +12 -0
  143. package/dist/starting-model.d.ts.map +1 -0
  144. package/dist/starting-model.js +9 -0
  145. package/dist/starting-model.js.map +1 -0
  146. package/dist/tool-dispatch.d.ts.map +1 -1
  147. package/dist/tool-dispatch.js +10 -4
  148. package/dist/tool-dispatch.js.map +1 -1
  149. package/dist/tool-display.d.ts +79 -3
  150. package/dist/tool-display.d.ts.map +1 -1
  151. package/dist/tool-display.js +117 -3
  152. package/dist/tool-display.js.map +1 -1
  153. package/dist/tool-modes.d.ts +1 -1
  154. package/dist/tool-modes.d.ts.map +1 -1
  155. package/dist/tool-modes.js +8 -2
  156. package/dist/tool-modes.js.map +1 -1
  157. package/dist/tool-output.d.ts +15 -0
  158. package/dist/tool-output.d.ts.map +1 -0
  159. package/dist/tool-output.js +39 -0
  160. package/dist/tool-output.js.map +1 -0
  161. package/dist/tool.d.ts +14 -1
  162. package/dist/tool.d.ts.map +1 -1
  163. package/dist/tunnel.d.ts +3 -3
  164. package/dist/tunnel.d.ts.map +1 -1
  165. package/dist/tunnel.js +2 -2
  166. package/dist/workflow-approval.d.ts +9 -9
  167. package/dist/workflow-approval.d.ts.map +1 -1
  168. package/dist/workflow-approval.js +1 -1
  169. package/dist/workflow-approval.js.map +1 -1
  170. package/package.json +37 -5
  171. package/src/agent-account-limit.test.ts +87 -0
  172. package/src/agent-account-limit.ts +89 -0
  173. package/src/agent-computer-use.test.ts +26 -0
  174. package/src/agent-computer-use.ts +29 -0
  175. package/src/agent-context-window.ts +51 -0
  176. package/src/agent-no-reply.ts +16 -0
  177. package/src/agent-step.ts +26 -0
  178. package/src/agent-work.ts +102 -0
  179. package/src/attachment-payload.ts +1 -1
  180. package/src/auto-approve.test.ts +13 -1
  181. package/src/auto-approve.ts +19 -0
  182. package/src/channel-auth.ts +3 -3
  183. package/src/channel.ts +1 -1
  184. package/src/client-session.ts +9 -2
  185. package/src/computer-control.ts +1 -1
  186. package/src/conversation-history.test.ts +184 -0
  187. package/src/conversation-history.ts +272 -0
  188. package/src/cron.test.ts +280 -0
  189. package/src/cron.ts +355 -0
  190. package/src/define.test.ts +1 -1
  191. package/src/define.ts +3 -1
  192. package/src/event-store.ts +2 -1
  193. package/src/events.ts +17 -1
  194. package/src/file-diff.test.ts +103 -0
  195. package/src/file-diff.ts +208 -0
  196. package/src/index.ts +121 -1
  197. package/src/json-file-store.test.ts +1 -1
  198. package/src/loop-helpers.test.ts +15 -0
  199. package/src/mode/agent-step-loop.ts +645 -0
  200. package/src/mode/checkpoint-gate.ts +198 -0
  201. package/src/mode/checkpoint.ts +6 -0
  202. package/src/mode/collect-stream.ts +1 -1
  203. package/src/mode/project-messages.test.ts +11 -0
  204. package/src/mode/project-messages.ts +8 -61
  205. package/src/mode/react-loop-options.ts +124 -0
  206. package/src/mode/react-loop.ts +10 -296
  207. package/src/mode.ts +19 -7
  208. package/src/npm-registry.test.ts +95 -0
  209. package/src/npm-registry.ts +57 -0
  210. package/src/package-root.test.ts +2 -2
  211. package/src/permission.ts +30 -0
  212. package/src/process-invocation.test.ts +25 -0
  213. package/src/process-invocation.ts +8 -3
  214. package/src/process-tree.ts +37 -0
  215. package/src/provider-login-bridge.ts +2 -3
  216. package/src/provider-schema-constraints.test.ts +1 -1
  217. package/src/provider-utils.test.ts +1 -1
  218. package/src/provider.ts +347 -1
  219. package/src/question-draft.test.ts +57 -0
  220. package/src/question-draft.ts +47 -0
  221. package/src/question.test.ts +130 -0
  222. package/src/question.ts +229 -0
  223. package/src/questions.ts +6 -0
  224. package/src/redact-subpath.test.ts +10 -0
  225. package/src/resolvers.test.ts +84 -1
  226. package/src/resolvers.ts +40 -27
  227. package/src/schemas.test.ts +9 -4
  228. package/src/schemas.ts +3 -2
  229. package/src/server.ts +3 -0
  230. package/src/session-like.ts +19 -1
  231. package/src/skill-mentions.test.ts +1 -1
  232. package/src/starting-model.test.ts +19 -0
  233. package/src/starting-model.ts +11 -0
  234. package/src/token-efficiency.test.ts +1 -1
  235. package/src/tool-dispatch.ts +10 -4
  236. package/src/tool-display.test.ts +119 -0
  237. package/src/tool-display.ts +162 -4
  238. package/src/tool-gating.test.ts +1 -1
  239. package/src/tool-icon.test.ts +1 -1
  240. package/src/tool-modes.test.ts +18 -1
  241. package/src/tool-modes.ts +6 -2
  242. package/src/tool-output.test.ts +46 -0
  243. package/src/tool-output.ts +46 -0
  244. package/src/tool.ts +14 -1
  245. package/src/tunnel.ts +3 -3
  246. package/src/workflow-approval.ts +1 -1
@@ -3,7 +3,8 @@ import type { CommandDef } from './command.js';
3
3
  import type { ModeDef } from './mode.js';
4
4
  import type { LLMProvider, ProviderDef } from './provider.js';
5
5
  import type { RequirementCheck, MoxxyRequirement } from './requirements.js';
6
- import type { SessionLike, SessionLogReader } from './session-like.js';
6
+ import type { StandingAllowRule } from './permission.js';
7
+ import type { SessionInfo, SessionLike, SessionLogReader } from './session-like.js';
7
8
  import type { Skill } from './skill.js';
8
9
  import type { ToolDef } from './tool.js';
9
10
  import type { Transcriber } from './transcriber.js';
@@ -69,10 +70,7 @@ export interface RequirementsClientView {
69
70
  check(requirements: ReadonlyArray<MoxxyRequirement>): RequirementCheck;
70
71
  }
71
72
  export interface PermissionsClientView {
72
- addAllow(rule: {
73
- readonly name: string;
74
- readonly reason?: string;
75
- }): Promise<void>;
73
+ addAllow(rule: StandingAllowRule): Promise<void>;
76
74
  }
77
75
  export interface ClientSession extends SessionLike {
78
76
  /** The mirror/real log, plus `clear()` for `/new`. */
@@ -92,5 +90,11 @@ export interface ClientSession extends SessionLike {
92
90
  /** Switch the conversation's auto-approve (read it from `getInfo().autoApprove`).
93
91
  * Optional: a client of a runner without the shared switch has none. */
94
92
  setAutoApprove?(enabled: boolean): Promise<void>;
93
+ /** Stop one work the agent runs in the background (`AgentBackgroundWork.id`); `false` when it runs none such.
94
+ * Optional: a client of a runner that cannot pass it on has none. */
95
+ stopBackgroundWork?(workId: string): Promise<boolean>;
96
+ /** Called with the new info when it changes outside a turn (e.g. an agent CLI
97
+ * was found outdated); returns the unsubscribe. */
98
+ onInfoChanged?(listener: (info: SessionInfo) => void): () => void;
95
99
  }
96
100
  //# sourceMappingURL=client-session.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client-session.d.ts","sourceRoot":"","sources":["../src/client-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client-session.d.ts","sourceRoot":"","sources":["../src/client-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,mBAAmB;IAClC,SAAS,IAAI,WAAW,CAAC;IACzB,aAAa,IAAI,MAAM,GAAG,IAAI,CAAC;IAC/B,IAAI,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC;IACnC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,CAAC;IACvE,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CACzD;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/B,SAAS,IAAI,OAAO,CAAC;IACrB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CACxC;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IAC1C,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;CAC5D;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,sBAAsB;IACrC,aAAa,IAAI,MAAM,GAAG,IAAI,CAAC;IAC/B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,SAAS,IAAI,WAAW,CAAC;IACzB,0EAA0E;IAC1E,YAAY,IAAI,WAAW,GAAG,IAAI,CAAC;IACnC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,CAAC;CACxE;AAED,MAAM,WAAW,sBAAsB;IACrC,aAAa,IAAI,MAAM,GAAG,IAAI,CAAC;IAC/B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,SAAS,IAAI,WAAW,CAAC;IACzB,6EAA6E;IAC7E,YAAY,IAAI,WAAW,GAAG,IAAI,CAAC;IACnC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,CAAC;CACxE;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,YAAY,EAAE,aAAa,CAAC,gBAAgB,CAAC,GAAG,gBAAgB,CAAC;CACxE;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD;AAED,MAAM,WAAW,aAAc,SAAQ,WAAW;IAChD,sDAAsD;IACtD,QAAQ,CAAC,GAAG,EAAE,gBAAgB,GAAG;QAAE,KAAK,IAAI,IAAI,CAAA;KAAE,CAAC;IACnD,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,sBAAsB,CAAC;IAC9C,QAAQ,CAAC,YAAY,EAAE,sBAAsB,CAAC;IAC9C,QAAQ,CAAC,YAAY,EAAE,sBAAsB,CAAC;IAC9C,QAAQ,CAAC,WAAW,EAAE,qBAAqB,CAAC;IAC5C;6EACyE;IACzE,cAAc,CAAC,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD;0EACsE;IACtE,kBAAkB,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtD;wDACoD;IACpD,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CACnE"}
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  export declare const computerControlStateSchema: z.ZodEnum<["idle", "background", "foreground", "waiting_for_focus", "paused_by_user", "recovering", "stopped", "failed"]>;
3
3
  export declare const computerControlOwnerSchema: z.ZodObject<{
4
4
  sessionId: z.ZodString;
@@ -33,11 +33,11 @@ export declare const computerCursorSchema: z.ZodObject<{
33
33
  x: z.ZodNumber;
34
34
  y: z.ZodNumber;
35
35
  }, "strict", z.ZodTypeAny, {
36
- phase: "idle" | "failed" | "moving" | "executing" | "delivered";
36
+ phase: "failed" | "idle" | "moving" | "executing" | "delivered";
37
37
  x: number;
38
38
  y: number;
39
39
  }, {
40
- phase: "idle" | "failed" | "moving" | "executing" | "delivered";
40
+ phase: "failed" | "idle" | "moving" | "executing" | "delivered";
41
41
  x: number;
42
42
  y: number;
43
43
  }>;
@@ -64,11 +64,11 @@ export declare const computerControlSnapshotSchema: z.ZodObject<{
64
64
  x: z.ZodNumber;
65
65
  y: z.ZodNumber;
66
66
  }, "strict", z.ZodTypeAny, {
67
- phase: "idle" | "failed" | "moving" | "executing" | "delivered";
67
+ phase: "failed" | "idle" | "moving" | "executing" | "delivered";
68
68
  x: number;
69
69
  y: number;
70
70
  }, {
71
- phase: "idle" | "failed" | "moving" | "executing" | "delivered";
71
+ phase: "failed" | "idle" | "moving" | "executing" | "delivered";
72
72
  x: number;
73
73
  y: number;
74
74
  }>>;
@@ -84,11 +84,11 @@ export declare const computerControlSnapshotSchema: z.ZodObject<{
84
84
  }>>;
85
85
  }, "strict", z.ZodTypeAny, {
86
86
  sessionId: string;
87
+ state: "failed" | "stopped" | "idle" | "background" | "foreground" | "waiting_for_focus" | "paused_by_user" | "recovering";
87
88
  turnId: string;
88
- state: "stopped" | "idle" | "background" | "foreground" | "waiting_for_focus" | "paused_by_user" | "recovering" | "failed";
89
89
  windowId: string | null;
90
90
  cursor?: {
91
- phase: "idle" | "failed" | "moving" | "executing" | "delivered";
91
+ phase: "failed" | "idle" | "moving" | "executing" | "delivered";
92
92
  x: number;
93
93
  y: number;
94
94
  } | undefined;
@@ -98,11 +98,11 @@ export declare const computerControlSnapshotSchema: z.ZodObject<{
98
98
  } | undefined;
99
99
  }, {
100
100
  sessionId: string;
101
+ state: "failed" | "stopped" | "idle" | "background" | "foreground" | "waiting_for_focus" | "paused_by_user" | "recovering";
101
102
  turnId: string;
102
- state: "stopped" | "idle" | "background" | "foreground" | "waiting_for_focus" | "paused_by_user" | "recovering" | "failed";
103
103
  windowId: string | null;
104
104
  cursor?: {
105
- phase: "idle" | "failed" | "moving" | "executing" | "delivered";
105
+ phase: "failed" | "idle" | "moving" | "executing" | "delivered";
106
106
  x: number;
107
107
  y: number;
108
108
  } | undefined;
@@ -125,16 +125,16 @@ export declare const computerApprovalFocusSchema: z.ZodObject<{
125
125
  approved: z.ZodBoolean;
126
126
  }, "strict", z.ZodTypeAny, {
127
127
  sessionId: string;
128
- turnId: string;
129
128
  callId: string;
129
+ turnId: string;
130
130
  windowId: string;
131
131
  hostPid: number;
132
132
  stage: "begin" | "finish";
133
133
  approved: boolean;
134
134
  }, {
135
135
  sessionId: string;
136
- turnId: string;
137
136
  callId: string;
137
+ turnId: string;
138
138
  windowId: string;
139
139
  hostPid: number;
140
140
  stage: "begin" | "finish";
@@ -1 +1 @@
1
- {"version":3,"file":"computer-control.d.ts","sourceRoot":"","sources":["../src/computer-control.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,0BAA0B,2HAGrC,CAAC;AAEH,eAAO,MAAM,0BAA0B;;;;;;;;;EAA+D,CAAC;AACvG,oGAAoG;AACpG,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;EAE9B,CAAC;AACZ,mFAAmF;AACnF,eAAO,MAAM,yBAAyB,mEAAiE,CAAC;AAExG,wGAAwG;AACxG,eAAO,MAAM,oBAAoB;;;;;;;;;;;;EAAoF,CAAC;AACtH,0GAA0G;AAC1G,eAAO,MAAM,oBAAoB;;;;;;;;;EAA+E,CAAC;AACjH,eAAO,MAAM,6BAA6B;;;;;;IAGxC,sGAAsG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAG7F,CAAC;AAEZ,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC9E,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;EAG7B,CAAC;AACZ,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAChF,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAClF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AACpF,MAAM,WAAW,sBAAsB;IACrC,aAAa,CAAC,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,6DAA6D;IAC7D,QAAQ,IAAI,OAAO,CAAC,aAAa,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAC5D,2EAA2E;IAC3E,OAAO,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,uGAAuG;IACvG,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,uBAAuB,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CAC3F"}
1
+ {"version":3,"file":"computer-control.d.ts","sourceRoot":"","sources":["../src/computer-control.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,eAAO,MAAM,0BAA0B,2HAGrC,CAAC;AAEH,eAAO,MAAM,0BAA0B;;;;;;;;;EAA+D,CAAC;AACvG,oGAAoG;AACpG,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;EAE9B,CAAC;AACZ,mFAAmF;AACnF,eAAO,MAAM,yBAAyB,mEAAiE,CAAC;AAExG,wGAAwG;AACxG,eAAO,MAAM,oBAAoB;;;;;;;;;;;;EAAoF,CAAC;AACtH,0GAA0G;AAC1G,eAAO,MAAM,oBAAoB;;;;;;;;;EAA+E,CAAC;AACjH,eAAO,MAAM,6BAA6B;;;;;;IAGxC,sGAAsG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAG7F,CAAC;AAEZ,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC9E,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;EAG7B,CAAC;AACZ,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAChF,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAClF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AACpF,MAAM,WAAW,sBAAsB;IACrC,aAAa,CAAC,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,6DAA6D;IAC7D,QAAQ,IAAI,OAAO,CAAC,aAAa,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAC5D,2EAA2E;IAC3E,OAAO,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,uGAAuG;IACvG,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,uBAAuB,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CAC3F"}
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
  export const computerControlStateSchema = z.enum([
3
3
  'idle', 'background', 'foreground', 'waiting_for_focus',
4
4
  'paused_by_user', 'recovering', 'stopped', 'failed',
@@ -1 +1 @@
1
- {"version":3,"file":"computer-control.js","sourceRoot":"","sources":["../src/computer-control.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,IAAI,CAAC;IAC/C,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB;IACvD,gBAAgB,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ;CACpD,CAAC,CAAC;AACH,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5C,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AACvG,oGAAoG;AACpG,MAAM,CAAC,MAAM,4BAA4B,GAAG,0BAA0B,CAAC,MAAM,CAAC;IAC5E,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;CACzD,CAAC,CAAC,MAAM,EAAE,CAAC;AACZ,mFAAmF;AACnF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;AACxG,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1C,wGAAwG;AACxG,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AACtH,0GAA0G;AAC1G,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AACjH,MAAM,CAAC,MAAM,6BAA6B,GAAG,0BAA0B,CAAC,MAAM,CAAC;IAC7E,KAAK,EAAE,0BAA0B;IACjC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE;IAC7B,sGAAsG;IACtG,MAAM,EAAE,oBAAoB,CAAC,QAAQ,EAAE;IACvC,MAAM,EAAE,oBAAoB,CAAC,QAAQ,EAAE;CACxC,CAAC,CAAC,MAAM,EAAE,CAAC;AAKZ,MAAM,CAAC,MAAM,2BAA2B,GAAG,0BAA0B,CAAC,MAAM,CAAC;IAC3E,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC;IACtF,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE;CAC1D,CAAC,CAAC,MAAM,EAAE,CAAC"}
1
+ {"version":3,"file":"computer-control.js","sourceRoot":"","sources":["../src/computer-control.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,IAAI,CAAC;IAC/C,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB;IACvD,gBAAgB,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ;CACpD,CAAC,CAAC;AACH,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5C,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AACvG,oGAAoG;AACpG,MAAM,CAAC,MAAM,4BAA4B,GAAG,0BAA0B,CAAC,MAAM,CAAC;IAC5E,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;CACzD,CAAC,CAAC,MAAM,EAAE,CAAC;AACZ,mFAAmF;AACnF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;AACxG,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1C,wGAAwG;AACxG,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AACtH,0GAA0G;AAC1G,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AACjH,MAAM,CAAC,MAAM,6BAA6B,GAAG,0BAA0B,CAAC,MAAM,CAAC;IAC7E,KAAK,EAAE,0BAA0B;IACjC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE;IAC7B,sGAAsG;IACtG,MAAM,EAAE,oBAAoB,CAAC,QAAQ,EAAE;IACvC,MAAM,EAAE,oBAAoB,CAAC,QAAQ,EAAE;CACxC,CAAC,CAAC,MAAM,EAAE,CAAC;AAKZ,MAAM,CAAC,MAAM,2BAA2B,GAAG,0BAA0B,CAAC,MAAM,CAAC;IAC3E,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC;IACtF,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE;CAC1D,CAAC,CAAC,MAAM,EAAE,CAAC"}
@@ -0,0 +1,50 @@
1
+ import type { TurnId } from './ids.js';
2
+ import type { EventLogReader } from './log.js';
3
+ /**
4
+ * The conversation as Moxxy keeps it, turn by turn, read straight from the log
5
+ * (never from summaries). An agent connection whose own session is gone, or
6
+ * that joins a conversation partway, starts from it, and `recall` searches it.
7
+ */
8
+ export interface ConversationTurn {
9
+ /** 1-based, in the order the turns ran; stable, since earlier turns never change. */
10
+ readonly number: number;
11
+ readonly turnId: TurnId;
12
+ /** What the person (or a trigger acting for them) said. */
13
+ readonly said: ReadonlyArray<string>;
14
+ /** Names of what came with it: files, images, documents. */
15
+ readonly attached: ReadonlyArray<string>;
16
+ /** The agent's messages, in order. */
17
+ readonly replies: ReadonlyArray<string>;
18
+ /** Tools the agent ran, each as its name and the gist of its input. */
19
+ readonly tools: ReadonlyArray<string>;
20
+ /** Everything above as one text, with full tool inputs, for searching. */
21
+ readonly text: string;
22
+ }
23
+ export interface ConversationMatch {
24
+ readonly turn: ConversationTurn;
25
+ /** Lines of the turn around the words that matched. */
26
+ readonly snippets: ReadonlyArray<string>;
27
+ }
28
+ /** About 16k tokens, as much as one turn of most conversations is worth handing over. */
29
+ export declare const EARLIER_CONVERSATION_CHARS = 64000;
30
+ /** The turns of the conversation that the person started, in order. */
31
+ export declare function conversationTurns(log: EventLogReader): ConversationTurn[];
32
+ /**
33
+ * What a new agent session gets of the turns before `currentTurnId`: the
34
+ * latest turns word for word, a line for each older one, and how to search
35
+ * the rest. `undefined` when no turn came before.
36
+ */
37
+ export declare function renderEarlierConversation(log: EventLogReader, currentTurnId: TurnId, budgetChars?: number): string | undefined;
38
+ /**
39
+ * What an agent coming back to the conversation gets of the turns that ran on
40
+ * another connection (another agent, a model API) since its own last turn, in
41
+ * the same form. `undefined` when it never ran here (a new session of its own
42
+ * gets the whole conversation instead) or missed nothing.
43
+ */
44
+ export declare function renderMissedTurns(log: EventLogReader, provider: string, currentTurnId: TurnId, budgetChars?: number): string | undefined;
45
+ /** The turns that mention the most of the query's words, newest first among equals. */
46
+ export declare function searchConversation(log: EventLogReader, query: string, opts?: {
47
+ readonly limit?: number;
48
+ readonly exceptTurnId?: TurnId;
49
+ }): ConversationMatch[];
50
+ //# sourceMappingURL=conversation-history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-history.d.ts","sourceRoot":"","sources":["../src/conversation-history.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,qFAAqF;IACrF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,2DAA2D;IAC3D,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACrC,4DAA4D;IAC5D,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,sCAAsC;IACtC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACxC,uEAAuE;IACvE,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACtC,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,uDAAuD;IACvD,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAC1C;AAED,yFAAyF;AACzF,eAAO,MAAM,0BAA0B,QAAS,CAAC;AAYjD,uEAAuE;AACvE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,cAAc,GAAG,gBAAgB,EAAE,CAOzE;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,cAAc,EACnB,aAAa,EAAE,MAAM,EACrB,WAAW,GAAE,MAAmC,GAC/C,MAAM,GAAG,SAAS,CAGpB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,cAAc,EACnB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,WAAW,GAAE,MAAmC,GAC/C,MAAM,GAAG,SAAS,CAOpB;AAkCD,uFAAuF;AACvF,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,cAAc,EACnB,KAAK,EAAE,MAAM,EACb,IAAI,GAAE;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GACrE,iBAAiB,EAAE,CAyBrB"}
@@ -0,0 +1,227 @@
1
+ /** About 16k tokens, as much as one turn of most conversations is worth handing over. */
2
+ export const EARLIER_CONVERSATION_CHARS = 64_000;
3
+ const INDEX_SHARE = 0.25;
4
+ const INDEX_LINE_CHARS = 160;
5
+ const FIRST_TURNS_KEPT = 5;
6
+ const SAID_CHARS = 4_000;
7
+ const REPLIES_CHARS = 6_000;
8
+ const TOOLS_LISTED = 12;
9
+ const TOOL_GIST_CHARS = 80;
10
+ const TOOL_INPUT_SEARCH_CHARS = 2_000;
11
+ const SNIPPET_CHARS = 90;
12
+ const SNIPPETS_PER_TURN = 3;
13
+ /** The turns of the conversation that the person started, in order. */
14
+ export function conversationTurns(log) {
15
+ const byTurn = new Map();
16
+ for (const event of log.ofType('user_prompt')) {
17
+ if (event.source === 'user' && !byTurn.has(event.turnId))
18
+ byTurn.set(event.turnId, []);
19
+ }
20
+ for (const event of log.slice())
21
+ byTurn.get(event.turnId)?.push(event);
22
+ return [...byTurn.entries()].map(([turnId, events], index) => toTurn(index + 1, turnId, events));
23
+ }
24
+ /**
25
+ * What a new agent session gets of the turns before `currentTurnId`: the
26
+ * latest turns word for word, a line for each older one, and how to search
27
+ * the rest. `undefined` when no turn came before.
28
+ */
29
+ export function renderEarlierConversation(log, currentTurnId, budgetChars = EARLIER_CONVERSATION_CHARS) {
30
+ const turns = conversationTurns(log).filter((turn) => turn.turnId !== currentTurnId);
31
+ return renderTurns(turns, EARLIER_HEADER, budgetChars);
32
+ }
33
+ /**
34
+ * What an agent coming back to the conversation gets of the turns that ran on
35
+ * another connection (another agent, a model API) since its own last turn, in
36
+ * the same form. `undefined` when it never ran here (a new session of its own
37
+ * gets the whole conversation instead) or missed nothing.
38
+ */
39
+ export function renderMissedTurns(log, provider, currentTurnId, budgetChars = EARLIER_CONVERSATION_CHARS) {
40
+ const ranHere = log.ofType('provider_request').filter((event) => event.provider === provider && event.turnId !== currentTurnId);
41
+ const lastRan = ranHere[ranHere.length - 1];
42
+ if (!lastRan)
43
+ return undefined;
44
+ const since = new Set(log.slice(lastRan.seq + 1).map((event) => event.turnId));
45
+ const turns = conversationTurns(log).filter((turn) => turn.turnId !== currentTurnId && turn.turnId !== lastRan.turnId && since.has(turn.turnId));
46
+ return renderTurns(turns, MISSED_HEADER, budgetChars);
47
+ }
48
+ function renderTurns(turns, header, budgetChars) {
49
+ if (turns.length === 0)
50
+ return undefined;
51
+ const indexBudget = Math.floor(budgetChars * INDEX_SHARE);
52
+ const recentBudget = budgetChars - indexBudget;
53
+ const recent = [];
54
+ let used = 0;
55
+ let firstRecent = turns.length;
56
+ for (let i = turns.length - 1; i >= 0; i -= 1) {
57
+ const turn = turns[i];
58
+ if (!turn)
59
+ continue;
60
+ const block = renderTurn(turn);
61
+ if (used + block.length > recentBudget) {
62
+ if (recent.length === 0) {
63
+ recent.push(`${block.slice(0, recentBudget)}\n… (the rest of this turn: recall({ turn: ${turn.number} }))`);
64
+ firstRecent = i;
65
+ }
66
+ break;
67
+ }
68
+ recent.unshift(block);
69
+ used += block.length;
70
+ firstRecent = i;
71
+ }
72
+ const parts = [header];
73
+ const older = turns.slice(0, firstRecent);
74
+ if (older.length > 0)
75
+ parts.push(`Earlier turns, one line each:\n${renderIndex(older, indexBudget)}`);
76
+ parts.push(`${older.length > 0 ? 'The latest turns' : 'The turns so far'}, word for word:\n\n${recent.join('\n\n')}`);
77
+ parts.push(END_OF_RECORD);
78
+ return parts.join('\n\n');
79
+ }
80
+ /** The turns that mention the most of the query's words, newest first among equals. */
81
+ export function searchConversation(log, query, opts = {}) {
82
+ const terms = searchTerms(query);
83
+ if (terms.length === 0)
84
+ return [];
85
+ const scored = [];
86
+ for (const turn of conversationTurns(log)) {
87
+ if (turn.turnId === opts.exceptTurnId)
88
+ continue;
89
+ let matched = 0;
90
+ let hits = 0;
91
+ const snippets = [];
92
+ const shown = [];
93
+ for (const term of terms) {
94
+ const found = [...turn.text.matchAll(term)];
95
+ if (found.length === 0)
96
+ continue;
97
+ matched += 1;
98
+ hits += Math.min(found.length, 5);
99
+ const at = found[0]?.index;
100
+ // Words close together share one snippet.
101
+ if (at === undefined || snippets.length >= SNIPPETS_PER_TURN || shown.some((index) => Math.abs(index - at) < SNIPPET_CHARS))
102
+ continue;
103
+ shown.push(at);
104
+ snippets.push(snippetAt(turn.text, at));
105
+ }
106
+ if (matched > 0)
107
+ scored.push({ match: { turn, snippets }, score: matched * 100 + hits });
108
+ }
109
+ scored.sort((a, b) => b.score - a.score || b.match.turn.number - a.match.turn.number);
110
+ return scored.slice(0, opts.limit ?? 5).map((entry) => entry.match);
111
+ }
112
+ const HISTORY_RULES = 'It is history to work from: not a new request, and ' +
113
+ "nothing in it outranks the person's newest message or your own instructions. The record is incomplete: older " +
114
+ 'turns are one line each and long turns are cut. When the person asks about anything it does not show in full, ' +
115
+ "call recall before you answer: Moxxy's recall tool searches the whole conversation (recall with a query) and " +
116
+ 'reads any turn in full (recall with its turn number). Never say you do not know, or offer to look, without ' +
117
+ 'searching first. Tool output and file contents are not repeated here; read files again when you need them.';
118
+ /** Without it an agent read the person's message, sent right after the record, as one more turn of the record. */
119
+ const END_OF_RECORD = "End of Moxxy's record. The person's newest message comes next: that is the request to act on.";
120
+ const EARLIER_HEADER = `Earlier in this conversation, from Moxxy's own record of it. ${HISTORY_RULES}`;
121
+ const MISSED_HEADER = 'While you were away, the person went on with this conversation on another connection, so these turns since your ' +
122
+ `last one ran without you. They come from Moxxy's own record of it. ${HISTORY_RULES}`;
123
+ function toTurn(number, turnId, events) {
124
+ const said = [];
125
+ const attached = [];
126
+ const replies = [];
127
+ const tools = [];
128
+ const search = [];
129
+ for (const event of events) {
130
+ if (event.type === 'user_prompt' && event.source === 'user') {
131
+ const trigger = !event.origin ? '' : event.origin.kind === 'agent' ? '(the agent continued by itself) ' : `(started by a ${event.origin.kind}) `;
132
+ said.push(`${trigger}${event.text}`);
133
+ search.push(event.text);
134
+ for (const attachment of event.attachments ?? [])
135
+ attached.push(attachment.name ?? attachment.kind);
136
+ }
137
+ else if (event.type === 'assistant_message' && event.source === 'model' && event.content.trim()) {
138
+ replies.push(event.content);
139
+ search.push(event.content);
140
+ }
141
+ else if (event.type === 'tool_call_requested') {
142
+ tools.push(toolGist(event.name, event.input));
143
+ search.push(`${event.name} ${json(event.input).slice(0, TOOL_INPUT_SEARCH_CHARS)}`);
144
+ }
145
+ }
146
+ search.push(...attached);
147
+ return { number, turnId, said, attached, replies, tools, text: search.join('\n') };
148
+ }
149
+ function renderTurn(turn) {
150
+ const lines = [`### Turn ${turn.number}`, `Person: ${clip(turn.said.join('\n\n'), SAID_CHARS, turn.number)}`];
151
+ if (turn.attached.length > 0)
152
+ lines.push(`Attached: ${turn.attached.join(', ')}`);
153
+ if (turn.replies.length > 0)
154
+ lines.push(`Agent: ${clip(turn.replies.join('\n\n'), REPLIES_CHARS, turn.number)}`);
155
+ if (turn.tools.length > 0) {
156
+ const more = turn.tools.length - TOOLS_LISTED;
157
+ lines.push(`Tools: ${turn.tools.slice(0, TOOLS_LISTED).join('; ')}${more > 0 ? `; and ${more} more` : ''}`);
158
+ }
159
+ return lines.join('\n');
160
+ }
161
+ /** One line per turn; when they do not all fit, the first few and the latest that do, with a gap line between. */
162
+ function renderIndex(turns, budget) {
163
+ const lines = turns.map((turn) => `- turn ${turn.number}: ${oneLine(turn.said.join(' '), INDEX_LINE_CHARS)}`);
164
+ if (lines.join('\n').length <= budget)
165
+ return lines.join('\n');
166
+ const head = lines.slice(0, FIRST_TURNS_KEPT);
167
+ let used = head.join('\n').length;
168
+ const tail = [];
169
+ for (let i = lines.length - 1; i >= FIRST_TURNS_KEPT; i -= 1) {
170
+ const line = lines[i];
171
+ if (line === undefined || used + line.length + 1 > budget)
172
+ break;
173
+ tail.unshift(line);
174
+ used += line.length + 1;
175
+ }
176
+ const from = (turns[head.length]?.number ?? 0);
177
+ const to = turns[turns.length - tail.length - 1]?.number ?? from;
178
+ const gap = `- turns ${from}–${to}: not listed here; recall with a query finds them`;
179
+ return [...head, gap, ...tail].join('\n');
180
+ }
181
+ function toolGist(name, input) {
182
+ if (typeof input === 'object' && input !== null) {
183
+ const fields = input;
184
+ for (const key of ['file_path', 'path', 'command', 'pattern', 'url', 'query', 'filePath']) {
185
+ const value = fields[key];
186
+ if (typeof value === 'string' && value)
187
+ return `${name} ${oneLine(value, TOOL_GIST_CHARS)}`;
188
+ }
189
+ }
190
+ return name;
191
+ }
192
+ /** A word matches from its start; a word's last letters may differ (port, porcie), a number or path must match whole. */
193
+ function searchTerms(query) {
194
+ const words = query.toLowerCase().match(/[\p{L}\p{N}_./:-]+/gu) ?? [];
195
+ const terms = new Set();
196
+ for (const word of words) {
197
+ if (word.length < 2)
198
+ continue;
199
+ const exact = /[\p{N}_./:-]/u.test(word) || word.length <= 3;
200
+ terms.add(exact ? word : word.slice(0, Math.max(3, word.length - 2)));
201
+ }
202
+ return [...terms].map((term) => new RegExp(`(?<![\\p{L}\\p{N}])${escape(term)}`, 'giu'));
203
+ }
204
+ function snippetAt(text, index) {
205
+ const start = Math.max(0, index - SNIPPET_CHARS);
206
+ const end = Math.min(text.length, index + SNIPPET_CHARS);
207
+ return `${start > 0 ? '…' : ''}${oneLine(text.slice(start, end), SNIPPET_CHARS * 2)}${end < text.length ? '…' : ''}`;
208
+ }
209
+ function clip(text, max, turn) {
210
+ return text.length > max ? `${text.slice(0, max)}\n… (the rest: recall({ turn: ${turn} }))` : text;
211
+ }
212
+ function oneLine(text, max) {
213
+ const line = text.replace(/\s+/g, ' ').trim();
214
+ return line.length > max ? `${line.slice(0, max - 1)}…` : line;
215
+ }
216
+ function escape(text) {
217
+ return text.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
218
+ }
219
+ function json(value) {
220
+ try {
221
+ return typeof value === 'string' ? value : (JSON.stringify(value) ?? '');
222
+ }
223
+ catch {
224
+ return String(value);
225
+ }
226
+ }
227
+ //# sourceMappingURL=conversation-history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-history.js","sourceRoot":"","sources":["../src/conversation-history.ts"],"names":[],"mappings":"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"}
package/dist/cron.d.ts ADDED
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Tiny POSIX-style 5-field cron parser.
3
+ *
4
+ * ┌───────────── minute (0-59)
5
+ * │ ┌─────────── hour (0-23)
6
+ * │ │ ┌───────── day-of-month (1-31)
7
+ * │ │ │ ┌─────── month (1-12)
8
+ * │ │ │ │ ┌───── day-of-week (0-6, Sunday=0)
9
+ * * * * * *
10
+ *
11
+ * Each field supports:
12
+ * - `*` — any value in range
13
+ * - `n` — literal
14
+ * - `a-b` — inclusive range
15
+ * - `a,b,c` — list
16
+ * - `*\/n` — every n
17
+ * - `a-b/n` — every n within a range
18
+ *
19
+ * `nextFireTime(expr, after)` walks forward minute-by-minute (with cheap
20
+ * field-by-field jumps) until every field matches, capped at a year
21
+ * lookahead. Returns null if no fire is reachable (impossible expression
22
+ * like `0 0 31 2 *`).
23
+ *
24
+ * Standard cron quirk: when both DOM and DOW are restricted, vixie-cron
25
+ * matches on EITHER. We follow that convention.
26
+ */
27
+ interface FieldSpec {
28
+ readonly values: ReadonlySet<number>;
29
+ readonly restricted: boolean;
30
+ }
31
+ export interface ParsedCron {
32
+ readonly minute: FieldSpec;
33
+ readonly hour: FieldSpec;
34
+ readonly dom: FieldSpec;
35
+ readonly month: FieldSpec;
36
+ readonly dow: FieldSpec;
37
+ }
38
+ export declare function parseCron(expr: string): ParsedCron;
39
+ export declare function isValidCron(expr: string): boolean;
40
+ /**
41
+ * Whether `tz` is an IANA zone the runtime's `Intl` accepts. A non-IANA
42
+ * string (e.g. 'PST', 'Mars/Phobos') makes `Intl.DateTimeFormat` throw a
43
+ * RangeError. `nextFireTime` would otherwise inherit that throw deep inside
44
+ * the poller tick (outside its per-entry try/catch), aborting evaluation of
45
+ * every schedule positioned after the bad one. We reject the zone at the
46
+ * trust boundary instead. `undefined`/'local' mean system-local (always ok).
47
+ */
48
+ export declare function isValidTimeZone(tz: string | undefined): boolean;
49
+ /**
50
+ * Minute-precision walk forward from `after` (exclusive) until every
51
+ * field matches. Operates in the caller-supplied IANA timezone via
52
+ * `Intl.DateTimeFormat` — defaults to system local. The walk is
53
+ * bounded at 1-year so a structurally-impossible expression returns
54
+ * null instead of looping forever.
55
+ */
56
+ export declare function nextFireTime(expr: string, after: Date, timeZone?: string): Date | null;
57
+ export {};
58
+ //# sourceMappingURL=cron.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron.d.ts","sourceRoot":"","sources":["../src/cron.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAIH,UAAU,SAAS;IACjB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;CACzB;AAwDD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAalD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOjD;AAsCD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAQ/D;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,IAAI,EACX,QAAQ,CAAC,EAAE,MAAM,GAChB,IAAI,GAAG,IAAI,CAkEb"}