@simulacra-ai/core 0.0.1

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 (134) hide show
  1. package/README.md +232 -0
  2. package/dist/checkpoints/default-summarization-strategy.d.ts +13 -0
  3. package/dist/checkpoints/default-summarization-strategy.d.ts.map +1 -0
  4. package/dist/checkpoints/default-summarization-strategy.js +63 -0
  5. package/dist/checkpoints/default-summarization-strategy.js.map +1 -0
  6. package/dist/checkpoints/index.d.ts +3 -0
  7. package/dist/checkpoints/index.d.ts.map +1 -0
  8. package/dist/checkpoints/index.js +3 -0
  9. package/dist/checkpoints/index.js.map +1 -0
  10. package/dist/checkpoints/types.d.ts +32 -0
  11. package/dist/checkpoints/types.d.ts.map +1 -0
  12. package/dist/checkpoints/types.js +2 -0
  13. package/dist/checkpoints/types.js.map +1 -0
  14. package/dist/context-transformers/checkpoint-context-transformer.d.ts +13 -0
  15. package/dist/context-transformers/checkpoint-context-transformer.d.ts.map +1 -0
  16. package/dist/context-transformers/checkpoint-context-transformer.js +32 -0
  17. package/dist/context-transformers/checkpoint-context-transformer.js.map +1 -0
  18. package/dist/context-transformers/composite-context-transformer.d.ts +31 -0
  19. package/dist/context-transformers/composite-context-transformer.d.ts.map +1 -0
  20. package/dist/context-transformers/composite-context-transformer.js +41 -0
  21. package/dist/context-transformers/composite-context-transformer.js.map +1 -0
  22. package/dist/context-transformers/index.d.ts +6 -0
  23. package/dist/context-transformers/index.d.ts.map +1 -0
  24. package/dist/context-transformers/index.js +6 -0
  25. package/dist/context-transformers/index.js.map +1 -0
  26. package/dist/context-transformers/noop-context-transformer.d.ts +24 -0
  27. package/dist/context-transformers/noop-context-transformer.d.ts.map +1 -0
  28. package/dist/context-transformers/noop-context-transformer.js +26 -0
  29. package/dist/context-transformers/noop-context-transformer.js.map +1 -0
  30. package/dist/context-transformers/tool-context-transformer.d.ts +26 -0
  31. package/dist/context-transformers/tool-context-transformer.d.ts.map +1 -0
  32. package/dist/context-transformers/tool-context-transformer.js +52 -0
  33. package/dist/context-transformers/tool-context-transformer.js.map +1 -0
  34. package/dist/context-transformers/types.d.ts +65 -0
  35. package/dist/context-transformers/types.d.ts.map +1 -0
  36. package/dist/context-transformers/types.js +2 -0
  37. package/dist/context-transformers/types.js.map +1 -0
  38. package/dist/conversations/conversation.d.ts +146 -0
  39. package/dist/conversations/conversation.d.ts.map +1 -0
  40. package/dist/conversations/conversation.js +642 -0
  41. package/dist/conversations/conversation.js.map +1 -0
  42. package/dist/conversations/index.d.ts +5 -0
  43. package/dist/conversations/index.d.ts.map +1 -0
  44. package/dist/conversations/index.js +5 -0
  45. package/dist/conversations/index.js.map +1 -0
  46. package/dist/conversations/stream-listener.d.ts +37 -0
  47. package/dist/conversations/stream-listener.d.ts.map +1 -0
  48. package/dist/conversations/stream-listener.js +68 -0
  49. package/dist/conversations/stream-listener.js.map +1 -0
  50. package/dist/conversations/token-tracker.d.ts +59 -0
  51. package/dist/conversations/token-tracker.d.ts.map +1 -0
  52. package/dist/conversations/token-tracker.js +98 -0
  53. package/dist/conversations/token-tracker.js.map +1 -0
  54. package/dist/conversations/types.d.ts +346 -0
  55. package/dist/conversations/types.d.ts.map +1 -0
  56. package/dist/conversations/types.js +2 -0
  57. package/dist/conversations/types.js.map +1 -0
  58. package/dist/index.d.ts +10 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +9 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/policies/composite-policy.d.ts +29 -0
  63. package/dist/policies/composite-policy.d.ts.map +1 -0
  64. package/dist/policies/composite-policy.js +77 -0
  65. package/dist/policies/composite-policy.js.map +1 -0
  66. package/dist/policies/default-policy.d.ts +7 -0
  67. package/dist/policies/default-policy.d.ts.map +1 -0
  68. package/dist/policies/default-policy.js +14 -0
  69. package/dist/policies/default-policy.js.map +1 -0
  70. package/dist/policies/index.d.ts +8 -0
  71. package/dist/policies/index.d.ts.map +1 -0
  72. package/dist/policies/index.js +8 -0
  73. package/dist/policies/index.js.map +1 -0
  74. package/dist/policies/noop-policy.d.ts +21 -0
  75. package/dist/policies/noop-policy.d.ts.map +1 -0
  76. package/dist/policies/noop-policy.js +36 -0
  77. package/dist/policies/noop-policy.js.map +1 -0
  78. package/dist/policies/rate-limit-policy.d.ts +44 -0
  79. package/dist/policies/rate-limit-policy.d.ts.map +1 -0
  80. package/dist/policies/rate-limit-policy.js +98 -0
  81. package/dist/policies/rate-limit-policy.js.map +1 -0
  82. package/dist/policies/retry-policy.d.ts +42 -0
  83. package/dist/policies/retry-policy.d.ts.map +1 -0
  84. package/dist/policies/retry-policy.js +114 -0
  85. package/dist/policies/retry-policy.js.map +1 -0
  86. package/dist/policies/token-limit-policy.d.ts +76 -0
  87. package/dist/policies/token-limit-policy.d.ts.map +1 -0
  88. package/dist/policies/token-limit-policy.js +134 -0
  89. package/dist/policies/token-limit-policy.js.map +1 -0
  90. package/dist/policies/types.d.ts +49 -0
  91. package/dist/policies/types.d.ts.map +1 -0
  92. package/dist/policies/types.js +9 -0
  93. package/dist/policies/types.js.map +1 -0
  94. package/dist/tools/index.d.ts +2 -0
  95. package/dist/tools/index.d.ts.map +1 -0
  96. package/dist/tools/index.js +2 -0
  97. package/dist/tools/index.js.map +1 -0
  98. package/dist/tools/types.d.ts +180 -0
  99. package/dist/tools/types.d.ts.map +1 -0
  100. package/dist/tools/types.js +2 -0
  101. package/dist/tools/types.js.map +1 -0
  102. package/dist/utils/async.d.ts +125 -0
  103. package/dist/utils/async.d.ts.map +1 -0
  104. package/dist/utils/async.js +217 -0
  105. package/dist/utils/async.js.map +1 -0
  106. package/dist/utils/index.d.ts +4 -0
  107. package/dist/utils/index.d.ts.map +1 -0
  108. package/dist/utils/index.js +4 -0
  109. package/dist/utils/index.js.map +1 -0
  110. package/dist/utils/object.d.ts +80 -0
  111. package/dist/utils/object.d.ts.map +1 -0
  112. package/dist/utils/object.js +189 -0
  113. package/dist/utils/object.js.map +1 -0
  114. package/dist/utils/types.d.ts +17 -0
  115. package/dist/utils/types.d.ts.map +1 -0
  116. package/dist/utils/types.js +2 -0
  117. package/dist/utils/types.js.map +1 -0
  118. package/dist/workflows/index.d.ts +4 -0
  119. package/dist/workflows/index.d.ts.map +1 -0
  120. package/dist/workflows/index.js +4 -0
  121. package/dist/workflows/index.js.map +1 -0
  122. package/dist/workflows/types.d.ts +70 -0
  123. package/dist/workflows/types.d.ts.map +1 -0
  124. package/dist/workflows/types.js +2 -0
  125. package/dist/workflows/types.js.map +1 -0
  126. package/dist/workflows/workflow-manager.d.ts +74 -0
  127. package/dist/workflows/workflow-manager.d.ts.map +1 -0
  128. package/dist/workflows/workflow-manager.js +165 -0
  129. package/dist/workflows/workflow-manager.js.map +1 -0
  130. package/dist/workflows/workflow.d.ts +116 -0
  131. package/dist/workflows/workflow.d.ts.map +1 -0
  132. package/dist/workflows/workflow.js +351 -0
  133. package/dist/workflows/workflow.js.map +1 -0
  134. package/package.json +20 -0
@@ -0,0 +1,351 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { EventEmitter } from "node:events";
3
+ import { setImmediate } from "node:timers/promises";
4
+ /**
5
+ * Manages an agentic workflow with automatic tool execution.
6
+ *
7
+ * A Workflow wraps a Conversation and automatically executes tools requested
8
+ * by the model, continuing the conversation until completion or error.
9
+ */
10
+ export class Workflow {
11
+ #event_emitter;
12
+ #conversation;
13
+ #context_data;
14
+ #parent;
15
+ #messages = [];
16
+ #queued_messages = [];
17
+ #id = randomUUID();
18
+ #state = "idle";
19
+ #tool_context;
20
+ /**
21
+ * Creates a new workflow instance.
22
+ *
23
+ * @param conversation - The conversation to manage.
24
+ * @param options - Optional configuration.
25
+ * @param options.context_data - Custom data to pass to tools via ToolContext.
26
+ * @param options.parent - Parent workflow if this is a child workflow.
27
+ */
28
+ constructor(conversation, options) {
29
+ this.#event_emitter = new EventEmitter();
30
+ this.#event_emitter.setMaxListeners(0);
31
+ this.#conversation = conversation;
32
+ this.#context_data = options?.context_data ?? {};
33
+ this.#parent = options?.parent;
34
+ this.#conversation.on("prompt_send", this.#on_prompt_send);
35
+ this.#conversation.on("message_complete", this.#on_message_complete);
36
+ this.#conversation.on("request_error", this.#on_request_error);
37
+ this.#conversation.once("dispose", this.#on_conversation_dispose);
38
+ this.#parent?.once("workflow_end", this.#on_parent_workflow_end);
39
+ }
40
+ /**
41
+ * The unique identifier for this workflow.
42
+ */
43
+ get id() {
44
+ return this.#id;
45
+ }
46
+ set id(value) {
47
+ this.#id = value;
48
+ }
49
+ /**
50
+ * The current state of the workflow.
51
+ */
52
+ get state() {
53
+ return this.#state;
54
+ }
55
+ /**
56
+ * The conversation being managed by this workflow.
57
+ */
58
+ get conversation() {
59
+ return this.#conversation;
60
+ }
61
+ /**
62
+ * The parent workflow, if this is a child workflow.
63
+ */
64
+ get parent() {
65
+ return this.#parent;
66
+ }
67
+ /**
68
+ * The message history tracked by this workflow.
69
+ */
70
+ get messages() {
71
+ return Object.freeze([...this.#messages]);
72
+ }
73
+ /**
74
+ * Messages queued for sending after the current response completes.
75
+ */
76
+ get queued_messages() {
77
+ return [...this.#queued_messages];
78
+ }
79
+ /**
80
+ * Disposes the workflow and releases all resources.
81
+ *
82
+ * This method is called automatically when using the `using` keyword.
83
+ */
84
+ [Symbol.dispose]() {
85
+ this.#conversation.off("prompt_send", this.#on_prompt_send);
86
+ this.#conversation.off("message_complete", this.#on_message_complete);
87
+ this.#conversation.off("request_error", this.#on_request_error);
88
+ this.#conversation.off("dispose", this.#on_conversation_dispose);
89
+ this.#parent?.off("workflow_end", this.#on_parent_workflow_end);
90
+ this.#event_emitter.emit("dispose", this);
91
+ this.#set_state("disposed");
92
+ this.#event_emitter.removeAllListeners();
93
+ }
94
+ /**
95
+ * Registers a one-time event listener.
96
+ *
97
+ * @template E - The event name type.
98
+ * @param event - The name of the event to listen for.
99
+ * @param listener - The callback function to invoke when the event occurs.
100
+ * @returns This workflow instance for chaining.
101
+ */
102
+ once(event, listener) {
103
+ if (this.#state === "disposed") {
104
+ throw new Error("invalid state");
105
+ }
106
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
107
+ this.#event_emitter.once(event, listener);
108
+ return this;
109
+ }
110
+ /**
111
+ * Registers a persistent event listener.
112
+ *
113
+ * @template E - The event name type.
114
+ * @param event - The name of the event to listen for.
115
+ * @param listener - The callback function to invoke when the event occurs.
116
+ * @returns This workflow instance for chaining.
117
+ */
118
+ on(event, listener) {
119
+ if (this.#state === "disposed") {
120
+ throw new Error("invalid state");
121
+ }
122
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
123
+ this.#event_emitter.on(event, listener);
124
+ return this;
125
+ }
126
+ /**
127
+ * Removes an event listener.
128
+ *
129
+ * @template E - The event name type.
130
+ * @param event - The name of the event.
131
+ * @param listener - The callback function to remove.
132
+ * @returns This workflow instance for chaining.
133
+ */
134
+ off(event, listener) {
135
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
136
+ this.#event_emitter.off(event, listener);
137
+ return this;
138
+ }
139
+ /**
140
+ * Starts the workflow execution.
141
+ *
142
+ * @param message - Optional initial user message to begin the workflow.
143
+ */
144
+ start(message) {
145
+ if (this.#state !== "idle") {
146
+ throw new Error("invalid state");
147
+ }
148
+ if (message) {
149
+ this.#messages.push(message);
150
+ this.#event_emitter.emit("workflow_update", this);
151
+ }
152
+ this.#set_state("busy");
153
+ }
154
+ /**
155
+ * Cancels the workflow execution.
156
+ *
157
+ * This will cancel any in-progress model response and emit a workflow_end event.
158
+ */
159
+ cancel() {
160
+ if (this.#state === "disposed") {
161
+ throw new Error("invalid state");
162
+ }
163
+ if (this.#conversation.state === "awaiting_response" ||
164
+ this.#conversation.state === "streaming_response") {
165
+ this.#conversation.cancel_response();
166
+ }
167
+ this.#set_state("idle");
168
+ this.#event_emitter.emit("workflow_end", { reason: "cancel" }, this);
169
+ this[Symbol.dispose]();
170
+ }
171
+ /**
172
+ * Creates a child workflow with a different conversation.
173
+ *
174
+ * Child events are propagated to the parent as "child_workflow_event" events.
175
+ *
176
+ * @param conversation - The conversation for the child workflow.
177
+ * @param id - Optional custom ID for the child workflow.
178
+ * @returns The newly created child workflow.
179
+ */
180
+ spawn_child(conversation, id) {
181
+ if (this.#state === "disposed") {
182
+ throw new Error("invalid state");
183
+ }
184
+ const child = new Workflow(conversation, { context_data: this.#context_data, parent: this });
185
+ if (id) {
186
+ child.id = id;
187
+ }
188
+ this.#attach_child_event(child, "state_change");
189
+ this.#attach_child_event(child, "workflow_update");
190
+ this.#attach_child_event(child, "workflow_end");
191
+ this.#attach_child_event(child, "child_workflow_begin");
192
+ this.#attach_child_event(child, "child_workflow_event");
193
+ this.#attach_child_event(child, "message_queued");
194
+ this.#attach_child_event(child, "message_dequeued");
195
+ this.#attach_child_event(child, "queue_cleared");
196
+ this.#attach_child_event(child, "lifecycle_error");
197
+ this.#attach_child_event(child, "dispose");
198
+ this.#event_emitter.emit("child_workflow_begin", child, this);
199
+ return child;
200
+ }
201
+ /**
202
+ * Adds a message to the queue for sending after the current response completes.
203
+ *
204
+ * @param message - The text message to queue.
205
+ */
206
+ queue_message(message) {
207
+ if (this.#state === "disposed") {
208
+ throw new Error("invalid state");
209
+ }
210
+ this.#queued_messages.push(message);
211
+ this.#event_emitter.emit("message_queued", message, this);
212
+ }
213
+ /**
214
+ * Clears all queued messages.
215
+ */
216
+ clear_queue() {
217
+ if (this.#state === "disposed") {
218
+ throw new Error("invalid state");
219
+ }
220
+ this.#queued_messages.length = 0;
221
+ this.#event_emitter.emit("queue_cleared", this);
222
+ }
223
+ #set_state(state) {
224
+ if (this.#state === state) {
225
+ return;
226
+ }
227
+ const previous = this.state;
228
+ this.#state = state;
229
+ this.#event_emitter.emit("state_change", { previous, current: this.#state }, this);
230
+ }
231
+ async #execute_tools(message) {
232
+ const tool_calls = message.content.filter((c) => c.type === "tool");
233
+ const batches = [];
234
+ let current_batch = [];
235
+ for (const call of tool_calls) {
236
+ const tool_class = this.conversation.toolkit.find((t) => t.get_definition().name === call.tool);
237
+ const is_parallel = tool_class?.get_definition().parallelizable !== false;
238
+ if (!is_parallel) {
239
+ if (current_batch.length > 0) {
240
+ batches.push(current_batch);
241
+ current_batch = [];
242
+ }
243
+ batches.push([call]);
244
+ }
245
+ else {
246
+ current_batch.push(call);
247
+ }
248
+ }
249
+ if (current_batch.length > 0) {
250
+ batches.push(current_batch);
251
+ }
252
+ const results = [];
253
+ for (const batch of batches) {
254
+ const batch_results = await Promise.all(batch.map(async (call) => {
255
+ const tool_class = this.conversation.toolkit.find((t) => t.get_definition().name === call.tool);
256
+ if (tool_class) {
257
+ if (!this.#tool_context) {
258
+ this.#tool_context = {
259
+ ...this.#context_data,
260
+ conversation: this.conversation,
261
+ workflow: this,
262
+ };
263
+ }
264
+ const context = this.#tool_context;
265
+ const tool = new tool_class(context);
266
+ try {
267
+ const result = await tool.execute(call.params);
268
+ return {
269
+ type: "tool_result",
270
+ tool: call.tool,
271
+ tool_request_id: call.tool_request_id,
272
+ result,
273
+ };
274
+ }
275
+ catch (error) {
276
+ const message = error instanceof Error ? error.message : "Tool execution failed";
277
+ return {
278
+ type: "tool_result",
279
+ tool: call.tool,
280
+ tool_request_id: call.tool_request_id,
281
+ result: { result: false, message },
282
+ };
283
+ }
284
+ }
285
+ return {
286
+ type: "tool_result",
287
+ tool: call.tool,
288
+ tool_request_id: call.tool_request_id,
289
+ result: { result: false, message: "invalid tool" },
290
+ };
291
+ }));
292
+ results.push(...batch_results);
293
+ if (this.#state !== "busy") {
294
+ return;
295
+ }
296
+ }
297
+ await this.conversation.send_message(results);
298
+ }
299
+ #attach_child_event(child, event_name) {
300
+ const handler = (...args) => {
301
+ this.#event_emitter.emit("child_workflow_event", {
302
+ event_name,
303
+ event_args: args,
304
+ }, this);
305
+ };
306
+ child.on(event_name, handler);
307
+ child.once("dispose", () => setImmediate(() => child.off(event_name, handler)));
308
+ }
309
+ #on_prompt_send = ({ message }) => {
310
+ this.#messages.push(message);
311
+ this.#event_emitter.emit("workflow_update", this);
312
+ };
313
+ #on_message_complete = async (event) => {
314
+ try {
315
+ this.#messages.push(event.message);
316
+ this.#event_emitter.emit("workflow_update", this);
317
+ if (event.stop_reason === "tool_use") {
318
+ await this.#execute_tools(event.message);
319
+ }
320
+ else {
321
+ const queued_message = this.#queued_messages.shift();
322
+ if (queued_message) {
323
+ this.#event_emitter.emit("message_dequeued", queued_message, this);
324
+ await this.#conversation.prompt(queued_message);
325
+ }
326
+ else {
327
+ this.#set_state("idle");
328
+ this.#event_emitter.emit("workflow_end", { reason: "complete" }, this);
329
+ this[Symbol.dispose]();
330
+ }
331
+ }
332
+ }
333
+ catch {
334
+ this.#set_state("idle");
335
+ this.#event_emitter.emit("workflow_end", { reason: "error" }, this);
336
+ this[Symbol.dispose]();
337
+ }
338
+ };
339
+ #on_request_error = () => {
340
+ this.#set_state("idle");
341
+ this.#event_emitter.emit("workflow_end", { reason: "error" }, this);
342
+ this[Symbol.dispose]();
343
+ };
344
+ #on_conversation_dispose = () => this[Symbol.dispose]();
345
+ #on_parent_workflow_end = (event) => {
346
+ if (event.reason === "cancel") {
347
+ this.cancel();
348
+ }
349
+ };
350
+ }
351
+ //# sourceMappingURL=workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/workflows/workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAgBpD;;;;;GAKG;AACH,MAAM,OAAO,QAAQ;IACV,cAAc,CAA+B;IAC7C,aAAa,CAAe;IAC5B,aAAa,CAA0B;IACvC,OAAO,CAAY;IACnB,SAAS,GAAwB,EAAE,CAAC;IACpC,gBAAgB,GAAa,EAAE,CAAC;IAEzC,GAAG,GAAW,UAAU,EAAE,CAAC;IAC3B,MAAM,GAAkB,MAAM,CAAC;IAC/B,aAAa,CAA0B;IAEvC;;;;;;;OAOG;IACH,YACE,YAA0B,EAC1B,OAAuE;QAEvE,IAAI,CAAC,cAAc,GAAG,IAAI,YAAY,EAAkB,CAAC;QACzD,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAEvC,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,aAAa,GAAG,OAAO,EAAE,YAAY,IAAI,EAAE,CAAC;QACjD,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,MAAM,CAAC;QAE/B,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAC3D,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,kBAAkB,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACrE,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC/D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAClE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACnE,CAAC;IAED;;OAEG;IACH,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;IACD,IAAI,EAAE,CAAC,KAAa;QAClB,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,IAAI,QAAQ;QACV,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,IAAI,eAAe;QACjB,OAAO,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACpC,CAAC;IAED;;;;OAIG;IACH,CAAC,MAAM,CAAC,OAAO,CAAC;QACd,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5D,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACtE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAChE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACjE,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAEhE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC5B,IAAI,CAAC,cAAc,CAAC,kBAAkB,EAAE,CAAC;IAC3C,CAAC;IAED;;;;;;;OAOG;IACH,IAAI,CACF,KAAQ,EACR,QAAuF;QAEvF,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QACnC,CAAC;QACD,8DAA8D;QAC7D,IAAI,CAAC,cAAsB,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;OAOG;IACH,EAAE,CACA,KAAQ,EACR,QAAuF;QAEvF,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QACnC,CAAC;QACD,8DAA8D;QAC7D,IAAI,CAAC,cAAsB,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;OAOG;IACH,GAAG,CACD,KAAQ,EACR,QAAuF;QAEvF,8DAA8D;QAC7D,IAAI,CAAC,cAAsB,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAqB;QACzB,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED;;;;OAIG;IACH,MAAM;QACJ,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QACnC,CAAC;QACD,IACE,IAAI,CAAC,aAAa,CAAC,KAAK,KAAK,mBAAmB;YAChD,IAAI,CAAC,aAAa,CAAC,KAAK,KAAK,oBAAoB,EACjD,CAAC;YACD,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE,CAAC;QACvC,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACxB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC;QACrE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IACzB,CAAC;IAED;;;;;;;;OAQG;IACH,WAAW,CAAC,YAA0B,EAAE,EAAW;QACjD,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QACnC,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,YAAY,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7F,IAAI,EAAE,EAAE,CAAC;YACP,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;QAChB,CAAC;QAED,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAChD,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;QACnD,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAChD,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;QACxD,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;QACxD,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;QAClD,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;QACpD,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;QACjD,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;QACnD,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAE3C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAE9D,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;OAIG;IACH,aAAa,CAAC,OAAe;QAC3B,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC;IAED;;OAEG;IACH,WAAW;QACT,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,UAAU,CAAC,KAAoB;QAC7B,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC1B,OAAO;QACT,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;QAE5B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;IACrF,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAyB;QAC5C,MAAM,UAAU,GAAI,OAAO,CAAC,OAA8B,CAAC,MAAM,CAC/D,CAAC,CAAC,EAAoD,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAC3E,CAAC;QAEF,MAAM,OAAO,GAA0B,EAAE,CAAC;QAC1C,IAAI,aAAa,GAAsB,EAAE,CAAC;QAE1C,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAC/C,CAAC,CAAY,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CACxD,CAAC;YACF,MAAM,WAAW,GAAG,UAAU,EAAE,cAAc,EAAE,CAAC,cAAc,KAAK,KAAK,CAAC;YAE1E,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC7B,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;oBAC5B,aAAa,GAAG,EAAE,CAAC;gBACrB,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QACD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC9B,CAAC;QAED,MAAM,OAAO,GAAwB,EAAE,CAAC;QAExC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CACrC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;gBACvB,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAC/C,CAAC,CAAY,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CACxD,CAAC;gBAEF,IAAI,UAAU,EAAE,CAAC;oBACf,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;wBACxB,IAAI,CAAC,aAAa,GAAG;4BACnB,GAAG,IAAI,CAAC,aAAa;4BACrB,YAAY,EAAE,IAAI,CAAC,YAAY;4BAC/B,QAAQ,EAAE,IAAI;yBACf,CAAC;oBACJ,CAAC;oBACD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC;oBACnC,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;oBACrC,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBAC/C,OAAO;4BACL,IAAI,EAAE,aAAsB;4BAC5B,IAAI,EAAE,IAAI,CAAC,IAAI;4BACf,eAAe,EAAE,IAAI,CAAC,eAAe;4BACrC,MAAM;yBACP,CAAC;oBACJ,CAAC;oBAAC,OAAO,KAAc,EAAE,CAAC;wBACxB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC;wBACjF,OAAO;4BACL,IAAI,EAAE,aAAsB;4BAC5B,IAAI,EAAE,IAAI,CAAC,IAAI;4BACf,eAAe,EAAE,IAAI,CAAC,eAAe;4BACrC,MAAM,EAAE,EAAE,MAAM,EAAE,KAAc,EAAE,OAAO,EAAE;yBAC5C,CAAC;oBACJ,CAAC;gBACH,CAAC;gBAED,OAAO;oBACL,IAAI,EAAE,aAAsB;oBAC5B,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,eAAe,EAAE,IAAI,CAAC,eAAe;oBACrC,MAAM,EAAE,EAAE,MAAM,EAAE,KAAc,EAAE,OAAO,EAAE,cAAc,EAAE;iBAC5D,CAAC;YACJ,CAAC,CAAC,CACH,CAAC;YAEF,OAAO,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;YAE/B,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC3B,OAAO;YACT,CAAC;QACH,CAAC;QAED,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,mBAAmB,CAAC,KAAe,EAAE,UAAgC;QACnE,MAAM,OAAO,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE;YACrC,IAAI,CAAC,cAAc,CAAC,IAAI,CACtB,sBAAsB,EACtB;gBACE,UAAU;gBACV,UAAU,EAAE,IAAI;aAC4B,EAC9C,IAAI,CACL,CAAC;QACJ,CAAC,CAAC;QACF,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAClF,CAAC;IAED,eAAe,GAAG,CAAC,EAAE,OAAO,EAAqB,EAAE,EAAE;QACnD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;IACpD,CAAC,CAAC;IAEF,oBAAoB,GAAG,KAAK,EAAE,KAAiC,EAAE,EAAE;QACjE,IAAI,CAAC;YACH,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;YAElD,IAAI,KAAK,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;gBACrC,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;gBACrD,IAAI,cAAc,EAAE,CAAC;oBACnB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;oBACnE,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;gBAClD,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;oBACxB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,IAAI,CAAC,CAAC;oBACvE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;YACpE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,CAAC;IACH,CAAC,CAAC;IAEF,iBAAiB,GAAG,GAAG,EAAE;QACvB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACxB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;QACpE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IACzB,CAAC,CAAC;IAEF,wBAAwB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IAExD,uBAAuB,GAAG,CAAC,KAAuB,EAAE,EAAE;QACpD,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC;IACH,CAAC,CAAC;CACH"}
package/package.json ADDED
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "@simulacra-ai/core",
3
+ "version": "0.0.1",
4
+ "description": "Multi-provider agentic conversation engine — core types, conversation base class, workflows, policies, and context transformers",
5
+ "type": "module",
6
+ "exports": {
7
+ ".": {
8
+ "types": "./dist/index.d.ts",
9
+ "default": "./dist/index.js"
10
+ }
11
+ },
12
+ "files": [
13
+ "dist"
14
+ ],
15
+ "scripts": {
16
+ "build": "tsc -p tsconfig.json",
17
+ "clean": "rm -rf dist *.tsbuildinfo"
18
+ },
19
+ "license": "MIT"
20
+ }