@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,27 @@
1
+ export class PlanValidator {
2
+ validate(plan) {
3
+ const errors = [];
4
+ const ids = new Set();
5
+ for (const step of plan.steps) {
6
+ if (ids.has(step.id))
7
+ errors.push(`Duplicate step id: ${step.id}`);
8
+ ids.add(step.id);
9
+ if (!step.objective.trim())
10
+ errors.push(`Step ${step.id} has empty objective`);
11
+ if (!step.timeoutMs || step.timeoutMs > 900000)
12
+ errors.push(`Step ${step.id} timeout is invalid`);
13
+ if (!step.expectedEvidence.length && step.type !== "ask_user")
14
+ errors.push(`Step ${step.id} has no expected evidence`);
15
+ for (const dependency of step.dependencies) {
16
+ if (!plan.steps.some((candidate) => candidate.id === dependency))
17
+ errors.push(`Step ${step.id} depends on missing step ${dependency}`);
18
+ }
19
+ }
20
+ if (!plan.steps.length)
21
+ errors.push("Plan has no steps");
22
+ if (!plan.steps.some((step) => step.type === "validate" || step.type === "finalize"))
23
+ errors.push("Plan has no terminal validation/finalization step");
24
+ return { valid: errors.length === 0, errors };
25
+ }
26
+ }
27
+ //# sourceMappingURL=plan-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-validator.js","sourceRoot":"","sources":["../src/plan-validator.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,aAAa;IACxB,QAAQ,CAAC,IAAe;QACtB,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;QAC9B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;YACnE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;gBAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE,sBAAsB,CAAC,CAAC;YAC/E,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,GAAG,MAAM;gBAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE,qBAAqB,CAAC,CAAC;YAClG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;gBAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE,2BAA2B,CAAC,CAAC;YACvH,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBAC3C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,UAAU,CAAC;oBAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE,4BAA4B,UAAU,EAAE,CAAC,CAAC;YACzI,CAAC;QACH,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACzD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QACvJ,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAChD,CAAC;CACF"}
@@ -0,0 +1,27 @@
1
+ import type { ApprovalRisk } from "./approvals.js";
2
+ import type { ToolDefinition } from "./tool-registry.js";
3
+ export type PolicyDecision = {
4
+ type: "allow";
5
+ reason: string;
6
+ } | {
7
+ type: "deny";
8
+ reason: string;
9
+ } | {
10
+ type: "approval_required";
11
+ risk: ApprovalRisk;
12
+ reason: string;
13
+ };
14
+ export type ToolPolicyRule = {
15
+ match: string | RegExp | ((tool: ToolDefinition) => boolean);
16
+ decision: PolicyDecision;
17
+ };
18
+ export declare class ToolPolicy {
19
+ private readonly rules;
20
+ constructor(rules?: ToolPolicyRule[]);
21
+ decide(tool: ToolDefinition): PolicyDecision;
22
+ approvalRiskFor(tool: ToolDefinition): ApprovalRisk | null;
23
+ }
24
+ export declare function createToolPolicy(rules: ToolPolicyRule[]): ToolPolicy;
25
+ export declare function denyCapabilities(capabilities: string[], reason?: string): ToolPolicyRule[];
26
+ export declare function requireApprovalForCapabilities(capabilities: string[], risk: ApprovalRisk, reason?: string): ToolPolicyRule[];
27
+ //# sourceMappingURL=policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtE,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,cAAc,KAAK,OAAO,CAAC,CAAC;IAC7D,QAAQ,EAAE,cAAc,CAAC;CAC1B,CAAC;AAEF,qBAAa,UAAU;IACT,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,GAAE,cAAc,EAAO;IAEzD,MAAM,CAAC,IAAI,EAAE,cAAc,GAAG,cAAc;IAK5C,eAAe,CAAC,IAAI,EAAE,cAAc,GAAG,YAAY,GAAG,IAAI;CAI3D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,UAAU,CAEpE;AAED,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,MAAM,SAAoC,GAAG,cAAc,EAAE,CAKrH;AAED,wBAAgB,8BAA8B,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,SAAkC,GAAG,cAAc,EAAE,CAKrJ"}
package/dist/policy.js ADDED
@@ -0,0 +1,37 @@
1
+ export class ToolPolicy {
2
+ rules;
3
+ constructor(rules = []) {
4
+ this.rules = rules;
5
+ }
6
+ decide(tool) {
7
+ const rule = this.rules.find((candidate) => matches(candidate.match, tool));
8
+ return rule?.decision ?? { type: "allow", reason: "No policy rule matched." };
9
+ }
10
+ approvalRiskFor(tool) {
11
+ const decision = this.decide(tool);
12
+ return decision.type === "approval_required" ? decision.risk : null;
13
+ }
14
+ }
15
+ export function createToolPolicy(rules) {
16
+ return new ToolPolicy(rules);
17
+ }
18
+ export function denyCapabilities(capabilities, reason = "Capability is denied by policy.") {
19
+ return capabilities.map((capability) => ({
20
+ match: (tool) => tool.capability === capability,
21
+ decision: { type: "deny", reason }
22
+ }));
23
+ }
24
+ export function requireApprovalForCapabilities(capabilities, risk, reason = "Capability requires approval.") {
25
+ return capabilities.map((capability) => ({
26
+ match: (tool) => tool.capability === capability,
27
+ decision: { type: "approval_required", risk, reason }
28
+ }));
29
+ }
30
+ function matches(match, tool) {
31
+ if (typeof match === "string")
32
+ return tool.id === match || tool.capability === match || tool.name === match;
33
+ if (match instanceof RegExp)
34
+ return match.test(tool.id) || match.test(tool.capability) || match.test(tool.name);
35
+ return match(tool);
36
+ }
37
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAaA,MAAM,OAAO,UAAU;IACQ;IAA7B,YAA6B,QAA0B,EAAE;QAA5B,UAAK,GAAL,KAAK,CAAuB;IAAG,CAAC;IAE7D,MAAM,CAAC,IAAoB;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;QAC5E,OAAO,IAAI,EAAE,QAAQ,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAC;IAChF,CAAC;IAED,eAAe,CAAC,IAAoB;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO,QAAQ,CAAC,IAAI,KAAK,mBAAmB,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACtE,CAAC;CACF;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAuB;IACtD,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,YAAsB,EAAE,MAAM,GAAG,iCAAiC;IACjG,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACvC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,KAAK,UAAU;QAC/C,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAoB;KACrD,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,YAAsB,EAAE,IAAkB,EAAE,MAAM,GAAG,+BAA+B;IACjI,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACvC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,KAAK,UAAU;QAC/C,QAAQ,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,EAAoB;KACxE,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,OAAO,CAAC,KAA8B,EAAE,IAAoB;IACnE,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,EAAE,KAAK,KAAK,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC;IAC5G,IAAI,KAAK,YAAY,MAAM;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChH,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC"}
@@ -0,0 +1,33 @@
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 type PostgresDriver = {
8
+ query(sql: string, params?: unknown[]): Promise<{
9
+ rows: unknown[];
10
+ }>;
11
+ };
12
+ export declare class PostgresStorage implements NexaStorage {
13
+ private readonly db;
14
+ constructor(db: PostgresDriver);
15
+ migrate(): Promise<void>;
16
+ saveRun(run: AgentRunSnapshot): Promise<void>;
17
+ getRun(runId: string): Promise<AgentRunSnapshot | undefined>;
18
+ listRuns(): Promise<AgentRunSnapshot[]>;
19
+ appendEvent(event: NexaSdkEvent): Promise<void>;
20
+ listEvents(): Promise<NexaSdkEvent[]>;
21
+ saveMemory(record: MemoryRecord): Promise<void>;
22
+ listMemories(): Promise<MemoryRecord[]>;
23
+ saveApproval(approval: ApprovalRequest): Promise<void>;
24
+ getApproval(id: string): Promise<ApprovalRequest | undefined>;
25
+ listApprovals(status?: ApprovalRequest["status"]): Promise<ApprovalRequest[]>;
26
+ saveWorkflow(run: WorkflowRun): Promise<void>;
27
+ getWorkflow(id: string): Promise<WorkflowRun | undefined>;
28
+ private upsert;
29
+ private getPayload;
30
+ private listPayloads;
31
+ }
32
+ export declare function createPostgresStorage(db: PostgresDriver): PostgresStorage;
33
+ //# sourceMappingURL=postgres-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-storage.d.ts","sourceRoot":"","sources":["../src/postgres-storage.ts"],"names":[],"mappings":"AAAA,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,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC,CAAC;CACtE,CAAC;AAEF,qBAAa,eAAgB,YAAW,WAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,cAAc;IAEzC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAaxB,OAAO,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7C,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;IAI/C,UAAU,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAIrC,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,YAAY,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAIvC,YAAY,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAItD,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;IAO7E,YAAY,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7C,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;YAIjD,MAAM;YAUN,UAAU;YAMV,YAAY;CAI3B;AAED,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,cAAc,GAAG,eAAe,CAEzE"}
@@ -0,0 +1,80 @@
1
+ export class PostgresStorage {
2
+ db;
3
+ constructor(db) {
4
+ this.db = db;
5
+ }
6
+ async migrate() {
7
+ await this.db.query(`
8
+ create table if not exists nexa_records (
9
+ kind text not null,
10
+ id text not null,
11
+ status text,
12
+ payload jsonb not null,
13
+ updated_at timestamptz not null default now(),
14
+ primary key (kind, id)
15
+ )
16
+ `);
17
+ }
18
+ async saveRun(run) {
19
+ await this.upsert("run", run.runId, run, run.state);
20
+ }
21
+ async getRun(runId) {
22
+ return this.getPayload("run", runId);
23
+ }
24
+ async listRuns() {
25
+ return this.listPayloads("run");
26
+ }
27
+ async appendEvent(event) {
28
+ await this.upsert("event", event.id, event, event.type);
29
+ }
30
+ async listEvents() {
31
+ return this.listPayloads("event");
32
+ }
33
+ async saveMemory(record) {
34
+ await this.upsert("memory", record.id, record, record.kind);
35
+ }
36
+ async listMemories() {
37
+ return this.listPayloads("memory");
38
+ }
39
+ async saveApproval(approval) {
40
+ await this.upsert("approval", approval.id, approval, approval.status);
41
+ }
42
+ async getApproval(id) {
43
+ return this.getPayload("approval", id);
44
+ }
45
+ async listApprovals(status) {
46
+ const rows = status
47
+ ? await this.db.query("select payload from nexa_records where kind = $1 and status = $2 order by updated_at desc", ["approval", status])
48
+ : await this.db.query("select payload from nexa_records where kind = $1 order by updated_at desc", ["approval"]);
49
+ return rows.rows.map((row) => payloadOf(row));
50
+ }
51
+ async saveWorkflow(run) {
52
+ await this.upsert("workflow", run.id, run, run.status);
53
+ }
54
+ async getWorkflow(id) {
55
+ return this.getPayload("workflow", id);
56
+ }
57
+ async upsert(kind, id, payload, status) {
58
+ await this.db.query(`insert into nexa_records (kind, id, status, payload, updated_at)
59
+ values ($1, $2, $3, $4, now())
60
+ on conflict (kind, id)
61
+ do update set status = excluded.status, payload = excluded.payload, updated_at = now()`, [kind, id, status ?? null, JSON.stringify(payload)]);
62
+ }
63
+ async getPayload(kind, id) {
64
+ const rows = await this.db.query("select payload from nexa_records where kind = $1 and id = $2", [kind, id]);
65
+ const row = rows.rows[0];
66
+ return row ? payloadOf(row) : undefined;
67
+ }
68
+ async listPayloads(kind) {
69
+ const rows = await this.db.query("select payload from nexa_records where kind = $1 order by updated_at desc", [kind]);
70
+ return rows.rows.map((row) => payloadOf(row));
71
+ }
72
+ }
73
+ export function createPostgresStorage(db) {
74
+ return new PostgresStorage(db);
75
+ }
76
+ function payloadOf(row) {
77
+ const payload = row.payload;
78
+ return typeof payload === "string" ? JSON.parse(payload) : payload;
79
+ }
80
+ //# sourceMappingURL=postgres-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-storage.js","sourceRoot":"","sources":["../src/postgres-storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export type ProviderCapabilities = {
2
+ text: boolean;
3
+ vision: boolean;
4
+ tools: boolean;
5
+ structuredOutputs: boolean;
6
+ reasoning: boolean;
7
+ contextWindow?: number;
8
+ };
9
+ export type TaskRequirement = keyof Omit<ProviderCapabilities, "contextWindow">;
10
+ export declare function capabilitiesForProvider(providerId: string): ProviderCapabilities;
11
+ export declare function registerProviderCapabilities(providerId: string, capabilities: ProviderCapabilities): void;
12
+ export declare function providerSupportsTask(providerId: string, requirements: TaskRequirement[]): boolean;
13
+ //# sourceMappingURL=provider-capabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-capabilities.d.ts","sourceRoot":"","sources":["../src/provider-capabilities.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,iBAAiB,EAAE,OAAO,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAAC;AAYhF,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,oBAAoB,CAEhF;AAED,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,oBAAoB,GAAG,IAAI,CAEzG;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,OAAO,CAGjG"}
@@ -0,0 +1,19 @@
1
+ const CAPABILITIES = {
2
+ openai: { text: true, vision: true, tools: true, structuredOutputs: true, reasoning: true, contextWindow: 128000 },
3
+ anthropic: { text: true, vision: true, tools: true, structuredOutputs: false, reasoning: true, contextWindow: 200000 },
4
+ gemini: { text: true, vision: true, tools: true, structuredOutputs: true, reasoning: false, contextWindow: 1000000 },
5
+ openrouter: { text: true, vision: false, tools: true, structuredOutputs: false, reasoning: false },
6
+ ollama: { text: true, vision: false, tools: true, structuredOutputs: false, reasoning: false }
7
+ };
8
+ const DEFAULT_CAPABILITIES = { text: true, vision: false, tools: false, structuredOutputs: false, reasoning: false };
9
+ export function capabilitiesForProvider(providerId) {
10
+ return CAPABILITIES[providerId] ?? DEFAULT_CAPABILITIES;
11
+ }
12
+ export function registerProviderCapabilities(providerId, capabilities) {
13
+ CAPABILITIES[providerId] = capabilities;
14
+ }
15
+ export function providerSupportsTask(providerId, requirements) {
16
+ const capabilities = capabilitiesForProvider(providerId);
17
+ return requirements.every((requirement) => capabilities[requirement] === true);
18
+ }
19
+ //# sourceMappingURL=provider-capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-capabilities.js","sourceRoot":"","sources":["../src/provider-capabilities.ts"],"names":[],"mappings":"AAWA,MAAM,YAAY,GAAyC;IACzD,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE;IAClH,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE;IACtH,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE;IACpH,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE;IAClG,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE;CAC/F,CAAC;AAEF,MAAM,oBAAoB,GAAyB,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAE3I,MAAM,UAAU,uBAAuB,CAAC,UAAkB;IACxD,OAAO,YAAY,CAAC,UAAU,CAAC,IAAI,oBAAoB,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,UAAkB,EAAE,YAAkC;IACjG,YAAY,CAAC,UAAU,CAAC,GAAG,YAAY,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,UAAkB,EAAE,YAA+B;IACtF,MAAM,YAAY,GAAG,uBAAuB,CAAC,UAAU,CAAC,CAAC;IACzD,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,CAAC;AACjF,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { OpenAICompatibleProviderConfig } from "./openai-compatible.js";
2
+ export type ProviderPresetInput = {
3
+ apiKey?: string;
4
+ model?: string;
5
+ baseUrl?: string;
6
+ headers?: Record<string, string>;
7
+ };
8
+ export declare function openaiProvider(input?: ProviderPresetInput): OpenAICompatibleProviderConfig;
9
+ export declare function openRouterProvider(input?: ProviderPresetInput): OpenAICompatibleProviderConfig;
10
+ export declare function ollamaProvider(input?: Omit<ProviderPresetInput, "apiKey">): OpenAICompatibleProviderConfig;
11
+ export declare function anthropicProvider(input?: ProviderPresetInput): OpenAICompatibleProviderConfig;
12
+ export declare function geminiProvider(input?: ProviderPresetInput): OpenAICompatibleProviderConfig;
13
+ export declare function customOpenAICompatibleProvider(input: OpenAICompatibleProviderConfig): OpenAICompatibleProviderConfig;
14
+ //# sourceMappingURL=providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AAE7E,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,CAAC;AAKF,wBAAgB,cAAc,CAAC,KAAK,GAAE,mBAAwB,GAAG,8BAA8B,CAiB9F;AAED,wBAAgB,kBAAkB,CAAC,KAAK,GAAE,mBAAwB,GAAG,8BAA8B,CAiBlG;AAED,wBAAgB,cAAc,CAAC,KAAK,GAAE,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAM,GAAG,8BAA8B,CAQ9G;AAED,wBAAgB,iBAAiB,CAAC,KAAK,GAAE,mBAAwB,GAAG,8BAA8B,CAUjG;AAED,wBAAgB,cAAc,CAAC,KAAK,GAAE,mBAAwB,GAAG,8BAA8B,CAU9F;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,8BAA8B,GAAG,8BAA8B,CAEpH"}
@@ -0,0 +1,69 @@
1
+ const OPENAI_DEFAULT_BASE_URL = "https://api.openai.com";
2
+ const OPENROUTER_DEFAULT_BASE_URL = "https://openrouter.ai/api";
3
+ export function openaiProvider(input = {}) {
4
+ const baseUrl = input.baseUrl ?? OPENAI_DEFAULT_BASE_URL;
5
+ if (!input.apiKey && baseUrl === OPENAI_DEFAULT_BASE_URL) {
6
+ throw new Error('openaiProvider() requires an apiKey when using the default OpenAI endpoint (https://api.openai.com) — otherwise every request fails remotely with a 401. ' +
7
+ "Pass apiKey (make sure it actually resolves — process.env values are undefined unless something loads your .env file). " +
8
+ "If you intended to call an unauthenticated OpenAI-compatible endpoint, pass a different baseUrl instead.");
9
+ }
10
+ return {
11
+ id: "openai",
12
+ name: "OpenAI",
13
+ baseUrl,
14
+ ...(input.apiKey ? { apiKey: input.apiKey } : {}),
15
+ ...(input.model ? { defaultModel: input.model } : {}),
16
+ ...(input.headers ? { headers: input.headers } : {})
17
+ };
18
+ }
19
+ export function openRouterProvider(input = {}) {
20
+ const baseUrl = input.baseUrl ?? OPENROUTER_DEFAULT_BASE_URL;
21
+ if (!input.apiKey && baseUrl === OPENROUTER_DEFAULT_BASE_URL) {
22
+ throw new Error('openRouterProvider() requires an apiKey when using the default OpenRouter endpoint (https://openrouter.ai/api) — otherwise every request fails remotely with a 401. ' +
23
+ "Pass apiKey (make sure it actually resolves — process.env values are undefined unless something loads your .env file). " +
24
+ "If you intended to call an unauthenticated OpenAI-compatible endpoint, pass a different baseUrl instead.");
25
+ }
26
+ return {
27
+ id: "openrouter",
28
+ name: "OpenRouter",
29
+ baseUrl,
30
+ ...(input.apiKey ? { apiKey: input.apiKey } : {}),
31
+ ...(input.model ? { defaultModel: input.model } : {}),
32
+ ...(input.headers ? { headers: input.headers } : {})
33
+ };
34
+ }
35
+ export function ollamaProvider(input = {}) {
36
+ return {
37
+ id: "ollama",
38
+ name: "Ollama",
39
+ baseUrl: input.baseUrl ?? "http://localhost:11434/v1",
40
+ ...(input.model ? { defaultModel: input.model } : {}),
41
+ ...(input.headers ? { headers: input.headers } : {})
42
+ };
43
+ }
44
+ export function anthropicProvider(input = {}) {
45
+ return {
46
+ id: "anthropic",
47
+ name: "Anthropic",
48
+ format: "anthropic",
49
+ baseUrl: input.baseUrl ?? "https://api.anthropic.com",
50
+ ...(input.apiKey ? { apiKey: input.apiKey } : {}),
51
+ ...(input.model ? { defaultModel: input.model } : {}),
52
+ ...(input.headers ? { headers: input.headers } : {})
53
+ };
54
+ }
55
+ export function geminiProvider(input = {}) {
56
+ return {
57
+ id: "gemini",
58
+ name: "Gemini",
59
+ format: "gemini",
60
+ baseUrl: input.baseUrl ?? "https://generativelanguage.googleapis.com",
61
+ ...(input.apiKey ? { apiKey: input.apiKey } : {}),
62
+ ...(input.model ? { defaultModel: input.model } : {}),
63
+ ...(input.headers ? { headers: input.headers } : {})
64
+ };
65
+ }
66
+ export function customOpenAICompatibleProvider(input) {
67
+ return input;
68
+ }
69
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { JsonObject } from "./types.js";
2
+ export type QueueJob = {
3
+ id: string;
4
+ type: string;
5
+ payload: JsonObject;
6
+ attempts: number;
7
+ createdAt: string;
8
+ };
9
+ export type QueueAdapter = {
10
+ enqueue(job: Omit<QueueJob, "id" | "attempts" | "createdAt"> & {
11
+ id?: string;
12
+ }): Promise<QueueJob> | QueueJob;
13
+ next(type?: string): Promise<QueueJob | undefined> | QueueJob | undefined;
14
+ complete(id: string): Promise<void> | void;
15
+ fail(id: string, error: string): Promise<void> | void;
16
+ };
17
+ export declare class InMemoryQueue implements QueueAdapter {
18
+ private readonly pending;
19
+ private readonly completed;
20
+ private readonly failed;
21
+ enqueue(input: Omit<QueueJob, "id" | "attempts" | "createdAt"> & {
22
+ id?: string;
23
+ }): QueueJob;
24
+ next(type?: string): QueueJob | undefined;
25
+ complete(id: string): void;
26
+ fail(id: string, error: string): void;
27
+ }
28
+ export declare function createInMemoryQueue(): InMemoryQueue;
29
+ //# sourceMappingURL=queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,UAAU,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,UAAU,GAAG,WAAW,CAAC,GAAG;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;IAC9G,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC1E,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC3C,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACvD,CAAC;AAEF,qBAAa,aAAc,YAAW,YAAY;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;IAEpD,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,UAAU,GAAG,WAAW,CAAC,GAAG;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,QAAQ;IAY3F,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IASzC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI1B,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;CAGtC;AAED,wBAAgB,mBAAmB,IAAI,aAAa,CAEnD"}
package/dist/queue.js ADDED
@@ -0,0 +1,36 @@
1
+ export class InMemoryQueue {
2
+ pending = [];
3
+ completed = new Set();
4
+ failed = new Map();
5
+ enqueue(input) {
6
+ const job = {
7
+ id: input.id ?? crypto.randomUUID(),
8
+ type: input.type,
9
+ payload: input.payload,
10
+ attempts: 0,
11
+ createdAt: new Date().toISOString()
12
+ };
13
+ this.pending.push(job);
14
+ return job;
15
+ }
16
+ next(type) {
17
+ const index = this.pending.findIndex((job) => !type || job.type === type);
18
+ if (index === -1)
19
+ return undefined;
20
+ const [job] = this.pending.splice(index, 1);
21
+ if (!job)
22
+ return undefined;
23
+ job.attempts += 1;
24
+ return job;
25
+ }
26
+ complete(id) {
27
+ this.completed.add(id);
28
+ }
29
+ fail(id, error) {
30
+ this.failed.set(id, error);
31
+ }
32
+ }
33
+ export function createInMemoryQueue() {
34
+ return new InMemoryQueue();
35
+ }
36
+ //# sourceMappingURL=queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAiBA,MAAM,OAAO,aAAa;IACP,OAAO,GAAe,EAAE,CAAC;IACzB,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEpD,OAAO,CAAC,KAAwE;QAC9E,MAAM,GAAG,GAAa;YACpB,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,MAAM,CAAC,UAAU,EAAE;YACnC,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,QAAQ,EAAE,CAAC;YACX,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,IAAI,CAAC,IAAa;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAC1E,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QACnC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC5C,IAAI,CAAC,GAAG;YAAE,OAAO,SAAS,CAAC;QAC3B,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC;QAClB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,QAAQ,CAAC,EAAU;QACjB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,CAAC,EAAU,EAAE,KAAa;QAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,IAAI,aAAa,EAAE,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,36 @@
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 type RedisDriver = {
8
+ get(key: string): Promise<string | null> | string | null;
9
+ set(key: string, value: string): Promise<unknown> | unknown;
10
+ sadd?(key: string, member: string): Promise<unknown> | unknown;
11
+ smembers?(key: string): Promise<string[]> | string[];
12
+ };
13
+ export declare class RedisStorage implements NexaStorage {
14
+ private readonly redis;
15
+ private readonly prefix;
16
+ constructor(redis: RedisDriver, prefix?: string);
17
+ saveRun(run: AgentRunSnapshot): Promise<void>;
18
+ getRun(runId: string): Promise<AgentRunSnapshot | undefined>;
19
+ listRuns(): Promise<AgentRunSnapshot[]>;
20
+ appendEvent(event: NexaSdkEvent): Promise<void>;
21
+ listEvents(): Promise<NexaSdkEvent[]>;
22
+ saveMemory(record: MemoryRecord): Promise<void>;
23
+ listMemories(): Promise<MemoryRecord[]>;
24
+ saveApproval(approval: ApprovalRequest): Promise<void>;
25
+ getApproval(id: string): Promise<ApprovalRequest | undefined>;
26
+ listApprovals(status?: ApprovalRequest["status"]): Promise<ApprovalRequest[]>;
27
+ saveWorkflow(run: WorkflowRun): Promise<void>;
28
+ getWorkflow(id: string): Promise<WorkflowRun | undefined>;
29
+ private setRecord;
30
+ private getRecord;
31
+ private listRecords;
32
+ private key;
33
+ private index;
34
+ }
35
+ export declare function createRedisStorage(redis: RedisDriver, prefix?: string): RedisStorage;
36
+ //# sourceMappingURL=redis-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis-storage.d.ts","sourceRoot":"","sources":["../src/redis-storage.ts"],"names":[],"mappings":"AAAA,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,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC;IACzD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAC5D,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAC/D,QAAQ,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC;CACtD,CAAC;AAEF,qBAAa,YAAa,YAAW,WAAW;IAE5C,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,KAAK,EAAE,WAAW,EAClB,MAAM,SAAS;IAG5B,OAAO,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7C,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;IAI/C,UAAU,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAIrC,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,YAAY,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAIvC,YAAY,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAItD,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;YAIjD,SAAS;YAKT,SAAS;YAKT,WAAW;IAMzB,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,KAAK;CAGd;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,CAEpF"}
@@ -0,0 +1,68 @@
1
+ export class RedisStorage {
2
+ redis;
3
+ prefix;
4
+ constructor(redis, prefix = "nexa") {
5
+ this.redis = redis;
6
+ this.prefix = prefix;
7
+ }
8
+ async saveRun(run) {
9
+ await this.setRecord("run", run.runId, run);
10
+ }
11
+ async getRun(runId) {
12
+ return this.getRecord("run", runId);
13
+ }
14
+ async listRuns() {
15
+ return this.listRecords("run");
16
+ }
17
+ async appendEvent(event) {
18
+ await this.setRecord("event", event.id, event);
19
+ }
20
+ async listEvents() {
21
+ return this.listRecords("event");
22
+ }
23
+ async saveMemory(record) {
24
+ await this.setRecord("memory", record.id, record);
25
+ }
26
+ async listMemories() {
27
+ return this.listRecords("memory");
28
+ }
29
+ async saveApproval(approval) {
30
+ await this.setRecord("approval", approval.id, approval);
31
+ }
32
+ async getApproval(id) {
33
+ return this.getRecord("approval", id);
34
+ }
35
+ async listApprovals(status) {
36
+ const approvals = await this.listRecords("approval");
37
+ return status ? approvals.filter((approval) => approval.status === status) : approvals;
38
+ }
39
+ async saveWorkflow(run) {
40
+ await this.setRecord("workflow", run.id, run);
41
+ }
42
+ async getWorkflow(id) {
43
+ return this.getRecord("workflow", id);
44
+ }
45
+ async setRecord(kind, id, value) {
46
+ await this.redis.set(this.key(kind, id), JSON.stringify(value));
47
+ await this.redis.sadd?.(this.index(kind), id);
48
+ }
49
+ async getRecord(kind, id) {
50
+ const value = await this.redis.get(this.key(kind, id));
51
+ return value ? JSON.parse(value) : undefined;
52
+ }
53
+ async listRecords(kind) {
54
+ const ids = await this.redis.smembers?.(this.index(kind)) ?? [];
55
+ const records = await Promise.all(ids.map((id) => this.getRecord(kind, id)));
56
+ return records.flatMap((record) => record ? [record] : []);
57
+ }
58
+ key(kind, id) {
59
+ return `${this.prefix}:${kind}:${id}`;
60
+ }
61
+ index(kind) {
62
+ return `${this.prefix}:${kind}:ids`;
63
+ }
64
+ }
65
+ export function createRedisStorage(redis, prefix) {
66
+ return new RedisStorage(redis, prefix);
67
+ }
68
+ //# sourceMappingURL=redis-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis-storage.js","sourceRoot":"","sources":["../src/redis-storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { NexaSdkEvent } from "./event-bus.js";
2
+ import type { AgentRunSnapshot } from "./types.js";
3
+ export type ReplayFrame = {
4
+ at: string;
5
+ type: string;
6
+ taskId?: string;
7
+ runId?: string;
8
+ stepId?: string;
9
+ summary: string;
10
+ };
11
+ export declare function replayRun(run: AgentRunSnapshot): ReplayFrame[];
12
+ export declare function replayEvents(events: NexaSdkEvent[]): ReplayFrame[];
13
+ //# sourceMappingURL=replay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAgB,SAAS,CAAC,GAAG,EAAE,gBAAgB,GAAG,WAAW,EAAE,CAS9D;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,WAAW,EAAE,CASlE"}
package/dist/replay.js ADDED
@@ -0,0 +1,32 @@
1
+ export function replayRun(run) {
2
+ return run.events.map((event) => ({
3
+ at: event.at,
4
+ type: event.type,
5
+ taskId: event.taskId,
6
+ runId: event.runId,
7
+ ...(event.stepId ? { stepId: event.stepId } : {}),
8
+ summary: summarizeAgentEvent(event)
9
+ }));
10
+ }
11
+ export function replayEvents(events) {
12
+ return events.map((event) => ({
13
+ at: event.at,
14
+ type: event.type,
15
+ ...(event.taskId ? { taskId: event.taskId } : {}),
16
+ ...(event.runId ? { runId: event.runId } : {}),
17
+ ...(event.stepId ? { stepId: event.stepId } : {}),
18
+ summary: `${event.source}:${event.type}`
19
+ }));
20
+ }
21
+ function summarizeAgentEvent(event) {
22
+ if (event.reason)
23
+ return event.reason;
24
+ if (event.objective)
25
+ return event.objective;
26
+ if (event.observation)
27
+ return event.observation.summary;
28
+ if (event.decision)
29
+ return event.decision.reason;
30
+ return event.type;
31
+ }
32
+ //# sourceMappingURL=replay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay.js","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"AAYA,MAAM,UAAU,SAAS,CAAC,GAAqB;IAC7C,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAChC,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,OAAO,EAAE,mBAAmB,CAAC,KAAK,CAAC;KACpC,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAsB;IACjD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC5B,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,OAAO,EAAE,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE;KACzC,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAyC;IACpE,IAAI,KAAK,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC,MAAM,CAAC;IACtC,IAAI,KAAK,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC,SAAS,CAAC;IAC5C,IAAI,KAAK,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC;IACxD,IAAI,KAAK,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;IACjD,OAAO,KAAK,CAAC,IAAI,CAAC;AACpB,CAAC"}