@moxxy/sdk 0.43.0 → 0.45.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 +95 -0
  26. package/dist/attachment-payload.d.ts.map +1 -0
  27. package/dist/attachment-payload.js +155 -0
  28. package/dist/attachment-payload.js.map +1 -0
  29. package/dist/auto-approve.d.ts +9 -0
  30. package/dist/auto-approve.d.ts.map +1 -1
  31. package/dist/auto-approve.js +18 -0
  32. package/dist/auto-approve.js.map +1 -1
  33. package/dist/channel-auth.d.ts +3 -3
  34. package/dist/channel-auth.d.ts.map +1 -1
  35. package/dist/channel-auth.js +1 -1
  36. package/dist/channel.d.ts +1 -1
  37. package/dist/client-session.d.ts +9 -5
  38. package/dist/client-session.d.ts.map +1 -1
  39. package/dist/computer-control.d.ts +11 -11
  40. package/dist/computer-control.d.ts.map +1 -1
  41. package/dist/computer-control.js +1 -1
  42. package/dist/computer-control.js.map +1 -1
  43. package/dist/conversation-history.d.ts +50 -0
  44. package/dist/conversation-history.d.ts.map +1 -0
  45. package/dist/conversation-history.js +227 -0
  46. package/dist/conversation-history.js.map +1 -0
  47. package/dist/cron.d.ts +58 -0
  48. package/dist/cron.d.ts.map +1 -0
  49. package/dist/cron.js +320 -0
  50. package/dist/cron.js.map +1 -0
  51. package/dist/define.d.ts +2 -1
  52. package/dist/define.d.ts.map +1 -1
  53. package/dist/define.js +1 -0
  54. package/dist/define.js.map +1 -1
  55. package/dist/event-store.d.ts +1 -1
  56. package/dist/event-store.d.ts.map +1 -1
  57. package/dist/event-store.js +1 -0
  58. package/dist/event-store.js.map +1 -1
  59. package/dist/events.d.ts +23 -1
  60. package/dist/events.d.ts.map +1 -1
  61. package/dist/file-diff.d.ts +31 -0
  62. package/dist/file-diff.d.ts.map +1 -0
  63. package/dist/file-diff.js +196 -0
  64. package/dist/file-diff.js.map +1 -0
  65. package/dist/index.d.ts +23 -7
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +17 -4
  68. package/dist/index.js.map +1 -1
  69. package/dist/mode/agent-step-loop.d.ts +13 -0
  70. package/dist/mode/agent-step-loop.d.ts.map +1 -0
  71. package/dist/mode/agent-step-loop.js +578 -0
  72. package/dist/mode/agent-step-loop.js.map +1 -0
  73. package/dist/mode/checkpoint-gate.d.ts +25 -0
  74. package/dist/mode/checkpoint-gate.d.ts.map +1 -0
  75. package/dist/mode/checkpoint-gate.js +150 -0
  76. package/dist/mode/checkpoint-gate.js.map +1 -0
  77. package/dist/mode/checkpoint.d.ts +6 -0
  78. package/dist/mode/checkpoint.d.ts.map +1 -1
  79. package/dist/mode/collect-stream.d.ts +2 -0
  80. package/dist/mode/collect-stream.d.ts.map +1 -1
  81. package/dist/mode/collect-stream.js +1 -1
  82. package/dist/mode/collect-stream.js.map +1 -1
  83. package/dist/mode/project-messages.d.ts +3 -1
  84. package/dist/mode/project-messages.d.ts.map +1 -1
  85. package/dist/mode/project-messages.js +122 -81
  86. package/dist/mode/project-messages.js.map +1 -1
  87. package/dist/mode/react-loop-options.d.ts +113 -0
  88. package/dist/mode/react-loop-options.d.ts.map +1 -0
  89. package/dist/mode/react-loop-options.js +2 -0
  90. package/dist/mode/react-loop-options.js.map +1 -0
  91. package/dist/mode/react-loop.d.ts +2 -99
  92. package/dist/mode/react-loop.d.ts.map +1 -1
  93. package/dist/mode/react-loop.js +7 -145
  94. package/dist/mode/react-loop.js.map +1 -1
  95. package/dist/mode.d.ts +19 -7
  96. package/dist/mode.d.ts.map +1 -1
  97. package/dist/mode.js +1 -1
  98. package/dist/mode.js.map +1 -1
  99. package/dist/npm-registry.d.ts +22 -0
  100. package/dist/npm-registry.d.ts.map +1 -0
  101. package/dist/npm-registry.js +54 -0
  102. package/dist/npm-registry.js.map +1 -0
  103. package/dist/permission.d.ts +31 -0
  104. package/dist/permission.d.ts.map +1 -1
  105. package/dist/process-invocation.d.ts +2 -0
  106. package/dist/process-invocation.d.ts.map +1 -1
  107. package/dist/process-invocation.js +2 -2
  108. package/dist/process-invocation.js.map +1 -1
  109. package/dist/process-tree.d.ts +9 -0
  110. package/dist/process-tree.d.ts.map +1 -0
  111. package/dist/process-tree.js +40 -0
  112. package/dist/process-tree.js.map +1 -0
  113. package/dist/provider-login-bridge.js +1 -1
  114. package/dist/provider-login-bridge.js.map +1 -1
  115. package/dist/provider.d.ts +408 -0
  116. package/dist/provider.d.ts.map +1 -1
  117. package/dist/question-draft.d.ts +19 -0
  118. package/dist/question-draft.d.ts.map +1 -0
  119. package/dist/question-draft.js +30 -0
  120. package/dist/question-draft.js.map +1 -0
  121. package/dist/question.d.ts +204 -0
  122. package/dist/question.d.ts.map +1 -0
  123. package/dist/question.js +141 -0
  124. package/dist/question.js.map +1 -0
  125. package/dist/questions.d.ts +7 -0
  126. package/dist/questions.d.ts.map +1 -0
  127. package/dist/questions.js +7 -0
  128. package/dist/questions.js.map +1 -0
  129. package/dist/resolvers.d.ts +14 -1
  130. package/dist/resolvers.d.ts.map +1 -1
  131. package/dist/resolvers.js +33 -21
  132. package/dist/resolvers.js.map +1 -1
  133. package/dist/schemas.d.ts +53 -53
  134. package/dist/schemas.d.ts.map +1 -1
  135. package/dist/schemas.js +3 -2
  136. package/dist/schemas.js.map +1 -1
  137. package/dist/server.d.ts +2 -0
  138. package/dist/server.d.ts.map +1 -1
  139. package/dist/server.js +3 -0
  140. package/dist/server.js.map +1 -1
  141. package/dist/session-like.d.ts +19 -1
  142. package/dist/session-like.d.ts.map +1 -1
  143. package/dist/starting-model.d.ts +12 -0
  144. package/dist/starting-model.d.ts.map +1 -0
  145. package/dist/starting-model.js +9 -0
  146. package/dist/starting-model.js.map +1 -0
  147. package/dist/tool-dispatch.d.ts.map +1 -1
  148. package/dist/tool-dispatch.js +10 -4
  149. package/dist/tool-dispatch.js.map +1 -1
  150. package/dist/tool-display.d.ts +79 -3
  151. package/dist/tool-display.d.ts.map +1 -1
  152. package/dist/tool-display.js +117 -3
  153. package/dist/tool-display.js.map +1 -1
  154. package/dist/tool-modes.d.ts +1 -1
  155. package/dist/tool-modes.d.ts.map +1 -1
  156. package/dist/tool-modes.js +8 -2
  157. package/dist/tool-modes.js.map +1 -1
  158. package/dist/tool-output.d.ts +15 -0
  159. package/dist/tool-output.d.ts.map +1 -0
  160. package/dist/tool-output.js +39 -0
  161. package/dist/tool-output.js.map +1 -0
  162. package/dist/tool.d.ts +14 -1
  163. package/dist/tool.d.ts.map +1 -1
  164. package/dist/tunnel.d.ts +3 -3
  165. package/dist/tunnel.d.ts.map +1 -1
  166. package/dist/tunnel.js +2 -2
  167. package/dist/workflow-approval.d.ts +9 -9
  168. package/dist/workflow-approval.d.ts.map +1 -1
  169. package/dist/workflow-approval.js +1 -1
  170. package/dist/workflow-approval.js.map +1 -1
  171. package/package.json +37 -5
  172. package/src/agent-account-limit.test.ts +87 -0
  173. package/src/agent-account-limit.ts +89 -0
  174. package/src/agent-computer-use.test.ts +26 -0
  175. package/src/agent-computer-use.ts +29 -0
  176. package/src/agent-context-window.ts +51 -0
  177. package/src/agent-no-reply.ts +16 -0
  178. package/src/agent-step.ts +26 -0
  179. package/src/agent-work.ts +102 -0
  180. package/src/attachment-payload.test.ts +165 -0
  181. package/src/attachment-payload.ts +187 -0
  182. package/src/auto-approve.test.ts +13 -1
  183. package/src/auto-approve.ts +19 -0
  184. package/src/channel-auth.ts +3 -3
  185. package/src/channel.ts +1 -1
  186. package/src/client-session.ts +9 -2
  187. package/src/computer-control.ts +1 -1
  188. package/src/conversation-history.test.ts +184 -0
  189. package/src/conversation-history.ts +272 -0
  190. package/src/cron.test.ts +280 -0
  191. package/src/cron.ts +355 -0
  192. package/src/define.test.ts +1 -1
  193. package/src/define.ts +3 -1
  194. package/src/event-store.ts +2 -1
  195. package/src/events.ts +23 -1
  196. package/src/file-diff.test.ts +103 -0
  197. package/src/file-diff.ts +208 -0
  198. package/src/index.ts +140 -1
  199. package/src/json-file-store.test.ts +1 -1
  200. package/src/loop-helpers.test.ts +15 -0
  201. package/src/mode/agent-step-loop.ts +645 -0
  202. package/src/mode/checkpoint-gate.ts +198 -0
  203. package/src/mode/checkpoint.ts +6 -0
  204. package/src/mode/collect-stream.ts +1 -1
  205. package/src/mode/project-messages.test.ts +118 -1
  206. package/src/mode/project-messages.ts +136 -77
  207. package/src/mode/react-loop-options.ts +124 -0
  208. package/src/mode/react-loop.ts +10 -296
  209. package/src/mode.ts +19 -7
  210. package/src/npm-registry.test.ts +95 -0
  211. package/src/npm-registry.ts +57 -0
  212. package/src/permission.ts +30 -0
  213. package/src/process-invocation.test.ts +25 -0
  214. package/src/process-invocation.ts +8 -3
  215. package/src/process-tree.ts +37 -0
  216. package/src/provider-login-bridge.ts +1 -1
  217. package/src/provider-schema-constraints.test.ts +1 -1
  218. package/src/provider-utils.test.ts +1 -1
  219. package/src/provider.ts +346 -0
  220. package/src/question-draft.test.ts +57 -0
  221. package/src/question-draft.ts +47 -0
  222. package/src/question.test.ts +130 -0
  223. package/src/question.ts +229 -0
  224. package/src/questions.ts +6 -0
  225. package/src/resolvers.test.ts +84 -1
  226. package/src/resolvers.ts +40 -27
  227. package/src/schemas.test.ts +5 -0
  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
@@ -0,0 +1,155 @@
1
+ /**
2
+ * Attachment bytes travel two very different roads. The model needs them in
3
+ * full; a client that only DRAWS the conversation (desktop, a channel
4
+ * bot) does not, and pushing a scanned 30 MB PDF through the client link on
5
+ * every reconnect is what once wedged a chat in a reconnect loop. So the runner
6
+ * sends clients {@link eventForClient} — large payloads swapped for their size —
7
+ * and a client that wants the bytes (an image preview) reads them back in
8
+ * bounded slices with {@link readAttachmentChunk}. The log itself never changes.
9
+ */
10
+ /**
11
+ * The most attachment payload (base64 characters) one model request carries.
12
+ * Every request resends the whole conversation, so without a cap a chat with a
13
+ * few scanned PDFs outgrows the provider's request limit (Anthropic: 32 MB) and
14
+ * EVERY later turn fails. The newest attachments go in full; older ones that no
15
+ * longer fit become a note naming them.
16
+ */
17
+ export const MODEL_ATTACHMENT_BUDGET_CHARS = 20 * 1024 * 1024;
18
+ /** One attachment's payload above this travels to clients by size only. */
19
+ export const CLIENT_INLINE_ATTACHMENT_CHARS = 512 * 1024;
20
+ /** All of one event's inline attachment payloads together stay under this. */
21
+ export const CLIENT_INLINE_EVENT_CHARS = 1024 * 1024;
22
+ /** The largest slice one attachment read returns. */
23
+ export const ATTACHMENT_READ_CHUNK_CHARS = 1024 * 1024;
24
+ /** Whether `content` is base64 bytes rather than text. Raw audio carries a media type; a transcript does not. */
25
+ function isBase64Payload(att) {
26
+ return att.kind === 'image' || att.kind === 'document' || (att.kind === 'audio' && att.mediaType !== undefined);
27
+ }
28
+ /** The attachment's size in bytes — its real size even on a client copy whose bytes were left out. */
29
+ export function attachmentBytes(att) {
30
+ if (att.omittedBytes !== undefined)
31
+ return att.omittedBytes;
32
+ if (!isBase64Payload(att))
33
+ return att.content.length;
34
+ const padding = att.content.endsWith('==') ? 2 : att.content.endsWith('=') ? 1 : 0;
35
+ return Math.max(0, Math.floor((att.content.length * 3) / 4) - padding);
36
+ }
37
+ /**
38
+ * The copy of `event` a client receives: every attachment payload too large for
39
+ * the client link becomes `content: ''` plus `omittedBytes`. Returns `event`
40
+ * itself when nothing had to change, so the common case allocates nothing.
41
+ */
42
+ export function eventForClient(event) {
43
+ if (event.type !== 'user_prompt' || !event.attachments || event.attachments.length === 0)
44
+ return event;
45
+ let room = CLIENT_INLINE_EVENT_CHARS;
46
+ let changed = false;
47
+ const attachments = event.attachments.map((att) => {
48
+ const size = att.content.length;
49
+ if (size <= CLIENT_INLINE_ATTACHMENT_CHARS && size <= room) {
50
+ room -= size;
51
+ return att;
52
+ }
53
+ changed = true;
54
+ return { ...att, content: '', omittedBytes: attachmentBytes(att) };
55
+ });
56
+ return changed ? { ...event, attachments } : event;
57
+ }
58
+ /**
59
+ * The most one history page may weigh on the wire, in JSON characters. Paging
60
+ * counts events, and a few hundred events with screenshots or attachments can
61
+ * add up to tens of megabytes — one frame the client has to swallow whole.
62
+ */
63
+ export const HISTORY_PAGE_MAX_CHARS = 4 * 1024 * 1024;
64
+ /**
65
+ * The page as a client receives it: every event in its client form, and the
66
+ * oldest events dropped until the page fits {@link HISTORY_PAGE_MAX_CHARS}. The
67
+ * newest event always stays, so paging always advances; the dropped events
68
+ * come back on the next older page.
69
+ */
70
+ export function historyPageForClient(page) {
71
+ const events = page.events.map(eventForClient);
72
+ let room = HISTORY_PAGE_MAX_CHARS;
73
+ let start = events.length;
74
+ while (start > 0) {
75
+ const event = events[start - 1];
76
+ if (event === undefined)
77
+ break;
78
+ const size = JSON.stringify(event).length + 1;
79
+ if (size > room && start < events.length)
80
+ break;
81
+ room -= size;
82
+ start -= 1;
83
+ }
84
+ if (start === 0)
85
+ return { events, prevCursor: page.prevCursor };
86
+ const kept = events.slice(start);
87
+ const oldest = kept[0];
88
+ return { events: kept, prevCursor: oldest === undefined ? page.prevCursor : oldest.seq };
89
+ }
90
+ /**
91
+ * Slice attachment `index` of `event`. Slices start on a multiple of four
92
+ * characters when `offset` does, so base64 slices decode on their own too.
93
+ */
94
+ export function readAttachmentChunk(event, index, offset) {
95
+ if (event.type !== 'user_prompt' || !event.attachments) {
96
+ throw new Error(`event ${event.seq} has no attachments`);
97
+ }
98
+ const att = event.attachments[index];
99
+ if (!att)
100
+ throw new Error(`event ${event.seq} has no attachment ${index}`);
101
+ const start = Math.max(0, Math.floor(offset));
102
+ return { data: att.content.slice(start, start + ATTACHMENT_READ_CHUNK_CHARS), total: att.content.length };
103
+ }
104
+ /** How an attachment is named across the conversation: `seq:index` of the prompt that carried it. */
105
+ export function attachmentKey(seq, index) {
106
+ return `${seq}:${index}`;
107
+ }
108
+ function* attachmentsNewestFirst(events) {
109
+ for (let i = events.length - 1; i >= 0; i -= 1) {
110
+ const e = events[i];
111
+ if (!e || e.type !== 'user_prompt' || !e.attachments)
112
+ continue;
113
+ for (let index = e.attachments.length - 1; index >= 0; index -= 1) {
114
+ const attachment = e.attachments[index];
115
+ if (attachment)
116
+ yield { seq: e.seq, index, attachment };
117
+ }
118
+ }
119
+ }
120
+ /**
121
+ * The attachment `query` names: its key (`seq:index`) or its file name, the
122
+ * newest one of that name, whatever the case. Null when none matches.
123
+ */
124
+ export function findAttachment(events, query) {
125
+ const wanted = query.trim();
126
+ const byKey = /^(\d+):(\d+)$/u.exec(wanted);
127
+ const name = wanted.toLowerCase();
128
+ for (const found of attachmentsNewestFirst(events)) {
129
+ if (byKey) {
130
+ if (found.seq === Number(byKey[1]) && found.index === Number(byKey[2]))
131
+ return found;
132
+ }
133
+ else if (found.attachment.name?.toLowerCase() === name) {
134
+ return found;
135
+ }
136
+ }
137
+ return null;
138
+ }
139
+ /** Every attachment of the conversation, oldest first, as `seq:index name`. */
140
+ export function listAttachments(events) {
141
+ return [...attachmentsNewestFirst(events)]
142
+ .reverse()
143
+ .map(({ seq, index, attachment }) => `${attachmentKey(seq, index)} ${attachment.name ?? attachment.kind}`);
144
+ }
145
+ /** The attachment a recall result restores, or null for any other output. */
146
+ export function restoredAttachmentRef(output) {
147
+ if (typeof output !== 'object' || output === null)
148
+ return null;
149
+ const ref = output.restoredAttachment;
150
+ if (typeof ref !== 'object' || ref === null)
151
+ return null;
152
+ const { seq, index } = ref;
153
+ return typeof seq === 'number' && typeof index === 'number' ? { seq, index } : null;
154
+ }
155
+ //# sourceMappingURL=attachment-payload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachment-payload.js","sourceRoot":"","sources":["../src/attachment-payload.ts"],"names":[],"mappings":"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"}
@@ -7,8 +7,17 @@ import type { MoxxyEvent } from './events.js';
7
7
  */
8
8
  export declare const AUTO_APPROVE_PLUGIN_ID: import("./ids.js").PluginId;
9
9
  export declare const AUTO_APPROVE_SUBTYPE = "auto_approve";
10
+ /**
11
+ * An agent connection undid a change made outside Moxxy that let the agent act
12
+ * without asking: a note for the person, not a switch (the state stays as it was).
13
+ */
14
+ export declare const AUTO_APPROVE_RESTORED_SUBTYPE = "auto_approve_restored";
10
15
  /** The on/off an event records, or null when it isn't an auto-approve switch. */
11
16
  export declare function autoApproveSwitch(event: MoxxyEvent): boolean | null;
12
17
  /** A conversation's auto-approve state: the last recorded switch wins; off until one is recorded. */
13
18
  export declare function autoApproveFromEvents(events: ReadonlyArray<MoxxyEvent>): boolean;
19
+ /** Whether the conversation recorded any switch (the person's, or the agent's own setup Moxxy took on): until then its agent's own setup shows. */
20
+ export declare function autoApproveRecorded(events: ReadonlyArray<MoxxyEvent>): boolean;
21
+ /** Whether the switch in force is the agent's own setup Moxxy took on (recorded by the system), not the person's choice. */
22
+ export declare function autoApproveFromAgent(events: ReadonlyArray<MoxxyEvent>): boolean;
14
23
  //# sourceMappingURL=auto-approve.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auto-approve.d.ts","sourceRoot":"","sources":["../src/auto-approve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,6BAAoC,CAAC;AACxE,eAAO,MAAM,oBAAoB,iBAAiB,CAAC;AAEnD,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,GAAG,IAAI,CAKnE;AAED,qGAAqG;AACrG,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,GAAG,OAAO,CAOhF"}
1
+ {"version":3,"file":"auto-approve.d.ts","sourceRoot":"","sources":["../src/auto-approve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,6BAAoC,CAAC;AACxE,eAAO,MAAM,oBAAoB,iBAAiB,CAAC;AACnD;;;GAGG;AACH,eAAO,MAAM,6BAA6B,0BAA0B,CAAC;AAErE,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,GAAG,IAAI,CAKnE;AAED,qGAAqG;AACrG,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,GAAG,OAAO,CAOhF;AAED,mJAAmJ;AACnJ,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,GAAG,OAAO,CAE9E;AAED,4HAA4H;AAC5H,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,GAAG,OAAO,CAM/E"}
@@ -7,6 +7,11 @@ import { asPluginId } from './ids.js';
7
7
  */
8
8
  export const AUTO_APPROVE_PLUGIN_ID = asPluginId('@moxxy/auto-approve');
9
9
  export const AUTO_APPROVE_SUBTYPE = 'auto_approve';
10
+ /**
11
+ * An agent connection undid a change made outside Moxxy that let the agent act
12
+ * without asking: a note for the person, not a switch (the state stays as it was).
13
+ */
14
+ export const AUTO_APPROVE_RESTORED_SUBTYPE = 'auto_approve_restored';
10
15
  /** The on/off an event records, or null when it isn't an auto-approve switch. */
11
16
  export function autoApproveSwitch(event) {
12
17
  if (event.type !== 'plugin_event')
@@ -26,4 +31,17 @@ export function autoApproveFromEvents(events) {
26
31
  }
27
32
  return false;
28
33
  }
34
+ /** Whether the conversation recorded any switch (the person's, or the agent's own setup Moxxy took on): until then its agent's own setup shows. */
35
+ export function autoApproveRecorded(events) {
36
+ return events.some((event) => autoApproveSwitch(event) !== null);
37
+ }
38
+ /** Whether the switch in force is the agent's own setup Moxxy took on (recorded by the system), not the person's choice. */
39
+ export function autoApproveFromAgent(events) {
40
+ for (let i = events.length - 1; i >= 0; i -= 1) {
41
+ const event = events[i];
42
+ if (event && autoApproveSwitch(event) !== null)
43
+ return event.source !== 'user';
44
+ }
45
+ return false;
46
+ }
29
47
  //# sourceMappingURL=auto-approve.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auto-approve.js","sourceRoot":"","sources":["../src/auto-approve.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,UAAU,CAAC,qBAAqB,CAAC,CAAC;AACxE,MAAM,CAAC,MAAM,oBAAoB,GAAG,cAAc,CAAC;AAEnD,iFAAiF;AACjF,MAAM,UAAU,iBAAiB,CAAC,KAAiB;IACjD,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,KAAK,CAAC,QAAQ,KAAK,sBAAsB,IAAI,KAAK,CAAC,OAAO,KAAK,oBAAoB;QAAE,OAAO,IAAI,CAAC;IACrG,MAAM,OAAO,GAAI,KAAK,CAAC,OAAwC,EAAE,OAAO,CAAC;IACzE,OAAO,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AACvD,CAAC;AAED,qGAAqG;AACrG,MAAM,UAAU,qBAAqB,CAAC,MAAiC;IACrE,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACxD,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO,OAAO,CAAC;IACvC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"auto-approve.js","sourceRoot":"","sources":["../src/auto-approve.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,UAAU,CAAC,qBAAqB,CAAC,CAAC;AACxE,MAAM,CAAC,MAAM,oBAAoB,GAAG,cAAc,CAAC;AACnD;;;GAGG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,uBAAuB,CAAC;AAErE,iFAAiF;AACjF,MAAM,UAAU,iBAAiB,CAAC,KAAiB;IACjD,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,KAAK,CAAC,QAAQ,KAAK,sBAAsB,IAAI,KAAK,CAAC,OAAO,KAAK,oBAAoB;QAAE,OAAO,IAAI,CAAC;IACrG,MAAM,OAAO,GAAI,KAAK,CAAC,OAAwC,EAAE,OAAO,CAAC;IACzE,OAAO,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AACvD,CAAC;AAED,qGAAqG;AACrG,MAAM,UAAU,qBAAqB,CAAC,MAAiC;IACrE,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACxD,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO,OAAO,CAAC;IACvC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,mJAAmJ;AACnJ,MAAM,UAAU,mBAAmB,CAAC,MAAiC;IACnE,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;AACnE,CAAC;AAED,4HAA4H;AAC5H,MAAM,UAAU,oBAAoB,CAAC,MAAiC;IACpE,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,KAAK,IAAI,iBAAiB,CAAC,KAAK,CAAC,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC;IACjF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -14,7 +14,7 @@
14
14
  * cannot set an `Authorization` header (browser / React Native), so the
15
15
  * secret stays out of the URL (query strings leak via logs and QR/stdout).
16
16
  *
17
- * Channels that expose a network surface (mobile WS bridge, HTTP, web) should
17
+ * Channels that expose a network surface (HTTP, web) should
18
18
  * resolve their token with the former and gate connections with the latter,
19
19
  * so the `channels.<name>.token` config + `MOXXY_<NAME>_TOKEN` env conventions
20
20
  * are uniform across every channel.
@@ -22,9 +22,9 @@
22
22
  export interface ChannelTokenOptions {
23
23
  /** Explicit token from channel config (`channels.<name>.token`). */
24
24
  readonly configured?: string;
25
- /** Env var checked first, e.g. `MOXXY_MOBILE_TOKEN`. */
25
+ /** Env var checked first, e.g. `MOXXY_HTTP_TOKEN`. */
26
26
  readonly envVar?: string;
27
- /** File to persist a generated token, e.g. `mobile-token`. */
27
+ /** File to persist a generated token, e.g. `http-token`. */
28
28
  readonly fileName: string;
29
29
  /** Directory the token file lives under. Defaults to the moxxy home dir;
30
30
  * the desktop bridge passes its Electron `userData` dir here instead. */
@@ -1 +1 @@
1
- {"version":3,"file":"channel-auth.d.ts","sourceRoot":"","sources":["../src/channel-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AASH,MAAM,WAAW,mBAAmB;IAClC,oEAAoE;IACpE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,wDAAwD;IACxD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,8DAA8D;IAC9D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B;8EAC0E;IAC1E,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAoDD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAkBrE;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,mBAAmB,EAAE,KAAK,GAAG,UAAU,CAAC,GAAG,MAAM,CAI9F;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,KAAK,OAAO,CAE/F;AAED;2EAC2E;AAC3E,eAAO,MAAM,oBAAoB,aAAa,CAAC;AAE/C;;4DAE4D;AAC5D,eAAO,MAAM,+BAA+B,kBAAkB,CAAC;AAE/D;oFACoF;AACpF,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAM5D;AAED;6EAC6E;AAC7E,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAYnF"}
1
+ {"version":3,"file":"channel-auth.d.ts","sourceRoot":"","sources":["../src/channel-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AASH,MAAM,WAAW,mBAAmB;IAClC,oEAAoE;IACpE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,sDAAsD;IACtD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,4DAA4D;IAC5D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B;8EAC0E;IAC1E,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAoDD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAkBrE;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,mBAAmB,EAAE,KAAK,GAAG,UAAU,CAAC,GAAG,MAAM,CAI9F;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,KAAK,OAAO,CAE/F;AAED;2EAC2E;AAC3E,eAAO,MAAM,oBAAoB,aAAa,CAAC;AAE/C;;4DAE4D;AAC5D,eAAO,MAAM,+BAA+B,kBAAkB,CAAC;AAE/D;oFACoF;AACpF,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAM5D;AAED;6EAC6E;AAC7E,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAYnF"}
@@ -14,7 +14,7 @@
14
14
  * cannot set an `Authorization` header (browser / React Native), so the
15
15
  * secret stays out of the URL (query strings leak via logs and QR/stdout).
16
16
  *
17
- * Channels that expose a network surface (mobile WS bridge, HTTP, web) should
17
+ * Channels that expose a network surface (HTTP, web) should
18
18
  * resolve their token with the former and gate connections with the latter,
19
19
  * so the `channels.<name>.token` config + `MOXXY_<NAME>_TOKEN` env conventions
20
20
  * are uniform across every channel.
package/dist/channel.d.ts CHANGED
@@ -222,7 +222,7 @@ export interface ChannelConnectStep {
222
222
  /**
223
223
  * Presentation of the channel's runtime connect value:
224
224
  * - `qr`: render a QR of the value plus the value itself (e.g. scan/open a
225
- * `t.me/<bot>` link, or a mobile pairing URL).
225
+ * `t.me/<bot>` link).
226
226
  * - `url`: show the value as a copyable URL the user pastes elsewhere
227
227
  * (Slack's Events Request URL).
228
228
  * - `instructions`: static `steps`, no runtime value.
@@ -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":"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"}
@@ -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"}