@nexalab/agent-sdk 0.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 (236) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +518 -0
  3. package/bin/nexa.mjs +33 -0
  4. package/dist/advanced-memory.d.ts +32 -0
  5. package/dist/advanced-memory.d.ts.map +1 -0
  6. package/dist/advanced-memory.js +54 -0
  7. package/dist/advanced-memory.js.map +1 -0
  8. package/dist/agent-builder.d.ts +60 -0
  9. package/dist/agent-builder.d.ts.map +1 -0
  10. package/dist/agent-builder.js +141 -0
  11. package/dist/agent-builder.js.map +1 -0
  12. package/dist/approvals.d.ts +34 -0
  13. package/dist/approvals.d.ts.map +1 -0
  14. package/dist/approvals.js +54 -0
  15. package/dist/approvals.js.map +1 -0
  16. package/dist/artifacts.d.ts +13 -0
  17. package/dist/artifacts.d.ts.map +1 -0
  18. package/dist/artifacts.js +13 -0
  19. package/dist/artifacts.js.map +1 -0
  20. package/dist/cache.d.ts +17 -0
  21. package/dist/cache.d.ts.map +1 -0
  22. package/dist/cache.js +29 -0
  23. package/dist/cache.js.map +1 -0
  24. package/dist/completion-gate.d.ts +5 -0
  25. package/dist/completion-gate.d.ts.map +1 -0
  26. package/dist/completion-gate.js +20 -0
  27. package/dist/completion-gate.js.map +1 -0
  28. package/dist/console-chat.d.ts +110 -0
  29. package/dist/console-chat.d.ts.map +1 -0
  30. package/dist/console-chat.js +284 -0
  31. package/dist/console-chat.js.map +1 -0
  32. package/dist/context.d.ts +45 -0
  33. package/dist/context.d.ts.map +1 -0
  34. package/dist/context.js +92 -0
  35. package/dist/context.js.map +1 -0
  36. package/dist/evals.d.ts +38 -0
  37. package/dist/evals.d.ts.map +1 -0
  38. package/dist/evals.js +37 -0
  39. package/dist/evals.js.map +1 -0
  40. package/dist/event-bus.d.ts +28 -0
  41. package/dist/event-bus.d.ts.map +1 -0
  42. package/dist/event-bus.js +28 -0
  43. package/dist/event-bus.js.map +1 -0
  44. package/dist/file-storage.d.ts +25 -0
  45. package/dist/file-storage.d.ts.map +1 -0
  46. package/dist/file-storage.js +100 -0
  47. package/dist/file-storage.js.map +1 -0
  48. package/dist/guardrails.d.ts +44 -0
  49. package/dist/guardrails.d.ts.map +1 -0
  50. package/dist/guardrails.js +37 -0
  51. package/dist/guardrails.js.map +1 -0
  52. package/dist/harness.d.ts +26 -0
  53. package/dist/harness.d.ts.map +1 -0
  54. package/dist/harness.js +49 -0
  55. package/dist/harness.js.map +1 -0
  56. package/dist/hooks.d.ts +58 -0
  57. package/dist/hooks.d.ts.map +1 -0
  58. package/dist/hooks.js +16 -0
  59. package/dist/hooks.js.map +1 -0
  60. package/dist/http-adapter.d.ts +13 -0
  61. package/dist/http-adapter.d.ts.map +1 -0
  62. package/dist/http-adapter.js +33 -0
  63. package/dist/http-adapter.js.map +1 -0
  64. package/dist/index.d.ts +58 -0
  65. package/dist/index.d.ts.map +1 -0
  66. package/dist/index.js +58 -0
  67. package/dist/index.js.map +1 -0
  68. package/dist/kernel.d.ts +90 -0
  69. package/dist/kernel.d.ts.map +1 -0
  70. package/dist/kernel.js +251 -0
  71. package/dist/kernel.js.map +1 -0
  72. package/dist/knowledge.d.ts +35 -0
  73. package/dist/knowledge.d.ts.map +1 -0
  74. package/dist/knowledge.js +89 -0
  75. package/dist/knowledge.js.map +1 -0
  76. package/dist/local-tool-executor.d.ts +26 -0
  77. package/dist/local-tool-executor.d.ts.map +1 -0
  78. package/dist/local-tool-executor.js +30 -0
  79. package/dist/local-tool-executor.js.map +1 -0
  80. package/dist/loop-guard.d.ts +15 -0
  81. package/dist/loop-guard.d.ts.map +1 -0
  82. package/dist/loop-guard.js +12 -0
  83. package/dist/loop-guard.js.map +1 -0
  84. package/dist/manifest.d.ts +43 -0
  85. package/dist/manifest.d.ts.map +1 -0
  86. package/dist/manifest.js +31 -0
  87. package/dist/manifest.js.map +1 -0
  88. package/dist/mcp.d.ts +55 -0
  89. package/dist/mcp.d.ts.map +1 -0
  90. package/dist/mcp.js +175 -0
  91. package/dist/mcp.js.map +1 -0
  92. package/dist/memory.d.ts +32 -0
  93. package/dist/memory.d.ts.map +1 -0
  94. package/dist/memory.js +40 -0
  95. package/dist/memory.js.map +1 -0
  96. package/dist/mission-runtime.d.ts +106 -0
  97. package/dist/mission-runtime.d.ts.map +1 -0
  98. package/dist/mission-runtime.js +196 -0
  99. package/dist/mission-runtime.js.map +1 -0
  100. package/dist/model-harness.d.ts +23 -0
  101. package/dist/model-harness.d.ts.map +1 -0
  102. package/dist/model-harness.js +7 -0
  103. package/dist/model-harness.js.map +1 -0
  104. package/dist/model-router.d.ts +60 -0
  105. package/dist/model-router.d.ts.map +1 -0
  106. package/dist/model-router.js +90 -0
  107. package/dist/model-router.js.map +1 -0
  108. package/dist/multi-agent.d.ts +56 -0
  109. package/dist/multi-agent.d.ts.map +1 -0
  110. package/dist/multi-agent.js +69 -0
  111. package/dist/multi-agent.js.map +1 -0
  112. package/dist/native-tool-loop.d.ts +70 -0
  113. package/dist/native-tool-loop.d.ts.map +1 -0
  114. package/dist/native-tool-loop.js +92 -0
  115. package/dist/native-tool-loop.js.map +1 -0
  116. package/dist/openai-agent.d.ts +75 -0
  117. package/dist/openai-agent.d.ts.map +1 -0
  118. package/dist/openai-agent.js +190 -0
  119. package/dist/openai-agent.js.map +1 -0
  120. package/dist/openai-compatible.d.ts +117 -0
  121. package/dist/openai-compatible.d.ts.map +1 -0
  122. package/dist/openai-compatible.js +486 -0
  123. package/dist/openai-compatible.js.map +1 -0
  124. package/dist/otel.d.ts +12 -0
  125. package/dist/otel.d.ts.map +1 -0
  126. package/dist/otel.js +35 -0
  127. package/dist/otel.js.map +1 -0
  128. package/dist/permissions.d.ts +6 -0
  129. package/dist/permissions.d.ts.map +1 -0
  130. package/dist/permissions.js +33 -0
  131. package/dist/permissions.js.map +1 -0
  132. package/dist/plan-validator.d.ts +9 -0
  133. package/dist/plan-validator.d.ts.map +1 -0
  134. package/dist/plan-validator.js +27 -0
  135. package/dist/plan-validator.js.map +1 -0
  136. package/dist/policy.d.ts +27 -0
  137. package/dist/policy.d.ts.map +1 -0
  138. package/dist/policy.js +37 -0
  139. package/dist/policy.js.map +1 -0
  140. package/dist/postgres-storage.d.ts +33 -0
  141. package/dist/postgres-storage.d.ts.map +1 -0
  142. package/dist/postgres-storage.js +80 -0
  143. package/dist/postgres-storage.js.map +1 -0
  144. package/dist/provider-capabilities.d.ts +13 -0
  145. package/dist/provider-capabilities.d.ts.map +1 -0
  146. package/dist/provider-capabilities.js +19 -0
  147. package/dist/provider-capabilities.js.map +1 -0
  148. package/dist/providers.d.ts +14 -0
  149. package/dist/providers.d.ts.map +1 -0
  150. package/dist/providers.js +69 -0
  151. package/dist/providers.js.map +1 -0
  152. package/dist/queue.d.ts +29 -0
  153. package/dist/queue.d.ts.map +1 -0
  154. package/dist/queue.js +36 -0
  155. package/dist/queue.js.map +1 -0
  156. package/dist/redis-storage.d.ts +36 -0
  157. package/dist/redis-storage.d.ts.map +1 -0
  158. package/dist/redis-storage.js +68 -0
  159. package/dist/redis-storage.js.map +1 -0
  160. package/dist/replay.d.ts +13 -0
  161. package/dist/replay.d.ts.map +1 -0
  162. package/dist/replay.js +32 -0
  163. package/dist/replay.js.map +1 -0
  164. package/dist/runtime.d.ts +54 -0
  165. package/dist/runtime.d.ts.map +1 -0
  166. package/dist/runtime.js +218 -0
  167. package/dist/runtime.js.map +1 -0
  168. package/dist/sdk.d.ts +43 -0
  169. package/dist/sdk.d.ts.map +1 -0
  170. package/dist/sdk.js +82 -0
  171. package/dist/sdk.js.map +1 -0
  172. package/dist/secrets.d.ts +9 -0
  173. package/dist/secrets.d.ts.map +1 -0
  174. package/dist/secrets.js +23 -0
  175. package/dist/secrets.js.map +1 -0
  176. package/dist/sessions.d.ts +44 -0
  177. package/dist/sessions.d.ts.map +1 -0
  178. package/dist/sessions.js +76 -0
  179. package/dist/sessions.js.map +1 -0
  180. package/dist/skills.d.ts +12 -0
  181. package/dist/skills.d.ts.map +1 -0
  182. package/dist/skills.js +13 -0
  183. package/dist/skills.js.map +1 -0
  184. package/dist/smoke.d.ts +8 -0
  185. package/dist/smoke.d.ts.map +1 -0
  186. package/dist/smoke.js +5 -0
  187. package/dist/smoke.js.map +1 -0
  188. package/dist/sqlite-storage.d.ts +30 -0
  189. package/dist/sqlite-storage.d.ts.map +1 -0
  190. package/dist/sqlite-storage.js +52 -0
  191. package/dist/sqlite-storage.js.map +1 -0
  192. package/dist/storage.d.ts +74 -0
  193. package/dist/storage.d.ts.map +1 -0
  194. package/dist/storage.js +83 -0
  195. package/dist/storage.js.map +1 -0
  196. package/dist/structured-output.d.ts +14 -0
  197. package/dist/structured-output.d.ts.map +1 -0
  198. package/dist/structured-output.js +24 -0
  199. package/dist/structured-output.js.map +1 -0
  200. package/dist/telemetry.d.ts +27 -0
  201. package/dist/telemetry.d.ts.map +1 -0
  202. package/dist/telemetry.js +40 -0
  203. package/dist/telemetry.js.map +1 -0
  204. package/dist/tenancy.d.ts +9 -0
  205. package/dist/tenancy.d.ts.map +1 -0
  206. package/dist/tenancy.js +8 -0
  207. package/dist/tenancy.js.map +1 -0
  208. package/dist/tool-factory.d.ts +25 -0
  209. package/dist/tool-factory.d.ts.map +1 -0
  210. package/dist/tool-factory.js +38 -0
  211. package/dist/tool-factory.js.map +1 -0
  212. package/dist/tool-orchestrator.d.ts +89 -0
  213. package/dist/tool-orchestrator.d.ts.map +1 -0
  214. package/dist/tool-orchestrator.js +102 -0
  215. package/dist/tool-orchestrator.js.map +1 -0
  216. package/dist/tool-registry.d.ts +52 -0
  217. package/dist/tool-registry.d.ts.map +1 -0
  218. package/dist/tool-registry.js +19 -0
  219. package/dist/tool-registry.js.map +1 -0
  220. package/dist/types.d.ts +1020 -0
  221. package/dist/types.d.ts.map +1 -0
  222. package/dist/types.js +115 -0
  223. package/dist/types.js.map +1 -0
  224. package/dist/vector-memory.d.ts +19 -0
  225. package/dist/vector-memory.d.ts.map +1 -0
  226. package/dist/vector-memory.js +58 -0
  227. package/dist/vector-memory.js.map +1 -0
  228. package/dist/workflow.d.ts +65 -0
  229. package/dist/workflow.d.ts.map +1 -0
  230. package/dist/workflow.js +102 -0
  231. package/dist/workflow.js.map +1 -0
  232. package/dist/workspace.d.ts +35 -0
  233. package/dist/workspace.d.ts.map +1 -0
  234. package/dist/workspace.js +131 -0
  235. package/dist/workspace.js.map +1 -0
  236. package/package.json +223 -0
@@ -0,0 +1,284 @@
1
+ import readline from "node:readline/promises";
2
+ import { readFileSync } from "node:fs";
3
+ import { createNexaAgentSdk } from "./sdk.js";
4
+ import { OpenAICompatibleChatClient, OpenAICompatibleRegistry, createOpenAICompatibleReasoner } from "./openai-compatible.js";
5
+ import { LocalToolExecutor } from "./local-tool-executor.js";
6
+ export class PremiumConsoleRenderer {
7
+ output;
8
+ constructor(output = process.stdout) {
9
+ this.output = output;
10
+ }
11
+ header(input) {
12
+ this.line(color("Nexa Agent SDK Console", "gold"));
13
+ this.line(`${muted("env")} ${input.loadedEnvLabel ?? "none"}`);
14
+ this.line(`${muted("provider")} ${input.providerId}`);
15
+ if (input.baseUrl)
16
+ this.line(`${muted("baseUrl")} ${input.baseUrl}`);
17
+ this.line(`${muted("model")} ${input.model}`);
18
+ this.line(`${muted("trace")} ${input.trace ? "on" : "off"}`);
19
+ this.line("");
20
+ this.line(muted("Commands"));
21
+ for (const command of input.commands)
22
+ this.line(` ${color(command.name, "cyan")} ${muted(command.description)}`);
23
+ this.line("");
24
+ }
25
+ prompt() {
26
+ return `${color("you", "gold")}> `;
27
+ }
28
+ status(label, detail) {
29
+ this.line(`${color("◇", "cyan")} ${label}${detail ? ` ${muted(detail)}` : ""}`);
30
+ }
31
+ trace(event) {
32
+ this.line(`${muted("[trace]")} ${event.type}: ${JSON.stringify(event)}`);
33
+ }
34
+ assistantStart() {
35
+ this.write(`${color("nexa", "gold")}> `);
36
+ }
37
+ token(text) {
38
+ this.write(text);
39
+ }
40
+ assistantEnd() {
41
+ this.line("\n");
42
+ }
43
+ toolResult(toolId, result) {
44
+ if (result.status === "ok")
45
+ this.line(`${color("tool", "cyan")}> ${toolId}: ${JSON.stringify(result.output)}`);
46
+ else
47
+ this.line(`${color("tool", "red")}> ${toolId}: ${JSON.stringify(result)}`);
48
+ this.line("");
49
+ }
50
+ line(text = "") {
51
+ this.output.write(`${text}\n`);
52
+ }
53
+ write(text) {
54
+ this.output.write(text);
55
+ }
56
+ }
57
+ export class ConsoleChatIntegration {
58
+ options;
59
+ renderer;
60
+ commands;
61
+ messages;
62
+ constructor(options) {
63
+ this.options = options;
64
+ this.renderer = new PremiumConsoleRenderer();
65
+ this.commands = [
66
+ toolsCommand,
67
+ exitCommand,
68
+ ...(options.commands ?? [])
69
+ ];
70
+ this.messages = [
71
+ {
72
+ role: "system",
73
+ content: options.systemPrompt ?? "You are Nexa, a concise and useful AI assistant running through @nexalab/agent-sdk."
74
+ }
75
+ ];
76
+ }
77
+ trace(event) {
78
+ if (this.options.trace ?? true)
79
+ this.renderer.trace(event);
80
+ }
81
+ async run(runOptions = {}) {
82
+ const input = runOptions.input ?? process.stdin;
83
+ const output = runOptions.output ?? process.stdout;
84
+ const scriptedInputs = input.isTTY ? null : readFileSync(0, "utf8").split(/\r?\n/).map((line) => line.trim()).filter(Boolean);
85
+ const rl = input.isTTY ? readline.createInterface({ input, output }) : null;
86
+ this.renderer.header({
87
+ providerId: this.options.providerLabel ?? this.options.providerId,
88
+ model: this.options.model,
89
+ commands: this.commands,
90
+ trace: this.options.trace ?? true,
91
+ ...(this.options.loadedEnvLabel ? { loadedEnvLabel: this.options.loadedEnvLabel } : {}),
92
+ ...(this.options.baseUrl ? { baseUrl: this.options.baseUrl } : {})
93
+ });
94
+ for (;;) {
95
+ const answer = scriptedInputs ? scriptedInputs.shift() ?? "/exit" : await rl.question(this.renderer.prompt()).catch(() => "/exit");
96
+ const text = answer.trim();
97
+ if (scriptedInputs)
98
+ this.renderer.line(`${this.renderer.prompt()}${text}`);
99
+ if (!text)
100
+ continue;
101
+ const command = this.commands.find((item) => item.name === text.split(/\s+/)[0]);
102
+ if (command) {
103
+ const result = await command.run({
104
+ sdk: this.options.sdk,
105
+ messages: this.messages,
106
+ write: (line = "") => this.renderer.line(line)
107
+ });
108
+ if (result === "exit")
109
+ break;
110
+ continue;
111
+ }
112
+ await this.answer(text);
113
+ }
114
+ rl?.close();
115
+ }
116
+ async answer(text) {
117
+ this.messages.push({ role: "user", content: text });
118
+ this.renderer.status("preparing agent turn");
119
+ const turn = await this.options.sdk.prepareTurnWithTools({
120
+ text,
121
+ messages: this.messages
122
+ });
123
+ this.renderer.status("agent run", `${turn.run.state} ${turn.run.runId}`);
124
+ if (turn.toolTurn.selectedTools.length) {
125
+ this.renderer.status("tools selected", turn.toolTurn.selectedTools.map((intent) => intent.tool.id).join(", "));
126
+ }
127
+ else {
128
+ this.renderer.status("tools selected", "none");
129
+ }
130
+ this.renderer.assistantStart();
131
+ let assistantText = "";
132
+ for await (const chunk of this.options.client.stream({
133
+ providerId: this.options.providerId,
134
+ model: this.options.model,
135
+ messages: turn.modelMessages,
136
+ stream: true
137
+ })) {
138
+ if (chunk.done)
139
+ break;
140
+ assistantText += chunk.text;
141
+ this.renderer.token(chunk.text);
142
+ }
143
+ this.renderer.assistantEnd();
144
+ this.messages.push({ role: "assistant", content: assistantText });
145
+ this.options.sdk.memory.write({
146
+ kind: "episode",
147
+ content: `User: ${text}\nAssistant: ${assistantText}`,
148
+ source: "console-chat",
149
+ tags: ["chat", this.options.providerId, this.options.model],
150
+ importance: 0.6
151
+ });
152
+ return assistantText;
153
+ }
154
+ }
155
+ export function createConsoleChatIntegration(options) {
156
+ return new ConsoleChatIntegration(options);
157
+ }
158
+ export async function createOpenAICompatibleConsoleAgent(options) {
159
+ const registry = new OpenAICompatibleRegistry();
160
+ registry.register({
161
+ ...options.provider,
162
+ ...(options.model ? { defaultModel: options.model } : {})
163
+ });
164
+ const client = new OpenAICompatibleChatClient(registry);
165
+ const model = options.model ?? options.provider.defaultModel ?? (await client.listModels(options.provider.id))[0]?.id;
166
+ if (!model)
167
+ throw new Error(`No model found for provider ${options.provider.id}.`);
168
+ const selectedModel = model;
169
+ const toolExecutor = new LocalToolExecutor();
170
+ for (const registration of options.tools ?? []) {
171
+ toolExecutor.register(registration.tool, registration.handler);
172
+ }
173
+ const sdk = createNexaAgentSdk({
174
+ reasoner: createOpenAICompatibleReasoner({ client, providerId: options.provider.id, model: selectedModel }),
175
+ tools: (options.tools ?? []).map((registration) => registration.tool),
176
+ toolExecutor,
177
+ trace: createConsoleTraceRenderer(options.trace ?? true)
178
+ });
179
+ const commands = (options.tools ?? []).flatMap((registration) => (registration.commands ?? []).map((command) => createToolCommand({
180
+ name: command.name,
181
+ description: command.description,
182
+ toolId: registration.tool.id,
183
+ ...(command.input ? { input: command.input } : {})
184
+ })));
185
+ const console = createConsoleChatIntegration({
186
+ sdk,
187
+ client,
188
+ providerId: options.provider.id,
189
+ providerLabel: options.provider.name,
190
+ baseUrl: options.provider.baseUrl,
191
+ model: selectedModel,
192
+ trace: options.trace ?? true,
193
+ commands,
194
+ ...(options.loadedEnvLabel ? { loadedEnvLabel: options.loadedEnvLabel } : {}),
195
+ ...(options.systemPrompt ? { systemPrompt: options.systemPrompt } : {})
196
+ });
197
+ async function streamMessage(text, streamInput = {}) {
198
+ const messages = streamInput.messages ?? [{ role: "system", content: options.systemPrompt ?? "You are Nexa, a concise and useful AI assistant running through @nexalab/agent-sdk." }];
199
+ streamInput.onStatus?.("user.message.received", text);
200
+ messages.push({ role: "user", content: text });
201
+ streamInput.onStatus?.("agent.turn.prepare");
202
+ const turn = await sdk.prepareTurnWithTools({ text, messages });
203
+ streamInput.onStatus?.("agent.run", `${turn.run.state} ${turn.run.runId}`);
204
+ streamInput.onStatus?.("tools.selected", turn.toolTurn.selectedTools.map((intent) => intent.tool.id).join(", ") || "none");
205
+ let assistantText = "";
206
+ streamInput.onStatus?.("model.stream.start", selectedModel);
207
+ for await (const chunk of client.stream({
208
+ providerId: options.provider.id,
209
+ model: selectedModel,
210
+ messages: turn.modelMessages,
211
+ stream: true
212
+ })) {
213
+ if (chunk.done)
214
+ break;
215
+ assistantText += chunk.text;
216
+ streamInput.onToken?.(chunk.text);
217
+ }
218
+ streamInput.onStatus?.("model.stream.done");
219
+ messages.push({ role: "assistant", content: assistantText });
220
+ return { text: assistantText, messages, toolTurn: turn.toolTurn };
221
+ }
222
+ async function runMessage(text, messages = [{ role: "system", content: options.systemPrompt ?? "You are Nexa, a concise and useful AI assistant running through @nexalab/agent-sdk." }]) {
223
+ return streamMessage(text, { messages });
224
+ }
225
+ return {
226
+ sdk,
227
+ client,
228
+ console,
229
+ model: selectedModel,
230
+ runMessage,
231
+ streamMessage,
232
+ run: (runOptions) => console.run(runOptions)
233
+ };
234
+ }
235
+ export const createAgentCLI = createOpenAICompatibleConsoleAgent;
236
+ export function createConsoleTraceRenderer(enabled = true) {
237
+ const renderer = new PremiumConsoleRenderer();
238
+ return (event) => {
239
+ if (enabled)
240
+ renderer.trace(event);
241
+ };
242
+ }
243
+ export function createToolCommand(input) {
244
+ return {
245
+ name: input.name,
246
+ description: input.description,
247
+ async run(context) {
248
+ const result = await context.sdk.toolOrchestrator.executor.execute(input.toolId, input.input ?? {}, {
249
+ taskId: "console",
250
+ runId: "console",
251
+ stepId: `command-${input.name}`
252
+ });
253
+ context.write(`${input.toolId}: ${JSON.stringify(result)}`);
254
+ context.write("");
255
+ return "continue";
256
+ }
257
+ };
258
+ }
259
+ const toolsCommand = {
260
+ name: "/tools",
261
+ description: "list registered tools",
262
+ run(context) {
263
+ for (const tool of context.sdk.tools.list()) {
264
+ context.write(`${tool.id} -> capability=${tool.capability}, provider=${tool.provider}`);
265
+ }
266
+ context.write("");
267
+ return "continue";
268
+ }
269
+ };
270
+ const exitCommand = {
271
+ name: "/exit",
272
+ description: "exit",
273
+ run() {
274
+ return "exit";
275
+ }
276
+ };
277
+ function color(text, tone) {
278
+ const code = tone === "gold" ? 33 : tone === "cyan" ? 36 : 31;
279
+ return `\u001b[${code}m${text}\u001b[0m`;
280
+ }
281
+ function muted(text) {
282
+ return `\u001b[2m${text}\u001b[0m`;
283
+ }
284
+ //# sourceMappingURL=console-chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console-chat.js","sourceRoot":"","sources":["../src/console-chat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import type { ChatMessage } from "./openai-compatible.js";
2
+ import type { JsonObject } from "./types.js";
3
+ export type ContextResolverInput = {
4
+ runId: string;
5
+ taskId: string;
6
+ text: string;
7
+ };
8
+ export type ContextSectionValue = string | JsonObject | null | undefined;
9
+ export type ContextResolverFn = (input: ContextResolverInput) => ContextSectionValue | Promise<ContextSectionValue>;
10
+ export type ContextSectionInput = string | JsonObject | ContextResolverFn;
11
+ export type ContextEngineConfig = {
12
+ sections?: Record<string, ContextSectionInput>;
13
+ conversation?: boolean;
14
+ knowledge?: ContextSectionInput[];
15
+ dynamic?: ContextResolverFn;
16
+ maxTokens?: number;
17
+ compression?: boolean;
18
+ };
19
+ export type ContextBlock = {
20
+ id: string;
21
+ label: string;
22
+ content: string;
23
+ tokens: number;
24
+ priority: number;
25
+ };
26
+ export type BuiltContext = {
27
+ systemMessage: string;
28
+ blocks: ContextBlock[];
29
+ totalTokens: number;
30
+ truncated: boolean;
31
+ };
32
+ export type BuildContextInput = {
33
+ runId: string;
34
+ taskId: string;
35
+ text: string;
36
+ conversation?: ChatMessage[];
37
+ };
38
+ export declare class ContextEngine {
39
+ private readonly config;
40
+ constructor(config: ContextEngineConfig);
41
+ build(input: BuildContextInput): Promise<BuiltContext>;
42
+ }
43
+ export declare function createContextEngine(config: ContextEngineConfig): ContextEngine;
44
+ export declare function estimateTokens(text: string): number;
45
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,MAAM,oBAAoB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AACnF,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,UAAU,GAAG,IAAI,GAAG,SAAS,CAAC;AACzE,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,oBAAoB,KAAK,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;AACpH,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,UAAU,GAAG,iBAAiB,CAAC;AAE1E,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC/C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAClC,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5G,MAAM,MAAM,YAAY,GAAG;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;CAC9B,CAAC;AAYF,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,mBAAmB;IAElD,KAAK,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC;CA+B7D;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,aAAa,CAE9E;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD"}
@@ -0,0 +1,92 @@
1
+ const WELL_KNOWN_PRIORITY = {
2
+ identity: 100,
3
+ user: 90,
4
+ tenant: 85,
5
+ company: 85,
6
+ conversation: 70,
7
+ knowledge: 60,
8
+ dynamic: 50
9
+ };
10
+ export class ContextEngine {
11
+ config;
12
+ constructor(config) {
13
+ this.config = config;
14
+ }
15
+ async build(input) {
16
+ const resolverInput = { runId: input.runId, taskId: input.taskId, text: input.text };
17
+ const blocks = [];
18
+ for (const [id, section] of Object.entries(this.config.sections ?? {})) {
19
+ const value = await resolveSection(section, resolverInput);
20
+ if (value == null)
21
+ continue;
22
+ blocks.push(toBlock(id, id, value, WELL_KNOWN_PRIORITY[id] ?? 40));
23
+ }
24
+ if (this.config.conversation && input.conversation?.length) {
25
+ const transcript = input.conversation
26
+ .map((message) => `${message.role}: ${message.content}`)
27
+ .join("\n");
28
+ blocks.push(toBlock("conversation", "conversation", transcript, WELL_KNOWN_PRIORITY.conversation ?? 70));
29
+ }
30
+ for (const [index, source] of (this.config.knowledge ?? []).entries()) {
31
+ const value = await resolveSection(source, resolverInput);
32
+ if (value == null)
33
+ continue;
34
+ blocks.push(toBlock(`knowledge-${index}`, "knowledge", value, (WELL_KNOWN_PRIORITY.knowledge ?? 60) - index));
35
+ }
36
+ if (this.config.dynamic) {
37
+ const value = await this.config.dynamic(resolverInput);
38
+ if (value != null)
39
+ blocks.push(toBlock("dynamic", "dynamic", value, WELL_KNOWN_PRIORITY.dynamic ?? 50));
40
+ }
41
+ blocks.sort((a, b) => b.priority - a.priority);
42
+ return applyBudget(blocks, this.config);
43
+ }
44
+ }
45
+ export function createContextEngine(config) {
46
+ return new ContextEngine(config);
47
+ }
48
+ export function estimateTokens(text) {
49
+ return Math.ceil(text.length / 4);
50
+ }
51
+ async function resolveSection(section, input) {
52
+ const value = typeof section === "function" ? await section(input) : section;
53
+ return value;
54
+ }
55
+ function toBlock(id, label, value, priority) {
56
+ const content = typeof value === "string" ? value : JSON.stringify(value);
57
+ return { id, label, content, tokens: estimateTokens(content), priority };
58
+ }
59
+ // OSS reference strategy: plain char-count truncation, not context ranking or adaptive
60
+ // compression. See docs/architecture/open-core-target.md (R3) — `dynamic`/section resolvers
61
+ // are already the intended seam for a more advanced private ranking/compression strategy;
62
+ // no SDK change is needed to plug one in.
63
+ function applyBudget(blocks, config) {
64
+ const maxTokens = config.maxTokens;
65
+ if (!maxTokens)
66
+ return finalize(blocks, false);
67
+ let budget = maxTokens;
68
+ const kept = [];
69
+ let truncated = false;
70
+ for (const block of blocks) {
71
+ if (block.tokens <= budget) {
72
+ kept.push(block);
73
+ budget -= block.tokens;
74
+ continue;
75
+ }
76
+ if (config.compression && budget > 0) {
77
+ const maxChars = budget * 4;
78
+ kept.push({ ...block, content: `${block.content.slice(0, maxChars)}…`, tokens: budget });
79
+ budget = 0;
80
+ truncated = true;
81
+ continue;
82
+ }
83
+ truncated = true;
84
+ }
85
+ return finalize(kept, truncated);
86
+ }
87
+ function finalize(blocks, truncated) {
88
+ const systemMessage = blocks.map((block) => `## ${block.label}\n${block.content}`).join("\n\n");
89
+ const totalTokens = blocks.reduce((sum, block) => sum + block.tokens, 0);
90
+ return { systemMessage, blocks, totalTokens, truncated };
91
+ }
92
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { AgentMessageResult, OpenAICompatibleAgent } from "./openai-agent.js";
2
+ import type { JsonObject } from "./types.js";
3
+ export type AgentEvalCase = {
4
+ id: string;
5
+ input: string;
6
+ expected?: string[];
7
+ metadata?: JsonObject;
8
+ };
9
+ export type AgentEvalScore = {
10
+ passed: boolean;
11
+ score: number;
12
+ reason: string;
13
+ };
14
+ export type AgentEvalJudge = (input: {
15
+ testCase: AgentEvalCase;
16
+ result: AgentMessageResult;
17
+ }) => Promise<AgentEvalScore> | AgentEvalScore;
18
+ export type AgentEvalResult = {
19
+ id: string;
20
+ input: string;
21
+ output: string;
22
+ passed: boolean;
23
+ score: number;
24
+ reason: string;
25
+ metadata: JsonObject;
26
+ };
27
+ export type AgentEvalReport = {
28
+ passed: boolean;
29
+ score: number;
30
+ results: AgentEvalResult[];
31
+ };
32
+ export declare function runAgentEvals(input: {
33
+ agent: Pick<OpenAICompatibleAgent, "runMessage">;
34
+ cases: AgentEvalCase[];
35
+ judge?: AgentEvalJudge;
36
+ }): Promise<AgentEvalReport>;
37
+ export declare const keywordJudge: AgentEvalJudge;
38
+ //# sourceMappingURL=evals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evals.d.ts","sourceRoot":"","sources":["../src/evals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACnF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,UAAU,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE;IACnC,QAAQ,EAAE,aAAa,CAAC;IACxB,MAAM,EAAE,kBAAkB,CAAC;CAC5B,KAAK,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc,CAAC;AAE/C,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,UAAU,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B,CAAC;AAEF,wBAAsB,aAAa,CAAC,KAAK,EAAE;IACzC,KAAK,EAAE,IAAI,CAAC,qBAAqB,EAAE,YAAY,CAAC,CAAC;IACjD,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,cAAc,CAAC;CACxB,GAAG,OAAO,CAAC,eAAe,CAAC,CAsB3B;AAED,eAAO,MAAM,YAAY,EAAE,cAW1B,CAAC"}
package/dist/evals.js ADDED
@@ -0,0 +1,37 @@
1
+ export async function runAgentEvals(input) {
2
+ const judge = input.judge ?? keywordJudge;
3
+ const results = [];
4
+ for (const testCase of input.cases) {
5
+ const result = await input.agent.runMessage(testCase.input);
6
+ const score = await judge({ testCase, result });
7
+ results.push({
8
+ id: testCase.id,
9
+ input: testCase.input,
10
+ output: result.text,
11
+ passed: score.passed,
12
+ score: score.score,
13
+ reason: score.reason,
14
+ metadata: testCase.metadata ?? {}
15
+ });
16
+ }
17
+ const average = results.length ? results.reduce((sum, result) => sum + result.score, 0) / results.length : 1;
18
+ return {
19
+ passed: results.every((result) => result.passed),
20
+ score: average,
21
+ results
22
+ };
23
+ }
24
+ export const keywordJudge = ({ testCase, result }) => {
25
+ const expected = testCase.expected ?? [];
26
+ if (!expected.length)
27
+ return { passed: Boolean(result.text.trim()), score: result.text.trim() ? 1 : 0, reason: "Output is non-empty." };
28
+ const normalized = result.text.toLowerCase();
29
+ const matched = expected.filter((term) => normalized.includes(term.toLowerCase()));
30
+ const score = matched.length / expected.length;
31
+ return {
32
+ passed: score === 1,
33
+ score,
34
+ reason: `Matched ${matched.length}/${expected.length} expected term(s).`
35
+ };
36
+ };
37
+ //# sourceMappingURL=evals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evals.js","sourceRoot":"","sources":["../src/evals.ts"],"names":[],"mappings":"AAqCA,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAInC;IACC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,YAAY,CAAC;IAC1C,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,MAAM,EAAE,MAAM,CAAC,IAAI;YACnB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,EAAE;SAClC,CAAC,CAAC;IACL,CAAC;IACD,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7G,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;QAChD,KAAK,EAAE,OAAO;QACd,OAAO;KACR,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAmB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;IACnE,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;IACzC,IAAI,CAAC,QAAQ,CAAC,MAAM;QAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC;IACxI,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACnF,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC/C,OAAO;QACL,MAAM,EAAE,KAAK,KAAK,CAAC;QACnB,KAAK;QACL,MAAM,EAAE,WAAW,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,oBAAoB;KACzE,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { JsonValue } from "./types.js";
2
+ import type { EventJournal } from "./storage.js";
3
+ export type NexaSdkEvent<T extends JsonValue = JsonValue> = {
4
+ id: string;
5
+ type: string;
6
+ source: string;
7
+ taskId?: string;
8
+ runId?: string;
9
+ missionId?: string;
10
+ stepId?: string;
11
+ visibility?: "user" | "technical";
12
+ payload: T;
13
+ at: string;
14
+ };
15
+ export type EventHandler = (event: NexaSdkEvent) => void | Promise<void>;
16
+ export declare class EventBus {
17
+ private readonly persistentJournal?;
18
+ private readonly handlers;
19
+ private readonly journal;
20
+ constructor(persistentJournal?: EventJournal | undefined);
21
+ subscribe(handler: EventHandler): () => void;
22
+ list(): NexaSdkEvent[];
23
+ publish(input: Omit<NexaSdkEvent, "id" | "at"> & {
24
+ id?: string;
25
+ at?: string;
26
+ }): Promise<NexaSdkEvent>;
27
+ }
28
+ //# sourceMappingURL=event-bus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../src/event-bus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,IAAI;IAC1D,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IAClC,OAAO,EAAE,CAAC,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEzE,qBAAa,QAAQ;IAIP,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAH/C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;gBAEjB,iBAAiB,CAAC,EAAE,YAAY,YAAA;IAE7D,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,IAAI;IAK5C,IAAI,IAAI,YAAY,EAAE;IAIhB,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,YAAY,CAAC;CAW5G"}
@@ -0,0 +1,28 @@
1
+ export class EventBus {
2
+ persistentJournal;
3
+ handlers = new Set();
4
+ journal = [];
5
+ constructor(persistentJournal) {
6
+ this.persistentJournal = persistentJournal;
7
+ }
8
+ subscribe(handler) {
9
+ this.handlers.add(handler);
10
+ return () => this.handlers.delete(handler);
11
+ }
12
+ list() {
13
+ return [...this.journal];
14
+ }
15
+ async publish(input) {
16
+ const event = {
17
+ ...input,
18
+ id: input.id ?? crypto.randomUUID(),
19
+ at: input.at ?? new Date().toISOString()
20
+ };
21
+ this.journal.push(event);
22
+ await this.persistentJournal?.appendEvent(event);
23
+ for (const handler of this.handlers)
24
+ await handler(event);
25
+ return event;
26
+ }
27
+ }
28
+ //# sourceMappingURL=event-bus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-bus.js","sourceRoot":"","sources":["../src/event-bus.ts"],"names":[],"mappings":"AAkBA,MAAM,OAAO,QAAQ;IAIU;IAHZ,QAAQ,GAAG,IAAI,GAAG,EAAgB,CAAC;IACnC,OAAO,GAAmB,EAAE,CAAC;IAE9C,YAA6B,iBAAgC;QAAhC,sBAAiB,GAAjB,iBAAiB,CAAe;IAAG,CAAC;IAEjE,SAAS,CAAC,OAAqB;QAC7B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC3B,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAAqE;QACjF,MAAM,KAAK,GAAiB;YAC1B,GAAG,KAAK;YACR,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,MAAM,CAAC,UAAU,EAAE;YACnC,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACzC,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,MAAM,IAAI,CAAC,iBAAiB,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;QACjD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ;YAAE,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;QAC1D,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
@@ -0,0 +1,25 @@
1
+ import type { ApprovalRequest } from "./approvals.js";
2
+ import type { NexaSdkEvent } from "./event-bus.js";
3
+ import type { MemoryRecord } from "./memory.js";
4
+ import type { NexaStorage } from "./storage.js";
5
+ import type { AgentRunSnapshot } from "./types.js";
6
+ import type { WorkflowRun } from "./workflow.js";
7
+ export declare class JsonFileStorage implements NexaStorage {
8
+ private readonly rootDir;
9
+ constructor(rootDir: string);
10
+ saveRun(run: AgentRunSnapshot): Promise<void>;
11
+ getRun(runId: string): Promise<AgentRunSnapshot | undefined>;
12
+ listRuns(): Promise<AgentRunSnapshot[]>;
13
+ appendEvent(event: NexaSdkEvent): Promise<void>;
14
+ listEvents(): Promise<NexaSdkEvent[]>;
15
+ saveMemory(record: MemoryRecord): Promise<void>;
16
+ listMemories(): Promise<MemoryRecord[]>;
17
+ saveApproval(approval: ApprovalRequest): Promise<void>;
18
+ getApproval(id: string): Promise<ApprovalRequest | undefined>;
19
+ listApprovals(status?: ApprovalRequest["status"]): Promise<ApprovalRequest[]>;
20
+ saveWorkflow(run: WorkflowRun): Promise<void>;
21
+ getWorkflow(id: string): Promise<WorkflowRun | undefined>;
22
+ private path;
23
+ }
24
+ export declare function createJsonFileStorage(rootDir: string): JsonFileStorage;
25
+ //# sourceMappingURL=file-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-storage.d.ts","sourceRoot":"","sources":["../src/file-storage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,qBAAa,eAAgB,YAAW,WAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,MAAM;IAEtC,OAAO,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAU7C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAI5D,QAAQ,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAIvC,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAS/C,UAAU,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAIrC,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAS/C,YAAY,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAIvC,YAAY,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAStD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAI7D,aAAa,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAK7E,YAAY,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7C,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAI/D,OAAO,CAAC,IAAI;CAGb;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAEtE"}