@adhd/agent-mcp 2.1.1 → 2.1.2

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 (51) hide show
  1. package/docs/marketing/.catalog/capabilities.md +1 -1
  2. package/docs/plan/accounting/SCOPE.md +316 -0
  3. package/docs/provider-call-audit.md +83 -1
  4. package/package.json +9 -12
  5. package/src/config.d.ts +59 -30
  6. package/src/config.d.ts.map +1 -1
  7. package/src/config.js +202 -205
  8. package/src/config.js.map +1 -1
  9. package/src/db/client.d.ts.map +1 -1
  10. package/src/db/client.js +6 -2
  11. package/src/db/client.js.map +1 -1
  12. package/src/db/migrate-runner.d.ts.map +1 -1
  13. package/src/db/migrate-runner.js.map +1 -1
  14. package/src/db/migrate.d.ts.map +1 -1
  15. package/src/db/migrate.js.map +1 -1
  16. package/src/db/schema.d.ts.map +1 -1
  17. package/src/db/schema.js.map +1 -1
  18. package/src/index.d.ts.map +1 -1
  19. package/src/index.js +20 -13
  20. package/src/index.js.map +1 -1
  21. package/src/logger.d.ts.map +1 -1
  22. package/src/logger.js +2 -2
  23. package/src/logger.js.map +1 -1
  24. package/src/scripts/agent-mcp-tail.d.ts.map +1 -1
  25. package/src/scripts/agent-mcp-tail.js +202 -122
  26. package/src/scripts/agent-mcp-tail.js.map +1 -1
  27. package/src/server.d.ts.map +1 -1
  28. package/src/server.js +7 -7
  29. package/src/server.js.map +1 -1
  30. package/src/store/agent-store.d.ts.map +1 -1
  31. package/src/store/agent-store.js.map +1 -1
  32. package/src/streaming/chat-gateway.d.ts.map +1 -1
  33. package/src/streaming/chat-gateway.js.map +1 -1
  34. package/src/streaming/event-bus.d.ts.map +1 -1
  35. package/src/streaming/event-bus.js.map +1 -1
  36. package/src/streaming/sse-server.d.ts.map +1 -1
  37. package/src/streaming/sse-server.js +2 -2
  38. package/src/streaming/sse-server.js.map +1 -1
  39. package/adhd-agent-mcp-2.1.1.tgz +0 -0
  40. package/src/__tests__/integration/harness.d.ts +0 -1027
  41. package/src/__tests__/integration/harness.d.ts.map +0 -1
  42. package/src/__tests__/integration/harness.js +0 -409
  43. package/src/__tests__/integration/harness.js.map +0 -1
  44. package/src/__tests__/integration/scripted-provider.d.ts +0 -43
  45. package/src/__tests__/integration/scripted-provider.d.ts.map +0 -1
  46. package/src/__tests__/integration/scripted-provider.js +0 -80
  47. package/src/__tests__/integration/scripted-provider.js.map +0 -1
  48. package/src/utils/load-env.d.ts +0 -2
  49. package/src/utils/load-env.d.ts.map +0 -1
  50. package/src/utils/load-env.js +0 -9
  51. package/src/utils/load-env.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"harness.d.ts","sourceRoot":"","sources":["../../../../../../entrypoint/agent-mcp/src/__tests__/integration/harness.ts"],"names":[],"mappings":"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"}
@@ -1,409 +0,0 @@
1
- /**
2
- * Integration test harness.
3
- *
4
- * Builds a fully-wired real system against a fresh temp sqlite database.
5
- * Runs the same drizzle migrations used by the production server.
6
- * Constructs real stores/queue/PolicyEngine/orchestrator/DagEngine with
7
- * the same dispatchFn wiring as index.ts.
8
- *
9
- * The only scripted/stubbed components are:
10
- * - LLMProvider (ScriptedProvider from scripted-provider.ts)
11
- * - External MCP tool clients (in-process stubs at the registry boundary)
12
- */
13
- import os from "node:os";
14
- import path from "node:path";
15
- import fs from "node:fs";
16
- import http from "node:http";
17
- import crypto from "node:crypto";
18
- import Database from "better-sqlite3";
19
- import { drizzle } from "drizzle-orm/better-sqlite3";
20
- import * as entrypointSchema from "../../db/schema.js";
21
- import { sessionsTable, messagesTable, tasksTable, taskEventsTable, SessionStore, TaskStore, generateId, } from "@adhd/agent-store-runtime";
22
- import { BackgroundQueue, DagEngine, Orchestrator, HookRegistry, PolicyEngine, enqueueExistingTask, taskTool, taskCancel, taskResume, } from "@adhd/agent-engine-orchestrator";
23
- import { AgentStore } from "../../store/agent-store.js";
24
- import { runMigrationsOn, MIGRATIONS_FOLDER } from "../../db/migrate-runner.js";
25
- import { startSseServer } from "../../streaming/sse-server.js";
26
- import { loadConfig } from "../../config.js";
27
- import { emitTaskEvent } from "../../streaming/event-bus.js";
28
- import { eq } from "drizzle-orm";
29
- /** Combined drizzle schema for harness-level direct table access */
30
- const combinedSchema = {
31
- ...entrypointSchema,
32
- sessionsTable,
33
- messagesTable,
34
- tasksTable,
35
- taskEventsTable,
36
- };
37
- /** Build a test EngineLogger that is silent by default */
38
- function testLogger(level = "silent") {
39
- if (level === "silent") {
40
- return {
41
- // eslint-disable-next-line @typescript-eslint/no-empty-function
42
- info: () => { },
43
- // eslint-disable-next-line @typescript-eslint/no-empty-function
44
- warn: () => { },
45
- // eslint-disable-next-line @typescript-eslint/no-empty-function
46
- error: () => { },
47
- // eslint-disable-next-line @typescript-eslint/no-empty-function
48
- debug: () => { },
49
- };
50
- }
51
- return {
52
- // eslint-disable-next-line @typescript-eslint/no-empty-function
53
- info: () => { },
54
- warn: (...args) => console.warn(...args),
55
- error: (...args) => console.error(...args),
56
- // eslint-disable-next-line @typescript-eslint/no-empty-function
57
- debug: () => { },
58
- };
59
- }
60
- /** Build a test EngineConfig with defaults suitable for integration tests */
61
- function testConfig(_opts = {}) {
62
- const env = {
63
- ADHD_AGENT_DATABASE_PATH: ":memory:",
64
- ADHD_AGENT_LOG_LEVEL: "silent",
65
- };
66
- const cfg = loadConfig(env);
67
- return {
68
- server: {
69
- contextLimit: 0,
70
- defaultMaxTokens: cfg.server.defaultMaxTokens,
71
- },
72
- queue: { concurrency: 5 },
73
- sse: { baseUrl: `http://localhost:${cfg.sse.port}` },
74
- plugins: { entries: [] },
75
- getProviderConfig(opts) {
76
- return { secret: opts.secret ? process.env[opts.secret] : undefined, baseURL: opts.inlineBaseURL, model: opts.inlineModel };
77
- },
78
- subprocessEnv() {
79
- return {};
80
- },
81
- isEnvNameAllowed(name) {
82
- return name.startsWith("ADHD_AGENT_") || name.startsWith("LMSTUDIO_");
83
- },
84
- };
85
- }
86
- /**
87
- * Build a fully-wired harness. Call teardown() when done.
88
- */
89
- export async function buildHarness(opts = {}) {
90
- const dbPath = opts.dbPath ??
91
- path.join(os.tmpdir(), `agent-mcp-test-${crypto.randomUUID()}.db`);
92
- const rawSqlite = new Database(dbPath);
93
- rawSqlite.pragma("journal_mode = WAL");
94
- rawSqlite.pragma("foreign_keys = ON");
95
- const db = drizzle(rawSqlite, { schema: combinedSchema });
96
- // Run migrations — same folder + FK-safe runner as production
97
- runMigrationsOn(rawSqlite, db, MIGRATIONS_FOLDER);
98
- const hooks = new HookRegistry();
99
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
100
- const dbAny = db;
101
- const agentStore = new AgentStore(dbAny, hooks);
102
- const sessionStore = new SessionStore(dbAny, hooks);
103
- const taskStore = new TaskStore(dbAny);
104
- const config = testConfig({ serverMaxToolLoops: opts.serverMaxToolLoops });
105
- const logger = testLogger("silent");
106
- const queue = new BackgroundQueue(5, logger);
107
- const orchestrator = new Orchestrator();
108
- const policy = new PolicyEngine({
109
- serverMaxDepth: 5,
110
- serverMaxToolLoops: opts.serverMaxToolLoops ?? 50,
111
- });
112
- // Mirror dispatchFn wiring from index.ts.
113
- const taskDepsRef = { value: undefined };
114
- const dispatchFn = async (taskId) => {
115
- if (!taskDepsRef.value)
116
- throw new Error("dispatchFn called before harness initialized");
117
- await enqueueExistingTask(taskId, taskDepsRef.value);
118
- };
119
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
120
- const dagEngine = new DagEngine(dbAny, queue, taskStore, dispatchFn, logger);
121
- // SSE server (optional)
122
- let sseServer;
123
- let ssePort;
124
- if (opts.withSse) {
125
- sseServer = startSseServer(taskStore, 0, "127.0.0.1");
126
- await new Promise((resolve) => {
127
- const readPort = () => {
128
- if (!sseServer)
129
- throw new Error("sseServer not started");
130
- const addr = sseServer.address();
131
- ssePort = addr?.port;
132
- resolve();
133
- };
134
- const svr = sseServer;
135
- if (!svr)
136
- throw new Error('sseServer not initialized');
137
- if (svr.listening)
138
- readPort();
139
- else
140
- svr.once("listening", readPort);
141
- });
142
- }
143
- // Build taskDeps — same shape as index.ts.
144
- const effectiveOrchestrator = opts.defaultProvider
145
- ? {
146
- run: (input) => {
147
- const provider = opts.defaultProvider;
148
- if (!provider)
149
- throw new Error("Harness: defaultProvider unexpectedly null");
150
- return orchestrator.run({ ...input, provider });
151
- },
152
- }
153
- : orchestrator;
154
- taskDepsRef.value = {
155
- agentStore,
156
- sessionStore,
157
- taskStore,
158
- orchestrator: effectiveOrchestrator,
159
- queue,
160
- policy,
161
- hooks,
162
- selfUrl: undefined,
163
- inProcessDescriptors: [],
164
- inProcessHandler: async () => {
165
- throw new Error("in-process tools not configured in test harness");
166
- },
167
- db: dbAny,
168
- dagEngine,
169
- config,
170
- logger,
171
- emitTaskEvent: emitTaskEvent,
172
- };
173
- // Re-enqueue orphaned pending tasks
174
- if (!opts.skipOrphanScan) {
175
- const orphanedPending = dbAny
176
- .select()
177
- .from(tasksTable)
178
- .where(eq(tasksTable.status, "pending"))
179
- .all();
180
- for (const row of orphanedPending) {
181
- try {
182
- if (!taskDepsRef.value)
183
- throw new Error("Harness: taskDepsRef.value not initialized");
184
- await enqueueExistingTask(row.id, taskDepsRef.value);
185
- }
186
- catch {
187
- // ignore failures in teardown
188
- }
189
- }
190
- }
191
- const teardown = async () => {
192
- if (sseServer) {
193
- const srv = sseServer;
194
- await new Promise((resolve) => srv.close(() => resolve()));
195
- }
196
- await Promise.race([
197
- queue.onIdle(),
198
- new Promise((_, reject) => setTimeout(() => reject(new Error("teardown: queue.onIdle() timed out after 15s")), 15_000)),
199
- ]).catch(() => {
200
- // Log but don't rethrow — we still need to close the DB.
201
- });
202
- await new Promise((r) => setImmediate(r));
203
- if (rawSqlite.open) {
204
- try {
205
- rawSqlite.pragma("wal_checkpoint(TRUNCATE)");
206
- }
207
- catch {
208
- // checkpoint is best-effort
209
- }
210
- try {
211
- rawSqlite.close();
212
- }
213
- catch {
214
- // already closed
215
- }
216
- }
217
- for (const suffix of ["", "-wal", "-shm"]) {
218
- try {
219
- fs.unlinkSync(`${dbPath}${suffix}`);
220
- }
221
- catch {
222
- // ignore — file may not exist
223
- }
224
- }
225
- };
226
- return {
227
- db,
228
- rawSqlite,
229
- agentStore,
230
- sessionStore,
231
- taskStore,
232
- queue,
233
- orchestrator: effectiveOrchestrator,
234
- policy,
235
- dagEngine,
236
- taskDeps: taskDepsRef.value,
237
- hooks,
238
- teardown,
239
- dbPath,
240
- sseServer,
241
- ssePort,
242
- };
243
- }
244
- /**
245
- * Rebuild a harness against the SAME DB file (for restart/persistence tests).
246
- */
247
- export async function rebuildHarness(dbPath, opts = {}) {
248
- return buildHarness({ ...opts, dbPath });
249
- }
250
- // ──────────────────────────────────────────────────────────────────────────────
251
- // Helpers
252
- // ──────────────────────────────────────────────────────────────────────────────
253
- /**
254
- * Wait for the queue to drain (all enqueued tasks finished).
255
- */
256
- export async function drainQueue(queue, timeoutMs = 10_000) {
257
- await Promise.race([
258
- queue.onIdle(),
259
- new Promise((_, reject) => setTimeout(() => reject(new Error(`drainQueue timed out after ${timeoutMs}ms`)), timeoutMs)),
260
- ]);
261
- await new Promise((r) => setImmediate(r));
262
- }
263
- /**
264
- * Create a minimal test agent + open a session. Returns { agentName, sessionId }.
265
- */
266
- export async function createSessionAndAgent(harness, provider, agentOverrides = {}) {
267
- const agentName = `test-agent-${generateId()}`;
268
- harness.agentStore.create({
269
- name: agentName,
270
- provider: { type: "openai", model: "test-model", baseURL: "http://localhost:1234/v1" },
271
- systemPrompt: "You are a test assistant.",
272
- mcpServers: {},
273
- permissions: {},
274
- ...agentOverrides,
275
- });
276
- const agentDef = harness.agentStore.read(agentName);
277
- const session = harness.sessionStore.create({
278
- agentName,
279
- agentDefinition: agentDef,
280
- });
281
- return { agentName, sessionId: session.id };
282
- }
283
- /**
284
- * Run a task synchronously via the real taskTool, injecting the given provider
285
- * into the orchestrator for this task only.
286
- */
287
- export async function runTaskViaToolWithProvider(harness, sessionId, prompt, provider, extraInput = {}) {
288
- const realOrchestrator = harness.orchestrator;
289
- const originalRun = realOrchestrator.run.bind(realOrchestrator);
290
- const patchedDeps = {
291
- ...harness.taskDeps,
292
- orchestrator: {
293
- run: (input) => originalRun({ ...input, provider }),
294
- },
295
- };
296
- return taskTool({ session_id: sessionId, prompt, background: false, ...extraInput }, patchedDeps);
297
- }
298
- /**
299
- * Background version — enqueues and returns immediately; use drainQueue to wait.
300
- */
301
- export async function enqueueTaskWithProvider(harness, sessionId, prompt, provider, extraInput = {}) {
302
- const realOrchestrator = harness.orchestrator;
303
- const originalRun = realOrchestrator.run.bind(realOrchestrator);
304
- const patchedDeps = {
305
- ...harness.taskDeps,
306
- orchestrator: {
307
- run: (input) => originalRun({ ...input, provider }),
308
- },
309
- };
310
- return taskTool({ session_id: sessionId, prompt, background: true, ...extraInput }, patchedDeps);
311
- }
312
- // ──────────────────────────────────────────────────────────────────────────────
313
- // Latch utility
314
- // ──────────────────────────────────────────────────────────────────────────────
315
- /**
316
- * A binary latch. One side waits; the other releases.
317
- */
318
- export class Latch {
319
- _resolve;
320
- _reject;
321
- promise;
322
- constructor() {
323
- this.promise = new Promise((res, rej) => {
324
- this._resolve = res;
325
- this._reject = rej;
326
- });
327
- }
328
- release() {
329
- this._resolve();
330
- }
331
- fail(err) {
332
- this._reject(err);
333
- }
334
- async wait(timeoutMs = 5_000) {
335
- return Promise.race([
336
- this.promise,
337
- new Promise((_, reject) => setTimeout(() => reject(new Error(`Latch.wait timed out after ${timeoutMs}ms`)), timeoutMs)),
338
- ]);
339
- }
340
- }
341
- /**
342
- * Connect to the real SSE server and collect frames until "done" or timeout.
343
- */
344
- export async function collectSseFrames(port, taskId, timeoutMs = 8_000, onConnected) {
345
- return new Promise((resolve, reject) => {
346
- const frames = [];
347
- const timer = setTimeout(() => {
348
- reject(new Error(`collectSseFrames timed out after ${timeoutMs}ms`));
349
- }, timeoutMs);
350
- const req = http.get(`http://127.0.0.1:${port}/tasks/${taskId}/stream`, { headers: { Accept: "text/event-stream" } }, (res) => {
351
- onConnected?.();
352
- let buf = "";
353
- let currentEventType = "";
354
- res.on("data", (chunk) => {
355
- buf += chunk.toString();
356
- const lines = buf.split("\n");
357
- buf = lines.pop() ?? "";
358
- for (const line of lines) {
359
- if (line.startsWith("event: ")) {
360
- currentEventType = line.slice("event: ".length).trim();
361
- }
362
- else if (line.startsWith("data: ")) {
363
- const raw = line.slice("data: ".length).trim();
364
- try {
365
- const data = JSON.parse(raw);
366
- frames.push({ type: currentEventType, data });
367
- if (currentEventType === "done") {
368
- clearTimeout(timer);
369
- req.destroy();
370
- resolve(frames);
371
- }
372
- }
373
- catch {
374
- // ignore parse errors
375
- }
376
- }
377
- if (line === "") {
378
- currentEventType = "";
379
- }
380
- }
381
- });
382
- res.on("error", (err) => {
383
- clearTimeout(timer);
384
- if (frames.some((f) => f.type === "done")) {
385
- resolve(frames);
386
- }
387
- else {
388
- reject(err);
389
- }
390
- });
391
- res.on("end", () => {
392
- clearTimeout(timer);
393
- resolve(frames);
394
- });
395
- });
396
- req.on("error", (err) => {
397
- clearTimeout(timer);
398
- if (frames.some((f) => f.type === "done")) {
399
- resolve(frames);
400
- }
401
- else {
402
- reject(err);
403
- }
404
- });
405
- });
406
- }
407
- // Re-export tools for convenience
408
- export { taskTool, taskCancel, taskResume };
409
- //# sourceMappingURL=harness.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"harness.js","sourceRoot":"","sources":["../../../../../../entrypoint/agent-mcp/src/__tests__/integration/harness.ts"],"names":[],"mappings":"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"}
@@ -1,43 +0,0 @@
1
- /**
2
- * ScriptedProvider — deterministic LLM provider for integration tests.
3
- *
4
- * Implements the real LLMProvider interface.
5
- * Returns programmable responses per chat() call in sequence.
6
- * After all scripted turns are exhausted, defaults to a "completed" response.
7
- *
8
- * Supported turn types:
9
- * - "completed" → returns stopReason "completed" with given content
10
- * - "tool_calls" → returns stopReason "tool_calls" with given tool calls
11
- * - "hitl" → returns a single request_human_input tool call
12
- *
13
- * Supports a beforeCall hook so tool stubs can coordinate with Latches.
14
- */
15
- import type { LLMProvider, ProviderChatResponse } from "@adhd/agent-engine-orchestrator";
16
- export interface ToolCallSpec {
17
- server: string;
18
- tool: string;
19
- arguments: unknown;
20
- /** Override the generated call ID */
21
- id?: string;
22
- }
23
- export type ScriptedTurn = {
24
- type: "completed";
25
- content: string;
26
- } | {
27
- type: "tool_calls";
28
- toolCalls: ToolCallSpec[];
29
- } | {
30
- type: "hitl";
31
- prompt: string;
32
- };
33
- export declare class ScriptedProvider implements LLMProvider {
34
- private readonly turns;
35
- private callIndex;
36
- /**
37
- * Optional hook invoked at the START of each chat() call (before returning).
38
- */
39
- beforeCall?: (callIndex: number) => Promise<void>;
40
- constructor(turns: ScriptedTurn[]);
41
- chat(): Promise<ProviderChatResponse>;
42
- }
43
- //# sourceMappingURL=scripted-provider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripted-provider.d.ts","sourceRoot":"","sources":["../../../../../../entrypoint/agent-mcp/src/__tests__/integration/scripted-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,oBAAoB,EACrB,MAAM,iCAAiC,CAAC;AAIzC,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,qCAAqC;IACrC,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,YAAY,EAAE,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAErC,qBAAa,gBAAiB,YAAW,WAAW;IAClD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiB;IACvC,OAAO,CAAC,SAAS,CAAK;IAEtB;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;gBAEtC,KAAK,EAAE,YAAY,EAAE;IAI3B,IAAI,IAAI,OAAO,CAAC,oBAAoB,CAAC;CA6D5C"}
@@ -1,80 +0,0 @@
1
- /**
2
- * ScriptedProvider — deterministic LLM provider for integration tests.
3
- *
4
- * Implements the real LLMProvider interface.
5
- * Returns programmable responses per chat() call in sequence.
6
- * After all scripted turns are exhausted, defaults to a "completed" response.
7
- *
8
- * Supported turn types:
9
- * - "completed" → returns stopReason "completed" with given content
10
- * - "tool_calls" → returns stopReason "tool_calls" with given tool calls
11
- * - "hitl" → returns a single request_human_input tool call
12
- *
13
- * Supports a beforeCall hook so tool stubs can coordinate with Latches.
14
- */
15
- import { generateId, nowIso } from "@adhd/agent-store-runtime";
16
- export class ScriptedProvider {
17
- turns;
18
- callIndex = 0;
19
- /**
20
- * Optional hook invoked at the START of each chat() call (before returning).
21
- */
22
- beforeCall;
23
- constructor(turns) {
24
- this.turns = turns;
25
- }
26
- async chat() {
27
- const idx = this.callIndex++;
28
- if (this.beforeCall) {
29
- await this.beforeCall(idx);
30
- }
31
- const turn = this.turns[idx] ?? { type: "completed", content: "done" };
32
- const sessionId = generateId();
33
- if (turn.type === "completed") {
34
- const msg = {
35
- id: generateId(),
36
- sessionId,
37
- role: "assistant",
38
- content: turn.content,
39
- createdAt: nowIso(),
40
- };
41
- return { message: msg, stopReason: "completed" };
42
- }
43
- if (turn.type === "hitl") {
44
- const callId = generateId();
45
- const msg = {
46
- id: generateId(),
47
- sessionId,
48
- role: "assistant",
49
- content: undefined,
50
- toolCalls: [
51
- {
52
- id: callId,
53
- server: "builtin",
54
- tool: "request_human_input",
55
- arguments: { prompt: turn.prompt },
56
- },
57
- ],
58
- createdAt: nowIso(),
59
- };
60
- return { message: msg, stopReason: "tool_calls" };
61
- }
62
- // type === "tool_calls"
63
- const calls = turn.toolCalls.map((spec) => ({
64
- id: spec.id ?? generateId(),
65
- server: spec.server,
66
- tool: spec.tool,
67
- arguments: spec.arguments,
68
- }));
69
- const msg = {
70
- id: generateId(),
71
- sessionId,
72
- role: "assistant",
73
- content: undefined,
74
- toolCalls: calls,
75
- createdAt: nowIso(),
76
- };
77
- return { message: msg, stopReason: "tool_calls" };
78
- }
79
- }
80
- //# sourceMappingURL=scripted-provider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripted-provider.js","sourceRoot":"","sources":["../../../../../../entrypoint/agent-mcp/src/__tests__/integration/scripted-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAe/D,MAAM,OAAO,gBAAgB;IACV,KAAK,CAAiB;IAC/B,SAAS,GAAG,CAAC,CAAC;IAEtB;;OAEG;IACH,UAAU,CAAwC;IAElD,YAAY,KAAqB;QAC/B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAE7B,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAEvE,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;QAE/B,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAY;gBACnB,EAAE,EAAE,UAAU,EAAE;gBAChB,SAAS;gBACT,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,SAAS,EAAE,MAAM,EAAE;aACpB,CAAC;YACF,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;QACnD,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAY;gBACnB,EAAE,EAAE,UAAU,EAAE;gBAChB,SAAS;gBACT,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,SAAS;gBAClB,SAAS,EAAE;oBACT;wBACE,EAAE,EAAE,MAAM;wBACV,MAAM,EAAE,SAAS;wBACjB,IAAI,EAAE,qBAAqB;wBAC3B,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;qBACnC;iBACF;gBACD,SAAS,EAAE,MAAM,EAAE;aACpB,CAAC;YACF,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;QACpD,CAAC;QAED,wBAAwB;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC1C,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,UAAU,EAAE;YAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAC,CAAC;QAEJ,MAAM,GAAG,GAAY;YACnB,EAAE,EAAE,UAAU,EAAE;YAChB,SAAS;YACT,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,SAAS;YAClB,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,MAAM,EAAE;SACpB,CAAC;QAEF,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;IACpD,CAAC;CACF"}
@@ -1,2 +0,0 @@
1
- export declare function loadEnvHierarchy(cwd?: string): void;
2
- //# sourceMappingURL=load-env.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"load-env.d.ts","sourceRoot":"","sources":["../../../../../entrypoint/agent-mcp/src/utils/load-env.ts"],"names":[],"mappings":"AAIA,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAsB,GAAG,IAAI,CAIlE"}
@@ -1,9 +0,0 @@
1
- import path from "node:path";
2
- import os from "node:os";
3
- import { config as dotenvConfig } from "dotenv";
4
- export function loadEnvHierarchy(cwd = process.cwd()) {
5
- dotenvConfig({ path: path.join(os.homedir(), ".adhd", ".env") });
6
- dotenvConfig({ path: path.join(cwd, ".adhd", ".env"), override: true });
7
- dotenvConfig({ path: path.join(cwd, ".env"), override: true });
8
- }
9
- //# sourceMappingURL=load-env.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"load-env.js","sourceRoot":"","sources":["../../../../../entrypoint/agent-mcp/src/utils/load-env.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEhD,MAAM,UAAU,gBAAgB,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IACxD,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACjE,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACxE,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AACnE,CAAC"}