@adhd/agent-engine-orchestrator 2.1.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 (173) hide show
  1. package/package.json +64 -0
  2. package/src/clients/http-client.d.ts +24 -0
  3. package/src/clients/http-client.d.ts.map +1 -0
  4. package/src/clients/http-client.js +96 -0
  5. package/src/clients/http-client.js.map +1 -0
  6. package/src/clients/in-process.d.ts +19 -0
  7. package/src/clients/in-process.d.ts.map +1 -0
  8. package/src/clients/in-process.js +25 -0
  9. package/src/clients/in-process.js.map +1 -0
  10. package/src/clients/index.d.ts +9 -0
  11. package/src/clients/index.d.ts.map +1 -0
  12. package/src/clients/index.js +6 -0
  13. package/src/clients/index.js.map +1 -0
  14. package/src/clients/registry.d.ts +30 -0
  15. package/src/clients/registry.d.ts.map +1 -0
  16. package/src/clients/registry.js +173 -0
  17. package/src/clients/registry.js.map +1 -0
  18. package/src/clients/stdio-client.d.ts +19 -0
  19. package/src/clients/stdio-client.d.ts.map +1 -0
  20. package/src/clients/stdio-client.js +91 -0
  21. package/src/clients/stdio-client.js.map +1 -0
  22. package/src/clients/tool-naming.d.ts +8 -0
  23. package/src/clients/tool-naming.d.ts.map +1 -0
  24. package/src/clients/tool-naming.js +26 -0
  25. package/src/clients/tool-naming.js.map +1 -0
  26. package/src/clients/types.d.ts +7 -0
  27. package/src/clients/types.d.ts.map +1 -0
  28. package/src/clients/types.js +2 -0
  29. package/src/clients/types.js.map +1 -0
  30. package/src/engine/context-window.d.ts +74 -0
  31. package/src/engine/context-window.d.ts.map +1 -0
  32. package/src/engine/context-window.js +156 -0
  33. package/src/engine/context-window.js.map +1 -0
  34. package/src/engine/dag-engine.d.ts +69 -0
  35. package/src/engine/dag-engine.d.ts.map +1 -0
  36. package/src/engine/dag-engine.js +103 -0
  37. package/src/engine/dag-engine.js.map +1 -0
  38. package/src/engine/hooks.d.ts +10 -0
  39. package/src/engine/hooks.d.ts.map +1 -0
  40. package/src/engine/hooks.js +39 -0
  41. package/src/engine/hooks.js.map +1 -0
  42. package/src/engine/orchestrator.d.ts +59 -0
  43. package/src/engine/orchestrator.d.ts.map +1 -0
  44. package/src/engine/orchestrator.js +665 -0
  45. package/src/engine/orchestrator.js.map +1 -0
  46. package/src/engine/policy.d.ts +22 -0
  47. package/src/engine/policy.d.ts.map +1 -0
  48. package/src/engine/policy.js +73 -0
  49. package/src/engine/policy.js.map +1 -0
  50. package/src/engine/prompt-resolver.d.ts +24 -0
  51. package/src/engine/prompt-resolver.d.ts.map +1 -0
  52. package/src/engine/prompt-resolver.js +55 -0
  53. package/src/engine/prompt-resolver.js.map +1 -0
  54. package/src/engine/queue.d.ts +12 -0
  55. package/src/engine/queue.d.ts.map +1 -0
  56. package/src/engine/queue.js +31 -0
  57. package/src/engine/queue.js.map +1 -0
  58. package/src/engine/tool-advertisement.d.ts +5 -0
  59. package/src/engine/tool-advertisement.d.ts.map +1 -0
  60. package/src/engine/tool-advertisement.js +70 -0
  61. package/src/engine/tool-advertisement.js.map +1 -0
  62. package/src/index.d.ts +50 -0
  63. package/src/index.d.ts.map +1 -0
  64. package/src/index.js +39 -0
  65. package/src/index.js.map +1 -0
  66. package/src/interfaces.d.ts +70 -0
  67. package/src/interfaces.d.ts.map +1 -0
  68. package/src/interfaces.js +9 -0
  69. package/src/interfaces.js.map +1 -0
  70. package/src/plugins/index.d.ts +4 -0
  71. package/src/plugins/index.d.ts.map +1 -0
  72. package/src/plugins/index.js +3 -0
  73. package/src/plugins/index.js.map +1 -0
  74. package/src/plugins/loader.d.ts +47 -0
  75. package/src/plugins/loader.d.ts.map +1 -0
  76. package/src/plugins/loader.js +174 -0
  77. package/src/plugins/loader.js.map +1 -0
  78. package/src/plugins/usage-plugin.d.ts +15 -0
  79. package/src/plugins/usage-plugin.d.ts.map +1 -0
  80. package/src/plugins/usage-plugin.js +140 -0
  81. package/src/plugins/usage-plugin.js.map +1 -0
  82. package/src/providers/anthropic.d.ts +35 -0
  83. package/src/providers/anthropic.d.ts.map +1 -0
  84. package/src/providers/anthropic.js +244 -0
  85. package/src/providers/anthropic.js.map +1 -0
  86. package/src/providers/claudecli.d.ts +36 -0
  87. package/src/providers/claudecli.d.ts.map +1 -0
  88. package/src/providers/claudecli.js +324 -0
  89. package/src/providers/claudecli.js.map +1 -0
  90. package/src/providers/factory.d.ts +5 -0
  91. package/src/providers/factory.d.ts.map +1 -0
  92. package/src/providers/factory.js +18 -0
  93. package/src/providers/factory.js.map +1 -0
  94. package/src/providers/index.d.ts +6 -0
  95. package/src/providers/index.d.ts.map +1 -0
  96. package/src/providers/index.js +5 -0
  97. package/src/providers/index.js.map +1 -0
  98. package/src/providers/openai.d.ts +30 -0
  99. package/src/providers/openai.d.ts.map +1 -0
  100. package/src/providers/openai.js +177 -0
  101. package/src/providers/openai.js.map +1 -0
  102. package/src/providers/types.d.ts +22 -0
  103. package/src/providers/types.d.ts.map +1 -0
  104. package/src/providers/types.js +2 -0
  105. package/src/providers/types.js.map +1 -0
  106. package/src/tools/agent-crud.d.ts +29 -0
  107. package/src/tools/agent-crud.d.ts.map +1 -0
  108. package/src/tools/agent-crud.js +28 -0
  109. package/src/tools/agent-crud.js.map +1 -0
  110. package/src/tools/session.d.ts +35 -0
  111. package/src/tools/session.d.ts.map +1 -0
  112. package/src/tools/session.js +52 -0
  113. package/src/tools/session.js.map +1 -0
  114. package/src/tools/task.d.ts +94 -0
  115. package/src/tools/task.d.ts.map +1 -0
  116. package/src/tools/task.js +336 -0
  117. package/src/tools/task.js.map +1 -0
  118. package/src/tools/usage.d.ts +19 -0
  119. package/src/tools/usage.d.ts.map +1 -0
  120. package/src/tools/usage.js +152 -0
  121. package/src/tools/usage.js.map +1 -0
  122. package/src/utils/ids.d.ts +2 -0
  123. package/src/utils/ids.d.ts.map +1 -0
  124. package/src/utils/ids.js +5 -0
  125. package/src/utils/ids.js.map +1 -0
  126. package/src/utils/timestamps.d.ts +2 -0
  127. package/src/utils/timestamps.d.ts.map +1 -0
  128. package/src/utils/timestamps.js +4 -0
  129. package/src/utils/timestamps.js.map +1 -0
  130. package/src/validation/agent.d.ts +556 -0
  131. package/src/validation/agent.d.ts.map +1 -0
  132. package/src/validation/agent.js +175 -0
  133. package/src/validation/agent.js.map +1 -0
  134. package/src/validation/agents.d.ts +2 -0
  135. package/src/validation/agents.d.ts.map +1 -0
  136. package/src/validation/agents.js +3 -0
  137. package/src/validation/agents.js.map +1 -0
  138. package/src/validation/errors.d.ts +32 -0
  139. package/src/validation/errors.d.ts.map +1 -0
  140. package/src/validation/errors.js +34 -0
  141. package/src/validation/errors.js.map +1 -0
  142. package/src/validation/execution.d.ts +101 -0
  143. package/src/validation/execution.d.ts.map +1 -0
  144. package/src/validation/execution.js +14 -0
  145. package/src/validation/execution.js.map +1 -0
  146. package/src/validation/index.d.ts +9 -0
  147. package/src/validation/index.d.ts.map +1 -0
  148. package/src/validation/index.js +9 -0
  149. package/src/validation/index.js.map +1 -0
  150. package/src/validation/mcp.d.ts +54 -0
  151. package/src/validation/mcp.d.ts.map +1 -0
  152. package/src/validation/mcp.js +33 -0
  153. package/src/validation/mcp.js.map +1 -0
  154. package/src/validation/message.d.ts +43 -0
  155. package/src/validation/message.d.ts.map +1 -0
  156. package/src/validation/message.js +28 -0
  157. package/src/validation/message.js.map +1 -0
  158. package/src/validation/session.d.ts +49 -0
  159. package/src/validation/session.d.ts.map +1 -0
  160. package/src/validation/session.js +32 -0
  161. package/src/validation/session.js.map +1 -0
  162. package/src/validation/task.d.ts +156 -0
  163. package/src/validation/task.d.ts.map +1 -0
  164. package/src/validation/task.js +84 -0
  165. package/src/validation/task.js.map +1 -0
  166. package/src/validation/tasks.d.ts +2 -0
  167. package/src/validation/tasks.d.ts.map +1 -0
  168. package/src/validation/tasks.js +3 -0
  169. package/src/validation/tasks.js.map +1 -0
  170. package/src/validation/usage.d.ts +75 -0
  171. package/src/validation/usage.d.ts.map +1 -0
  172. package/src/validation/usage.js +51 -0
  173. package/src/validation/usage.js.map +1 -0
@@ -0,0 +1,47 @@
1
+ import { z } from 'zod';
2
+ import type { EngineLogger } from '../interfaces.js';
3
+ import type { IHookRegistry } from '@adhd/agent-base-types';
4
+ declare const pluginEntrySchema: z.ZodObject<{
5
+ module: z.ZodString;
6
+ config: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
7
+ }, z.core.$strip>;
8
+ export declare const agentMcpConfigFileSchema: z.ZodObject<{
9
+ plugins: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
10
+ module: z.ZodString;
11
+ config: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
12
+ }, z.core.$strip>>>>;
13
+ }, z.core.$strip>;
14
+ export type AgentMcpConfigFile = z.infer<typeof agentMcpConfigFileSchema>;
15
+ export type PluginEntry = z.infer<typeof pluginEntrySchema>;
16
+ /**
17
+ * Find the active agent-mcp config file.
18
+ * @param configPathOverride — explicit path; pass null/undefined to skip.
19
+ * @param configPathFromEnv — config.plugins.configPath value (injected instead of importing config).
20
+ * @param logger — injected logger.
21
+ */
22
+ export declare function findConfigFile(configPathOverride: string | null | undefined, configPathFromEnv: string | undefined, logger?: EngineLogger): string | null;
23
+ /**
24
+ * Read, parse, and validate the agent-mcp config file.
25
+ * @param configPathOverride — forwarded to findConfigFile
26
+ * @param configPathFromEnv — config.plugins.configPath injection
27
+ * @param logger — injected logger
28
+ */
29
+ export declare function loadConfigFile(configPathOverride: string | null | undefined, configPathFromEnv: string | undefined, logger?: EngineLogger): AgentMcpConfigFile;
30
+ export declare function resolveSpecifier(specifier: string): Promise<string>;
31
+ /**
32
+ * Discovers and installs all external plugins. Never throws.
33
+ *
34
+ * @param hooks — hook registry
35
+ * @param db — database handle
36
+ * @param overrides — explicit values for testability
37
+ * `configPath` — forwarded to findConfigFile
38
+ * `pluginEntries` — explicit module list (replaces config.plugins.entries)
39
+ * @param configPathFromEnv — config.plugins.configPath injection
40
+ * @param logger — injected logger
41
+ */
42
+ export declare function loadExternalPlugins(hooks: IHookRegistry, db: unknown, overrides?: {
43
+ configPath?: string | null;
44
+ pluginEntries?: string[];
45
+ }, configPathFromEnv?: string, pluginEntriesFromEnv?: string[], logger?: EngineLogger): Promise<void>;
46
+ export {};
47
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../../../../packages/agent/agent-engine-orchestrator/src/plugins/loader.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EACV,aAAa,EAId,MAAM,wBAAwB,CAAC;AAIhC,QAAA,MAAM,iBAAiB;;;iBAGrB,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;iBAEnC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAC1E,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAuB5D;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,kBAAkB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC7C,iBAAiB,EAAE,MAAM,GAAG,SAAS,EACrC,MAAM,CAAC,EAAE,YAAY,GACpB,MAAM,GAAG,IAAI,CAkCf;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,kBAAkB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC7C,iBAAiB,EAAE,MAAM,GAAG,SAAS,EACrC,MAAM,CAAC,EAAE,YAAY,GACpB,kBAAkB,CA8BpB;AAID,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAwBzE;AAqFD;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,aAAa,EACpB,EAAE,EAAE,OAAO,EACX,SAAS,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,EACpE,iBAAiB,CAAC,EAAE,MAAM,EAC1B,oBAAoB,CAAC,EAAE,MAAM,EAAE,EAC/B,MAAM,CAAC,EAAE,YAAY,GACpB,OAAO,CAAC,IAAI,CAAC,CAcf"}
@@ -0,0 +1,174 @@
1
+ import { createRequire } from 'node:module';
2
+ import { existsSync, readFileSync } from 'node:fs';
3
+ import { resolve } from 'node:path';
4
+ import { homedir } from 'node:os';
5
+ import { pathToFileURL } from 'node:url';
6
+ import { z } from 'zod';
7
+ // ── Config file schema ────────────────────────────────────────────────────────
8
+ const pluginEntrySchema = z.object({
9
+ module: z.string().min(1, 'module must be a non-empty string'),
10
+ config: z.record(z.string(), z.unknown()).optional().default({}),
11
+ });
12
+ export const agentMcpConfigFileSchema = z.object({
13
+ plugins: z.array(pluginEntrySchema).optional().default([]),
14
+ });
15
+ // ── Config file discovery ─────────────────────────────────────────────────────
16
+ /**
17
+ * Find the active agent-mcp config file.
18
+ * @param configPathOverride — explicit path; pass null/undefined to skip.
19
+ * @param configPathFromEnv — config.plugins.configPath value (injected instead of importing config).
20
+ * @param logger — injected logger.
21
+ */
22
+ export function findConfigFile(configPathOverride, configPathFromEnv, logger) {
23
+ const log = logger ?? { info: () => { }, warn: () => { }, error: () => { }, debug: () => { } };
24
+ const explicit = configPathOverride !== undefined
25
+ ? configPathOverride
26
+ : configPathFromEnv;
27
+ if (explicit) {
28
+ if (!existsSync(explicit)) {
29
+ log.warn({ path: explicit }, 'AGENT_MCP_CONFIG points to a file that does not exist — ignoring');
30
+ return null;
31
+ }
32
+ return explicit;
33
+ }
34
+ const local = resolve(process.cwd(), 'agent-mcp.config.json');
35
+ if (existsSync(local))
36
+ return local;
37
+ const nested = resolve(process.cwd(), '.adhd', 'agent-mcp', 'config.json');
38
+ if (existsSync(nested))
39
+ return nested;
40
+ const globalAdhd = resolve(homedir(), '.adhd', 'agent-mcp', 'config.json');
41
+ if (existsSync(globalAdhd))
42
+ return globalAdhd;
43
+ // Back-compat: the published 2.0.1 loader used ~/.agent-mcp/config.json. The engine
44
+ // refactor moved the global path under ~/.adhd/ and stopped checking the old one, so a
45
+ // user's existing global plugin config would silently stop loading. Keep honouring it.
46
+ // See BUG-ORCH-014.
47
+ const globalLegacy = resolve(homedir(), '.agent-mcp', 'config.json');
48
+ if (existsSync(globalLegacy))
49
+ return globalLegacy;
50
+ return null;
51
+ }
52
+ /**
53
+ * Read, parse, and validate the agent-mcp config file.
54
+ * @param configPathOverride — forwarded to findConfigFile
55
+ * @param configPathFromEnv — config.plugins.configPath injection
56
+ * @param logger — injected logger
57
+ */
58
+ export function loadConfigFile(configPathOverride, configPathFromEnv, logger) {
59
+ const log = logger ?? { info: () => { }, warn: () => { }, error: () => { }, debug: () => { } };
60
+ const configPath = findConfigFile(configPathOverride, configPathFromEnv, logger);
61
+ if (!configPath)
62
+ return { plugins: [] };
63
+ let raw;
64
+ try {
65
+ raw = JSON.parse(readFileSync(configPath, 'utf-8'));
66
+ }
67
+ catch (err) {
68
+ log.error({ configPath, err }, 'Failed to read/parse agent-mcp config file — no config-file plugins will load');
69
+ return { plugins: [] };
70
+ }
71
+ const result = agentMcpConfigFileSchema.safeParse(raw);
72
+ if (!result.success) {
73
+ log.error({ configPath, issues: result.error.flatten().fieldErrors }, 'agent-mcp config file failed schema validation — no config-file plugins will load');
74
+ return { plugins: [] };
75
+ }
76
+ log.info({ configPath, pluginCount: result.data.plugins.length }, 'Loaded agent-mcp config file');
77
+ return result.data;
78
+ }
79
+ // ── Module resolution ─────────────────────────────────────────────────────────
80
+ export async function resolveSpecifier(specifier) {
81
+ if (specifier.startsWith('/') ||
82
+ specifier.startsWith('./') ||
83
+ specifier.startsWith('../')) {
84
+ return pathToFileURL(resolve(specifier)).href;
85
+ }
86
+ const bases = [process.cwd(), new URL('.', import.meta.url).pathname];
87
+ for (const base of bases) {
88
+ try {
89
+ const req = createRequire(base + '/');
90
+ return pathToFileURL(req.resolve(specifier)).href;
91
+ }
92
+ catch {
93
+ // try next base
94
+ }
95
+ }
96
+ throw new Error(`Cannot resolve plugin "${specifier}" from cwd (${process.cwd()}) or server directory. ` +
97
+ `Install it in your project: npm install ${specifier}`);
98
+ }
99
+ // ── Single plugin load ────────────────────────────────────────────────────────
100
+ async function loadOnePlugin(hooks, db, entry, logger) {
101
+ const { module: specifier, config: rawConfig } = entry;
102
+ let resolved;
103
+ try {
104
+ resolved = await resolveSpecifier(specifier);
105
+ }
106
+ catch (err) {
107
+ logger.error({ specifier, err }, 'Plugin resolution failed — skipping');
108
+ return;
109
+ }
110
+ let mod;
111
+ try {
112
+ mod = (await import(resolved));
113
+ }
114
+ catch (err) {
115
+ logger.error({ specifier, resolved, err }, 'Plugin import failed — skipping');
116
+ return;
117
+ }
118
+ let validatedConfig = rawConfig ?? {};
119
+ if (mod.configSchema && typeof mod.configSchema.safeParse === 'function') {
120
+ const result = mod.configSchema.safeParse(rawConfig ?? {});
121
+ if (!result.success) {
122
+ const issues = result.error?.flatten?.() ?? result.error;
123
+ logger.error({ specifier, issues }, 'Plugin config failed schema validation — skipping. ' +
124
+ "Fix the 'config' block for this plugin in your agent-mcp config file.");
125
+ return;
126
+ }
127
+ validatedConfig = result.data;
128
+ }
129
+ const factory = (mod.createPlugin ?? mod.default);
130
+ if (typeof factory !== 'function') {
131
+ logger.error({ specifier }, 'Plugin does not export a createPlugin factory (as default or named export) — skipping. ' +
132
+ 'Expected: export default function createPlugin(ctx): Plugin { ... }');
133
+ return;
134
+ }
135
+ let plugin;
136
+ try {
137
+ const ctx = { db, config: validatedConfig };
138
+ plugin = await factory(ctx);
139
+ }
140
+ catch (err) {
141
+ logger.error({ specifier, err }, 'Plugin factory threw during instantiation — skipping');
142
+ return;
143
+ }
144
+ try {
145
+ await plugin.install(hooks);
146
+ logger.info({ plugin: plugin.name, specifier }, 'External plugin installed');
147
+ }
148
+ catch (err) {
149
+ logger.error({ specifier, plugin: plugin.name, err }, 'Plugin install() threw — skipping');
150
+ }
151
+ }
152
+ /**
153
+ * Discovers and installs all external plugins. Never throws.
154
+ *
155
+ * @param hooks — hook registry
156
+ * @param db — database handle
157
+ * @param overrides — explicit values for testability
158
+ * `configPath` — forwarded to findConfigFile
159
+ * `pluginEntries` — explicit module list (replaces config.plugins.entries)
160
+ * @param configPathFromEnv — config.plugins.configPath injection
161
+ * @param logger — injected logger
162
+ */
163
+ export async function loadExternalPlugins(hooks, db, overrides, configPathFromEnv, pluginEntriesFromEnv, logger) {
164
+ const log = logger ?? { info: () => { }, warn: () => { }, error: () => { }, debug: () => { } };
165
+ const configFile = loadConfigFile(overrides?.configPath, configPathFromEnv, logger);
166
+ const legacyEntries = (overrides?.pluginEntries ?? pluginEntriesFromEnv ?? []).map((module) => ({ module, config: {} }));
167
+ const allEntries = [...configFile.plugins, ...legacyEntries];
168
+ if (allEntries.length === 0)
169
+ return;
170
+ for (const entry of allEntries) {
171
+ await loadOnePlugin(hooks, db, entry, log);
172
+ }
173
+ }
174
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../../../../packages/agent/agent-engine-orchestrator/src/plugins/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { BetterSQLite3Database } from 'drizzle-orm/better-sqlite3';
2
+ import type { EngineLogger } from '../interfaces.js';
3
+ import type { IHookRegistry, Plugin } from '@adhd/agent-base-types';
4
+ export declare class UsagePlugin implements Plugin {
5
+ private readonly db;
6
+ readonly name = "usage";
7
+ private readonly accumulators;
8
+ private readonly logger;
9
+ constructor(db: BetterSQLite3Database<any>, logger?: EngineLogger);
10
+ install(hooks: IHookRegistry): void;
11
+ private onTaskStart;
12
+ private onModelResponse;
13
+ private onTerminal;
14
+ }
15
+ //# sourceMappingURL=usage-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-plugin.d.ts","sourceRoot":"","sources":["../../../../../../packages/agent/agent-engine-orchestrator/src/plugins/usage-plugin.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAIxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EACV,aAAa,EACb,MAAM,EAMP,MAAM,wBAAwB,CAAC;AA2BhC,qBAAa,WAAY,YAAW,MAAM;IAQtC,OAAO,CAAC,QAAQ,CAAC,EAAE;IAPrB,QAAQ,CAAC,IAAI,WAAW;IAExB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkC;IAC/D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;gBAInB,EAAE,EAAE,qBAAqB,CAAC,GAAG,CAAC,EAC/C,MAAM,CAAC,EAAE,YAAY;IAKvB,OAAO,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAUnC,OAAO,CAAC,WAAW;IAqBnB,OAAO,CAAC,eAAe;IAqFvB,OAAO,CAAC,UAAU;CA0BnB"}
@@ -0,0 +1,140 @@
1
+ import { eq, sql } from 'drizzle-orm';
2
+ import { taskUsageTable } from "@adhd/agent-store-runtime";
3
+ import { nowIso } from '../utils/timestamps.js';
4
+ const SEVERITY = {
5
+ length: 3,
6
+ tool_calls: 2,
7
+ stop: 1,
8
+ unknown: 0,
9
+ };
10
+ function mostSevere(a, b) {
11
+ const sa = SEVERITY[a ?? ''] ?? 0;
12
+ const sb = SEVERITY[b ?? ''] ?? 0;
13
+ return sa >= sb ? a ?? 'unknown' : b ?? 'unknown';
14
+ }
15
+ export class UsagePlugin {
16
+ db;
17
+ name = 'usage';
18
+ accumulators = new Map();
19
+ logger;
20
+ constructor(
21
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
22
+ db, logger) {
23
+ this.db = db;
24
+ this.logger = logger ?? { info: () => { }, warn: () => { }, error: () => { }, debug: () => { } };
25
+ }
26
+ install(hooks) {
27
+ hooks.register('task:start', (payload) => this.onTaskStart(payload));
28
+ hooks.register('post:model_response', (payload) => this.onModelResponse(payload));
29
+ hooks.register('task:completed', (payload) => this.onTerminal(payload));
30
+ hooks.register('task:failed', (payload) => this.onTerminal(payload));
31
+ hooks.register('task:cancelled', (payload) => this.onTerminal(payload));
32
+ }
33
+ onTaskStart(payload) {
34
+ try {
35
+ const { executionContext } = payload;
36
+ const provider = executionContext.agentDefinition.provider;
37
+ this.accumulators.set(executionContext.taskId, {
38
+ startedAt: Date.now(),
39
+ rootTaskId: payload.rootTaskId ?? null,
40
+ agentName: executionContext.agentName,
41
+ providerType: provider.type,
42
+ model: ('model' in provider && provider.model) || 'default',
43
+ mostSevereStopReason: 'unknown',
44
+ maxTokens: 'maxTokens' in provider && typeof provider.maxTokens === 'number'
45
+ ? provider.maxTokens
46
+ : null,
47
+ });
48
+ }
49
+ catch (err) {
50
+ this.logger.error({ err }, 'UsagePlugin: task:start handler failed');
51
+ }
52
+ }
53
+ onModelResponse(payload) {
54
+ try {
55
+ const { executionContext, tokenUsage, toolCallCount } = payload;
56
+ const taskId = executionContext.taskId;
57
+ const acc = this.accumulators.get(taskId);
58
+ const inputTokens = tokenUsage?.inputTokens ?? 0;
59
+ const outputTokens = tokenUsage?.outputTokens ?? 0;
60
+ const toolCalls = toolCallCount ?? 0;
61
+ const incoming = tokenUsage?.stopReason ?? 'unknown';
62
+ if (acc) {
63
+ acc.mostSevereStopReason = mostSevere(acc.mostSevereStopReason, incoming);
64
+ }
65
+ const provider = executionContext.agentDefinition.provider;
66
+ this.db
67
+ .insert(taskUsageTable)
68
+ .values({
69
+ taskId,
70
+ rootTaskId: acc?.rootTaskId ?? null,
71
+ agentName: acc?.agentName ?? executionContext.agentName,
72
+ providerType: acc?.providerType ?? provider.type,
73
+ model: acc?.model ??
74
+ (('model' in provider && provider.model) || 'default'),
75
+ inputTokens,
76
+ outputTokens,
77
+ toolCallCount: toolCalls,
78
+ modelCalls: 1,
79
+ latencyMs: 0,
80
+ isComplete: 0,
81
+ stopReason: acc?.mostSevereStopReason ?? incoming,
82
+ maxTokens: acc?.maxTokens ?? null,
83
+ cacheReadTokens: tokenUsage?.cacheReadTokens ?? null,
84
+ cacheCreationTokens: tokenUsage?.cacheCreationTokens ?? null,
85
+ uncachedInputTokens: tokenUsage?.uncachedInputTokens ?? null,
86
+ reasoningTokens: tokenUsage?.reasoningTokens ?? null,
87
+ // First call for this task: its input IS the peak so far.
88
+ peakContextTokens: inputTokens,
89
+ peakContextAt: 1,
90
+ createdAt: nowIso(),
91
+ })
92
+ .onConflictDoUpdate({
93
+ target: taskUsageTable.taskId,
94
+ set: {
95
+ inputTokens: sql `${taskUsageTable.inputTokens} + ${inputTokens}`,
96
+ outputTokens: sql `${taskUsageTable.outputTokens} + ${outputTokens}`,
97
+ toolCallCount: sql `${taskUsageTable.toolCallCount} + ${toolCalls}`,
98
+ modelCalls: sql `${taskUsageTable.modelCalls} + 1`,
99
+ stopReason: acc?.mostSevereStopReason ?? incoming,
100
+ cacheReadTokens: sql `COALESCE(${taskUsageTable.cacheReadTokens}, 0) + ${tokenUsage?.cacheReadTokens ?? 0}`,
101
+ cacheCreationTokens: sql `COALESCE(${taskUsageTable.cacheCreationTokens}, 0) + ${tokenUsage?.cacheCreationTokens ?? 0}`,
102
+ uncachedInputTokens: sql `COALESCE(${taskUsageTable.uncachedInputTokens}, 0) + ${tokenUsage?.uncachedInputTokens ?? 0}`,
103
+ reasoningTokens: sql `COALESCE(${taskUsageTable.reasoningTokens}, 0) + ${tokenUsage?.reasoningTokens ?? 0}`,
104
+ // PEAK, not sum. Every other column here accumulates; this one must not —
105
+ // conflating cumulative-billed with peak-context is what made a 715K run look
106
+ // like a 715K context when the real high-water mark was 43K (FINDING-ORCH-007).
107
+ peakContextTokens: sql `MAX(COALESCE(${taskUsageTable.peakContextTokens}, 0), ${inputTokens})`,
108
+ // Record WHICH call peaked, but only when this call is the new peak.
109
+ peakContextAt: sql `CASE WHEN ${inputTokens} > COALESCE(${taskUsageTable.peakContextTokens}, 0) THEN ${taskUsageTable.modelCalls} + 1 ELSE ${taskUsageTable.peakContextAt} END`,
110
+ },
111
+ })
112
+ .run();
113
+ }
114
+ catch (err) {
115
+ this.logger.error({ err }, 'UsagePlugin: post:model_response handler failed');
116
+ }
117
+ }
118
+ onTerminal(payload) {
119
+ try {
120
+ const taskId = payload.executionContext.taskId;
121
+ const acc = this.accumulators.get(taskId);
122
+ const latencyMs = acc ? Date.now() - acc.startedAt : 0;
123
+ const rootTaskId = acc?.rootTaskId ?? payload.executionContext.rootTaskId ?? null;
124
+ this.db
125
+ .update(taskUsageTable)
126
+ .set({
127
+ latencyMs,
128
+ rootTaskId,
129
+ isComplete: 1,
130
+ })
131
+ .where(eq(taskUsageTable.taskId, taskId))
132
+ .run();
133
+ this.accumulators.delete(taskId);
134
+ }
135
+ catch (err) {
136
+ this.logger.error({ err }, 'UsagePlugin: terminal handler failed');
137
+ }
138
+ }
139
+ }
140
+ //# sourceMappingURL=usage-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-plugin.js","sourceRoot":"","sources":["../../../../../../packages/agent/agent-engine-orchestrator/src/plugins/usage-plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { ProviderConfig } from "../validation/index.js";
2
+ import type { TokenUsage } from "@adhd/agent-base-types";
3
+ import type { EngineLogger, EngineConfig } from "../interfaces.js";
4
+ import type { LLMProvider, ProviderChatRequest, ProviderChatResponse } from "./types.js";
5
+ /**
6
+ * Anthropic is the ONE provider whose headline `input_tokens` EXCLUDES cached tokens —
7
+ * it reports only the uncached tail after the last cache breakpoint. OpenAI, DeepSeek and
8
+ * Gemini all report an INCLUSIVE headline.
9
+ *
10
+ * So the true total input Anthropic processed is:
11
+ * input_tokens + cache_read_input_tokens + cache_creation_input_tokens
12
+ *
13
+ * Storing the raw `input_tokens` in the same column as the other providers' inclusive
14
+ * headline systematically UNDER-COUNTS Anthropic spend (on a cache-warm run most input
15
+ * lives in cache_read) and makes budget caps bite openai-provider agents far sooner than
16
+ * anthropic ones for identical real usage. See BUG-ORCH-010.
17
+ */
18
+ export declare function normaliseAnthropicUsage(sdkUsage: {
19
+ input_tokens: number;
20
+ output_tokens: number;
21
+ cache_read_input_tokens?: number | null;
22
+ cache_creation_input_tokens?: number | null;
23
+ }, stopReason: string, maxTokens: number): TokenUsage;
24
+ export declare class AnthropicProvider implements LLMProvider {
25
+ private readonly client;
26
+ private readonly providerConfig;
27
+ private readonly useOauthIdentity;
28
+ private readonly logger;
29
+ private readonly config;
30
+ constructor(providerConfig: Extract<ProviderConfig, {
31
+ type: "anthropic";
32
+ }>, config: EngineConfig, logger: EngineLogger);
33
+ chat(request: ProviderChatRequest): Promise<ProviderChatResponse>;
34
+ }
35
+ //# sourceMappingURL=anthropic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../../../../packages/agent/agent-engine-orchestrator/src/providers/anthropic.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAqB,MAAM,wBAAwB,CAAC;AAChF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEnE,OAAO,KAAK,EACR,WAAW,EACX,mBAAmB,EACnB,oBAAoB,EAEvB,MAAM,YAAY,CAAC;AAsBpB;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CACnC,QAAQ,EAAE;IACN,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,2BAA2B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/C,EACD,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAClB,UAAU,CAeZ;AAsGD,qBAAa,iBAAkB,YAAW,WAAW;IACjD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiD;IAChF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAU;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;gBAGlC,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE;QAAE,IAAI,EAAE,WAAW,CAAA;KAAE,CAAC,EAC9D,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,YAAY;IAgClB,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;CA2G1E"}