@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,54 @@
1
+ import { type AgentPlan, type AgentRunSnapshot, type InterpretedGoal, type SuccessCriterion } from "./types.js";
2
+ import { ToolRegistry, type ToolExecutor } from "./tool-registry.js";
3
+ import type { PermissionMatrix } from "./permissions.js";
4
+ import type { EventBus } from "./event-bus.js";
5
+ import type { RunStore } from "./storage.js";
6
+ import type { HookDispatcher } from "./hooks.js";
7
+ export type AgentReasoner = {
8
+ interpretGoal(input: {
9
+ objective: string;
10
+ taskId: string;
11
+ runId: string;
12
+ }): Promise<InterpretedGoal>;
13
+ defineSuccessCriteria(input: {
14
+ goal: InterpretedGoal;
15
+ taskId: string;
16
+ runId: string;
17
+ }): Promise<SuccessCriterion[]>;
18
+ createPlan(input: {
19
+ taskId: string;
20
+ runId: string;
21
+ goal: InterpretedGoal;
22
+ criteria: SuccessCriterion[];
23
+ }): Promise<AgentPlan>;
24
+ };
25
+ export type AgentRuntimeOptions = {
26
+ reasoner: AgentReasoner;
27
+ toolRegistry?: ToolRegistry;
28
+ toolExecutor?: ToolExecutor;
29
+ permissions?: PermissionMatrix;
30
+ workspaceRoot?: string;
31
+ events?: EventBus;
32
+ runStore?: RunStore;
33
+ hooks?: HookDispatcher;
34
+ };
35
+ export declare class AgentRuntime {
36
+ private readonly options;
37
+ private readonly runs;
38
+ private readonly validator;
39
+ private readonly completionGate;
40
+ private readonly loopGuard;
41
+ private readonly toolRegistry;
42
+ constructor(options: AgentRuntimeOptions);
43
+ createRun(objective: string): AgentRunSnapshot;
44
+ getRun(runId: string): AgentRunSnapshot | undefined;
45
+ prepare(runId: string): Promise<AgentRunSnapshot>;
46
+ runToCompletion(runId: string, signal?: AbortSignal): Promise<AgentRunSnapshot>;
47
+ private executeStep;
48
+ private dependenciesSatisfied;
49
+ private requireRun;
50
+ private persistRun;
51
+ private recordEvent;
52
+ private publishRunEvent;
53
+ }
54
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAA0G,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAkB,KAAK,eAAe,EAAmB,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAIzP,OAAO,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,MAAM,aAAa,GAAG;IAC1B,aAAa,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACrG,qBAAqB,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,eAAe,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACpH,UAAU,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,eAAe,CAAC;QAAC,QAAQ,EAAE,gBAAgB,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;CAC/H,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,aAAa,CAAC;IACxB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,KAAK,CAAC,EAAE,cAAc,CAAC;CACxB,CAAC;AAqBF,qBAAa,YAAY;IAOX,OAAO,CAAC,QAAQ,CAAC,OAAO;IANpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAuC;IAC5D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuB;IACjD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmB;IAC7C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;gBAEf,OAAO,EAAE,mBAAmB;IAIzD,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB;IAoB9C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAI7C,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAwBjD,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC;YA0EvE,WAAW;IA2CzB,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,UAAU;YAMJ,UAAU;YAIV,WAAW;YAKX,eAAe;CAW9B"}
@@ -0,0 +1,218 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { agentObservationSchema, agentPlanSchema, interpretedGoalSchema } from "./types.js";
3
+ import { CompletionGate } from "./completion-gate.js";
4
+ import { LoopGuard } from "./loop-guard.js";
5
+ import { PlanValidator } from "./plan-validator.js";
6
+ import { ToolRegistry } from "./tool-registry.js";
7
+ function nowIso() {
8
+ return new Date().toISOString();
9
+ }
10
+ function event(payload) {
11
+ return { ...payload, at: nowIso() };
12
+ }
13
+ function delay(ms, signal) {
14
+ if (ms <= 0)
15
+ return Promise.resolve();
16
+ return new Promise((resolvePromise) => {
17
+ const timer = setTimeout(resolvePromise, ms);
18
+ signal?.addEventListener("abort", () => {
19
+ clearTimeout(timer);
20
+ resolvePromise();
21
+ }, { once: true });
22
+ });
23
+ }
24
+ export class AgentRuntime {
25
+ options;
26
+ runs = new Map();
27
+ validator = new PlanValidator();
28
+ completionGate = new CompletionGate();
29
+ loopGuard = new LoopGuard();
30
+ toolRegistry;
31
+ constructor(options) {
32
+ this.options = options;
33
+ this.toolRegistry = options.toolRegistry ?? new ToolRegistry();
34
+ }
35
+ createRun(objective) {
36
+ const taskId = randomUUID();
37
+ const runId = randomUUID();
38
+ const createdAt = nowIso();
39
+ const snapshot = {
40
+ taskId,
41
+ runId,
42
+ state: "RECEIVED",
43
+ objective,
44
+ observations: [],
45
+ events: [],
46
+ createdAt,
47
+ updatedAt: createdAt
48
+ };
49
+ void this.recordEvent(snapshot, event({ type: "task.created", taskId, runId, objective }));
50
+ this.runs.set(runId, snapshot);
51
+ void this.persistRun(snapshot);
52
+ return snapshot;
53
+ }
54
+ getRun(runId) {
55
+ return this.runs.get(runId);
56
+ }
57
+ async prepare(runId) {
58
+ const run = this.requireRun(runId);
59
+ run.state = "UNDERSTANDING";
60
+ run.goal = interpretedGoalSchema.parse(await this.options.reasoner.interpretGoal({ objective: run.objective, taskId: run.taskId, runId }));
61
+ await this.recordEvent(run, event({ type: "goal.interpreted", taskId: run.taskId, runId, goal: run.goal }));
62
+ run.state = "DEFINING_SUCCESS";
63
+ const criteria = await this.options.reasoner.defineSuccessCriteria({ goal: run.goal, taskId: run.taskId, runId });
64
+ run.state = "PLANNING";
65
+ run.plan = agentPlanSchema.parse(await this.options.reasoner.createPlan({ taskId: run.taskId, runId, goal: run.goal, criteria }));
66
+ await this.recordEvent(run, event({ type: "plan.created", taskId: run.taskId, runId, plan: run.plan }));
67
+ run.state = "VALIDATING_PLAN";
68
+ const validation = this.validator.validate(run.plan);
69
+ if (!validation.valid) {
70
+ run.state = "BLOCKED";
71
+ await this.recordEvent(run, event({ type: "task.blocked", taskId: run.taskId, runId, reason: validation.errors.join("; ") }));
72
+ }
73
+ run.updatedAt = nowIso();
74
+ await this.persistRun(run);
75
+ return run;
76
+ }
77
+ async runToCompletion(runId, signal) {
78
+ let run = this.requireRun(runId);
79
+ if (!run.plan)
80
+ run = await this.prepare(runId);
81
+ if (run.state === "BLOCKED")
82
+ return run;
83
+ const plan = run.plan;
84
+ if (!plan)
85
+ throw new Error(`Agent run has no executable plan: ${runId}`);
86
+ for (const step of plan.steps) {
87
+ if (signal?.aborted) {
88
+ run.state = "CANCELLED";
89
+ return run;
90
+ }
91
+ if (step.status === "completed" || step.status === "skipped")
92
+ continue;
93
+ if (!this.dependenciesSatisfied(plan, step))
94
+ continue;
95
+ const hookContext = { taskId: run.taskId, runId: run.runId };
96
+ let observation;
97
+ let attempt = 0;
98
+ for (;;) {
99
+ attempt += 1;
100
+ await this.options.hooks?.fire("beforeTool", { toolId: step.id, context: hookContext });
101
+ observation = await this.executeStep(run, step, signal);
102
+ await this.options.hooks?.fire("afterTool", { toolId: step.id, result: observation, context: hookContext });
103
+ if (observation.status !== "failed")
104
+ break;
105
+ const loop = this.loopGuard.record({ runId, stepId: step.id, type: "failed_observation", value: { summary: observation.summary }, maxRepeated: 2 });
106
+ if (loop.repeated || attempt >= Math.max(1, step.retryPolicy.maxAttempts))
107
+ break;
108
+ run.state = "WAITING_FOR_RETRY";
109
+ await this.recordEvent(run, event({ type: "step.retrying", taskId: run.taskId, runId, stepId: step.id, reason: observation.summary }));
110
+ await this.options.hooks?.fire("onRetry", { attempt, error: observation.summary, context: hookContext });
111
+ const backoff = Math.min(step.retryPolicy.backoffMs * attempt, step.retryPolicy.maxBackoffMs || Number.POSITIVE_INFINITY);
112
+ if (backoff > 0)
113
+ await delay(backoff, signal);
114
+ if (signal?.aborted) {
115
+ run.state = "CANCELLED";
116
+ return run;
117
+ }
118
+ }
119
+ run.observations.push(observation);
120
+ if (observation.status === "failed") {
121
+ step.status = "failed";
122
+ await this.recordEvent(run, event({ type: "step.failed", taskId: run.taskId, runId, stepId: step.id, observation }));
123
+ run.state = "BLOCKED";
124
+ await this.recordEvent(run, event({ type: "task.blocked", taskId: run.taskId, runId, reason: observation.summary }));
125
+ run.updatedAt = nowIso();
126
+ await this.persistRun(run);
127
+ return run;
128
+ }
129
+ if (observation.nextHints.includes("approval_required")) {
130
+ step.status = "waiting_approval";
131
+ run.state = "WAITING_FOR_APPROVAL";
132
+ await this.recordEvent(run, event({ type: "task.waiting_for_approval", taskId: run.taskId, runId, stepId: step.id, reason: observation.summary }));
133
+ run.updatedAt = nowIso();
134
+ await this.persistRun(run);
135
+ return run;
136
+ }
137
+ step.status = "completed";
138
+ await this.recordEvent(run, event({ type: "step.completed", taskId: run.taskId, runId, stepId: step.id, observation }));
139
+ }
140
+ const decision = this.completionGate.evaluate(run.goal?.successCriteria ?? run.plan?.steps.flatMap((step) => step.successCriteria) ?? [], run.observations);
141
+ run.state = decision.type === "COMPLETE" ? "COMPLETED" : "BLOCKED";
142
+ if (decision.type === "COMPLETE")
143
+ await this.recordEvent(run, event({ type: "task.completed", taskId: run.taskId, runId, decision }));
144
+ else
145
+ await this.recordEvent(run, event({ type: "task.blocked", taskId: run.taskId, runId, reason: decision.reason }));
146
+ run.updatedAt = nowIso();
147
+ await this.persistRun(run);
148
+ return run;
149
+ }
150
+ async executeStep(run, step, signal) {
151
+ step.status = "running";
152
+ run.state = step.type === "validate" || step.type === "finalize" ? "VALIDATING" : "EXECUTING";
153
+ await this.recordEvent(run, event({ type: "step.started", taskId: run.taskId, runId: run.runId, stepId: step.id }));
154
+ if (!this.options.toolExecutor || step.requiredCapabilities.length === 0) {
155
+ return agentObservationSchema.parse({
156
+ status: "success",
157
+ summary: `Step recorded: ${step.objective}`,
158
+ evidence: step.expectedEvidence.map((requirement) => ({ id: randomUUID(), kind: requirement.kind, summary: requirement.description })),
159
+ data: { mode: "record_only" }
160
+ });
161
+ }
162
+ const capability = step.requiredCapabilities[0]?.capability;
163
+ const candidate = capability ? this.toolRegistry.select(capability, this.options.permissions) : null;
164
+ if (!candidate) {
165
+ return agentObservationSchema.parse({
166
+ status: "failed",
167
+ summary: capability ? `No tool is available for ${capability}.` : "The step does not declare an executable capability.",
168
+ errors: [{ code: "TOOL_UNAVAILABLE", message: "No matching tool was registered.", retryable: false }]
169
+ });
170
+ }
171
+ const context = {
172
+ taskId: run.taskId,
173
+ runId: run.runId,
174
+ stepId: step.id,
175
+ ...(this.options.workspaceRoot ? { workspaceRoot: this.options.workspaceRoot } : {}),
176
+ ...(signal ? { signal } : {})
177
+ };
178
+ const result = await this.options.toolExecutor.execute(candidate.definition.id, {}, context);
179
+ if (result.status === "pending_approval")
180
+ return agentObservationSchema.parse({ status: "partial", summary: result.reason, nextHints: ["approval_required"] });
181
+ if (result.status === "error")
182
+ return agentObservationSchema.parse({ status: "failed", summary: result.error, errors: [{ code: "TOOL_ERROR", message: result.error, retryable: result.retryable ?? false }] });
183
+ return agentObservationSchema.parse({
184
+ status: "success",
185
+ summary: "Tool execution completed.",
186
+ data: result.output,
187
+ evidence: result.evidence ?? step.expectedEvidence.map((requirement) => ({ id: randomUUID(), kind: requirement.kind, summary: requirement.description }))
188
+ });
189
+ }
190
+ dependenciesSatisfied(plan, step) {
191
+ return step.dependencies.every((dependency) => plan.steps.find((candidate) => candidate.id === dependency)?.status === "completed");
192
+ }
193
+ requireRun(runId) {
194
+ const run = this.runs.get(runId);
195
+ if (!run)
196
+ throw new Error(`Agent run not found: ${runId}`);
197
+ return run;
198
+ }
199
+ async persistRun(run) {
200
+ await this.options.runStore?.saveRun(run);
201
+ }
202
+ async recordEvent(run, agentEvent) {
203
+ run.events.push(agentEvent);
204
+ await this.publishRunEvent(agentEvent);
205
+ }
206
+ async publishRunEvent(agentEvent) {
207
+ await this.options.events?.publish({
208
+ type: agentEvent.type,
209
+ source: "agent-runtime",
210
+ taskId: agentEvent.taskId,
211
+ runId: agentEvent.runId,
212
+ ...(agentEvent.stepId ? { stepId: agentEvent.stepId } : {}),
213
+ visibility: agentEvent.type.startsWith("task.") ? "user" : "technical",
214
+ payload: agentEvent
215
+ });
216
+ }
217
+ }
218
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
package/dist/sdk.d.ts ADDED
@@ -0,0 +1,43 @@
1
+ import { AgentRuntime, type AgentReasoner } from "./runtime.js";
2
+ import { ToolRegistry, type ToolDefinition, type ToolExecutor } from "./tool-registry.js";
3
+ import { EventBus } from "./event-bus.js";
4
+ import { MemoryStore } from "./memory.js";
5
+ import { MissionRuntime, type MissionPlanner, type MissionVerifier } from "./mission-runtime.js";
6
+ import { ApprovalManager } from "./approvals.js";
7
+ import { TransparentToolOrchestrator, type ToolOrchestrationResult, type ToolRouter, type ToolTraceEvent } from "./tool-orchestrator.js";
8
+ import type { ChatMessage } from "./openai-compatible.js";
9
+ import type { NexaStorage } from "./storage.js";
10
+ import type { NexaTelemetry } from "./telemetry.js";
11
+ export type CreateAgentSdkInput = {
12
+ reasoner: AgentReasoner;
13
+ tools?: ToolDefinition[];
14
+ toolExecutor?: ToolExecutor;
15
+ workspaceRoot?: string;
16
+ missionPlanner?: MissionPlanner;
17
+ missionVerifier?: MissionVerifier;
18
+ toolRouter?: ToolRouter;
19
+ trace?: (event: ToolTraceEvent) => void;
20
+ storage?: NexaStorage;
21
+ telemetry?: NexaTelemetry;
22
+ };
23
+ export type NexaAgentSdk = {
24
+ agent: AgentRuntime;
25
+ missions: MissionRuntime;
26
+ tools: ToolRegistry;
27
+ memory: MemoryStore;
28
+ events: EventBus;
29
+ approvals: ApprovalManager;
30
+ toolOrchestrator: TransparentToolOrchestrator;
31
+ prepareTurnWithTools(input: {
32
+ text: string;
33
+ messages: ChatMessage[];
34
+ maxToolRounds?: number;
35
+ }): Promise<{
36
+ run: Awaited<ReturnType<AgentRuntime["runToCompletion"]>>;
37
+ toolTurn: ToolOrchestrationResult;
38
+ modelMessages: ChatMessage[];
39
+ }>;
40
+ };
41
+ export declare function createAgentSdk(input: CreateAgentSdkInput): AgentRuntime;
42
+ export declare function createNexaAgentSdk(input: CreateAgentSdkInput): NexaAgentSdk;
43
+ //# sourceMappingURL=sdk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,aAAa,EAA4B,MAAM,cAAc,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACjG,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,2BAA2B,EAAE,KAAK,uBAAuB,EAAE,KAAK,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACzI,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IACxC,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,QAAQ,CAAC;IACjB,SAAS,EAAE,eAAe,CAAC;IAC3B,gBAAgB,EAAE,2BAA2B,CAAC;IAC9C,oBAAoB,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,WAAW,EAAE,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QACtG,GAAG,EAAE,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAC1D,QAAQ,EAAE,uBAAuB,CAAC;QAClC,aAAa,EAAE,WAAW,EAAE,CAAC;KAC9B,CAAC,CAAC;CACJ,CAAC;AAEF,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,YAAY,CAEvE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,mBAAmB,GAAG,YAAY,CA2D3E"}
package/dist/sdk.js ADDED
@@ -0,0 +1,82 @@
1
+ import { AgentRuntime } from "./runtime.js";
2
+ import { ToolRegistry } from "./tool-registry.js";
3
+ import { EventBus } from "./event-bus.js";
4
+ import { MemoryStore } from "./memory.js";
5
+ import { MissionRuntime } from "./mission-runtime.js";
6
+ import { ApprovalManager } from "./approvals.js";
7
+ import { TransparentToolOrchestrator } from "./tool-orchestrator.js";
8
+ export function createAgentSdk(input) {
9
+ return createNexaAgentSdk(input).agent;
10
+ }
11
+ export function createNexaAgentSdk(input) {
12
+ const toolRegistry = new ToolRegistry();
13
+ for (const tool of input.tools ?? [])
14
+ toolRegistry.register(tool);
15
+ const events = new EventBus(hasEventJournal(input.storage) ? input.storage : undefined);
16
+ if (input.telemetry)
17
+ events.subscribe((event) => input.telemetry?.event(event));
18
+ const memory = new MemoryStore();
19
+ const approvals = new ApprovalManager(hasApprovalStore(input.storage) ? input.storage : undefined);
20
+ const toolOrchestrator = new TransparentToolOrchestrator(input.toolExecutor ?? {
21
+ async execute(toolId) {
22
+ return { status: "error", error: `No tool executor configured for ${toolId}.`, retryable: false };
23
+ }
24
+ }, {
25
+ ...(input.toolRouter ? { router: input.toolRouter } : {}),
26
+ trace: (event) => {
27
+ input.trace?.(event);
28
+ void input.telemetry?.toolTrace(event);
29
+ }
30
+ });
31
+ const options = {
32
+ reasoner: input.reasoner,
33
+ toolRegistry,
34
+ events,
35
+ ...(hasRunStore(input.storage) ? { runStore: input.storage } : {}),
36
+ ...(input.toolExecutor ? { toolExecutor: input.toolExecutor } : {}),
37
+ ...(input.workspaceRoot ? { workspaceRoot: input.workspaceRoot } : {})
38
+ };
39
+ const agent = new AgentRuntime(options);
40
+ return {
41
+ agent,
42
+ missions: new MissionRuntime({
43
+ tools: toolRegistry,
44
+ events,
45
+ memory,
46
+ ...(input.toolExecutor ? { toolExecutor: input.toolExecutor } : {}),
47
+ ...(input.missionPlanner ? { planner: input.missionPlanner } : {}),
48
+ ...(input.missionVerifier ? { verifier: input.missionVerifier } : {})
49
+ }),
50
+ tools: toolRegistry,
51
+ memory,
52
+ events,
53
+ approvals,
54
+ toolOrchestrator,
55
+ async prepareTurnWithTools(turnInput) {
56
+ const run = agent.createRun(turnInput.text);
57
+ const completedRun = await agent.runToCompletion(run.runId);
58
+ const toolTurn = await toolOrchestrator.runToolLoop({
59
+ text: turnInput.text,
60
+ tools: toolRegistry.list(),
61
+ taskId: completedRun.taskId,
62
+ runId: completedRun.runId,
63
+ ...(turnInput.maxToolRounds ? { maxRounds: turnInput.maxToolRounds } : {})
64
+ });
65
+ return {
66
+ run: completedRun,
67
+ toolTurn,
68
+ modelMessages: [...turnInput.messages, ...toolTurn.contextMessages]
69
+ };
70
+ }
71
+ };
72
+ }
73
+ function hasRunStore(storage) {
74
+ return typeof storage?.saveRun === "function" && typeof storage.getRun === "function";
75
+ }
76
+ function hasEventJournal(storage) {
77
+ return typeof storage?.appendEvent === "function" && typeof storage.listEvents === "function";
78
+ }
79
+ function hasApprovalStore(storage) {
80
+ return typeof storage?.saveApproval === "function" && typeof storage.getApproval === "function" && typeof storage.listApprovals === "function";
81
+ }
82
+ //# sourceMappingURL=sdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export type SecretRef = {
2
+ readonly __nexaSecretRef: true;
3
+ readonly envKey: string;
4
+ };
5
+ export declare function secret(envKey: string): SecretRef;
6
+ export declare function isSecretRef(value: unknown): value is SecretRef;
7
+ export declare function resolveSecret(ref: SecretRef, env?: NodeJS.ProcessEnv): string;
8
+ export declare function resolveSecretsDeep<T>(value: T, env?: NodeJS.ProcessEnv): T;
9
+ //# sourceMappingURL=secrets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../src/secrets.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG;IAAE,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpF,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAEhD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAE9D;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAI1F;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,CAAC,CAOvF"}
@@ -0,0 +1,23 @@
1
+ export function secret(envKey) {
2
+ return { __nexaSecretRef: true, envKey };
3
+ }
4
+ export function isSecretRef(value) {
5
+ return Boolean(value && typeof value === "object" && value.__nexaSecretRef === true);
6
+ }
7
+ export function resolveSecret(ref, env = process.env) {
8
+ const value = env[ref.envKey];
9
+ if (value === undefined)
10
+ throw new Error(`Missing required secret: environment variable "${ref.envKey}" is not set.`);
11
+ return value;
12
+ }
13
+ export function resolveSecretsDeep(value, env = process.env) {
14
+ if (isSecretRef(value))
15
+ return resolveSecret(value, env);
16
+ if (Array.isArray(value))
17
+ return value.map((item) => resolveSecretsDeep(item, env));
18
+ if (value && typeof value === "object") {
19
+ return Object.fromEntries(Object.entries(value).map(([key, item]) => [key, resolveSecretsDeep(item, env)]));
20
+ }
21
+ return value;
22
+ }
23
+ //# sourceMappingURL=secrets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.js","sourceRoot":"","sources":["../src/secrets.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,MAAM,CAAC,MAAc;IACnC,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,OAAO,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAK,KAAuC,CAAC,eAAe,KAAK,IAAI,CAAC,CAAC;AAC1H,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAc,EAAE,MAAyB,OAAO,CAAC,GAAG;IAChF,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,IAAI,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,GAAG,CAAC,MAAM,eAAe,CAAC,CAAC;IACtH,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAI,KAAQ,EAAE,MAAyB,OAAO,CAAC,GAAG;IAClF,IAAI,WAAW,CAAC,KAAK,CAAC;QAAE,OAAO,aAAa,CAAC,KAAK,EAAE,GAAG,CAAiB,CAAC;IACzE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAiB,CAAC;IACpG,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAM,CAAC;IACnH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,44 @@
1
+ import type { ChatMessage } from "./openai-compatible.js";
2
+ import type { JsonObject } from "./types.js";
3
+ import type { SessionStore } from "./storage.js";
4
+ export type SessionRunResult = {
5
+ text: string;
6
+ messages: ChatMessage[];
7
+ [key: string]: unknown;
8
+ };
9
+ export type SessionRunner = (input: {
10
+ text: string;
11
+ messages: ChatMessage[];
12
+ }) => Promise<SessionRunResult>;
13
+ export type CreateSessionInput = {
14
+ id?: string;
15
+ systemPrompt?: string;
16
+ metadata?: JsonObject;
17
+ store?: SessionStore;
18
+ runner: SessionRunner;
19
+ };
20
+ export declare class AgentSession {
21
+ readonly id: string;
22
+ private messages;
23
+ private metadata;
24
+ private readonly store;
25
+ private readonly runner;
26
+ private createdAt;
27
+ constructor(input: CreateSessionInput & {
28
+ initialMessages?: ChatMessage[];
29
+ createdAt?: string;
30
+ });
31
+ history(): ChatMessage[];
32
+ run(text: string): Promise<SessionRunResult>;
33
+ compact(maxMessages?: number): Promise<void>;
34
+ reset(): Promise<void>;
35
+ fork(newId?: string): Promise<AgentSession>;
36
+ private persist;
37
+ }
38
+ export declare function createSession(input: CreateSessionInput): AgentSession;
39
+ export declare function loadSession(input: {
40
+ id: string;
41
+ store: SessionStore;
42
+ runner: SessionRunner;
43
+ }): Promise<AgentSession | undefined>;
44
+ //# sourceMappingURL=sessions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../src/sessions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,cAAc,CAAC;AAGhE,MAAM,MAAM,gBAAgB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,WAAW,EAAE,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AACjG,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,WAAW,EAAE,CAAA;CAAE,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAE5G,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,aAAa,CAAC;CACvB,CAAC;AAEF,qBAAa,YAAY;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,SAAS,CAAS;gBAEd,KAAK,EAAE,kBAAkB,GAAG;QAAE,eAAe,CAAC,EAAE,WAAW,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;IAS/F,OAAO,IAAI,WAAW,EAAE;IAIlB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAQ5C,OAAO,CAAC,WAAW,SAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAOxC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;YAYnC,OAAO;CAUtB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,YAAY,CAErE;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAWtI"}
@@ -0,0 +1,76 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { InMemorySessionStore } from "./storage.js";
3
+ export class AgentSession {
4
+ id;
5
+ messages;
6
+ metadata;
7
+ store;
8
+ runner;
9
+ createdAt;
10
+ constructor(input) {
11
+ this.id = input.id ?? randomUUID();
12
+ this.messages = input.initialMessages ?? (input.systemPrompt ? [{ role: "system", content: input.systemPrompt }] : []);
13
+ this.metadata = input.metadata ?? {};
14
+ this.store = input.store ?? new InMemorySessionStore();
15
+ this.runner = input.runner;
16
+ this.createdAt = input.createdAt ?? new Date().toISOString();
17
+ }
18
+ history() {
19
+ return [...this.messages];
20
+ }
21
+ async run(text) {
22
+ const priorMessages = [...this.messages];
23
+ const result = await this.runner({ text, messages: priorMessages });
24
+ this.messages = result.messages;
25
+ await this.persist();
26
+ return result;
27
+ }
28
+ async compact(maxMessages = 20) {
29
+ const system = this.messages.filter((message) => message.role === "system");
30
+ const rest = this.messages.filter((message) => message.role !== "system");
31
+ this.messages = [...system, ...rest.slice(-maxMessages)];
32
+ await this.persist();
33
+ }
34
+ async reset() {
35
+ this.messages = this.messages.filter((message) => message.role === "system");
36
+ await this.persist();
37
+ }
38
+ async fork(newId) {
39
+ const forked = new AgentSession({
40
+ id: newId ?? randomUUID(),
41
+ metadata: this.metadata,
42
+ store: this.store,
43
+ runner: this.runner,
44
+ initialMessages: this.history()
45
+ });
46
+ await forked.persist();
47
+ return forked;
48
+ }
49
+ async persist() {
50
+ const record = {
51
+ id: this.id,
52
+ messages: this.messages,
53
+ metadata: this.metadata,
54
+ createdAt: this.createdAt,
55
+ updatedAt: new Date().toISOString()
56
+ };
57
+ await this.store.saveSession(record);
58
+ }
59
+ }
60
+ export function createSession(input) {
61
+ return new AgentSession(input);
62
+ }
63
+ export async function loadSession(input) {
64
+ const record = await input.store.getSession(input.id);
65
+ if (!record)
66
+ return undefined;
67
+ return new AgentSession({
68
+ id: record.id,
69
+ metadata: record.metadata,
70
+ store: input.store,
71
+ runner: input.runner,
72
+ initialMessages: record.messages,
73
+ createdAt: record.createdAt
74
+ });
75
+ }
76
+ //# sourceMappingURL=sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../src/sessions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { AgentTool } from "./agent-builder.js";
2
+ import type { AgentToolRegistration } from "./openai-agent.js";
3
+ export type SkillDefinition = {
4
+ id: string;
5
+ description: string;
6
+ instructions: string;
7
+ tools?: Array<AgentTool | AgentToolRegistration>;
8
+ };
9
+ export declare function defineSkill(definition: SkillDefinition): SkillDefinition;
10
+ export declare function skillsToInstructions(skills: SkillDefinition[]): string;
11
+ export declare function skillsToToolRegistrations(skills: SkillDefinition[]): AgentToolRegistration[];
12
+ //# sourceMappingURL=skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE/D,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,qBAAqB,CAAC,CAAC;CAClD,CAAC;AAEF,wBAAgB,WAAW,CAAC,UAAU,EAAE,eAAe,GAAG,eAAe,CAExE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,CAItE;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,qBAAqB,EAAE,CAI5F"}