@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.
- package/dist/async.d.ts +5 -0
- package/dist/async.js +13 -5
- package/dist/chat/acp-protocol.js +3 -5
- package/dist/chat/chat-core.d.ts +1 -0
- package/dist/chat/chat-core.js +9 -2
- package/dist/chat/chat-process.d.ts +1 -0
- package/dist/chat/chat-process.js +1 -1
- package/dist/chat/chat-session.d.ts +2 -0
- package/dist/chat/chat-session.js +9 -10
- package/dist/chat/claude-protocol.js +1 -6
- package/dist/chat/claude-transcript.js +1 -3
- package/dist/chat/codex-protocol.js +1 -6
- package/dist/chat/projector.js +1 -3
- package/dist/chat/request-summary.js +1 -3
- package/dist/coded-error.js +1 -5
- package/dist/context/argv.js +1 -2
- package/dist/context/verb.js +1 -3
- package/dist/error-text.d.ts +1 -0
- package/dist/error-text.js +4 -0
- package/dist/fields.d.ts +3 -0
- package/dist/fields.js +12 -0
- package/dist/fs.d.ts +1 -0
- package/dist/fs.js +8 -4
- package/dist/lineage.js +11 -5
- package/dist/messages/notice-store.js +3 -4
- package/dist/providers/accounts/acp-account.js +3 -20
- package/dist/providers/accounts/service.d.ts +1 -2
- package/dist/providers/accounts/service.js +5 -9
- package/dist/providers/accounts/status.js +1 -3
- package/dist/providers/acp-agent-state.js +1 -3
- package/dist/providers/claude.js +0 -1
- package/dist/providers/codex.js +0 -1
- package/dist/providers/detect.js +1 -1
- package/dist/providers/shell-commands.js +1 -2
- package/dist/run-process.js +1 -3
- package/dist/skills.d.ts +1 -1
- package/dist/skills.js +5 -8
- package/dist/tasks/background-limit.js +3 -2
- package/dist/tasks/task-coordinator.js +11 -17
- package/dist/testing/watch.js +0 -1
- package/dist/usage/limits/monitor.js +1 -2
- package/dist/usage/readers/claude.js +3 -10
- package/dist/usage/readers/codex.js +2 -9
- package/dist/usage/readers/grok.js +3 -10
- package/dist/usage/readers/host-log.js +3 -10
- package/dist/usage/record.d.ts +2 -0
- package/dist/usage/record.js +13 -0
- package/package.json +6 -6
- package/src/async.ts +23 -5
- package/src/chat/acp-backend.ts +121 -0
- package/src/chat/acp-protocol.ts +172 -6
- package/src/chat/attachment-store.ts +21 -0
- package/src/chat/backend.ts +0 -2
- package/src/chat/bookmark-store.ts +23 -0
- package/src/chat/chat-core.ts +218 -7
- package/src/chat/chat-log.ts +19 -0
- package/src/chat/chat-process.ts +52 -1
- package/src/chat/chat-session.ts +414 -13
- package/src/chat/chat-store.ts +50 -0
- package/src/chat/chat-title.ts +9 -0
- package/src/chat/claude-backend.ts +50 -0
- package/src/chat/claude-protocol.ts +155 -8
- package/src/chat/claude-title.ts +10 -0
- package/src/chat/claude-transcript.ts +47 -4
- package/src/chat/codex-backend.ts +131 -0
- package/src/chat/codex-protocol.ts +180 -8
- package/src/chat/codex-thread.ts +23 -0
- package/src/chat/composer-preferences.ts +6 -0
- package/src/chat/context-breakdown.ts +11 -0
- package/src/chat/delta-coalescer.ts +8 -0
- package/src/chat/external-sessions.ts +28 -0
- package/src/chat/generated-image.ts +25 -0
- package/src/chat/index.ts +5 -0
- package/src/chat/input.ts +13 -0
- package/src/chat/json-rpc-transport.ts +28 -0
- package/src/chat/limit-resume.ts +13 -0
- package/src/chat/projector.ts +160 -4
- package/src/chat/readable-text.ts +3 -0
- package/src/chat/request-summary.ts +18 -4
- package/src/chat/subagent-projection.ts +3 -0
- package/src/chat/subagent-reader.ts +76 -0
- package/src/chat/subagent-settlement.ts +24 -0
- package/src/chat/thread-search.ts +13 -0
- package/src/chat/thread.ts +31 -0
- package/src/chat/ui-queries.ts +122 -0
- package/src/chat/ui-replies.ts +34 -0
- package/src/chat/visual-store.ts +49 -0
- package/src/chat/wake-chat.ts +3 -0
- package/src/client-sinks.ts +2 -0
- package/src/coded-error.ts +1 -5
- package/src/context/argv.ts +18 -2
- package/src/context/index.ts +1 -0
- package/src/context/refusal.ts +3 -0
- package/src/context/verb.ts +32 -4
- package/src/coordination/index.ts +10 -0
- package/src/error-text.ts +7 -0
- package/src/fields.ts +14 -0
- package/src/fs.ts +20 -4
- package/src/host/agent-host.ts +20 -0
- package/src/host/environment.ts +6 -0
- package/src/host/handlers.ts +18 -0
- package/src/host/memory-port.ts +4 -0
- package/src/host/wiring.ts +10 -0
- package/src/index.ts +1 -0
- package/src/lineage.ts +24 -5
- package/src/messages/deliver-message.ts +6 -0
- package/src/messages/deliver-notice.ts +13 -0
- package/src/messages/notice-store.ts +16 -4
- package/src/modes.ts +1 -0
- package/src/outbox/outbox-worker.ts +31 -0
- package/src/outbox/outbox.ts +5 -0
- package/src/providers/accounts/accounts.ts +36 -0
- package/src/providers/accounts/acp-account.ts +22 -27
- package/src/providers/accounts/launch.ts +4 -0
- package/src/providers/accounts/service.ts +110 -12
- package/src/providers/accounts/shadow-home.ts +10 -0
- package/src/providers/accounts/status.ts +13 -4
- package/src/providers/accounts/store.ts +25 -0
- package/src/providers/accounts/variables.ts +11 -1
- package/src/providers/acp-agent-state.ts +24 -3
- package/src/providers/acp-provider.ts +5 -0
- package/src/providers/acp-usage-log.ts +2 -0
- package/src/providers/catalog.ts +17 -0
- package/src/providers/claude.ts +10 -1
- package/src/providers/codex-rules.ts +3 -0
- package/src/providers/codex.ts +2 -1
- package/src/providers/detect.ts +6 -1
- package/src/providers/provider.ts +1 -1
- package/src/providers/registry.ts +18 -2
- package/src/providers/shell-commands.ts +37 -2
- package/src/record-directory.ts +19 -0
- package/src/run-process.ts +24 -3
- package/src/serializer.ts +3 -0
- package/src/skills.ts +73 -10
- package/src/tasks/background-limit.ts +9 -2
- package/src/tasks/end-children.ts +9 -0
- package/src/tasks/give-task.ts +8 -0
- package/src/tasks/task-coordinator.ts +81 -17
- package/src/tasks/task-store.ts +28 -0
- package/src/tasks/waiting-child.ts +21 -0
- package/src/tasks/wake-parent.ts +26 -0
- package/src/tasks/wiring.ts +22 -0
- package/src/testing/accounts.ts +2 -0
- package/src/testing/fake-acp-capture.ts +16 -0
- package/src/testing/fake-acp.ts +66 -0
- package/src/testing/fake-claude.ts +177 -0
- package/src/testing/fake-cli.ts +29 -0
- package/src/testing/fake-codex.ts +122 -0
- package/src/testing/manual-clock.ts +2 -0
- package/src/testing/watch.ts +7 -1
- package/src/title-file.ts +12 -0
- package/src/usage/accounts.ts +6 -0
- package/src/usage/aggregate.ts +19 -0
- package/src/usage/exchange.ts +12 -0
- package/src/usage/index-file.ts +27 -0
- package/src/usage/limits/monitor.ts +31 -3
- package/src/usage/limits/normalize.ts +30 -0
- package/src/usage/limits/probe.ts +17 -0
- package/src/usage/pricing.ts +35 -0
- package/src/usage/projects.ts +8 -0
- package/src/usage/readers/claude.ts +12 -9
- package/src/usage/readers/codex.ts +40 -8
- package/src/usage/readers/grok.ts +17 -9
- package/src/usage/readers/host-log.ts +9 -9
- package/src/usage/record.ts +22 -0
- package/src/usage/roots.ts +6 -0
- package/src/usage/scanner.ts +61 -0
- package/src/usage/usage-service.ts +14 -0
- package/src/watch-seam.ts +8 -0
- package/src/windows-command.ts +12 -0
package/src/chat/thread.ts
CHANGED
|
@@ -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
|
|