@adhd/agent-mcp 2.0.1 → 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 (299) hide show
  1. package/AGENTS.md +236 -0
  2. package/CHANGELOG.md +115 -0
  3. package/LICENSE +21 -0
  4. package/README.md +201 -0
  5. package/docs/architecture-and-security.md +405 -0
  6. package/docs/marketing/.catalog/capabilities.md +143 -0
  7. package/docs/marketing/.catalog/consumer.md +111 -0
  8. package/docs/marketing/.catalog/distribution.md +223 -0
  9. package/docs/marketing/.catalog/doc-conformance.md +237 -0
  10. package/docs/marketing/.catalog/doc-ops.md +98 -0
  11. package/docs/marketing/.catalog/metrics.md +119 -0
  12. package/docs/marketing/.catalog/required-tooling.md +224 -0
  13. package/docs/marketing/.catalog/review.md +164 -0
  14. package/docs/provider-call-audit.md +254 -0
  15. package/llms.txt +133 -0
  16. package/package.json +30 -51
  17. package/src/__tests__/integration/harness.d.ts +871 -39
  18. package/src/__tests__/integration/harness.d.ts.map +1 -1
  19. package/src/__tests__/integration/harness.js +93 -87
  20. package/src/__tests__/integration/harness.js.map +1 -1
  21. package/src/__tests__/integration/scripted-provider.d.ts +1 -2
  22. package/src/__tests__/integration/scripted-provider.d.ts.map +1 -1
  23. package/src/__tests__/integration/scripted-provider.js +1 -3
  24. package/src/__tests__/integration/scripted-provider.js.map +1 -1
  25. package/src/config.d.ts +6 -69
  26. package/src/config.d.ts.map +1 -1
  27. package/src/config.js +1 -50
  28. package/src/config.js.map +1 -1
  29. package/src/db/client.d.ts +1516 -2
  30. package/src/db/client.d.ts.map +1 -1
  31. package/src/db/client.js +4 -2
  32. package/src/db/client.js.map +1 -1
  33. package/src/db/migrate-runner.d.ts +0 -28
  34. package/src/db/migrate-runner.d.ts.map +1 -1
  35. package/src/db/migrate-runner.js +0 -24
  36. package/src/db/migrate-runner.js.map +1 -1
  37. package/src/db/migrate.d.ts +0 -7
  38. package/src/db/migrate.d.ts.map +1 -1
  39. package/src/db/migrate.js +0 -7
  40. package/src/db/migrate.js.map +1 -1
  41. package/src/db/schema.d.ts +0 -1260
  42. package/src/db/schema.d.ts.map +1 -1
  43. package/src/db/schema.js +2 -179
  44. package/src/db/schema.js.map +1 -1
  45. package/src/index.d.ts +3 -42
  46. package/src/index.d.ts.map +1 -1
  47. package/src/index.js +32 -123
  48. package/src/index.js.map +1 -1
  49. package/src/logger.d.ts +0 -8
  50. package/src/logger.d.ts.map +1 -1
  51. package/src/logger.js +1 -12
  52. package/src/logger.js.map +1 -1
  53. package/src/scripts/agent-mcp-tail.d.ts +3 -0
  54. package/src/scripts/agent-mcp-tail.d.ts.map +1 -0
  55. package/src/scripts/agent-mcp-tail.js +227 -0
  56. package/src/scripts/agent-mcp-tail.js.map +1 -0
  57. package/src/server.d.ts +13 -34
  58. package/src/server.d.ts.map +1 -1
  59. package/src/server.js +234 -326
  60. package/src/server.js.map +1 -1
  61. package/src/store/agent-store.d.ts +3 -16
  62. package/src/store/agent-store.d.ts.map +1 -1
  63. package/src/store/agent-store.js +38 -41
  64. package/src/store/agent-store.js.map +1 -1
  65. package/src/streaming/chat-gateway.d.ts +17 -0
  66. package/src/streaming/chat-gateway.d.ts.map +1 -0
  67. package/src/streaming/chat-gateway.js +336 -0
  68. package/src/streaming/chat-gateway.js.map +1 -0
  69. package/src/streaming/event-bus.d.ts +4 -0
  70. package/src/streaming/event-bus.d.ts.map +1 -1
  71. package/src/streaming/event-bus.js +14 -1
  72. package/src/streaming/event-bus.js.map +1 -1
  73. package/src/streaming/sse-server.d.ts +3 -14
  74. package/src/streaming/sse-server.d.ts.map +1 -1
  75. package/src/streaming/sse-server.js +37 -37
  76. package/src/streaming/sse-server.js.map +1 -1
  77. package/src/utils/load-env.d.ts +0 -14
  78. package/src/utils/load-env.d.ts.map +1 -1
  79. package/src/utils/load-env.js +0 -18
  80. package/src/utils/load-env.js.map +1 -1
  81. package/drizzle/0000_nifty_sasquatch.sql +0 -55
  82. package/drizzle/0001_task_usage.sql +0 -16
  83. package/drizzle/0002_lumpy_silver_centurion.sql +0 -2
  84. package/drizzle/0003_nifty_shriek.sql +0 -2
  85. package/drizzle/0004_brief_shocker.sql +0 -4
  86. package/drizzle/0005_clear_lenny_balinger.sql +0 -25
  87. package/drizzle/0006_composed_prompts_cache.sql +0 -24
  88. package/drizzle/meta/0000_snapshot.json +0 -387
  89. package/drizzle/meta/0001_snapshot.json +0 -495
  90. package/drizzle/meta/0002_snapshot.json +0 -509
  91. package/drizzle/meta/0003_snapshot.json +0 -523
  92. package/drizzle/meta/0004_snapshot.json +0 -551
  93. package/drizzle/meta/0005_snapshot.json +0 -545
  94. package/drizzle/meta/0006_snapshot.json +0 -651
  95. package/drizzle/meta/_journal.json +0 -55
  96. package/src/clients/http-client.d.ts +0 -24
  97. package/src/clients/http-client.d.ts.map +0 -1
  98. package/src/clients/http-client.js +0 -98
  99. package/src/clients/http-client.js.map +0 -1
  100. package/src/clients/in-process.d.ts +0 -27
  101. package/src/clients/in-process.d.ts.map +0 -1
  102. package/src/clients/in-process.js +0 -37
  103. package/src/clients/in-process.js.map +0 -1
  104. package/src/clients/index.d.ts +0 -7
  105. package/src/clients/index.d.ts.map +0 -1
  106. package/src/clients/index.js +0 -5
  107. package/src/clients/index.js.map +0 -1
  108. package/src/clients/registry.d.ts +0 -54
  109. package/src/clients/registry.d.ts.map +0 -1
  110. package/src/clients/registry.js +0 -164
  111. package/src/clients/registry.js.map +0 -1
  112. package/src/clients/stdio-client.d.ts +0 -16
  113. package/src/clients/stdio-client.d.ts.map +0 -1
  114. package/src/clients/stdio-client.js +0 -97
  115. package/src/clients/stdio-client.js.map +0 -1
  116. package/src/clients/tool-naming.d.ts +0 -44
  117. package/src/clients/tool-naming.d.ts.map +0 -1
  118. package/src/clients/tool-naming.js +0 -65
  119. package/src/clients/tool-naming.js.map +0 -1
  120. package/src/clients/types.d.ts +0 -18
  121. package/src/clients/types.d.ts.map +0 -1
  122. package/src/clients/types.js +0 -2
  123. package/src/clients/types.js.map +0 -1
  124. package/src/engine/dag-engine.d.ts +0 -62
  125. package/src/engine/dag-engine.d.ts.map +0 -1
  126. package/src/engine/dag-engine.js +0 -158
  127. package/src/engine/dag-engine.js.map +0 -1
  128. package/src/engine/hooks.d.ts +0 -24
  129. package/src/engine/hooks.d.ts.map +0 -1
  130. package/src/engine/hooks.js +0 -50
  131. package/src/engine/hooks.js.map +0 -1
  132. package/src/engine/orchestrator.d.ts +0 -40
  133. package/src/engine/orchestrator.d.ts.map +0 -1
  134. package/src/engine/orchestrator.js +0 -507
  135. package/src/engine/orchestrator.js.map +0 -1
  136. package/src/engine/policy.d.ts +0 -66
  137. package/src/engine/policy.d.ts.map +0 -1
  138. package/src/engine/policy.js +0 -112
  139. package/src/engine/policy.js.map +0 -1
  140. package/src/engine/prompt-resolver.d.ts +0 -89
  141. package/src/engine/prompt-resolver.d.ts.map +0 -1
  142. package/src/engine/prompt-resolver.js +0 -96
  143. package/src/engine/prompt-resolver.js.map +0 -1
  144. package/src/engine/queue.d.ts +0 -29
  145. package/src/engine/queue.d.ts.map +0 -1
  146. package/src/engine/queue.js +0 -56
  147. package/src/engine/queue.js.map +0 -1
  148. package/src/plugins/index.d.ts +0 -2
  149. package/src/plugins/index.d.ts.map +0 -1
  150. package/src/plugins/index.js +0 -2
  151. package/src/plugins/index.js.map +0 -1
  152. package/src/plugins/loader.d.ts +0 -65
  153. package/src/plugins/loader.d.ts.map +0 -1
  154. package/src/plugins/loader.js +0 -222
  155. package/src/plugins/loader.js.map +0 -1
  156. package/src/plugins/usage-plugin.d.ts +0 -27
  157. package/src/plugins/usage-plugin.d.ts.map +0 -1
  158. package/src/plugins/usage-plugin.js +0 -148
  159. package/src/plugins/usage-plugin.js.map +0 -1
  160. package/src/providers/anthropic.d.ts +0 -13
  161. package/src/providers/anthropic.d.ts.map +0 -1
  162. package/src/providers/anthropic.js +0 -260
  163. package/src/providers/anthropic.js.map +0 -1
  164. package/src/providers/claudecli.d.ts +0 -153
  165. package/src/providers/claudecli.d.ts.map +0 -1
  166. package/src/providers/claudecli.js +0 -510
  167. package/src/providers/claudecli.js.map +0 -1
  168. package/src/providers/factory.d.ts +0 -10
  169. package/src/providers/factory.d.ts.map +0 -1
  170. package/src/providers/factory.js +0 -24
  171. package/src/providers/factory.js.map +0 -1
  172. package/src/providers/index.d.ts +0 -6
  173. package/src/providers/index.d.ts.map +0 -1
  174. package/src/providers/index.js +0 -5
  175. package/src/providers/index.js.map +0 -1
  176. package/src/providers/openai.d.ts +0 -14
  177. package/src/providers/openai.d.ts.map +0 -1
  178. package/src/providers/openai.js +0 -162
  179. package/src/providers/openai.js.map +0 -1
  180. package/src/providers/types.d.ts +0 -36
  181. package/src/providers/types.d.ts.map +0 -1
  182. package/src/providers/types.js +0 -2
  183. package/src/providers/types.js.map +0 -1
  184. package/src/store/composed-prompt-store.d.ts +0 -24
  185. package/src/store/composed-prompt-store.d.ts.map +0 -1
  186. package/src/store/composed-prompt-store.js +0 -75
  187. package/src/store/composed-prompt-store.js.map +0 -1
  188. package/src/store/index.d.ts +0 -5
  189. package/src/store/index.d.ts.map +0 -1
  190. package/src/store/index.js +0 -5
  191. package/src/store/index.js.map +0 -1
  192. package/src/store/session-store.d.ts +0 -45
  193. package/src/store/session-store.d.ts.map +0 -1
  194. package/src/store/session-store.js +0 -197
  195. package/src/store/session-store.js.map +0 -1
  196. package/src/store/task-store.d.ts +0 -55
  197. package/src/store/task-store.d.ts.map +0 -1
  198. package/src/store/task-store.js +0 -186
  199. package/src/store/task-store.js.map +0 -1
  200. package/src/tools/agent-crud.d.ts +0 -15
  201. package/src/tools/agent-crud.d.ts.map +0 -1
  202. package/src/tools/agent-crud.js +0 -32
  203. package/src/tools/agent-crud.js.map +0 -1
  204. package/src/tools/session.d.ts +0 -33
  205. package/src/tools/session.d.ts.map +0 -1
  206. package/src/tools/session.js +0 -73
  207. package/src/tools/session.js.map +0 -1
  208. package/src/tools/task.d.ts +0 -86
  209. package/src/tools/task.d.ts.map +0 -1
  210. package/src/tools/task.js +0 -406
  211. package/src/tools/task.js.map +0 -1
  212. package/src/tools/usage.d.ts +0 -60
  213. package/src/tools/usage.d.ts.map +0 -1
  214. package/src/tools/usage.js +0 -174
  215. package/src/tools/usage.js.map +0 -1
  216. package/src/types/agent.d.ts +0 -2
  217. package/src/types/agent.d.ts.map +0 -1
  218. package/src/types/agent.js +0 -3
  219. package/src/types/agent.js.map +0 -1
  220. package/src/types/execution.d.ts +0 -2
  221. package/src/types/execution.d.ts.map +0 -1
  222. package/src/types/execution.js +0 -3
  223. package/src/types/execution.js.map +0 -1
  224. package/src/types/index.d.ts +0 -2
  225. package/src/types/index.d.ts.map +0 -1
  226. package/src/types/index.js +0 -2
  227. package/src/types/index.js.map +0 -1
  228. package/src/types/mcp.d.ts +0 -2
  229. package/src/types/mcp.d.ts.map +0 -1
  230. package/src/types/mcp.js +0 -3
  231. package/src/types/mcp.js.map +0 -1
  232. package/src/types/message.d.ts +0 -2
  233. package/src/types/message.d.ts.map +0 -1
  234. package/src/types/message.js +0 -3
  235. package/src/types/message.js.map +0 -1
  236. package/src/types/session.d.ts +0 -2
  237. package/src/types/session.d.ts.map +0 -1
  238. package/src/types/session.js +0 -3
  239. package/src/types/session.js.map +0 -1
  240. package/src/types/task.d.ts +0 -2
  241. package/src/types/task.d.ts.map +0 -1
  242. package/src/types/task.js +0 -3
  243. package/src/types/task.js.map +0 -1
  244. package/src/utils/ids.d.ts +0 -2
  245. package/src/utils/ids.d.ts.map +0 -1
  246. package/src/utils/ids.js +0 -5
  247. package/src/utils/ids.js.map +0 -1
  248. package/src/utils/logger.d.ts +0 -2
  249. package/src/utils/logger.d.ts.map +0 -1
  250. package/src/utils/logger.js +0 -5
  251. package/src/utils/logger.js.map +0 -1
  252. package/src/utils/timestamps.d.ts +0 -2
  253. package/src/utils/timestamps.d.ts.map +0 -1
  254. package/src/utils/timestamps.js +0 -4
  255. package/src/utils/timestamps.js.map +0 -1
  256. package/src/validation/agent.d.ts +0 -400
  257. package/src/validation/agent.d.ts.map +0 -1
  258. package/src/validation/agent.js +0 -251
  259. package/src/validation/agent.js.map +0 -1
  260. package/src/validation/agents.d.ts +0 -2
  261. package/src/validation/agents.d.ts.map +0 -1
  262. package/src/validation/agents.js +0 -3
  263. package/src/validation/agents.js.map +0 -1
  264. package/src/validation/errors.d.ts +0 -32
  265. package/src/validation/errors.d.ts.map +0 -1
  266. package/src/validation/errors.js +0 -42
  267. package/src/validation/errors.js.map +0 -1
  268. package/src/validation/execution.d.ts +0 -86
  269. package/src/validation/execution.d.ts.map +0 -1
  270. package/src/validation/execution.js +0 -28
  271. package/src/validation/execution.js.map +0 -1
  272. package/src/validation/index.d.ts +0 -9
  273. package/src/validation/index.d.ts.map +0 -1
  274. package/src/validation/index.js +0 -9
  275. package/src/validation/index.js.map +0 -1
  276. package/src/validation/mcp.d.ts +0 -42
  277. package/src/validation/mcp.d.ts.map +0 -1
  278. package/src/validation/mcp.js +0 -28
  279. package/src/validation/mcp.js.map +0 -1
  280. package/src/validation/message.d.ts +0 -43
  281. package/src/validation/message.d.ts.map +0 -1
  282. package/src/validation/message.js +0 -23
  283. package/src/validation/message.js.map +0 -1
  284. package/src/validation/session.d.ts +0 -49
  285. package/src/validation/session.d.ts.map +0 -1
  286. package/src/validation/session.js +0 -34
  287. package/src/validation/session.js.map +0 -1
  288. package/src/validation/task.d.ts +0 -146
  289. package/src/validation/task.d.ts.map +0 -1
  290. package/src/validation/task.js +0 -95
  291. package/src/validation/task.js.map +0 -1
  292. package/src/validation/tasks.d.ts +0 -2
  293. package/src/validation/tasks.d.ts.map +0 -1
  294. package/src/validation/tasks.js +0 -3
  295. package/src/validation/tasks.js.map +0 -1
  296. package/src/validation/usage.d.ts +0 -89
  297. package/src/validation/usage.d.ts.map +0 -1
  298. package/src/validation/usage.js +0 -98
  299. package/src/validation/usage.js.map +0 -1
@@ -1,162 +0,0 @@
1
- import OpenAI from "openai";
2
- import pRetry from "p-retry";
3
- import { generateId } from "../utils/ids.js";
4
- import { nowIso } from "../utils/timestamps.js";
5
- import { resolveToolCallName } from "../clients/tool-naming.js";
6
- import { config } from "../config.js";
7
- function toOpenAIMessages(messages) {
8
- return messages.map(message => {
9
- switch (message.role) {
10
- case "system":
11
- return { role: "system", content: message.content || "" };
12
- case "user":
13
- return { role: "user", content: message.content || "" };
14
- case "assistant": {
15
- if (message.toolCalls && message.toolCalls.length > 0) {
16
- return {
17
- role: "assistant",
18
- content: message.content ?? null,
19
- tool_calls: message.toolCalls.map(tc => ({
20
- id: tc.id,
21
- type: "function",
22
- function: {
23
- name: `${tc.server}__${tc.tool}`,
24
- arguments: JSON.stringify(tc.arguments),
25
- },
26
- })),
27
- };
28
- }
29
- return { role: "assistant", content: message.content || "" };
30
- }
31
- case "tool": {
32
- const toolResult = message.toolResults?.[0];
33
- if (!toolResult) {
34
- throw new Error("Tool message missing tool result");
35
- }
36
- return {
37
- role: "tool",
38
- tool_call_id: toolResult.toolCallId,
39
- content: JSON.stringify(toolResult.result),
40
- };
41
- }
42
- default: {
43
- const exhaustive = message.role;
44
- throw new Error(`Unsupported message role: ${exhaustive}`);
45
- }
46
- }
47
- });
48
- }
49
- function toOpenAITools(tools) {
50
- if (!tools)
51
- return undefined;
52
- return tools.map(tool => ({
53
- type: "function",
54
- function: {
55
- name: tool.name,
56
- description: tool.description || "",
57
- parameters: (tool.inputSchema || {
58
- type: "object",
59
- properties: {},
60
- }),
61
- },
62
- }));
63
- }
64
- export class OpenAIProvider {
65
- client;
66
- providerConfig;
67
- /** Resolved model id (from env or inline field). */
68
- resolvedModel;
69
- constructor(providerConfig) {
70
- this.providerConfig = providerConfig;
71
- // Resolve credentials, URL, and model via the sole env-reader (config).
72
- // Fails loud for non-localhost base URLs without a secret (§3).
73
- // Localhost servers (LM Studio, etc.) are exempt — no secret required.
74
- // DEBT-005: timeout is forwarded to the SDK client so our AbortSignal.timeout()
75
- // always fires first, producing PROVIDER_TIMEOUT instead of a generic SDK error.
76
- const resolved = config.getProviderConfig({
77
- provider: "openai",
78
- secret: providerConfig.env?.secret,
79
- url: providerConfig.env?.base_url,
80
- model: providerConfig.env?.model,
81
- inlineBaseURL: providerConfig.baseURL,
82
- inlineModel: providerConfig.model,
83
- });
84
- this.resolvedModel = resolved.model ?? providerConfig.model ?? "";
85
- this.client = new OpenAI({
86
- // Localhost-exempt servers have no secret; "no-auth" is ignored by the server.
87
- apiKey: resolved.secret ?? "no-auth",
88
- baseURL: resolved.baseURL,
89
- timeout: providerConfig.timeoutMs ?? 60_000,
90
- });
91
- }
92
- async chat(request) {
93
- const retryConfig = this.providerConfig.retryConfig;
94
- const run = async () => {
95
- const response = await this.client.chat.completions.create({
96
- model: this.resolvedModel,
97
- temperature: this.providerConfig.temperature,
98
- max_tokens: this.providerConfig.maxTokens,
99
- messages: toOpenAIMessages(request.messages),
100
- tools: toOpenAITools(request.tools),
101
- }, { signal: request.signal });
102
- const choice = response.choices[0];
103
- const toolCalls = [];
104
- if (choice?.message.tool_calls) {
105
- for (const tc of choice.message.tool_calls) {
106
- if (tc.type !== "function")
107
- continue;
108
- // Resolve qualified or bare tool names against the advertised set
109
- // (a bare `task` → `agent-mcp__task` when unambiguous; DEBT-004).
110
- const { server, tool } = resolveToolCallName(tc.function.name, (request.tools ?? []).map((t) => t.name));
111
- toolCalls.push({
112
- id: tc.id,
113
- server,
114
- tool,
115
- arguments: JSON.parse(tc.function.arguments),
116
- });
117
- }
118
- }
119
- const message = {
120
- id: generateId(),
121
- sessionId: "",
122
- role: "assistant",
123
- content: choice?.message.content ?? undefined,
124
- toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
125
- createdAt: nowIso(),
126
- };
127
- const sdkUsage = response.usage;
128
- const STOP_REASON = {
129
- stop: "stop", length: "length", tool_calls: "tool_calls",
130
- };
131
- const rawFinishReason = choice?.finish_reason ?? null;
132
- const normalisedStopReason = STOP_REASON[rawFinishReason ?? ""] ?? "unknown";
133
- return {
134
- message,
135
- stopReason: toolCalls.length > 0 ? "tool_calls" : "completed",
136
- usage: sdkUsage
137
- ? {
138
- inputTokens: sdkUsage.prompt_tokens,
139
- outputTokens: sdkUsage.completion_tokens,
140
- stopReason: normalisedStopReason,
141
- maxTokens: this.providerConfig.maxTokens,
142
- }
143
- : undefined,
144
- };
145
- };
146
- if (retryConfig) {
147
- return pRetry(run, {
148
- retries: retryConfig.retries,
149
- minTimeout: retryConfig.minTimeout,
150
- maxTimeout: retryConfig.maxTimeout,
151
- factor: retryConfig.factor,
152
- onFailedAttempt: error => {
153
- if (request.signal?.aborted) {
154
- throw error;
155
- }
156
- },
157
- });
158
- }
159
- return run();
160
- }
161
- }
162
- //# sourceMappingURL=openai.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/providers/openai.ts"],"names":[],"mappings":"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"}
@@ -1,36 +0,0 @@
1
- import type { Message } from "../validation/index.js";
2
- import type { ToolDefinition, TokenUsage } from "@adhd/agent-mcp-types";
3
- export type { ToolDefinition, TokenUsage };
4
- export interface ProviderChatRequest {
5
- messages: Message[];
6
- tools?: ToolDefinition[];
7
- /**
8
- * AbortSignal composed by the orchestrator from:
9
- * - the task's cancellation controller signal
10
- * - AbortSignal.timeout(provider.timeoutMs ?? 60_000)
11
- *
12
- * Providers must NOT reapply their own timeout internally.
13
- */
14
- signal?: AbortSignal;
15
- /**
16
- * Callback for providers that run their own internal tool loop (e.g. claudecli).
17
- * The orchestrator builds this from the per-task McpClientRegistry so the
18
- * provider can execute MCP tools without owning the registry itself.
19
- *
20
- * Providers that return stopReason "tool_calls" (anthropic, openai)
21
- * do NOT use this — the orchestrator handles tool execution for them.
22
- */
23
- executeTool?: (server: string, tool: string, args: unknown) => Promise<{
24
- result: unknown;
25
- isError: boolean;
26
- }>;
27
- }
28
- export interface ProviderChatResponse {
29
- message: Message;
30
- stopReason: "completed" | "tool_calls";
31
- usage?: TokenUsage;
32
- }
33
- export interface LLMProvider {
34
- chat(request: ProviderChatRequest): Promise<ProviderChatResponse>;
35
- }
36
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/providers/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC;AAE3C,MAAM,WAAW,mBAAmB;IAChC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,CACV,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,KACZ,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,oBAAoB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,WAAW,GAAG,YAAY,CAAC;IACvC,KAAK,CAAC,EAAE,UAAU,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IACxB,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACrE"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/providers/types.ts"],"names":[],"mappings":""}
@@ -1,24 +0,0 @@
1
- import type { BetterSQLite3Database } from "drizzle-orm/better-sqlite3";
2
- import type { ComposedPrompt } from "@adhd/agent-mcp-types";
3
- export declare class ComposedPromptStore {
4
- #private;
5
- private readonly db;
6
- constructor(db: BetterSQLite3Database<Record<string, never>>);
7
- /**
8
- * Upserts a composed-prompt row. If a row already exists for the same
9
- * (agentSlug, contextHash) it is returned unchanged (cache hit). Otherwise
10
- * a new row is inserted and returned.
11
- *
12
- * Callers should prefer {@link findByAgentContext} to check for a hit before
13
- * calling upsert so they can distinguish new writes from cache hits.
14
- */
15
- upsert(row: Omit<ComposedPrompt, "id" | "createdAt">): ComposedPrompt;
16
- /**
17
- * Returns the composed-prompt row for the given (agentSlug, contextHash) pair,
18
- * or null when no cached entry exists.
19
- */
20
- findByAgentContext(agentSlug: string, contextHash: string): ComposedPrompt | null;
21
- /** Returns a composed-prompt row by primary key; throws if not found. */
22
- read(id: string): ComposedPrompt;
23
- }
24
- //# sourceMappingURL=composed-prompt-store.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"composed-prompt-store.d.ts","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/store/composed-prompt-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAOxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,qBAAa,mBAAmB;;IAExB,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,qBAAqB,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAGrE;;;;;;;OAOG;IACH,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,cAAc;IA0BrE;;;OAGG;IACH,kBAAkB,CACd,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GACpB,cAAc,GAAG,IAAI;IAgBxB,yEAAyE;IACzE,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc;CAkCnC"}
@@ -1,75 +0,0 @@
1
- import { and, eq } from "drizzle-orm";
2
- import { composedPromptsTable } from "../db/schema.js";
3
- import { logger } from "../logger.js";
4
- import { ToolError } from "../validation/errors.js";
5
- import { generateId } from "../utils/ids.js";
6
- import { nowIso } from "../utils/timestamps.js";
7
- export class ComposedPromptStore {
8
- db;
9
- constructor(db) {
10
- this.db = db;
11
- }
12
- /**
13
- * Upserts a composed-prompt row. If a row already exists for the same
14
- * (agentSlug, contextHash) it is returned unchanged (cache hit). Otherwise
15
- * a new row is inserted and returned.
16
- *
17
- * Callers should prefer {@link findByAgentContext} to check for a hit before
18
- * calling upsert so they can distinguish new writes from cache hits.
19
- */
20
- upsert(row) {
21
- const existing = this.findByAgentContext(row.agentSlug, row.contextHash);
22
- if (existing) {
23
- return existing;
24
- }
25
- const id = generateId();
26
- const createdAt = nowIso();
27
- this.db.insert(composedPromptsTable).values({
28
- id,
29
- agentSlug: row.agentSlug,
30
- contextHash: row.contextHash,
31
- content: row.content,
32
- componentVersions: row.componentVersions,
33
- createdAt,
34
- }).run();
35
- logger.info({ composedPromptId: id, agentSlug: row.agentSlug }, "Composed prompt cached");
36
- return this.read(id);
37
- }
38
- /**
39
- * Returns the composed-prompt row for the given (agentSlug, contextHash) pair,
40
- * or null when no cached entry exists.
41
- */
42
- findByAgentContext(agentSlug, contextHash) {
43
- const row = this.db
44
- .select()
45
- .from(composedPromptsTable)
46
- .where(and(eq(composedPromptsTable.agentSlug, agentSlug), eq(composedPromptsTable.contextHash, contextHash)))
47
- .get();
48
- if (!row)
49
- return null;
50
- return this.#toModel(row);
51
- }
52
- /** Returns a composed-prompt row by primary key; throws if not found. */
53
- read(id) {
54
- const row = this.db
55
- .select()
56
- .from(composedPromptsTable)
57
- .where(eq(composedPromptsTable.id, id))
58
- .get();
59
- if (!row) {
60
- throw new ToolError("COMPOSED_PROMPT_NOT_FOUND", `ComposedPrompt '${id}' not found`);
61
- }
62
- return this.#toModel(row);
63
- }
64
- #toModel(row) {
65
- return {
66
- id: row.id,
67
- agentSlug: row.agentSlug,
68
- contextHash: row.contextHash,
69
- content: row.content,
70
- componentVersions: row.componentVersions,
71
- createdAt: row.createdAt,
72
- };
73
- }
74
- }
75
- //# sourceMappingURL=composed-prompt-store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"composed-prompt-store.js","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/store/composed-prompt-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAItC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAGhD,MAAM,OAAO,mBAAmB;IAEP;IADrB,YACqB,EAAgD;QAAhD,OAAE,GAAF,EAAE,CAA8C;IAClE,CAAC;IAEJ;;;;;;;OAOG;IACH,MAAM,CAAC,GAA6C;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;QACzE,IAAI,QAAQ,EAAE,CAAC;YACX,OAAO,QAAQ,CAAC;QACpB,CAAC;QAED,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;QACxB,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC;QAE3B,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,MAAM,CAAC;YACxC,EAAE;YACF,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;YACxC,SAAS;SACZ,CAAC,CAAC,GAAG,EAAE,CAAC;QAET,MAAM,CAAC,IAAI,CACP,EAAE,gBAAgB,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,EAClD,wBAAwB,CAC3B,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IAED;;;OAGG;IACH,kBAAkB,CACd,SAAiB,EACjB,WAAmB;QAEnB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aACd,MAAM,EAAE;aACR,IAAI,CAAC,oBAAoB,CAAC;aAC1B,KAAK,CACF,GAAG,CACC,EAAE,CAAC,oBAAoB,CAAC,SAAS,EAAE,SAAS,CAAC,EAC7C,EAAE,CAAC,oBAAoB,CAAC,WAAW,EAAE,WAAW,CAAC,CACpD,CACJ;aACA,GAAG,EAAE,CAAC;QAEX,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,yEAAyE;IACzE,IAAI,CAAC,EAAU;QACX,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aACd,MAAM,EAAE;aACR,IAAI,CAAC,oBAAoB,CAAC;aAC1B,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;aACtC,GAAG,EAAE,CAAC;QAEX,IAAI,CAAC,GAAG,EAAE,CAAC;YACP,MAAM,IAAI,SAAS,CACf,2BAA2B,EAC3B,mBAAmB,EAAE,aAAa,CACrC,CAAC;QACN,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,QAAQ,CAAC,GAOR;QACG,OAAO;YACH,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;YACxC,SAAS,EAAE,GAAG,CAAC,SAAS;SAC3B,CAAC;IACN,CAAC;CACJ"}
@@ -1,5 +0,0 @@
1
- export { AgentStore } from "./agent-store.js";
2
- export { ComposedPromptStore } from "./composed-prompt-store.js";
3
- export { SessionStore } from "./session-store.js";
4
- export { TaskStore } from "./task-store.js";
5
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/store/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
@@ -1,5 +0,0 @@
1
- export { AgentStore } from "./agent-store.js";
2
- export { ComposedPromptStore } from "./composed-prompt-store.js";
3
- export { SessionStore } from "./session-store.js";
4
- export { TaskStore } from "./task-store.js";
5
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/store/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
@@ -1,45 +0,0 @@
1
- import type { BetterSQLite3Database } from "drizzle-orm/better-sqlite3";
2
- import type { AgentDefinition, Message, Session, SessionListInput } from "../validation/index.js";
3
- import type { IHookRegistry } from "@adhd/agent-mcp-types";
4
- export declare class SessionStore {
5
- private readonly db;
6
- private readonly hooks?;
7
- constructor(db: BetterSQLite3Database<Record<string, never>>, hooks?: IHookRegistry | undefined);
8
- create(input: {
9
- agentName: string;
10
- agentDefinition: AgentDefinition;
11
- /**
12
- * Optional: the composed_prompts row id produced (or served from cache)
13
- * by the prompt-resolver at session start. Written to
14
- * sessions.composed_prompt_id so callers can trace the exact compiled
15
- * artifact used. Null/undefined for legacy sessions created before the
16
- * registry integration (backward-compatible additive column).
17
- */
18
- composedPromptId?: string;
19
- }): Session;
20
- read(id: string): Session;
21
- /**
22
- * Returns the snapshotted AgentDefinition stored at session creation time.
23
- * This is intentionally separate from `read()` which returns the public
24
- * Session shape — `agentData` is storage-only and never exposed directly.
25
- */
26
- getAgentDefinition(sessionId: string): AgentDefinition;
27
- list(input: SessionListInput): Session[];
28
- close(id: string): Session;
29
- clearMessages(sessionId: string): number;
30
- appendMessage(sessionId: string, message: Message): void;
31
- getMessages(sessionId: string): Message[];
32
- }
33
- /**
34
- * Estimates the token count for a set of messages using a 4-chars-per-token heuristic.
35
- */
36
- export declare function estimateTokens(messages: Message[]): number;
37
- /**
38
- * Returns a windowed view of messages that fits within tokenLimit estimated tokens.
39
- * System messages are always preserved. Oldest non-system messages are dropped first.
40
- * Returns the original array unchanged if tokenLimit <= 0 or the array already fits.
41
- *
42
- * See [inv:window-messages] in docs/plan/0.0.6/contexts/_shared.md.
43
- */
44
- export declare function windowMessages(messages: Message[], tokenLimit: number): Message[];
45
- //# sourceMappingURL=session-store.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/store/session-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAIxE,OAAO,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAKlG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,qBAAa,YAAY;IAEjB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;gBADN,EAAE,EAAE,qBAAqB,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAChD,KAAK,CAAC,EAAE,aAAa,YAAA;IAG1C,MAAM,CAAC,KAAK,EAAE;QACV,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,eAAe,CAAC;QACjC;;;;;;WAMG;QACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC7B,GAAG,OAAO;IAyBX,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAyBzB;;;;OAIG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe;IAiBtD,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,EAAE;IAiCxC,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAyB1B,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAmBxC,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAgBxD,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,EAAE;CAmB5C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAW1D;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,EAAE,CAuBjF"}
@@ -1,197 +0,0 @@
1
- import { and, eq } from "drizzle-orm";
2
- import { messagesTable, sessionsTable } from "../db/schema.js";
3
- import { logger } from "../logger.js";
4
- import { agentDefinitionStoredSchema, sessionSchema } from "../validation/index.js";
5
- import { ToolError } from "../validation/errors.js";
6
- import { generateId } from "../utils/ids.js";
7
- import { nowIso } from "../utils/timestamps.js";
8
- export class SessionStore {
9
- db;
10
- hooks;
11
- constructor(db, hooks) {
12
- this.db = db;
13
- this.hooks = hooks;
14
- }
15
- create(input) {
16
- const now = nowIso();
17
- const id = generateId();
18
- this.db.insert(sessionsTable).values({
19
- id,
20
- agentName: input.agentName,
21
- agentVersion: input.agentDefinition.version,
22
- agentData: JSON.stringify(input.agentDefinition),
23
- status: "active",
24
- createdAt: now,
25
- updatedAt: now,
26
- composedPromptId: input.composedPromptId ?? null,
27
- }).run();
28
- logger.info({ sessionId: id, agentName: input.agentName }, "Session created");
29
- const session = this.read(id);
30
- void this.hooks?.emit("session:created", { session });
31
- return session;
32
- }
33
- read(id) {
34
- const row = this.db
35
- .select()
36
- .from(sessionsTable)
37
- .where(eq(sessionsTable.id, id))
38
- .get();
39
- if (!row) {
40
- throw new ToolError("SESSION_NOT_FOUND", `Session '${id}' not found`);
41
- }
42
- return sessionSchema.parse({
43
- id: row.id,
44
- agentName: row.agentName,
45
- agentVersion: row.agentVersion,
46
- status: row.status,
47
- createdAt: row.createdAt,
48
- updatedAt: row.updatedAt,
49
- closedAt: row.closedAt ?? undefined,
50
- });
51
- }
52
- /**
53
- * Returns the snapshotted AgentDefinition stored at session creation time.
54
- * This is intentionally separate from `read()` which returns the public
55
- * Session shape — `agentData` is storage-only and never exposed directly.
56
- */
57
- getAgentDefinition(sessionId) {
58
- const row = this.db
59
- .select()
60
- .from(sessionsTable)
61
- .where(eq(sessionsTable.id, sessionId))
62
- .get();
63
- if (!row) {
64
- throw new ToolError("SESSION_NOT_FOUND", `Session '${sessionId}' not found`);
65
- }
66
- return agentDefinitionStoredSchema.parse(JSON.parse(row.agentData));
67
- }
68
- list(input) {
69
- const conditions = [];
70
- if (input.agentName) {
71
- conditions.push(eq(sessionsTable.agentName, input.agentName));
72
- }
73
- if (input.status) {
74
- conditions.push(eq(sessionsTable.status, input.status));
75
- }
76
- const rows = conditions.length > 0
77
- ? this.db
78
- .select()
79
- .from(sessionsTable)
80
- .where(and(...conditions))
81
- .all()
82
- : this.db.select().from(sessionsTable).all();
83
- return rows.map(row => sessionSchema.parse({
84
- id: row.id,
85
- agentName: row.agentName,
86
- agentVersion: row.agentVersion,
87
- status: row.status,
88
- createdAt: row.createdAt,
89
- updatedAt: row.updatedAt,
90
- closedAt: row.closedAt ?? undefined,
91
- }));
92
- }
93
- close(id) {
94
- const session = this.read(id); // throws SESSION_NOT_FOUND if missing
95
- if (session.status === "closed") {
96
- throw new ToolError("SESSION_CLOSED", `Session '${id}' is already closed`);
97
- }
98
- const now = nowIso();
99
- this.db
100
- .update(sessionsTable)
101
- .set({
102
- status: "closed",
103
- closedAt: now,
104
- updatedAt: now,
105
- })
106
- .where(eq(sessionsTable.id, id))
107
- .run();
108
- logger.info({ sessionId: id }, "Session closed");
109
- return this.read(id);
110
- }
111
- clearMessages(sessionId) {
112
- const session = this.read(sessionId); // throws SESSION_NOT_FOUND if missing
113
- if (session.status === "closed") {
114
- throw new ToolError("SESSION_CLOSED", `Session '${sessionId}' is closed; cannot clear context`);
115
- }
116
- const result = this.db
117
- .delete(messagesTable)
118
- .where(eq(messagesTable.sessionId, sessionId))
119
- .run();
120
- logger.info({ sessionId, cleared: result.changes }, "Session context cleared");
121
- return result.changes;
122
- }
123
- appendMessage(sessionId, message) {
124
- this.db.insert(messagesTable).values({
125
- id: message.id,
126
- sessionId,
127
- role: message.role,
128
- content: message.content ?? null,
129
- toolCalls: message.toolCalls
130
- ? JSON.stringify(message.toolCalls)
131
- : null,
132
- toolResults: message.toolResults
133
- ? JSON.stringify(message.toolResults)
134
- : null,
135
- createdAt: message.createdAt,
136
- }).run();
137
- }
138
- getMessages(sessionId) {
139
- const rows = this.db
140
- .select()
141
- .from(messagesTable)
142
- .where(eq(messagesTable.sessionId, sessionId))
143
- .all();
144
- return rows.map(row => ({
145
- id: row.id,
146
- sessionId: row.sessionId,
147
- role: row.role,
148
- content: row.content ?? undefined,
149
- toolCalls: row.toolCalls ? JSON.parse(row.toolCalls) : undefined,
150
- toolResults: row.toolResults
151
- ? JSON.parse(row.toolResults)
152
- : undefined,
153
- createdAt: row.createdAt,
154
- }));
155
- }
156
- }
157
- /**
158
- * Estimates the token count for a set of messages using a 4-chars-per-token heuristic.
159
- */
160
- export function estimateTokens(messages) {
161
- return Math.ceil(messages.reduce((sum, m) => {
162
- return (sum +
163
- (m.content?.length ?? 0) +
164
- (m.toolCalls ? JSON.stringify(m.toolCalls).length : 0) +
165
- (m.toolResults ? JSON.stringify(m.toolResults).length : 0));
166
- }, 0) / 4);
167
- }
168
- /**
169
- * Returns a windowed view of messages that fits within tokenLimit estimated tokens.
170
- * System messages are always preserved. Oldest non-system messages are dropped first.
171
- * Returns the original array unchanged if tokenLimit <= 0 or the array already fits.
172
- *
173
- * See [inv:window-messages] in docs/plan/0.0.6/contexts/_shared.md.
174
- */
175
- export function windowMessages(messages, tokenLimit) {
176
- if (tokenLimit <= 0)
177
- return messages;
178
- if (estimateTokens(messages) <= tokenLimit)
179
- return messages;
180
- const systemMessages = messages.filter(m => m.role === "system");
181
- const nonSystemMessages = messages.filter(m => m.role !== "system");
182
- const systemBudget = estimateTokens(systemMessages);
183
- const remaining = Math.max(0, tokenLimit - systemBudget);
184
- const selected = [];
185
- let used = 0;
186
- // Walk newest-to-oldest; include at least one message even if it exceeds budget
187
- for (let i = nonSystemMessages.length - 1; i >= 0; i--) {
188
- const msg = nonSystemMessages[i];
189
- const cost = estimateTokens([msg]);
190
- if (used + cost > remaining && selected.length > 0)
191
- break;
192
- selected.unshift(msg);
193
- used += cost;
194
- }
195
- return [...systemMessages, ...selected];
196
- }
197
- //# sourceMappingURL=session-store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../../../../../packages/ai/agent-mcp/src/store/session-store.ts"],"names":[],"mappings":"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"}