@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 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,115 @@
1
+ import { z } from "zod";
2
+ export const agentTaskStateSchema = z.enum([
3
+ "IDLE",
4
+ "RECEIVED",
5
+ "UNDERSTANDING",
6
+ "DEFINING_SUCCESS",
7
+ "PLANNING",
8
+ "VALIDATING_PLAN",
9
+ "DISCOVERING_CAPABILITIES",
10
+ "SELECTING_TOOL",
11
+ "WAITING_FOR_APPROVAL",
12
+ "WAITING_FOR_AUTH",
13
+ "WAITING_FOR_EXTERNAL_JOB",
14
+ "WAITING_FOR_RETRY",
15
+ "PAUSED",
16
+ "EXECUTING",
17
+ "OBSERVING",
18
+ "EVALUATING",
19
+ "VALIDATING",
20
+ "REPLANNING",
21
+ "RECOVERING",
22
+ "BLOCKED",
23
+ "COMPLETED",
24
+ "FAILED",
25
+ "CANCELLED"
26
+ ]);
27
+ export const goalKindSchema = z.enum([
28
+ "question",
29
+ "simple_action",
30
+ "compound_goal",
31
+ "research",
32
+ "creation",
33
+ "repair",
34
+ "external_operation",
35
+ "continuous_task",
36
+ "blocked_or_impossible"
37
+ ]);
38
+ export const evidenceRefSchema = z.object({
39
+ id: z.string(),
40
+ kind: z.string(),
41
+ summary: z.string(),
42
+ uri: z.string().optional()
43
+ });
44
+ export const evidenceRequirementSchema = z.object({
45
+ kind: z.string(),
46
+ description: z.string(),
47
+ required: z.boolean().default(true)
48
+ });
49
+ export const successCriterionSchema = z.object({
50
+ id: z.string(),
51
+ description: z.string(),
52
+ verificationMethod: z.enum(["tool_evidence", "test_result", "health_check", "user_confirmation", "source_citation", "artifact_exists", "manual_blocker"]),
53
+ requiredEvidence: z.array(evidenceRequirementSchema).default([]),
54
+ required: z.boolean().default(true),
55
+ status: z.enum(["SATISFIED", "UNSATISFIED", "UNKNOWN"]).default("UNKNOWN"),
56
+ evidenceRefs: z.array(evidenceRefSchema).default([])
57
+ });
58
+ export const capabilityRequirementSchema = z.object({
59
+ capability: z.string(),
60
+ operation: z.string().optional(),
61
+ required: z.boolean().default(true),
62
+ constraints: z.record(z.unknown()).default({})
63
+ });
64
+ export const interpretedGoalSchema = z.object({
65
+ objective: z.string().min(1),
66
+ kind: goalKindSchema,
67
+ constraints: z.array(z.string()).default([]),
68
+ deliverables: z.array(z.string()).default([]),
69
+ assumptions: z.array(z.string()).default([]),
70
+ risks: z.array(z.string()).default([]),
71
+ requiredCapabilities: z.array(capabilityRequirementSchema).default([]),
72
+ successCriteria: z.array(successCriterionSchema).default([]),
73
+ userVisibleOutcome: z.string(),
74
+ needsClarification: z.boolean().default(false),
75
+ clarificationQuestions: z.array(z.string()).default([])
76
+ });
77
+ export const agentStepSchema = z.object({
78
+ id: z.string(),
79
+ objective: z.string().min(1),
80
+ type: z.enum(["understand", "discover", "read", "write", "execute", "delegate", "research", "validate", "ask_user", "finalize"]),
81
+ dependencies: z.array(z.string()).default([]),
82
+ requiredCapabilities: z.array(capabilityRequirementSchema).default([]),
83
+ candidateTools: z.array(z.string()).default([]),
84
+ risk: z.enum(["low", "medium", "high", "critical"]).default("low"),
85
+ approvalRisk: z.enum(["SAFE_READ", "LOCAL_WRITE", "EXTERNAL_WRITE", "INSTALL_DEPENDENCY", "CREDENTIAL_ACCESS", "ACCOUNT_CONNECTION", "SENSITIVE_DATA", "DESTRUCTIVE", "FINANCIAL", "PRIVILEGED_EXECUTION"]).default("SAFE_READ"),
86
+ expectedEvidence: z.array(evidenceRequirementSchema).default([]),
87
+ successCriteria: z.array(successCriterionSchema).default([]),
88
+ retryPolicy: z.object({ maxAttempts: z.number().int().min(0).default(1), backoffMs: z.number().int().min(0).default(500), maxBackoffMs: z.number().int().min(0).default(5000) }).default({}),
89
+ timeoutMs: z.number().int().positive().max(900000).default(60000),
90
+ idempotencyKey: z.string(),
91
+ status: z.enum(["pending", "ready", "waiting_approval", "waiting_auth", "waiting_external_job", "waiting_retry", "running", "observing", "evaluating", "completed", "failed", "blocked", "skipped", "cancelled"]).default("pending")
92
+ });
93
+ export const agentPlanSchema = z.object({
94
+ id: z.string(),
95
+ taskId: z.string(),
96
+ runId: z.string(),
97
+ version: z.number().int().positive().default(1),
98
+ status: z.enum(["draft", "active", "superseded", "completed", "blocked", "failed"]).default("draft"),
99
+ rationale: z.string(),
100
+ steps: z.array(agentStepSchema),
101
+ createdAt: z.string()
102
+ });
103
+ export const agentObservationSchema = z.object({
104
+ status: z.enum(["success", "partial", "failed", "running", "cancelled"]),
105
+ summary: z.string(),
106
+ data: z.unknown().optional(),
107
+ evidence: z.array(evidenceRefSchema).default([]),
108
+ artifacts: z.array(evidenceRefSchema).default([]),
109
+ changedResources: z.array(evidenceRefSchema).default([]),
110
+ metrics: z.record(z.unknown()).default({}),
111
+ warnings: z.array(z.string()).default([]),
112
+ errors: z.array(z.object({ code: z.string(), message: z.string(), retryable: z.boolean().default(false) })).default([]),
113
+ nextHints: z.array(z.string()).default([])
114
+ });
115
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { MemoryRecord } from "./memory.js";
2
+ export type EmbeddingProvider = {
3
+ embed(text: string): Promise<number[]> | number[];
4
+ };
5
+ export type VectorMemoryRecord = MemoryRecord & {
6
+ embedding: number[];
7
+ };
8
+ export declare class VectorMemoryStore {
9
+ private readonly embeddings;
10
+ private readonly records;
11
+ constructor(embeddings?: EmbeddingProvider);
12
+ upsert(record: MemoryRecord): Promise<VectorMemoryRecord>;
13
+ search(query: string, limit?: number): Promise<Array<VectorMemoryRecord & {
14
+ score: number;
15
+ }>>;
16
+ }
17
+ export declare function createVectorMemoryStore(embeddings?: EmbeddingProvider): VectorMemoryStore;
18
+ export declare function lexicalEmbeddingProvider(): EmbeddingProvider;
19
+ //# sourceMappingURL=vector-memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector-memory.d.ts","sourceRoot":"","sources":["../src/vector-memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC;CACnD,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG;IAC9C,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAEF,qBAAa,iBAAiB;IAGhB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAFvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyC;gBAEpC,UAAU,GAAE,iBAA8C;IAEjF,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC;IASzD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,KAAK,CAAC,kBAAkB,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAOhG;AAED,wBAAgB,uBAAuB,CAAC,UAAU,CAAC,EAAE,iBAAiB,GAAG,iBAAiB,CAEzF;AAED,wBAAgB,wBAAwB,IAAI,iBAAiB,CAW5D"}
@@ -0,0 +1,58 @@
1
+ export class VectorMemoryStore {
2
+ embeddings;
3
+ records = new Map();
4
+ constructor(embeddings = lexicalEmbeddingProvider()) {
5
+ this.embeddings = embeddings;
6
+ }
7
+ async upsert(record) {
8
+ const vectorRecord = {
9
+ ...record,
10
+ embedding: await this.embeddings.embed(record.content)
11
+ };
12
+ this.records.set(record.id, vectorRecord);
13
+ return vectorRecord;
14
+ }
15
+ async search(query, limit = 10) {
16
+ const queryEmbedding = await this.embeddings.embed(query);
17
+ return [...this.records.values()]
18
+ .map((record) => ({ ...record, score: cosine(queryEmbedding, record.embedding) }))
19
+ .sort((a, b) => b.score - a.score)
20
+ .slice(0, limit);
21
+ }
22
+ }
23
+ export function createVectorMemoryStore(embeddings) {
24
+ return new VectorMemoryStore(embeddings);
25
+ }
26
+ export function lexicalEmbeddingProvider() {
27
+ return {
28
+ embed(text) {
29
+ const vector = new Array(64).fill(0);
30
+ for (const token of text.toLowerCase().split(/[^a-z0-9_áéíóúñ]+/i).filter(Boolean)) {
31
+ const index = hash(token) % vector.length;
32
+ vector[index] = (vector[index] ?? 0) + 1;
33
+ }
34
+ return vector;
35
+ }
36
+ };
37
+ }
38
+ function cosine(a, b) {
39
+ let dot = 0;
40
+ let left = 0;
41
+ let right = 0;
42
+ const length = Math.max(a.length, b.length);
43
+ for (let index = 0; index < length; index += 1) {
44
+ const av = a[index] ?? 0;
45
+ const bv = b[index] ?? 0;
46
+ dot += av * bv;
47
+ left += av * av;
48
+ right += bv * bv;
49
+ }
50
+ return left && right ? dot / (Math.sqrt(left) * Math.sqrt(right)) : 0;
51
+ }
52
+ function hash(value) {
53
+ let result = 0;
54
+ for (let index = 0; index < value.length; index += 1)
55
+ result = (result * 31 + value.charCodeAt(index)) >>> 0;
56
+ return result;
57
+ }
58
+ //# sourceMappingURL=vector-memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector-memory.js","sourceRoot":"","sources":["../src/vector-memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import type { NexaStorage } from "./storage.js";
2
+ import type { JsonObject, JsonValue } from "./types.js";
3
+ export type WorkflowNodeStatus = "pending" | "running" | "completed" | "failed" | "skipped";
4
+ export type WorkflowNode = {
5
+ id: string;
6
+ title: string;
7
+ dependsOn?: string[];
8
+ run: (input: {
9
+ workflow: WorkflowRun;
10
+ node: WorkflowNode;
11
+ context: JsonObject;
12
+ signal?: AbortSignal;
13
+ }) => Promise<JsonValue> | JsonValue;
14
+ };
15
+ export type WorkflowRun = {
16
+ id: string;
17
+ name: string;
18
+ status: "created" | "running" | "completed" | "failed" | "cancelled";
19
+ context: JsonObject;
20
+ nodes: Array<{
21
+ id: string;
22
+ title: string;
23
+ status: WorkflowNodeStatus;
24
+ dependsOn: string[];
25
+ output?: JsonValue;
26
+ error?: string;
27
+ startedAt?: string;
28
+ endedAt?: string;
29
+ }>;
30
+ createdAt: string;
31
+ updatedAt: string;
32
+ };
33
+ export type WorkflowCheckpointStore = {
34
+ saveWorkflow(run: WorkflowRun): Promise<void> | void;
35
+ getWorkflow(id: string): Promise<WorkflowRun | undefined> | WorkflowRun | undefined;
36
+ };
37
+ export type WorkflowRuntimeOptions = {
38
+ storage?: WorkflowCheckpointStore | NexaStorage;
39
+ };
40
+ export declare class WorkflowRuntime {
41
+ private readonly options;
42
+ private readonly runs;
43
+ constructor(options?: WorkflowRuntimeOptions);
44
+ create(input: {
45
+ name: string;
46
+ nodes: WorkflowNode[];
47
+ context?: JsonObject;
48
+ }): WorkflowRun;
49
+ resume(input: {
50
+ runId: string;
51
+ nodes: WorkflowNode[];
52
+ signal?: AbortSignal;
53
+ }): Promise<WorkflowRun>;
54
+ run(input: {
55
+ runId: string;
56
+ nodes: WorkflowNode[];
57
+ signal?: AbortSignal;
58
+ }): Promise<WorkflowRun>;
59
+ get(id: string): WorkflowRun | undefined;
60
+ private requireRun;
61
+ private save;
62
+ private load;
63
+ }
64
+ export declare function createWorkflowRuntime(options?: WorkflowRuntimeOptions): WorkflowRuntime;
65
+ //# sourceMappingURL=workflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE5F,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,GAAG,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,WAAW,CAAC;QAAC,IAAI,EAAE,YAAY,CAAC;QAAC,OAAO,EAAE,UAAU,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,KAAK,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;CAC1I,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;IACrE,OAAO,EAAE,UAAU,CAAC;IACpB,KAAK,EAAE,KAAK,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,kBAAkB,CAAC;QAC3B,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,MAAM,CAAC,EAAE,SAAS,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,YAAY,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACrD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,GAAG,WAAW,GAAG,SAAS,CAAC;CACrF,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,CAAC,EAAE,uBAAuB,GAAG,WAAW,CAAC;CACjD,CAAC;AAEF,qBAAa,eAAe;IAGd,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAkC;gBAE1B,OAAO,GAAE,sBAA2B;IAEjE,MAAM,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,YAAY,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE,UAAU,CAAA;KAAE,GAAG,WAAW;IAqBnF,MAAM,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,YAAY,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAOnG,GAAG,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,YAAY,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAwCtG,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAIxC,OAAO,CAAC,UAAU;YAMJ,IAAI;YAKJ,IAAI;CAKnB;AAED,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,sBAA2B,GAAG,eAAe,CAE3F"}
@@ -0,0 +1,102 @@
1
+ export class WorkflowRuntime {
2
+ options;
3
+ runs = new Map();
4
+ constructor(options = {}) {
5
+ this.options = options;
6
+ }
7
+ create(input) {
8
+ const now = new Date().toISOString();
9
+ const run = {
10
+ id: crypto.randomUUID(),
11
+ name: input.name,
12
+ status: "created",
13
+ context: input.context ?? {},
14
+ nodes: input.nodes.map((node) => ({
15
+ id: node.id,
16
+ title: node.title,
17
+ status: "pending",
18
+ dependsOn: node.dependsOn ?? []
19
+ })),
20
+ createdAt: now,
21
+ updatedAt: now
22
+ };
23
+ this.runs.set(run.id, run);
24
+ void this.save(run);
25
+ return run;
26
+ }
27
+ async resume(input) {
28
+ const saved = await this.load(input.runId);
29
+ if (!saved)
30
+ throw new Error(`Workflow not found: ${input.runId}`);
31
+ this.runs.set(saved.id, saved);
32
+ return this.run({ runId: saved.id, nodes: input.nodes, ...(input.signal ? { signal: input.signal } : {}) });
33
+ }
34
+ async run(input) {
35
+ const run = this.requireRun(input.runId);
36
+ const executable = new Map(input.nodes.map((node) => [node.id, node]));
37
+ run.status = "running";
38
+ await this.save(run);
39
+ while (true) {
40
+ if (input.signal?.aborted) {
41
+ run.status = "cancelled";
42
+ await this.save(run);
43
+ return run;
44
+ }
45
+ const next = run.nodes.find((node) => node.status === "pending" && node.dependsOn.every((id) => run.nodes.find((candidate) => candidate.id === id)?.status === "completed"));
46
+ if (!next)
47
+ break;
48
+ const node = executable.get(next.id);
49
+ if (!node)
50
+ throw new Error(`Workflow node implementation missing: ${next.id}`);
51
+ next.status = "running";
52
+ next.startedAt = new Date().toISOString();
53
+ await this.save(run);
54
+ try {
55
+ next.output = await node.run({ workflow: run, node, context: run.context, ...(input.signal ? { signal: input.signal } : {}) });
56
+ next.status = "completed";
57
+ }
58
+ catch (error) {
59
+ next.status = "failed";
60
+ next.error = error instanceof Error ? error.message : String(error);
61
+ run.status = "failed";
62
+ }
63
+ next.endedAt = new Date().toISOString();
64
+ run.updatedAt = next.endedAt;
65
+ await this.save(run);
66
+ if (run.status === "failed")
67
+ return run;
68
+ }
69
+ const blocked = run.nodes.some((node) => node.status === "pending");
70
+ run.status = blocked ? "failed" : "completed";
71
+ run.updatedAt = new Date().toISOString();
72
+ await this.save(run);
73
+ return run;
74
+ }
75
+ get(id) {
76
+ return this.runs.get(id);
77
+ }
78
+ requireRun(id) {
79
+ const run = this.runs.get(id);
80
+ if (!run)
81
+ throw new Error(`Workflow not found: ${id}`);
82
+ return run;
83
+ }
84
+ async save(run) {
85
+ const storage = this.options.storage;
86
+ if (hasWorkflowStore(storage))
87
+ await storage.saveWorkflow(run);
88
+ }
89
+ async load(id) {
90
+ const storage = this.options.storage;
91
+ if (hasWorkflowStore(storage))
92
+ return storage.getWorkflow(id);
93
+ return this.runs.get(id);
94
+ }
95
+ }
96
+ export function createWorkflowRuntime(options = {}) {
97
+ return new WorkflowRuntime(options);
98
+ }
99
+ function hasWorkflowStore(value) {
100
+ return Boolean(value && typeof value === "object" && "saveWorkflow" in value && "getWorkflow" in value);
101
+ }
102
+ //# sourceMappingURL=workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { type SdkToolRegistration } from "./tool-factory.js";
2
+ export type WorkspaceOptions = {
3
+ root: string;
4
+ timeoutMs?: number;
5
+ maxOutputBytes?: number;
6
+ };
7
+ export type WorkspaceExecResult = {
8
+ stdout: string;
9
+ stderr: string;
10
+ exitCode: number;
11
+ timedOut: boolean;
12
+ };
13
+ /**
14
+ * Node-process-level sandbox: confines file access and shell execution to a jailed
15
+ * root directory with a timeout and output cap. This is NOT container/VM isolation —
16
+ * a command can still see the host's environment/network/other processes.
17
+ */
18
+ export declare class Workspace {
19
+ private readonly options;
20
+ readonly root: string;
21
+ constructor(options: WorkspaceOptions);
22
+ ensureRoot(): Promise<void>;
23
+ resolvePath(relativePath: string): string;
24
+ readFile(relativePath: string): Promise<string>;
25
+ writeFile(relativePath: string, content: string): Promise<void>;
26
+ exec(command: string, args?: string[], options?: {
27
+ cwd?: string;
28
+ signal?: AbortSignal;
29
+ }): Promise<WorkspaceExecResult>;
30
+ snapshot(snapshotDir: string): Promise<void>;
31
+ restore(snapshotDir: string): Promise<void>;
32
+ }
33
+ export declare function createWorkspace(options: WorkspaceOptions): Workspace;
34
+ export declare function workspaceTools(workspace: Workspace): SdkToolRegistration[];
35
+ //# sourceMappingURL=workspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"AAKA,OAAO,EAAiB,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE5E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC;AAE1G;;;;GAIG;AACH,qBAAa,SAAS;IAGR,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEO,OAAO,EAAE,gBAAgB;IAIhD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAOnC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI/C,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMrE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,EAAO,EAAE,OAAO,GAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAoCxH,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM5C,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAKlD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,CAEpE;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,GAAG,mBAAmB,EAAE,CAyC1E"}
@@ -0,0 +1,131 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { spawn } from "node:child_process";
3
+ import { cp, mkdir, readFile, rm, writeFile } from "node:fs/promises";
4
+ import { dirname, isAbsolute, relative, resolve } from "node:path";
5
+ import { z } from "zod";
6
+ import { defineSdkTool } from "./tool-factory.js";
7
+ /**
8
+ * Node-process-level sandbox: confines file access and shell execution to a jailed
9
+ * root directory with a timeout and output cap. This is NOT container/VM isolation —
10
+ * a command can still see the host's environment/network/other processes.
11
+ */
12
+ export class Workspace {
13
+ options;
14
+ root;
15
+ constructor(options) {
16
+ this.options = options;
17
+ this.root = resolve(options.root);
18
+ }
19
+ async ensureRoot() {
20
+ await mkdir(this.root, { recursive: true });
21
+ }
22
+ resolvePath(relativePath) {
23
+ const target = resolve(this.root, relativePath);
24
+ const rel = relative(this.root, target);
25
+ if (rel.startsWith("..") || isAbsolute(rel))
26
+ throw new Error(`Path escapes workspace root: ${relativePath}`);
27
+ return target;
28
+ }
29
+ async readFile(relativePath) {
30
+ return readFile(this.resolvePath(relativePath), "utf8");
31
+ }
32
+ async writeFile(relativePath, content) {
33
+ const target = this.resolvePath(relativePath);
34
+ await mkdir(dirname(target), { recursive: true });
35
+ await writeFile(target, content, "utf8");
36
+ }
37
+ exec(command, args = [], options = {}) {
38
+ const cwd = options.cwd ? this.resolvePath(options.cwd) : this.root;
39
+ const timeoutMs = this.options.timeoutMs ?? 30000;
40
+ const maxOutputBytes = this.options.maxOutputBytes ?? 1_000_000;
41
+ return new Promise((resolvePromise, rejectPromise) => {
42
+ const child = spawn(command, args, { cwd });
43
+ let stdout = "";
44
+ let stderr = "";
45
+ let timedOut = false;
46
+ const timer = setTimeout(() => {
47
+ timedOut = true;
48
+ child.kill();
49
+ }, timeoutMs);
50
+ const onAbort = () => child.kill();
51
+ options.signal?.addEventListener("abort", onAbort, { once: true });
52
+ child.stdout.on("data", (chunk) => {
53
+ if (stdout.length < maxOutputBytes)
54
+ stdout += chunk.toString("utf8");
55
+ });
56
+ child.stderr.on("data", (chunk) => {
57
+ if (stderr.length < maxOutputBytes)
58
+ stderr += chunk.toString("utf8");
59
+ });
60
+ child.on("error", (error) => {
61
+ clearTimeout(timer);
62
+ options.signal?.removeEventListener("abort", onAbort);
63
+ rejectPromise(error);
64
+ });
65
+ child.on("close", (code) => {
66
+ clearTimeout(timer);
67
+ options.signal?.removeEventListener("abort", onAbort);
68
+ resolvePromise({ stdout: stdout.slice(0, maxOutputBytes), stderr: stderr.slice(0, maxOutputBytes), exitCode: code ?? -1, timedOut });
69
+ });
70
+ });
71
+ }
72
+ async snapshot(snapshotDir) {
73
+ const target = resolve(snapshotDir);
74
+ await mkdir(target, { recursive: true });
75
+ await cp(this.root, target, { recursive: true });
76
+ }
77
+ async restore(snapshotDir) {
78
+ const source = resolve(snapshotDir);
79
+ await rm(this.root, { recursive: true, force: true });
80
+ await cp(source, this.root, { recursive: true });
81
+ }
82
+ }
83
+ export function createWorkspace(options) {
84
+ return new Workspace(options);
85
+ }
86
+ export function workspaceTools(workspace) {
87
+ return [
88
+ defineSdkTool({
89
+ id: "workspace.read_file",
90
+ capability: "workspace.read_file",
91
+ description: "Read a text file from the agent workspace.",
92
+ inputSchema: z.object({ path: z.string() }),
93
+ handler: async ({ path }) => {
94
+ try {
95
+ return { status: "ok", output: { content: await workspace.readFile(path) } };
96
+ }
97
+ catch (error) {
98
+ return { status: "error", error: error instanceof Error ? error.message : String(error), retryable: false };
99
+ }
100
+ }
101
+ }),
102
+ defineSdkTool({
103
+ id: "workspace.write_file",
104
+ capability: "workspace.write_file",
105
+ description: "Write a text file into the agent workspace.",
106
+ inputSchema: z.object({ path: z.string(), content: z.string() }),
107
+ handler: async ({ path, content }) => {
108
+ try {
109
+ await workspace.writeFile(path, content);
110
+ return { status: "ok", output: {}, evidence: [{ id: randomUUID(), kind: "artifact", summary: path }] };
111
+ }
112
+ catch (error) {
113
+ return { status: "error", error: error instanceof Error ? error.message : String(error), retryable: false };
114
+ }
115
+ }
116
+ }),
117
+ defineSdkTool({
118
+ id: "workspace.exec",
119
+ capability: "workspace.exec",
120
+ description: "Execute a shell command inside the agent workspace, with a timeout and output cap.",
121
+ inputSchema: z.object({ command: z.string(), args: z.array(z.string()).default([]) }),
122
+ handler: async ({ command, args }) => {
123
+ const result = await workspace.exec(command, args);
124
+ if (result.exitCode !== 0)
125
+ return { status: "error", error: result.stderr || `Command exited with code ${result.exitCode}`, retryable: false };
126
+ return { status: "ok", output: { stdout: result.stdout, stderr: result.stderr, exitCode: result.exitCode } };
127
+ }
128
+ })
129
+ ];
130
+ }
131
+ //# sourceMappingURL=workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"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"}