@adecore/agents 0.29.3 → 0.31.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 (65) hide show
  1. package/dist/chat/acp-backend.d.ts +59 -0
  2. package/dist/chat/acp-backend.js +407 -0
  3. package/dist/chat/acp-protocol.d.ts +131 -0
  4. package/dist/chat/acp-protocol.js +605 -0
  5. package/dist/chat/codex-transport.d.ts +4 -27
  6. package/dist/chat/codex-transport.js +4 -185
  7. package/dist/chat/fixtures/acp-v1-turn.json +240 -0
  8. package/dist/chat/index.d.ts +2 -0
  9. package/dist/chat/index.js +1 -0
  10. package/dist/chat/json-rpc-transport.d.ts +50 -0
  11. package/dist/chat/json-rpc-transport.js +203 -0
  12. package/dist/providers/accounts/accounts.d.ts +10 -6
  13. package/dist/providers/accounts/accounts.js +19 -19
  14. package/dist/providers/accounts/service.d.ts +3 -0
  15. package/dist/providers/accounts/service.js +33 -17
  16. package/dist/providers/accounts/store.d.ts +4 -5
  17. package/dist/providers/accounts/store.js +12 -12
  18. package/dist/providers/acp-provider.d.ts +22 -0
  19. package/dist/providers/acp-provider.js +45 -0
  20. package/dist/providers/catalog.js +1 -0
  21. package/dist/providers/index.d.ts +1 -0
  22. package/dist/providers/index.js +1 -0
  23. package/dist/providers/provider.d.ts +1 -1
  24. package/dist/providers/registry.d.ts +1 -0
  25. package/dist/providers/registry.js +4 -0
  26. package/dist/testing/fake-acp.d.ts +10 -0
  27. package/dist/testing/fake-acp.js +262 -0
  28. package/dist/testing/index.d.ts +1 -0
  29. package/dist/testing/index.js +1 -0
  30. package/dist/usage/index-file.d.ts +1 -1
  31. package/dist/usage/index-file.js +3 -1
  32. package/dist/usage/index.d.ts +2 -1
  33. package/dist/usage/index.js +2 -0
  34. package/dist/usage/limits/monitor.d.ts +3 -1
  35. package/dist/usage/limits/monitor.js +19 -4
  36. package/dist/usage/limits/normalize.d.ts +1 -0
  37. package/dist/usage/limits/normalize.js +2 -1
  38. package/dist/usage/readers/host-log.d.ts +16 -0
  39. package/dist/usage/readers/host-log.js +49 -0
  40. package/dist/usage/roots.js +6 -2
  41. package/dist/usage/scanner.js +13 -2
  42. package/package.json +3 -3
  43. package/src/chat/acp-backend.ts +476 -0
  44. package/src/chat/acp-protocol.ts +763 -0
  45. package/src/chat/codex-transport.ts +6 -207
  46. package/src/chat/fixtures/acp-v1-turn.json +240 -0
  47. package/src/chat/index.ts +2 -0
  48. package/src/chat/json-rpc-transport.ts +253 -0
  49. package/src/providers/accounts/accounts.ts +28 -25
  50. package/src/providers/accounts/service.ts +49 -18
  51. package/src/providers/accounts/store.ts +14 -17
  52. package/src/providers/acp-provider.ts +73 -0
  53. package/src/providers/catalog.ts +1 -0
  54. package/src/providers/index.ts +1 -0
  55. package/src/providers/provider.ts +2 -1
  56. package/src/providers/registry.ts +5 -0
  57. package/src/testing/fake-acp.ts +296 -0
  58. package/src/testing/index.ts +1 -0
  59. package/src/usage/index-file.ts +3 -2
  60. package/src/usage/index.ts +2 -1
  61. package/src/usage/limits/monitor.ts +24 -5
  62. package/src/usage/limits/normalize.ts +2 -1
  63. package/src/usage/readers/host-log.ts +72 -0
  64. package/src/usage/roots.ts +7 -3
  65. package/src/usage/scanner.ts +16 -5
@@ -1,12 +1,13 @@
1
1
  import { createHash, type Hash } from 'node:crypto';
2
2
  import { mkdir, open, readFile, readdir, stat } from 'node:fs/promises';
3
3
  import { join } from 'node:path';
4
- import type { UsageRoot } from '@adecore/agent-contracts';
4
+ import type { UsageProvider, UsageRoot } from '@adecore/agent-contracts';
5
5
  import { errorText } from '../error-text.ts';
6
6
  import { isNotFound, writeAtomic } from '../fs.ts';
7
7
  import { decodeIndex, encodeIndex, type IndexedFile, type UsageIndex } from './index-file.ts';
8
8
  import { foldByKey, type UsageRecord } from './record.ts';
9
9
  import { claudeMightCarryUsage, parseClaudeLine } from './readers/claude.ts';
10
+ import { hostLogMightCarryUsage, parseHostUsageLine } from './readers/host-log.ts';
10
11
  import { cloneCodexState, codexMightCarryUsage, createCodexState, parseCodexLine, type CodexParserState } from './readers/codex.ts';
11
12
  import { usageRoots, type UsageRootPath } from './roots.ts';
12
13
 
@@ -98,7 +99,7 @@ async function listJsonl(dir: string, out: string[] = []): Promise<string[]> {
98
99
  * after the last newline is a line still being written, so it is parsed for what it is worth and
99
100
  * read again next time. The Codex state is snapshotted before that tail for the same reason.
100
101
  */
101
- function parseChunk(text: string, provider: 'claude' | 'codex', from: number, state: CodexParserState | null): ParsedFile {
102
+ function parseChunk(text: string, provider: UsageProvider, from: number, state: CodexParserState | null): ParsedFile {
102
103
  const end = text.lastIndexOf('\n');
103
104
  const whole = end === -1 ? '' : text.slice(0, end);
104
105
  const tail = text.slice(end + 1);
@@ -118,8 +119,18 @@ function parseChunk(text: string, provider: 'claude' | 'codex', from: number, st
118
119
  }
119
120
  continue;
120
121
  }
121
- if (codex !== null && codexMightCarryUsage(line)) {
122
- const record = parseCodexLine(line, codex);
122
+ if (provider === 'codex') {
123
+ if (codex !== null && codexMightCarryUsage(line)) {
124
+ const record = parseCodexLine(line, codex);
125
+ if (record !== null) {
126
+ records.push(record);
127
+ }
128
+ }
129
+ continue;
130
+ }
131
+ // Claude Code and Codex write transcripts of their own; every other provider is a log its host keeps.
132
+ if (hostLogMightCarryUsage(line)) {
133
+ const record = parseHostUsageLine(line, provider);
123
134
  if (record !== null) {
124
135
  records.push(record);
125
136
  }
@@ -265,7 +276,7 @@ export class UsageScanner {
265
276
  return foldByKey(all);
266
277
  }
267
278
 
268
- private async readFileInto(path: string, provider: 'claude' | 'codex', accountOf: AccountOf): Promise<boolean> {
279
+ private async readFileInto(path: string, provider: UsageProvider, accountOf: AccountOf): Promise<boolean> {
269
280
  const info = await stat(path);
270
281
  const known = this.index.get(path);
271
282
  if (known !== undefined && known.provider === provider && known.size === info.size && known.mtimeMs === info.mtimeMs) {