@adecore/agents 0.38.0 → 0.40.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 (170) hide show
  1. package/dist/async.d.ts +5 -0
  2. package/dist/async.js +13 -5
  3. package/dist/chat/acp-protocol.js +3 -5
  4. package/dist/chat/chat-core.d.ts +1 -0
  5. package/dist/chat/chat-core.js +9 -2
  6. package/dist/chat/chat-process.d.ts +1 -0
  7. package/dist/chat/chat-process.js +1 -1
  8. package/dist/chat/chat-session.d.ts +2 -0
  9. package/dist/chat/chat-session.js +9 -10
  10. package/dist/chat/claude-protocol.js +1 -6
  11. package/dist/chat/claude-transcript.js +1 -3
  12. package/dist/chat/codex-protocol.js +1 -6
  13. package/dist/chat/projector.js +1 -3
  14. package/dist/chat/request-summary.js +1 -3
  15. package/dist/coded-error.js +1 -5
  16. package/dist/context/argv.js +1 -2
  17. package/dist/context/verb.js +1 -3
  18. package/dist/error-text.d.ts +1 -0
  19. package/dist/error-text.js +4 -0
  20. package/dist/fields.d.ts +3 -0
  21. package/dist/fields.js +12 -0
  22. package/dist/fs.d.ts +1 -0
  23. package/dist/fs.js +8 -4
  24. package/dist/lineage.js +11 -5
  25. package/dist/messages/notice-store.js +3 -4
  26. package/dist/providers/accounts/acp-account.js +3 -20
  27. package/dist/providers/accounts/service.d.ts +1 -2
  28. package/dist/providers/accounts/service.js +5 -9
  29. package/dist/providers/accounts/status.js +1 -3
  30. package/dist/providers/acp-agent-state.js +1 -3
  31. package/dist/providers/claude.js +0 -1
  32. package/dist/providers/codex.js +0 -1
  33. package/dist/providers/detect.js +1 -1
  34. package/dist/providers/shell-commands.js +1 -2
  35. package/dist/run-process.js +1 -3
  36. package/dist/skills.d.ts +1 -1
  37. package/dist/skills.js +5 -8
  38. package/dist/tasks/background-limit.js +3 -2
  39. package/dist/tasks/task-coordinator.js +11 -17
  40. package/dist/testing/watch.js +0 -1
  41. package/dist/usage/limits/monitor.js +1 -2
  42. package/dist/usage/readers/claude.js +3 -10
  43. package/dist/usage/readers/codex.js +2 -9
  44. package/dist/usage/readers/grok.js +3 -10
  45. package/dist/usage/readers/host-log.js +3 -10
  46. package/dist/usage/record.d.ts +2 -0
  47. package/dist/usage/record.js +13 -0
  48. package/package.json +6 -6
  49. package/src/async.ts +23 -5
  50. package/src/chat/acp-backend.ts +121 -0
  51. package/src/chat/acp-protocol.ts +172 -6
  52. package/src/chat/attachment-store.ts +21 -0
  53. package/src/chat/backend.ts +0 -2
  54. package/src/chat/bookmark-store.ts +23 -0
  55. package/src/chat/chat-core.ts +218 -7
  56. package/src/chat/chat-log.ts +19 -0
  57. package/src/chat/chat-process.ts +52 -1
  58. package/src/chat/chat-session.ts +414 -13
  59. package/src/chat/chat-store.ts +50 -0
  60. package/src/chat/chat-title.ts +9 -0
  61. package/src/chat/claude-backend.ts +50 -0
  62. package/src/chat/claude-protocol.ts +155 -8
  63. package/src/chat/claude-title.ts +10 -0
  64. package/src/chat/claude-transcript.ts +47 -4
  65. package/src/chat/codex-backend.ts +131 -0
  66. package/src/chat/codex-protocol.ts +180 -8
  67. package/src/chat/codex-thread.ts +23 -0
  68. package/src/chat/composer-preferences.ts +6 -0
  69. package/src/chat/context-breakdown.ts +11 -0
  70. package/src/chat/delta-coalescer.ts +8 -0
  71. package/src/chat/external-sessions.ts +28 -0
  72. package/src/chat/generated-image.ts +25 -0
  73. package/src/chat/index.ts +5 -0
  74. package/src/chat/input.ts +13 -0
  75. package/src/chat/json-rpc-transport.ts +28 -0
  76. package/src/chat/limit-resume.ts +13 -0
  77. package/src/chat/projector.ts +160 -4
  78. package/src/chat/readable-text.ts +3 -0
  79. package/src/chat/request-summary.ts +18 -4
  80. package/src/chat/subagent-projection.ts +3 -0
  81. package/src/chat/subagent-reader.ts +76 -0
  82. package/src/chat/subagent-settlement.ts +24 -0
  83. package/src/chat/thread-search.ts +13 -0
  84. package/src/chat/thread.ts +31 -0
  85. package/src/chat/ui-queries.ts +122 -0
  86. package/src/chat/ui-replies.ts +34 -0
  87. package/src/chat/visual-store.ts +49 -0
  88. package/src/chat/wake-chat.ts +3 -0
  89. package/src/client-sinks.ts +2 -0
  90. package/src/coded-error.ts +1 -5
  91. package/src/context/argv.ts +18 -2
  92. package/src/context/index.ts +1 -0
  93. package/src/context/refusal.ts +3 -0
  94. package/src/context/verb.ts +32 -4
  95. package/src/coordination/index.ts +10 -0
  96. package/src/error-text.ts +7 -0
  97. package/src/fields.ts +14 -0
  98. package/src/fs.ts +20 -4
  99. package/src/host/agent-host.ts +20 -0
  100. package/src/host/environment.ts +6 -0
  101. package/src/host/handlers.ts +18 -0
  102. package/src/host/memory-port.ts +4 -0
  103. package/src/host/wiring.ts +10 -0
  104. package/src/index.ts +1 -0
  105. package/src/lineage.ts +24 -5
  106. package/src/messages/deliver-message.ts +6 -0
  107. package/src/messages/deliver-notice.ts +13 -0
  108. package/src/messages/notice-store.ts +16 -4
  109. package/src/modes.ts +1 -0
  110. package/src/outbox/outbox-worker.ts +31 -0
  111. package/src/outbox/outbox.ts +5 -0
  112. package/src/providers/accounts/accounts.ts +36 -0
  113. package/src/providers/accounts/acp-account.ts +22 -27
  114. package/src/providers/accounts/launch.ts +4 -0
  115. package/src/providers/accounts/service.ts +110 -12
  116. package/src/providers/accounts/shadow-home.ts +10 -0
  117. package/src/providers/accounts/status.ts +13 -4
  118. package/src/providers/accounts/store.ts +25 -0
  119. package/src/providers/accounts/variables.ts +11 -1
  120. package/src/providers/acp-agent-state.ts +24 -3
  121. package/src/providers/acp-provider.ts +5 -0
  122. package/src/providers/acp-usage-log.ts +2 -0
  123. package/src/providers/catalog.ts +17 -0
  124. package/src/providers/claude.ts +10 -1
  125. package/src/providers/codex-rules.ts +3 -0
  126. package/src/providers/codex.ts +2 -1
  127. package/src/providers/detect.ts +6 -1
  128. package/src/providers/provider.ts +1 -1
  129. package/src/providers/registry.ts +18 -2
  130. package/src/providers/shell-commands.ts +37 -2
  131. package/src/record-directory.ts +19 -0
  132. package/src/run-process.ts +24 -3
  133. package/src/serializer.ts +3 -0
  134. package/src/skills.ts +73 -10
  135. package/src/tasks/background-limit.ts +9 -2
  136. package/src/tasks/end-children.ts +9 -0
  137. package/src/tasks/give-task.ts +8 -0
  138. package/src/tasks/task-coordinator.ts +81 -17
  139. package/src/tasks/task-store.ts +28 -0
  140. package/src/tasks/waiting-child.ts +21 -0
  141. package/src/tasks/wake-parent.ts +26 -0
  142. package/src/tasks/wiring.ts +22 -0
  143. package/src/testing/accounts.ts +2 -0
  144. package/src/testing/fake-acp-capture.ts +16 -0
  145. package/src/testing/fake-acp.ts +66 -0
  146. package/src/testing/fake-claude.ts +177 -0
  147. package/src/testing/fake-cli.ts +29 -0
  148. package/src/testing/fake-codex.ts +122 -0
  149. package/src/testing/manual-clock.ts +2 -0
  150. package/src/testing/watch.ts +7 -1
  151. package/src/title-file.ts +12 -0
  152. package/src/usage/accounts.ts +6 -0
  153. package/src/usage/aggregate.ts +19 -0
  154. package/src/usage/exchange.ts +12 -0
  155. package/src/usage/index-file.ts +27 -0
  156. package/src/usage/limits/monitor.ts +31 -3
  157. package/src/usage/limits/normalize.ts +30 -0
  158. package/src/usage/limits/probe.ts +17 -0
  159. package/src/usage/pricing.ts +35 -0
  160. package/src/usage/projects.ts +8 -0
  161. package/src/usage/readers/claude.ts +12 -9
  162. package/src/usage/readers/codex.ts +40 -8
  163. package/src/usage/readers/grok.ts +17 -9
  164. package/src/usage/readers/host-log.ts +9 -9
  165. package/src/usage/record.ts +22 -0
  166. package/src/usage/roots.ts +6 -0
  167. package/src/usage/scanner.ts +61 -0
  168. package/src/usage/usage-service.ts +14 -0
  169. package/src/watch-seam.ts +8 -0
  170. package/src/windows-command.ts +12 -0
@@ -30,12 +30,14 @@ export class ChatThread {
30
30
 
31
31
  constructor(info: ChatInfo, items: ChatItem[] = []) {
32
32
  this.info = info;
33
+
33
34
  for (const item of items) {
34
35
  this.items.set(item.id, item);
35
36
  this.indices.set(item.id, this.order.length);
36
37
  this.order.push(item.id);
37
38
  this.indexRequest(item);
38
39
  }
40
+
39
41
  this.syncRequests();
40
42
  }
41
43
 
@@ -50,10 +52,12 @@ export class ChatThread {
50
52
  find<K extends ChatItem['kind']>(kind: K, match: (item: Extract<ChatItem, { kind: K }>) => boolean): Extract<ChatItem, { kind: K }> | undefined {
51
53
  for (let i = this.order.length - 1; i >= 0; i--) {
52
54
  const item = this.items.get(this.order[i]!);
55
+
53
56
  if (item?.kind === kind && match(item as Extract<ChatItem, { kind: K }>)) {
54
57
  return item as Extract<ChatItem, { kind: K }>;
55
58
  }
56
59
  }
60
+
57
61
  return undefined;
58
62
  }
59
63
 
@@ -62,27 +66,35 @@ export class ChatThread {
62
66
  this.indices.set(item.id, this.order.length);
63
67
  this.order.push(item.id);
64
68
  }
69
+
65
70
  this.items.set(item.id, item);
66
71
  const wasPending = this.requests.has(item.id);
67
72
  this.indexRequest(item);
73
+
68
74
  if (wasPending || item.kind === 'approval' || item.kind === 'question') {
69
75
  this.syncRequests();
70
76
  }
77
+
71
78
  return { type: 'item', item, historyIndex: this.indices.get(item.id)! };
72
79
  }
73
80
 
74
81
  /* Streams text into an assistant or thinking item, or partial output into a tool call that is still running. */
75
82
  appendText(itemId: string, text: string): ChatEvent | null {
76
83
  const item = this.items.get(itemId);
84
+
77
85
  if (item?.kind === 'assistant' || item?.kind === 'thinking') {
78
86
  this.items.set(itemId, { ...item, text: item.text + text });
87
+
79
88
  return { type: 'delta', itemId, text };
80
89
  }
90
+
81
91
  if (item?.kind === 'tool' && item.state === 'running') {
82
92
  const progress = item.progress ?? { startedAt: null, description: null, output: null };
83
93
  this.items.set(itemId, { ...item, progress: { ...progress, output: appendToolOutput(progress.output, text) } });
94
+
84
95
  return { type: 'delta', itemId, text };
85
96
  }
97
+
86
98
  return null;
87
99
  }
88
100
 
@@ -90,6 +102,7 @@ export class ChatThread {
90
102
  patchInfo(patch: Partial<ChatInfo>): ChatEvent {
91
103
  const held = patch.status === 'running' && this.holds.size > 0 ? { ...patch, status: 'needs-you' as const } : patch;
92
104
  this.info = { ...this.info, ...held };
105
+
93
106
  return { type: 'info', info: this.info };
94
107
  }
95
108
 
@@ -102,7 +115,9 @@ export class ChatThread {
102
115
  if (this.holds.has(key)) {
103
116
  return false;
104
117
  }
118
+
105
119
  this.holds.add(key);
120
+
106
121
  return true;
107
122
  }
108
123
 
@@ -120,6 +135,7 @@ export class ChatThread {
120
135
  this.order.length = 0;
121
136
  this.info = { ...this.info, ...patch };
122
137
  this.syncRequests();
138
+
123
139
  return { type: 'reset', info: this.info, items: [] };
124
140
  }
125
141
 
@@ -128,24 +144,31 @@ export class ChatThread {
128
144
  switch (event.type) {
129
145
  case 'item':
130
146
  this.upsert(event.item);
147
+
131
148
  break;
132
149
  case 'delta':
133
150
  this.appendText(event.itemId, event.text);
151
+
134
152
  if (event.uiQueries) {
135
153
  const item = this.items.get(event.itemId);
154
+
136
155
  if (item?.kind === 'assistant') {
137
156
  this.items.set(item.id, { ...item, uiQueries: event.uiQueries });
138
157
  }
139
158
  }
159
+
140
160
  break;
141
161
  case 'info':
142
162
  this.info = event.info;
163
+
143
164
  break;
144
165
  case 'reset':
145
166
  this.reset(event.info);
167
+
146
168
  for (const item of event.items) {
147
169
  this.upsert(item);
148
170
  }
171
+
149
172
  break;
150
173
  }
151
174
  }
@@ -159,6 +182,7 @@ export class ChatThread {
159
182
  if (this.requests.size > 0 || this.holds.size > 0) {
160
183
  return 'needs-you';
161
184
  }
185
+
162
186
  return activeTurnId === null ? 'idle' : 'running';
163
187
  }
164
188
 
@@ -186,27 +210,34 @@ export class ChatThread {
186
210
 
187
211
  history(limit = 90, cursor?: string): ChatHistoryResult {
188
212
  let end = this.order.length;
213
+
189
214
  if (cursor) {
190
215
  const [generation, offset] = cursor.split(':');
191
216
  end = Number(offset);
217
+
192
218
  if (generation !== this.historyGeneration || !/^\d+$/.test(offset ?? '') || !Number.isSafeInteger(end) || end < 0 || end > this.order.length) {
193
219
  throw new ChatError('history-expired', 'The conversation changed. Reload its history.');
194
220
  }
195
221
  }
222
+
196
223
  const items: ChatItem[] = [];
197
224
  let bytes = 0;
198
225
  let start = end;
226
+
199
227
  while (start > 0 && items.length < Math.min(100, Math.max(1, limit))) {
200
228
  const item = this.items.get(this.order[start - 1]!)!;
201
229
  const size = Buffer.byteLength(JSON.stringify(item));
230
+
202
231
  // An atomic item is never cut; an oversized item travels alone.
203
232
  if (items.length && bytes + size > 512 * 1024) {
204
233
  break;
205
234
  }
235
+
206
236
  items.unshift(item);
207
237
  bytes += size;
208
238
  start--;
209
239
  }
240
+
210
241
  return { items, history: { start, cursor: start ? `${this.historyGeneration}:${start}` : null } };
211
242
  }
212
243